Имя: Пароль:
1C
1C 7.7
v7: 1с++ файловая. Итоги и временные таблицы
0 zling
 
28.10.12
21:48
через OLEDBData. У кого есть пример? Скиньте пож-та
1 zling
 
28.10.12
21:50
у меня на предложение "TOTALS SUM(Себест), SUM(ПродСтоимость), SUM(Количество), SUM(СебестВ), SUM(ПродСтоимостьВ), SUM(КоличествоВ)
BY Фирма, Покупатель, Поставщик, Номенклатура"
ругается
2 КонецЦикла
 
28.10.12
22:14
group by
3 zling
 
28.10.12
22:16
(2) group by - это другое. Мне нужен подсчет итогов по полям в (1)
4 КонецЦикла
 
28.10.12
22:18
Подсчет итога по себестоимости

select sum(себестоимость)
, товар
from ...
group by товар
5 zling
 
28.10.12
22:20
ты предлагаешь объединения делать с основным запросом? Это не оч. удобно
6 zling
 
28.10.12
22:20
я как раз и хотел от этого отойти
7 КонецЦикла
 
28.10.12
22:21
Я не вижу запрос, вот старый отчет для примера:

http://www.itland.ru/forum/index.php?showtopic=13339&st=15
8 zling
 
28.10.12
23:18
(7) сенк, конечно, но не то, что я хотел :(  Видимо на фоксе TOTALS нету
9 КонецЦикла
 
28.10.12
23:22
(8) Ну это легко проверить :)

http://msdn.microsoft.com/en-us/library/80x51c04(v=vs.80).aspx
10 kiruha
 
28.10.12
23:26
Временные таблицы в запросе
(аналог поместить 8)
http://www.1cpp.ru/forum/YaBB.pl?num=1188673318
11 zling
 
28.10.12
23:33
делаю


EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER from (
SELECT
   SUM(РегПродажа_04_4.SP2222) as Себест,
   SUM(РегПродажа_04_4.SP2223) as ПродСтоимость,    
  SUM(РегПродажа_04_4.SP2224) as Количество,
   SUM(РегПродажа_04_4.SP2225) as СебестВ,
   SUM(РегПродажа_04_4.SP2226) as ПродСтоимостьВ,
   SUM(РегПродажа_04_4.SP2227) as КоличествоВ,

   СпрФирмы_04_4.DESCR as Фирма,

   СпрКонтр_04_4.DESCR as Покупатель,

   СпрКонтрП_04_4.DESCR as Поставщик,

   СпрНомен_04_4.DESCR as Номенклатура
FROM
   _RA2228_04 as РегПродажа_04_4
   LEFT JOIN _1SJOURN_04 as Журн_04_4 ON РегПродажа_04_4.IDDOC = Журн_04_4.IDDOC
   LEFT JOIN _SC156_04 as СпрНомен_04_4 ON РегПродажа_04_4.SP2218 = СпрНомен_04_4.ID
   LEFT JOIN _SC134_04 as СпрКонтр_04_4 ON РегПродажа_04_4.SP2219 = СпрКонтр_04_4.ID
   LEFT JOIN _SC134_04 as СпрКонтрП_04_4 ON РегПродажа_04_4.SP2220 = СпрКонтрП_04_4.ID
   LEFT JOIN _SC331_04 as СпрФирмы_04_4 ON РегПродажа_04_4.SP2221 = СпрФирмы_04_4.ID
WHERE Журн_04_4.DATE BETWEEN :НачДата~~ AND :КонДата~~


GROUP BY Фирма,Покупатель,Поставщик,Номенклатура

UNION ALL

SELECT
   SUM(РегПродажа_Old_4.SP2222) as Себест,
   SUM(РегПродажа_Old_4.SP2223) as ПродСтоимость,    
  SUM(РегПродажа_Old_4.SP2224) as Количество,
   SUM(РегПродажа_Old_4.SP2225) as СебестВ,
   SUM(РегПродажа_Old_4.SP2226) as ПродСтоимостьВ,
   SUM(РегПродажа_Old_4.SP2227) as КоличествоВ,

   СпрФирмы_Old_4.DESCR as Фирма,

   СпрКонтр_Old_4.DESCR as Покупатель,

   СпрКонтрП_Old_4.DESCR as Поставщик,

   СпрНомен_Old_4.DESCR as Номенклатура
FROM
   _RA2228_Old as РегПродажа_Old_4
   LEFT JOIN _1SJOURN_Old as Журн_Old_4 ON РегПродажа_Old_4.IDDOC = Журн_Old_4.IDDOC
   LEFT JOIN _SC156_Old as СпрНомен_Old_4 ON РегПродажа_Old_4.SP2218 = СпрНомен_Old_4.ID
   LEFT JOIN _SC134_Old as СпрКонтр_Old_4 ON РегПродажа_Old_4.SP2219 = СпрКонтр_Old_4.ID
   LEFT JOIN _SC134_Old as СпрКонтрП_Old_4 ON РегПродажа_Old_4.SP2220 = СпрКонтрП_Old_4.ID
   LEFT JOIN _SC331_Old as СпрФирмы_Old_4 ON РегПродажа_Old_4.SP2221 = СпрФирмы_Old_4.ID
WHERE Журн_Old_4.DATE BETWEEN :НачДата~~ AND :КонДата~~


GROUP BY Фирма,Покупатель,Поставщик,Номенклатура

UNION ALL

SELECT
   SUM(РегПродажа_4.SP2222) as Себест,
   SUM(РегПродажа_4.SP2223) as ПродСтоимость,    
  SUM(РегПродажа_4.SP2224) as Количество,
   SUM(РегПродажа_4.SP2225) as СебестВ,
   SUM(РегПродажа_4.SP2226) as ПродСтоимостьВ,
   SUM(РегПродажа_4.SP2227) as КоличествоВ,

   СпрФирмы_4.DESCR as Фирма,

   СпрКонтр_4.DESCR as Покупатель,

   СпрКонтрП_4.DESCR as Поставщик,

   СпрНомен_4.DESCR as Номенклатура
FROM
   RA2228 as РегПродажа_4
   LEFT JOIN 1SJOURN as Журн_4 ON РегПродажа_4.IDDOC = Журн_4.IDDOC
   LEFT JOIN SC156 as СпрНомен_4 ON РегПродажа_4.SP2218 = СпрНомен_4.ID
   LEFT JOIN SC134 as СпрКонтр_4 ON РегПродажа_4.SP2219 = СпрКонтр_4.ID
   LEFT JOIN SC134 as СпрКонтрП_4 ON РегПродажа_4.SP2220 = СпрКонтрП_4.ID
   LEFT JOIN SC331 as СпрФирмы_4 ON РегПродажа_4.SP2221 = СпрФирмы_4.ID
WHERE Журн_4.DATE BETWEEN :НачДата~~ AND :КонДата~~


GROUP BY Фирма,Покупатель,Поставщик,Номенклатура

ORDER BY Фирма,Покупатель,Поставщик,Номенклатура,Количество DESC, КоличествоВ DESC

)as WW  ')


