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 Подзапрос.ПодзапросНоменклатура
	, Подзапрос.ПодзапросСклад
 	Вступайте в нашу телеграмм-группу Инфостарт
