Надо было посчитать средний конечный остаток по складам номенклатур за период.
Я решал так: 1. в 1с: сделал мЗапрос = СоздатьОбъект("ODBCRecordSet"); мета = СоздатьОбъект("MetaDataWork"); cпДата = СоздатьОбъект("СписокЗначений"); дата1 = НачДата; мЗапрос.УложитьСписокОбъектов(спДата,"LISTDATES"); Пока дата1 <= КонДата Цикл тЗапросСкл = "insert into ListDates values (' "+мета.ПолучитьСтрИзДаты(дата1)+"',0);"; мЗапрос.Выполнить(тЗапросСкл); дата1 = дата1 + 1; КонецЦикла; ....... Установка условий и прочее.....
2.Собственно запрос: тЗапроса = "select a.Склад [Склад $Справочник.Склады] ,a.Номенклатура [Номенклатура $Справочник.Номенклатура] ,sum(a.СреднееКоличествоКонечныйОстаток) / b.VAL as Количество from ( SELECT ОстаткиТМЦОстаткиОбороты.Склад as Склад , ОстаткиТМЦОстаткиОбороты.Номенклатура as Номенклатура , tblDates.Val VAL , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата, :КонДата~, День, ДвиженияИГраницыПериода,, "+ ТекстУсловия+", (Склад, Номенклатура),) AS ОстаткиТМЦОстаткиОбороты , (select CAST(LISTDates.VAL as dateTime) as VAL from LISTDates) as tblDates where ОстаткиТМЦОстаткиОбороты.Период = (select max(ОстаткиТМЦОстаткиОбороты1.Период) from $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата, :КонДата~, День, ДвиженияИГраницыПериода,, "+ ТекстУсловия+", (Склад, Номенклатура),) AS ОстаткиТМЦОстаткиОбороты1 where ОстаткиТМЦОстаткиОбороты1.Склад = ОстаткиТМЦОстаткиОбороты.Склад and ОстаткиТМЦОстаткиОбороты1.Номенклатура = ОстаткиТМЦОстаткиОбороты.Номенклатура and tblDates.VAL >= ОстаткиТМЦОстаткиОбороты1.Период ) ) as a , (select datediff(dd,min(CAST(ListDates.Val as datetime)),max(CAST(ListDates.Val as datetime))) + 1 as VAL from ListDates) as b group by a.Склад,a.Номенклатура,b.Val "; ЗЫ: Единственный косяк в том, что если остатки появились в течении периода то отсчет дат будет с начала появления, но у меня была именно такая задача переделать там ИМХО не очень сложно .
|