Command contains unrecognized phrase/keyword
12 zling
 
28.10.12
23:44
пардон
13 zling
 
28.10.12
23:45
я затупил. щас сделал по инструкции

// Знак "'" не  поддерживается, поэтому заменяем на скобки
   Скобка="[";
   номпозиции=Найти(ТекстЗапроса,"'");
   Пока номпозиции<>0 Цикл  
       ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
       Если Скобка="[" Тогда   Скобка="]"
       Иначе  Скобка="["
       КонецЕсли;
       номпозиции=Найти(ТекстЗапроса,"'");
   КонецЦикла;
   
       
   // Знак """ не  поддерживается, поэтому заменяем на скобки
   Скобка="[";
   номпозиции=Найти(ТекстЗапроса,"""");
   Пока номпозиции<>0 Цикл  
       ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
       Если Скобка="[" Тогда   Скобка="]"
       Иначе  Скобка="["            
       КонецЕсли;
       номпозиции=Найти(ТекстЗапроса,"""");
   КонецЦикла;
   
   //Разделитель строк не поддерживается поэтому убираем,
   //строки больше 255 симолов не поддерживаются , поэтому удлиняем при помощи CHR(13)
   ВрТекстЗапроса="";
   Для Счетчик=1 По СтрКоличествоСтрок(ТекстЗапроса) Цикл
       ТекСтрока=СтрПолучитьСтроку(ТекстЗапроса,Счетчик);
       ТекСтрока=" "+СокрЛП(ТекСтрока)+" ";
       Если Счетчик=1 Тогда
           ВрТекстЗапроса=ВрТекстЗапроса+ТекСтрока;
       Иначе  
           Если СокрЛП(ТекСтрока)<>"" Тогда
           ПереносСтрокиФоксПро="'"+CHR(13)+"'";
           ВрТекстЗапроса=ВрТекстЗапроса+ПереносСтрокиФоксПро+ТекСтрока;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   ТекстЗапроса = ВрТекстЗапроса;
   ВрТекстЗапроса = "";
   
   //Даты с "'" и с "[" не поддерживаются
   номпозиции=Найти(ТекстЗапроса,"{d"); // {d [2006-01-01]}
   Пока  номпозиции<>0 Цикл

           Начало=Лев(ТекстЗапроса,номпозиции-1);
           ДатаПар=Сред(ТекстЗапроса,номпозиции+4,10);
           Конец=Сред(ТекстЗапроса,номпозиции+16);

           ТекстЗапроса=Начало+"{^ "+ДатаПар+"}"+Конец;
           номпозиции=Найти(ТекстЗапроса,"{d");
   КонецЦикла;
14 zling
 
28.10.12
23:46
получился такой текст
EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER from (  '
' SELECT '
' SUM(РегПродажа_04_4.SP2222) as Себест, '
' SUM(РегПродажа_04_4.SP2223) as ПродСтоимость, '
' SUM(РегПродажа_04_4.SP2224) as Количество, '
' SUM(РегПродажа_04_4.SP2225) as СебестВ, '
' SUM(РегПродажа_04_4.SP2226) as ПродСтоимостьВ, '
' SUM(РегПродажа_04_4.SP2227) as КоличествоВ, '
' СпрФирмы_04_4.DESCR as Фирма, '
' СпрКонтр_04_4.DESCR as Покупатель, '
' СпрКонтрП_04_4.DESCR as Поставщик, '
' СпрНомен_04_4.DESCR as Номенклатура '
' FROM '
' _RA2228_04 as РегПродажа_04_4 '
' LEFT JOIN _1SJOURN_04 as Журн_04_4 ON РегПродажа_04_4.IDDOC = Журн_04_4.IDDOC '
' LEFT JOIN _SC156_04 as СпрНомен_04_4 ON РегПродажа_04_4.SP2218 = СпрНомен_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтр_04_4 ON РегПродажа_04_4.SP2219 = СпрКонтр_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтрП_04_4 ON РегПродажа_04_4.SP2220 = СпрКонтрП_04_4.ID '
' LEFT JOIN _SC331_04 as СпрФирмы_04_4 ON РегПродажа_04_4.SP2221 = СпрФирмы_04_4.ID '
' WHERE Журн_04_4.DATE BETWEEN :НачДата~~ AND :КонДата~~ '
' GROUP BY Фирма,Покупатель,Поставщик,Номенклатура '
' UNION ALL '
' SELECT '
' SUM(РегПродажа_Old_4.SP2222) as Себест, '
' SUM(РегПродажа_Old_4.SP2223) as ПродСтоимость, '
' SUM(РегПродажа_Old_4.SP2224) as Количество, '
' SUM(РегПродажа_Old_4.SP2225) as СебестВ, '
' SUM(РегПродажа_Old_4.SP2226) as ПродСтоимостьВ, '
' SUM(РегПродажа_Old_4.SP2227) as КоличествоВ, '
' СпрФирмы_Old_4.DESCR as Фирма, '
' СпрКонтр_Old_4.DESCR as Покупатель, '
' СпрКонтрП_Old_4.DESCR as Поставщик, '
' СпрНомен_Old_4.DESCR as Номенклатура '
' FROM '
' _RA2228_Old as РегПродажа_Old_4 '
' LEFT JOIN _1SJOURN_Old as Журн_Old_4 ON РегПродажа_Old_4.IDDOC = Журн_Old_4.IDDOC '
' LEFT JOIN _SC156_Old as СпрНомен_Old_4 ON РегПродажа_Old_4.SP2218 = СпрНомен_Old_4.ID '
' LEFT JOIN _SC134_Old as СпрКонтр_Old_4 ON РегПродажа_Old_4.SP2219 = СпрКонтр_Old_4.ID '
' LEFT JOIN _SC134_Old as СпрКонтрП_Old_4 ON РегПродажа_Old_4.SP2220 = СпрКонтрП_Old_4.ID '
' LEFT JOIN _SC331_Old as СпрФирмы_Old_4 ON РегПродажа_Old_4.SP2221 = СпрФирмы_Old_4.ID '
' WHERE Журн_Old_4.DATE BETWEEN :НачДата~~ AND :КонДата~~ '
' GROUP BY Фирма,Покупатель,Поставщик,Номенклатура '
' UNION ALL '
' SELECT '
' SUM(РегПродажа_4.SP2222) as Себест, '
' SUM(РегПродажа_4.SP2223) as ПродСтоимость, '
' SUM(РегПродажа_4.SP2224) as Количество, '
' SUM(РегПродажа_4.SP2225) as СебестВ, '
' SUM(РегПродажа_4.SP2226) as ПродСтоимостьВ, '
' SUM(РегПродажа_4.SP2227) as КоличествоВ, '
' СпрФирмы_4.DESCR as Фирма, '
' СпрКонтр_4.DESCR as Покупатель, '
' СпрКонтрП_4.DESCR as Поставщик, '
' СпрНомен_4.DESCR as Номенклатура '
' FROM '
' RA2228 as РегПродажа_4 '
' LEFT JOIN 1SJOURN as Журн_4 ON РегПродажа_4.IDDOC = Журн_4.IDDOC '
' LEFT JOIN SC156 as СпрНомен_4 ON РегПродажа_4.SP2218 = СпрНомен_4.ID '
' LEFT JOIN SC134 as СпрКонтр_4 ON РегПродажа_4.SP2219 = СпрКонтр_4.ID '
' LEFT JOIN SC134 as СпрКонтрП_4 ON РегПродажа_4.SP2220 = СпрКонтрП_4.ID '
' LEFT JOIN SC331 as СпрФирмы_4 ON РегПродажа_4.SP2221 = СпрФирмы_4.ID '
' WHERE Журн_4.DATE BETWEEN :НачДата~~ AND :КонДата~~ '
' GROUP BY Фирма,Покупатель,Поставщик,Номенклатура '
' ORDER BY Фирма,Покупатель,Поставщик,Номенклатура,Количество DESC, КоличествоВ DESC )as WW  ')


но FAILED! ICommandText::Execute(): Function name is missing )
15 kiruha
 
