SELECT Подзапрос.ПодзапросНоменклатура [ПодзапросНоменклатура $Справочник.Номенклатура], Подзапрос.ПодзапросСклад [ПодзапросСклад $Справочник.Склады], SUM( CASE WHEN Подзапрос.ПодзапросПериод = $НачалоПериода.День(:ДатаКонца~) THEN CASE WHEN Подзапрос.КоличествоКонечныйОстаток > 0 THEN CASE WHEN Подзапрос. ПодзапросКоличествоКонечныйОстаток <= 0 THEN DATEDIFF(day, Подзапрос.ОстаткиТМЦОстаткиОбороты1Период, Подзапрос.ПодзапросПериод) ELSE DATEDIFF(day, Подзапрос.ОстаткиТМЦОстаткиОбороты1Период, :ДатаКонца~) + 1 END ELSE CASE WHEN Подзапрос.ПодзапросКоличествоКонечныйОстаток > 0 THEN DATEDIFF(day, Подзапрос.ПодзапросПериод, :ДатаКонца~) + 1 ELSE 0 END END ELSE CASE WHEN Подзапрос.КоличествоКонечныйОстаток > 0 THEN DATEDIFF(day, Подзапрос.ОстаткиТМЦОстаткиОбороты1Период, Подзапрос.ПодзапросПериод) ELSE 0 END END ) as КоличествоДнейВПродаже FROM ( SELECT Запрос2Уровня.ПодзапросНоменклатура ПодзапросНоменклатура , Запрос2Уровня.ПодзапросСклад ПодзапросСклад , Запрос2Уровня.ПодзапросКоличествоКонечныйОстаток , Запрос2Уровня.ПодзапросПериод , Запрос2Уровня.ОстаткиТМЦОстаткиОбороты1Период , Запрос2Уровня.КоличествоКонечныйОстаток FROM ( SELECT Запрос1Уровня.Номенклатура ПодзапросНоменклатура , Запрос1Уровня.Склад ПодзапросСклад , Запрос1Уровня.КоличествоКонечныйОстаток ПодзапросКоличествоКонечныйОстаток , Запрос1Уровня.Период ПодзапросПериод , Запрос1Уровня.ОстаткиТМЦОстаткиОбороты1Период , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНачала,:ДатаКонца~,День,,,,(Номенклатура, Склад),) AS ОстаткиТМЦОстаткиОбороты INNER JOIN ( SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура , ОстаткиТМЦОстаткиОбороты.Склад , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток , ОстаткиТМЦОстаткиОбороты.Период , MAX(ОстаткиТМЦОстаткиОбороты1.Период) ОстаткиТМЦОстаткиОбороты1Период FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНачала,:ДатаКонца~,День,,,,(Номенклатура, Склад),) AS ОстаткиТМЦОстаткиОбороты LEFT JOIN $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНачала,:ДатаКонца~,День,,,,(Номенклатура, Склад),) AS ОстаткиТМЦОстаткиОбороты1 ON ОстаткиТМЦОстаткиОбороты.Номенклатура = ОстаткиТМЦОстаткиОбороты1.Номенклатура AND ОстаткиТМЦОстаткиОбороты.Склад = ОстаткиТМЦОстаткиОбороты1.Склад AND ОстаткиТМЦОстаткиОбороты.Период > ОстаткиТМЦОстаткиОбороты1.Период GROUP BY ОстаткиТМЦОстаткиОбороты.Номенклатура , ОстаткиТМЦОстаткиОбороты.Склад , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток , ОстаткиТМЦОстаткиОбороты.Период ) AS Запрос1Уровня ON ОстаткиТМЦОстаткиОбороты.Номенклатура = Запрос1Уровня.Номенклатура AND ОстаткиТМЦОстаткиОбороты.Склад = Запрос1Уровня.Склад AND ОстаткиТМЦОстаткиОбороты.Период = Запрос1Уровня.ОстаткиТМЦОстаткиОбороты1Период ) AS Запрос2Уровня ) AS Подзапрос GROUP BY Подзапрос.ПодзапросНоменклатура , Подзапрос.ПодзапросСклад ORDER BY Подзапрос.ПодзапросНоменклатура , Подзапрос.ПодзапросСклад
Прямой запрос к SQL-базе: количество дней наличия товара на складе за период
Чуть позже, если получится, перепишу для dbf-базы.
См. также
[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом?
12.03.2016 21947 CheBurator 19
Пример получения остатков по складу по запросу по почте из программы 1С 7.7.
3 стартмани
25.03.2014 25140 5 protexprotex 3
Очередной тривиальный шаблон отчета с МФ для прямых запросов
1 стартмани
24.04.2012 14943 22 newbas 3
Универсальный отчет - Конструктор запросов для 1С 7.7
1 стартмани
14.04.2012 33845 303 set2333 16