p.s. Перед тем как создавать пост прочитал пару тем на форуме,но в одно сообщение все символы не вошли, идеи понравились, попытался сделать что то подобное, результат тот же, нормальные данные выдает если использовать ВТ за один день, может конечно я напутал что то, я не считаю себя спецом, не судите строго, взял пример из одного топика, правда там ПрямойЗапрос & ПоставщикДанных, установив у себя данные классы, один класс ругается при инициализации класса ПоставщикДанных, из-за этого сделал запрос по своему.приведу пример чего у меня вышло: МетаДата = СоздатьОбъект("MetaDataWork"); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); Попытка RS.ВыполнитьСкалярный("drop table #Периоды"); Исключение КонецПопытки; ТзЗапроса = СоздатьОбъект("ТаблицаЗначений"); ТзЗапроса.Очистить(); ТекстЗапросаСоздать = "create table #Периоды(date datetime)"; ТзЗапроса = RS.ВыполнитьИнструкцию(ТекстЗапросаСоздать); ТекстЗапроса = "insert into #Периоды"; Для Н = 1 По (ДатаКонца - ДатаНачала)+1 Цикл Если Н > 1 Тогда ТекстЗапроса = ТекстЗапроса + "union all "; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "select '" + МетаДата.ПолучитьСтрИзДаты(ДатаНачала + Н - 1) + "' |"; КонецЦикла; ТзЗапроса = RS.ВыполнитьИнструкцию(ТекстЗапроса); Попытка RS.ВыполнитьИнструкцию("drop table #Пересчет"); Исключение КонецПопытки; RS.ВыполнитьИнструкцию("create table #Пересчет( | НачалоПериода datetime | ,Агент char(9) | ,Клиент char(9) | ,НачОстаток numeric(38,3) | ,Приход numeric(38,3) | ,Расход numeric(38,3) | ,КонОстаток numeric(38,3) | ,primary key clustered(Агент,Клиент,НачалоПериода))"); ТзЗапросаПересчет = СоздатьОбъект("ТаблицаЗначений"); // таблица выгрузки результатов запроса ТзЗапросаПересчет.Очистить(); ТекстЗапросаСбораДанных = "insert into #Пересчет |select | p.date as НачалоПериода | ,isnull(ost.Агент,$ПустойИД) as Номенклатура | ,isnull(ost.Клиент,$ПустойИД) as Склад | ,isnull(sum(ost.СуммаБазоваяНачальныйОстаток),0) as НачОстаток | ,isnull(sum(ost.СуммаБазоваяПриход),0) as Приход | ,isnull(sum(ost.СуммаБазоваяРасход),0) as Расход | ,isnull(sum(ost.СуммаБазоваяКонечныйОстаток),0) as КонОстаток |from | #Периоды as p |left join | $РегистрОстаткиОбороты.Взаиморасчеты(:Дата1 | ,:Дата2~ | ,ДЕНЬ | , | , | ,(Агент IN (SELECT Val FROM #Агенты)) | ,(Агент,Клиент) | ,) as ost |on | p.date = ost.Период |group by ost.Агент,ost.Клиент,p.date |order by ost.Агент,ost.Клиент,p.date |"; RS.УстановитьТекстовыйПараметр("Дата1",ДатаНачала); RS.УстановитьТекстовыйПараметр("Дата2",ДатаКонца); RS.УложитьСписокОбъектов(СписокАгентов, "#Агенты", "Агенты"); ТзЗапросаПересчет = RS.ВыполнитьИнструкцию(ТекстЗапросаСбораДанных); Попытка RS.ВыполнитьИнструкцию("drop table #Периоды"); Исключение КонецПопытки; ТекстЗапросаПересчетаДанных = " |declare @dim_Агент char(9) |declare @dim_Клиент char(9) |declare @Количество_SumBegin numeric(38,3) |declare @Количество_SumEnd numeric(38,3) | |update #Пересчет |set | @Количество_SumBegin = |case | when (@dim_Агент = Агент)and (@dim_Клиент = Клиент) then @Количество_SumEnd else НачОстаток end | ,@Количество_SumEnd = @Количество_SumBegin + Приход - Расход | ,НачОстаток = @Количество_SumBegin | ,КонОстаток = @Количество_SumEnd | ,@dim_Агент = Агент | ,@dim_Клиент = Клиент |"; RS.ВыполнитьИнструкцию(ТекстЗапросаПересчетаДанных); ТекстЗапросаИтог = " |select НачалоПериода as [Дата $Дата] | ,Агент [Агент $Справочник.Агенты] | ,Клиент [Клиент $Справочник.Клиенты] | ,НачОстаток as НачОстаток | ,Приход as Приход | ,Расход as Расход | ,КонОстаток as КонОстаток |from #Пересчет"; ТзЗапросаПересчет = RS.ВыполнитьИнструкцию(ТекстЗапросаИтог); ТзЗапросаПересчет.УдалитьКолонку("Клиент"); ТзЗапросаПересчет.УдалитьКолонку("Агент"); ТзЗапросаПересчет.свернуть("Дата","НачОстаток,Приход,Расход,КонОстаток"); ТзЗапросаПересчет.Сортировать("Дата"); ТзЗапросаПересчет.ВыбратьСтроку();
меня лично смущает пересчет таблицы,Дата1 и Дата2 не изменяются, я так понимаю нужно передавать каждый день заново для пересчета, $РегистрОстаткиОбороты.Взаиморасчеты(:Дата1,:Дата2~..., можно по-простому конечно сделать цикл 1Сный и все время менять дату дня и запускать запрос, результат потом добавлять в ТЗ, может я опять со своими кривыми ручками что то сделал не так, еще раз прошу помощи и совета
|