28.10.12
23:46
и не понятно зачем во временную пихать такой здоровый запрос
использование такое  же как в 8 - что то положить, что потом используется в нескольких запросах

по существу при UNION  название as давать только в первом
16 kiruha
 
28.10.12
23:47
Отлаживать лучше без временной
17 zling
 
28.10.12
23:49
(15) у меня оч. здоровый запрос получается, чтобы весь собрать пихаю промежут. результаты во внутр. таблицу
18 zling
 
28.10.12
23:50
(16) текст без преобразования и инструкции execscript выполняется нормально
19 kiruha
 
28.10.12
23:52
СпрФирмы_04_4.DESCR as Фирма,
...
UNION ALL
...
СпрФирмы_4.DESCR as Фирма,

так не пишут

СпрФирмы_04_4.DESCR as Фирма,
...
UNION ALL
...
СпрФирмы_4.DESCR ,
20 zling
 
28.10.12
23:56
(19) хм, приму на заметку. но упростил и выкинул юнионы. вот такой исх. текст запроса


SELECT
   SUM(РегПродажа_04_4.SP2222) as Себест,
   SUM(РегПродажа_04_4.SP2223) as ПродСтоимость,    
     SUM(РегПродажа_04_4.SP2224) as Количество,
   SUM(РегПродажа_04_4.SP2225) as СебестВ,
   SUM(РегПродажа_04_4.SP2226) as ПродСтоимостьВ,
   SUM(РегПродажа_04_4.SP2227) as КоличествоВ,

   СпрФирмы_04_4.DESCR as Фирма,

   СпрКонтр_04_4.DESCR as Покупатель,

   СпрКонтрП_04_4.DESCR as Поставщик,

   СпрНомен_04_4.DESCR as Номенклатура
