Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE"; ОлеДБ = СоздатьОбъект("OLEDBData"); Рез = ОлеДБ.Соединение(Соединение); Запрос = ОлеДБ.СоздатьКоманду(); Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')"); Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')"); Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')"); Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); НачДата=ВыбНачПериода; КонДата=ВыбКонПериода; МД = СоздатьОбъект("MetaDataWork"); id = Прав(_idtostr(МД.ИДРеквизитаСправочника("Цены","Цена")),4);
ТекстПериодика = " |(SELECT | Спр.ID as ID, | .partno,3)) as IndexMax | |FROM | $Справочник.Цены as Спр |LEFT JOIN | $Справочник.КатегорииЦен as СпрКатЦен ON Спр.SP3787 = СпрКатЦен.ID |LEFT JOIN | $Справочник.Номенклатура as СпрНоменк ON СпрНоменк.ID = Спр.PARENTEXT |LEFT JOIN | 1sconst as Период |ON | rtno,3) = | $ИсторияРеквизита.Цены.Цена+Спр.id |WHERE | Период.date <= :ДатаЦены ~~ | AND | СпрКатЦен.DESCR = 'Закупочная' | AND | cast(Период.value as numeric(15,2))>0 | GROUP BY Спр.ID | | ) TabMaxIndex |"; ТекстЦены = " |SELECT //| (DTOS(:ДатаЦены ~~) + СпрЦены.PARENTEXT) | СпрЦены.PARENTEXT | ,Цены.value as [ЦенаБазовая $Число] | |FROM |"+ТекстПериодика+" | |LEFT JOIN | 1sconst as Цены |LEFT JOIN | $Справочник.Цены as СпрЦены ON СпрЦены.ID = Цены.objid |LEFT JOIN | $Справочник.КатегорииЦен as СпрКатЦен ON СпрЦены.SP3787 = СпрКатЦен.ID | |ON | Цены.id+Цены.objid+DTOS(Цены.date)+Цены.time+Цены.docid+STR(Цены.partno,3) = TabMaxIndex.IndexMax |"; ТекстЖурнал= " |SELECT | Жур.Date, | ,Р2.DESCR,iif(Р1.id<>$ПустойИД,Р1.DESCR,'')))) as [Группа], | $ДокОКС.Товар as PARENTEXT, | $ДокОКС.Товар as [Товар $Справочник.Номенклатура], | $ДокОКС.Количество as Количество, | $ДокОКС.Сумма as Сумма | ,(DTOS(Жур.Date) + $ДокОКС.Товар) |FROM | $ДокументСтроки.ОтчетКассовойСмены as ДокОКС |INNER JOIN | 1SJourn as Жур ON Жур.IDDoc = ДокОКС.IDDoc |LEFT JOIN | $Справочник.Номенклатура as Р1 on $ДокОКС.Товар = Р1.id |LEFT JOIN | $Справочник.Номенклатура as Р2 on Р1.parentid = Р2.id |LEFT JOIN | $Справочник.Номенклатура as Р3 on Р2.parentid = Р3.id |LEFT JOIN | $Справочник.Номенклатура as Р4 on Р3.parentid = Р4.id |WHERE | dtos(Жур.date)+Жур.time+Жур.iddoc BETWEEN dtos(:НачДата~~)+' '+' ' AND dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ' | AND | Жур.Closed = 1 |";
//Запрос.УстановитьТекстовыйПараметр("ВыбТовар",ВыбТовар); //Запрос.УстановитьТекстовыйПараметр("id",id); Запрос.УстановитьТекстовыйПараметр("НачДата", ВыбНачПериода); Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода); ВремяНачалоЗапроса=_GetPerformanceCounter(); тзВыбНомеклатура = Запрос.ВыполнитьИнструкцию(ТекстЖурнал); //Сообщить("выполнен за : "+(_GetPerformanceCounter()-ВремяНачалоЗапроса)+" мс"); тзВыбНомеклатура.Выгрузить(ТаблЗнач);
//***************************************************************** // тзВыбНомеклатура.НоваяКолонка("СуммаЗакуп","Число",30,2); тзВыбНомеклатура.Сортировать("Date"); тзВыбНомеклатура.ВыбратьСтроки(); флгДата = ""; Пока тзВыбНомеклатура.ПолучитьСтроку()=1 Цикл //************************************************************** // выбТовар = тзВыбНомеклатура.Товар; Если НЕ(флгДата = тзВыбНомеклатура.Date) Тогда флгДата = тзВыбНомеклатура.Date; Запрос.УстановитьТекстовыйПараметр("ДатаЦены",флгДата); тзВыбЦены = Запрос.ВыполнитьИнструкцию(ТекстЦены); КонецЕсли; текСтрока=""; тзВыбЦены.НайтиЗначение(тзВыбНомеклатура.PARENTEXT,текСтрока,"PARENTEXT"); тзВыбНомеклатура.СуммаЗакуп = Состояние(СокрЛП(Строка(выбТовар))); //**************************************************************** КонецЦикла; тзВыбНомеклатура.Свернуть("Группа,Товар","Количество,Сумма,СуммаЗакуп"); тзВыбНомеклатура.Сортировать("Товар"); тзВыбНомеклатура.Выгрузить(ТаблЗнач);
тока не пинать, это все что пока я смог придумать. вот такой вариант у меня рулит, обработка данных за месяц Время выполнения: 4 мин. 53 сек. стандартными средствами Время выполнения: 4 мин. 48 сек.
1SQLite делает тоже самое
Время выполнения: 1 мин. 24 сек.
но это работа с текущей базой
|