FROM
   _RA2228_04 as РегПродажа_04_4
   LEFT JOIN _1SJOURN_04 as Журн_04_4 ON РегПродажа_04_4.IDDOC = Журн_04_4.IDDOC
   LEFT JOIN _SC156_04 as СпрНомен_04_4 ON РегПродажа_04_4.SP2218 = СпрНомен_04_4.ID
   LEFT JOIN _SC134_04 as СпрКонтр_04_4 ON РегПродажа_04_4.SP2219 = СпрКонтр_04_4.ID
   LEFT JOIN _SC134_04 as СпрКонтрП_04_4 ON РегПродажа_04_4.SP2220 = СпрКонтрП_04_4.ID
   LEFT JOIN _SC331_04 as СпрФирмы_04_4 ON РегПродажа_04_4.SP2221 = СпрФирмы_04_4.ID
WHERE Журн_04_4.DATE BETWEEN :НачДата~~ AND :КонДата~~


GROUP BY Фирма,Покупатель,Поставщик,Номенклатура
21 zling
 
28.10.12
23:57
с преобразованиями


EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER from (  '
' SELECT '
' SUM(РегПродажа_04_4.SP2222) as Себест, '
' SUM(РегПродажа_04_4.SP2223) as ПродСтоимость, '
' SUM(РегПродажа_04_4.SP2224) as Количество, '
' SUM(РегПродажа_04_4.SP2225) as СебестВ, '
' SUM(РегПродажа_04_4.SP2226) as ПродСтоимостьВ, '
' SUM(РегПродажа_04_4.SP2227) as КоличествоВ, '
' СпрФирмы_04_4.DESCR as Фирма, '
' СпрКонтр_04_4.DESCR as Покупатель, '
' СпрКонтрП_04_4.DESCR as Поставщик, '
' СпрНомен_04_4.DESCR as Номенклатура '
' FROM '
' _RA2228_04 as РегПродажа_04_4 '
' LEFT JOIN _1SJOURN_04 as Журн_04_4 ON РегПродажа_04_4.IDDOC = Журн_04_4.IDDOC '
' LEFT JOIN _SC156_04 as СпрНомен_04_4 ON РегПродажа_04_4.SP2218 = СпрНомен_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтр_04_4 ON РегПродажа_04_4.SP2219 = СпрКонтр_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтрП_04_4 ON РегПродажа_04_4.SP2220 = СпрКонтрП_04_4.ID '
' LEFT JOIN _SC331_04 as СпрФирмы_04_4 ON РегПродажа_04_4.SP2221 = СпрФирмы_04_4.ID '
' WHERE Журн_04_4.DATE BETWEEN :НачДата~~ AND :КонДата~~ '
' GROUP BY Фирма,Покупатель,Поставщик,Номенклатура )as WW  ')
22 zling
 
28.10.12
23:57
ну и FAILED! ICommandText::Execute(): Function name is missing ).
23 zling
 
29.10.12
00:06
блин, я идиот, упустил еще одно преобразование параметров. итоговый текст
EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER from (  '
' SELECT '
' SUM(РегПродажа_04_4.SP2222) as Себест, '
' SUM(РегПродажа_04_4.SP2223) as ПродСтоимость, '
' SUM(РегПродажа_04_4.SP2224) as Количество, '
' SUM(РегПродажа_04_4.SP2225) as СебестВ, '
' SUM(РегПродажа_04_4.SP2226) as ПродСтоимостьВ, '
' SUM(РегПродажа_04_4.SP2227) as КоличествоВ, '
' СпрФирмы_04_4.DESCR as Фирма, '
' СпрКонтр_04_4.DESCR as Покупатель, '
' СпрКонтрП_04_4.DESCR as Поставщик, '
' СпрНомен_04_4.DESCR as Номенклатура '
' FROM '
' _RA2228_04 as РегПродажа_04_4 '
' LEFT JOIN _1SJOURN_04 as Журн_04_4 ON РегПродажа_04_4.IDDOC = Журн_04_4.IDDOC '
' LEFT JOIN _SC156_04 as СпрНомен_04_4 ON РегПродажа_04_4.SP2218 = СпрНомен_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтр_04_4 ON РегПродажа_04_4.SP2219 = СпрКонтр_04_4.ID '
' LEFT JOIN _SC134_04 as СпрКонтрП_04_4 ON РегПродажа_04_4.SP2220 = СпрКонтрП_04_4.ID '
' LEFT JOIN _SC331_04 as СпрФирмы_04_4 ON РегПродажа_04_4.SP2221 = СпрФирмы_04_4.ID '
' WHERE Журн_04_4.DATE BETWEEN {^ 2012-10-01} AND {^ 2012-10-10} '
' GROUP BY Фирма,Покупатель,Поставщик,Номенклатура )as WW  ')

но ошибка та же
24 kiruha
 
29.10.12
00:24
А простейший

EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER from ( '
' SELECT '
'РегПродажа_04_4.SP2222 as Себест'
' FROM '
' _RA2228_04 as РегПродажа_04_4 '
')as WW  ')
25 zling
 
29.10.12
00:30
тоже самое :(
мож не установил чего?
26 zling
 
29.10.12
00:35
попробую как я на др. компе. чета не так с библиотеками, кажется
27 kiruha
 
29.10.12
00:36
http://www.microsoft.com/en-us/download/details.aspx?id=14839
Microsoft OLE DB Provider for Visual FoxPro 9.0
28 kiruha
 
29.10.12
00:38
29 zling
 
29.10.12
00:40
спасибо, буду курить
30 kiruha
 
29.10.12
00:48
Если добавить отбор движение в регистр - не надо будет соединяться с журналом - быстреее в несколько раз
Если еще при этом задействовать индекс по дате - еще быстрее раз в 20. Там в факе все написано
31 zling
 
29.10.12
00:53
(30) ага, это я читал, спасибо. Но потом, щас бы с вообще его запустить
32 zling
 
29.10.12
00:54
У меня при переустановке фокса стал падать при создании строки подключения DataInitialize::GetDataSource(): Класс не зарегистрирован
33 kiruha
 
29.10.12
00:55
может старый 1Cpp.dll ?
34 zling
 
29.10.12
01:04
с ошибкой GetDataSource() все просто, нужно ставить было для всех пользователей
35 zling
 
29.10.12
01:05
1с++ новый вроде, но выполнить регистрацию на 7ке вин не могу
36 kiruha
 
29.10.12
02:56
Точно не момню - давно не пользую. можно vkloader
http://www.1cpp.ru/forum/YaBB.pl?num=1267638191
а вроде последние не требовали регистрации
37 zling
 
29.10.12
06:42
(36) нет, думаю не в библиотеке дело, использую 2.5. Думается, именно в тексте собака порылась. Есть ли рабочий пример.На http://www.1cpp.ru/forum/YaBB.pl?num=1188673318 м.б. описка где-то? Покрайней мере есть одна ПереносСтрокиФоксПро="'+"+CHR(13)+"'"; вместо ПереносСтрокиФоксПро="'"+CHR(13)+"'";
38 zling
 
29.10.12
08:57
up
39 Ёпрст
 
29.10.12
09:18
>>>использую 2.5

дк уж..
40 Ёпрст
 
29.10.12
09:18
41 Ёпрст
 
29.10.12
09:20
да и.. для такого простейшего запроса использовать "псевдовременные" таблицы в фоксе особого смысла нет, горазо большее ускорение получишь, задействовав индексы.
42 Ёпрст
 
29.10.12
09:21
+ почему не используешь метапарсер ?
Или это текст с отладки ?
43 zling
 
29.10.12
09:39
(40) спасибо, сейчас попробую.
Это часть текста. Весь текст не проходит по ограничению длины
Не выполняется прямой запрос
ситуация аналогична
44 zling
 
29.10.12
09:45
та же фигня. простой тестовый
ТекстЗапроса="EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER FROM ( '
|' SELECT '
|'РегПродажа_04_4.SP2222 AS Себест'
|' FROM '
|' RA2228_04 as РегПродажа_04_4 '
|') AS WW  ')";

FAILED! ICommandText::Execute(): Function name is missing ).

Может обработку рабочую кто для примера выложет?
45 Ёпрст
 
29.10.12
09:45
(43) дык покажи весь текст запроса.
46 Ёпрст
 
29.10.12
09:46
(44) а нафига ты текст в апострофы обрамил ?
47 zling
 
29.10.12
09:47
весь текст динамически собирается. Сколько пользователь периодов формирования выберет - столько юнионов. Впринципе он простейший, но из-за ограничения на длину, приходится совать его табл.
48 zling
 
29.10.12
09:48
(4) (вкрадчиво*) а как надо?
49 zling
 
29.10.12
09:48
:)
50 zling
 
29.10.12
09:48
(48) к (46)
51 zling
 
29.10.12
09:50
текст запроса обрабатываю по след инструкции


MDW.УстановитьТекстовыйПараметр("КонДата",ДатаКонца);
   MDW.УстановитьТекстовыйПараметр("НачДата",ДатаНачала);
   ТекстЗапроса=MDW.ОбрМетаСКЛ(ТекстЗапроса);
   
   // Знак "'" не  поддерживается, поэтому заменяем на скобки
   Скобка="[";
   номпозиции=Найти(ТекстЗапроса,"'");
   Пока номпозиции<>0 Цикл  
       ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
       Если Скобка="[" Тогда   Скобка="]"
       Иначе  Скобка="["
       КонецЕсли;
       номпозиции=Найти(ТекстЗапроса,"'");
   КонецЦикла;
   
       
   // Знак """ не  поддерживается, поэтому заменяем на скобки
   Скобка="[";
   номпозиции=Найти(ТекстЗапроса,"""");
   Пока номпозиции<>0 Цикл  
       ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
       Если Скобка="[" Тогда   Скобка="]"
       Иначе  Скобка="["            
       КонецЕсли;
       номпозиции=Найти(ТекстЗапроса,"""");
   КонецЦикла;
   
   //Разделитель строк не поддерживается поэтому убираем,
   //строки больше 255 симолов не поддерживаются , поэтому удлиняем при помощи CHR(13)
   ВрТекстЗапроса="";
   Для Счетчик=1 По СтрКоличествоСтрок(ТекстЗапроса) Цикл
       ТекСтрока=СтрПолучитьСтроку(ТекстЗапроса,Счетчик);
       ТекСтрока=" "+СокрЛП(ТекСтрока)+" ";
       Если Счетчик=1 Тогда
           ВрТекстЗапроса=ВрТекстЗапроса+ТекСтрока;
       Иначе  
           Если СокрЛП(ТекСтрока)<>"" Тогда
           ПереносСтрокиФоксПро="'"+CHR(13)+"'";
           ВрТекстЗапроса=ВрТекстЗапроса+ПереносСтрокиФоксПро+ТекСтрока;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   ТекстЗапроса = ВрТекстЗапроса;
   ВрТекстЗапроса = "";
   
   //Даты с "'" и с "[" не поддерживаются
   номпозиции=Найти(ТекстЗапроса,"{d"); // {d [2006-01-01]}
   Пока  номпозиции<>0 Цикл

           Начало=Лев(ТекстЗапроса,номпозиции-1);
           ДатаПар=Сред(ТекстЗапроса,номпозиции+4,10);
           Конец=Сред(ТекстЗапроса,номпозиции+16);

           ТекстЗапроса=Начало+"{^ "+ДатаПар+"}"+Конец;
           номпозиции=Найти(ТекстЗапроса,"{d");
   КонецЦикла;
52 Ёпрст
 
29.10.12
09:50
Для начала, с чего уверенность, что в базе есть табличка RA2228_04 ???
53 zling
 
29.10.12
09:51
да есть, она не принадлежит правда к базе. Но обычным дбф запросом я к ней нормально обращаюсь
54 zling
 
29.10.12
09:51
(53) + добавлена из внешней
55 Ёпрст
 
29.10.12
09:52
и вот эти

_1SJOURN_Old
и вот эти
_SC156_04

Ты их откуда взял ?
56 Ёпрст
 
29.10.12
09:53
внешняя база и с такими именами табличек ?
И откуда она взялась ?
57 zling
 
29.10.12
09:53
это еще одни таблички внешние. Простой дбф запрос (без врем. таблиц) их читает за милую душу
58 zling
 
29.10.12
09:53
это та же база, но старая
59 Ёпрст
 
29.10.12
09:54
и в коде не видно, как ты обращаешься к табличками "чужой" базы - нужно как минимум, путь до таблички целиком в текст запроса пихать, либо использовать соединение с чужой базой.
60 Ёпрст
 
29.10.12
09:55
(58) что значит эта же ?
1с-ина не формирует таблички с именами
_1SJOURN_Old
_SC156_04
RA2228_04
61 zling
 
29.10.12
09:55
впринципе начал было записывать инфу о внеш таблицах в
1Cv7.DD чтобы вытянуть sqllite
62 Ёпрст
 
29.10.12
09:55
вот и спрашиваю, откуда ты их взял ?
Это имена временных твоих табличек, или что ?
63 zling
 
29.10.12
09:56
я имел ввиду, что это из архива этой же самой базы за старый период.
64 Ёпрст
 
29.10.12
09:56
(61) а скульлайт то нафига нужен, при наличии фокса и запроса к сторонней базе ?
65 zling
 
29.10.12
09:56
нет, это таблички с данными за старый период
66 Ёпрст
 
29.10.12
09:57
(63) :)))

в 1с нет таблиц с именами _1SJOURN_Old , _SC156_04 и т.д.
67 zling
 
29.10.12
09:57
(64) дык йо! былоб все просто с фоксом вытянул бы фоксом :)
68 Ёпрст
 
29.10.12
09:58
Ответь на вопрос - откуда эти таблички, для начала.
69 zling
 
29.10.12
09:58
(67) они были скопированы из архива старой базы, переименованы
70 Ёпрст
 
29.10.12
09:59
(69) переименованы.. нафига ?
скопированы, куда ?
в родную базу ?
71 zling
 
29.10.12
10:00
ну да. А что не так то. Не объединять же их в одну
72 Ёпрст
 
29.10.12
10:02
(71) п..ц

Нужно было всего то, написать обычный запрос к внешней базе, используя метапарсер и ПрисоединитьМД + в этом же запросе поиметь объекты ЭТОЙ базы, синхронизируя элементы с разных баз по какому либо реквизиту (или, если это копия базы - сразу типизировать к объектам этой базы)

А не городить огород с временными табличками и с каким-то нелепым переименованием и копированием файлов.
73 zling
 
29.10.12
10:04
(72) обычный запрос без execscript вполне читает эти таблицы, проверял. Проблемы начинаются когда по запросу пользователя идет много union ов.
74 zling
 
29.10.12
10:06
тогда мы натыкаемся на вышеописанное ограничение дбф запросов в 1024 символа в скомпил. виде
75 zling
 
29.10.12
10:06
в таком случае я хочу поместить их во внутр. таблицу, а потом объединить
76 zling
 
29.10.12
10:07
вот тут и начинаются траблы с execscript  select into cursor
77 zling
 
29.10.12
10:10
Ёпрст4, скажите плиз, как без этих апострофов?
78 zling
 
29.10.12
10:14
к настоящей (родной) таблице базы тоже самое
ТекстЗапроса="EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER FROM ( '
   |' SELECT '
   |'РегПродажа_04_4.SP2222 AS Себест'
   |' FROM '
   |' RA2228 as РегПродажа_04_4 '
   |') AS WW  ')";
ICommandText::Execute(): Function name is missing ).


так все нормально
ТекстЗапроса="EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER FROM (  SELECT РегПродажа_04_4.SP2222 AS Себест  FROM RA2228 as РегПродажа_04_4 ) AS WW  ')";
(одной строкой)

и так тоже (а это не родная таблица)
ТекстЗапроса="EXECSCRIPT('SELECT  * INTO CURSOR TmpTable1 NOFILTER FROM (  SELECT РегПродажа_04_4.SP2222 AS Себест  FROM _RA2228_04 as РегПродажа_04_4 ) AS WW  ')";
79 zling
 
29.10.12
10:18
опять же от амперсантов просто так избавиться не могу, ибо текст не тестового запроса не уложится в 250 символов
80 Ёпрст
 
29.10.12
10:22
http://zalil.ru/33901757

на вот , пример запроса к внешней базе с синхронизацией по коду + укладывание его во временную ТЗ.
81 Ёпрст
 
29.10.12
10:22
и выкинь ты свои переименованыные файлы куда подальше.
82 Ёпрст
 
29.10.12
10:23
пользуй метапарсер и наслаждайся.
83 zling
 
29.10.12
10:35
седня не мой день :(
\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(73)}: FAILED! ICommandText::Execute(): Syntax error.
84 Ёпрст
 
29.10.12
10:36
(83) покажи, какой текст запроса пихаешь
85 Ёпрст
 
29.10.12
10:36
или тупо мою поделку запустил ?

Если да, то 1cpp какой версии ?
оледб, какой версии ?
86 Ёпрст
 
29.10.12
10:38
87 zling
 
29.10.12
10:39
все из этой ветки самое свежее
88 zling
 
29.10.12
10:40
я кстати был неправ насчет описки на сайте (37)
89 zling
 
29.10.12
10:41
именно все это, и фокспро и 1с++
90 Ёпрст
 
29.10.12
10:43
Тогда моя поделка должна работать, запрос в монопольном режиме выполняешь ?
Если да, заплатка от hogik стоит ?
91 zling
 
29.10.12
10:48
нет не в мономпольном, остальные выполняются. Есть какой-нить метод, прочитать версию 1с++?
92 Ёпрст
 
29.10.12
10:49
(91) ^))))

нажать на знак "?"
Или меню-помощь- о программе.
93 zling
 
29.10.12
10:59
интересно блин, еще раз заменил 1cpp.dll в bin на свежескачанную и ваша тестовая обработка
глОлеДБ = СоздатьОбъект("OLEDBData");
{D:\1C BASES\zzzzzzzzzzzz\EXTFORMS\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(125)}: Неудачная попытка создания объекта (OLEDBData)
94 Ёпрст
 
29.10.12
11:04
(93) 1cpp Не загружена.. и всего лишь.
ЗЫ: смотри, что в каталогиИБ валяется еще и в папке пользователя.
95 zling
 
29.10.12
11:07
Процедура ПриОткрытии()        
   Попытка              
       Путь = КаталогИБ(); Путь = Путь + ?(Прав(Путь,1)="\","","\");
       ЗагрузитьВнешнююКомпоненту(Путь+"1cpp.dll");
       Сообщить("1с++ загружена");
   Исключение
       Сообщить("не удалось загрузить 1с++");
       Возврат;
   КонецПопытки;
   
   глОлеДБ = СоздатьОбъект("OLEDBData");



1с++ загружена
глОлеДБ = СоздатьОбъект("OLEDBData");
{D:\1C BASES\qqqqqqqqqqqqqq\EXTFORMS\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(126)}: Неудачная попытка создания объекта (OLEDBData)
96 zling
 
29.10.12
11:08
regsvr32 на win 7 не выполняется
97 zling
 
29.10.12
11:14
при начале работы системы указал, все норм, версия 3.2, но обработка не выполняется Х)
98 Ёпрст
 
29.10.12
11:14
(96) Ё...
1.1cpp сто лет в обед не требует регистрации в реестре
2.судя по ошибке, 1срр не загружена
99 zling
 
29.10.12
11:15
FAILED! ICommandText::Execute(): Syntax error.
100 Ёпрст
 
29.10.12
11:16
3. ЗагрузитьВнешнююКомпоненту пихать в попытку не имеет смысла - это ФУНКЦИЯ, которая возвращает, загружена ВК или нет, Исключения там никогда не будет.
101 Ёпрст
 
29.10.12
11:16
Что написано в Меню "О программе" ?
102 1Сергей
 
29.10.12
11:19
я так и не понял. База точно файловая?
103 zling
 
29.10.12
11:20
да, куда загрузить картинку лучше?
104 Ёпрст
 
29.10.12
11:21
105 zling
 
29.10.12
11:27
106 Ёпрст
 
29.10.12
11:28
И.. ?
107 zling
 
29.10.12
11:30
108 zling
 
29.10.12
11:32
EXECSCRIPT('SELECT  * INTO CURSOR  Вася NOFILTER from (  '+
' SELECT '+
' СпрНаш.DESCR as КлиентосВЭтойбазе '+
' ,Спр.DESCR as КлиентосВУдаленнойБазе '+
' FROM sc134 СпрНаш '+
' left join D:\1C bases\xxxxxxxxxxx\torg92\sc134 Спр on СпрНаш.Code = Спр.Code )as WW  ')
109 Ёпрст
 
29.10.12
11:34
И.. точно не в монопольном режиме ?
И точно в обеих базах есть справочник.Контрагенты ?
И что пишет это ?

ОлеДБКоманда.Отладка(1) ?
110 Ёпрст
 
29.10.12
11:35
и точно, что установлен vfp из ссылки выше ?
111 zling
 
29.10.12
11:36
а в ссылке из майкрософта файлик vfpoledb.msm - чисто вспомогательный, или его тоже куда закидывать нужно?
112 Ёпрст
 
29.10.12
11:36
покажи вкладочку с предприятием
113 zling
 
29.10.12
11:36
(110) ну да
114 Ёпрст
 
29.10.12
11:36
что значит чисто вспомогательный ?!
Это установщик
115 zling
 
29.10.12
11:37
msi - установщик
116 Ёпрст
 
29.10.12
11:37
VFPOLEDBSetup.msi нужен вот этот.. + рестарт компа потом
117 zling
 
29.10.12
11:39
http://s1.ipicture.ru/uploads/20121029/G3UgJPFH.png предприятие. Ща перезагружусь
118 zling
 
29.10.12
11:54
все тож самое
FAILED! ICommandText::Execute(): Syntax error.
119 Ёпрст
 
29.10.12
11:56
не верю.
:)
120 Ёпрст
 
29.10.12
11:56
проверил на 2008  - усё работате
121 zling
 
29.10.12
11:56
я тоже :)
122 Ёпрст
 
29.10.12
11:57
нет 7-ки под рукой, думаю, там тоже усё работате.

Без помещения во временную ТЗ работает ?

Если да, то права на запись в каталогИБ есть ?
123 zling
 
29.10.12
11:57
грю не мой день :) у меня ща бубен отрастет х)
124 Ёпрст
 
29.10.12
11:57
именно туда "складываются" псевдо-временные файлы.
125 zling
 
29.10.12
12:00
значение сортировки в самой базе как нибудь влияют?
126 Ёпрст
 
29.10.12
12:03
влияет.. но в данном запросе - нет
127 Ёпрст
 
29.10.12
12:04
вот так то хоть работает ?

//СоздатьВременнуюТаблицу(ТекстЗапроса,"Вася");
//Возврат ОлеДБКоманда.ВыполнитьИнструкцию("select * from Вася");
Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
128 Ёпрст
 
29.10.12
12:05
+ убери из текста запроса все комментарии (то что с -- )
129 zling
 
29.10.12
12:06
ща
130 zling
 
29.10.12
12:08
ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию("EXECSCRIPT('SELECT  * INTO "+ТипТабл+"  "+
   ИмяВременнойТаблицы+" "+ДобПар+" from (SELECT СпрНаш.DESCR  as КлиентосВЭтойбазе ,Спр.DESCR as КлиентосВУдаленнойБазе FROM $Справочник.Контрагенты СпрНаш  left join База2.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code) as WW  ') ");  
ошибка уже другая
CommandText::Execute(): File '$справочник.контрагенты' does not exist.
131 Ёпрст
 
29.10.12
12:09
(130) ну круто, в базе нет справочник.Контрагенты у тебя.
132 Ёпрст
 
29.10.12
12:09
и (127) проверил ?
133 zling
 
29.10.12
12:11
так

//СоздатьВременнуюТаблицу(ТекстЗапроса,"Вася");
   
   //Возврат ОлеДБКоманда.ВыполнитьИнструкцию("select * from Вася");
   
   Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);

и без коментариев не работает
134 zling
 
29.10.12
12:11
без коменнтов в тексте запроса
135 zling
 
29.10.12
12:12
ОлеДБКоманда = глОлеДБ.СоздатьКоманду();
   ТекстЗапроса = "
   |SELECT
   |    СпрНаш.DESCR as КлиентосВЭтойбазе
   |    ,Спр.DESCR as КлиентосВУдаленнойБазе
   |FROM $Справочник.Контрагенты СпрНаш
   |left join База2.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code
   |";
   глПарсерВторойБазы(ТекстЗапроса,"База2",ПутьКБазе2);
   ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"*",":");
   
   //СоздатьВременнуюТаблицу(ТекстЗапроса,"Вася");
   
   //Возврат ОлеДБКоманда.ВыполнитьИнструкцию("select * from Вася");
   
   Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);


FAILED! ICommandText::Execute(): Syntax error.
136 zling
 
29.10.12
12:13
спр.Контрагенты есть
137 Ёпрст
 
29.10.12
12:13
хрень какая то, а так ?

Возврат ОлеДБКоманда.ВыполнитьИнструкцию("select * from $Справочник.Контрагенты");
138 zling
 
29.10.12
12:14
(137) выполняет
139 zling
 
29.10.12
12:15
win 7 home edition - глючная скатина, может из-за нее?
140 Ёпрст
 
29.10.12
12:16
а так ?
    ТекстЗапроса = "
   |SELECT *
   |from База2.@Справочник.Контрагенты";
   глПарсерВторойБазы(ТекстЗапроса,"База2",ПутьКБазе2);
Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
141 Ёпрст
 
29.10.12
12:17
(139) надеюсь, 1с-ина у тебя не портабл версия ?!
142 Ёпрст
 
29.10.12
12:17
она не дружит с вк
143 zling
 
29.10.12
12:17
сетевая все компоненты
144 zling
 
29.10.12
12:18
портабл - это что?
145 zling
 
29.10.12
12:19
Command contains unrecognized phrase/keyword
146 Ёпрст
 
29.10.12
12:20
(144) это отвязанная от винды версия платформы без установщика
147 zling
 
29.10.12
12:20
щас типовуху скачаю откуда-нибудь
148 Ёпрст
 
29.10.12
12:21
а так, что пишет ?

    ТекстЗапроса = "
   |SELECT *
   |from База2.@Справочник.Контрагенты";
   глПарсерВторойБазы(ТекстЗапроса,"База2",ПутьКБазе2);
  ОлеДБКоманда.Отладка(1);
Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
149 zling
 
29.10.12
12:24
SELECT *
from D:\1C bases\xxxxxxxxxxx\torg92\sc134
Возврат ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\1C BASES\FIESTA-2010\FIESTA-2010\EXTFORMS\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(119)}: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword.
150 Salimbek
 
29.10.12
12:27
(149) Все дело в пробеле пути к базе?
151 Ёпрст
 
29.10.12
12:28
(150) скорее всего
152 zling
 
29.10.12
12:28
(150) кстати возможно, а можно как нибудь обойти, типа []?
153 Ёпрст
 
29.10.12
12:29
можно попробовать в [] взять такой путь к табличке.
154 Ёпрст
 
29.10.12
12:29
(152) пробуй.
155 zling
 
29.10.12
12:33
да, выполнилась )))
156 Ёпрст
 
29.10.12
12:34
Вот, теперь с временной тоже должно работать..
ну и..
можешь хоть к 10 базам в одном запросе обращаться
157 zling
 
29.10.12
12:37
щас
158 zling
 
29.10.12
12:39
ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию("EXECSCRIPT('SELECT  * INTO "+ТипТабл+"  "+
{D:\1C\F2010\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(73)}: FAILED! ICommandText::Execute(): Cannot open file d:\1c\f2010\f2010\sc134.dbf.
159 Ёпрст
 
29.10.12
12:40
(158) монопольно выполняешь ?
:)
160 zling
 
29.10.12
12:40
все нормально!!!
161 zling
 
29.10.12
12:41
ура!!!
162 zling
 
29.10.12
12:41
Ребята, спасибо большое.
163 zling
 
29.10.12
12:43
могу на пиво/морожное на яндекс или веб мани немного кинуть, хотя конечно Ёпрст4 и  kiruha потратили время намного больше. Кидайте реквизиты :)
164 zling
 
29.10.12
12:46
Salimbek тоже спасибо :)
165 zling
 
29.10.12
12:47
И КонецЦикла
166 Ёпрст
 
29.10.12
12:48
в личке всё есть
167 zling
 
29.10.12
12:50
ок
168 Salimbek
 
29.10.12
13:52
(164) На здоровье...