Итак, изложу свой способ решения, не претендую на идеальный, пишите, если что-то не так.
1. Нашел формулу расчета, исходя из ответа - получаю ОстатокНаКонецДня на каждый день месяца, суммирую и делю на количество дней в месяце.
2. Кратко о запросе, получил остатки на конец дня, номера дней в месяце по дате, нарастающим итогом собрал суммы за месяц.
В параметрах таблица как на картинке и ДатаОкончания - 31.01.2022
Сам запрос:
ВЫБРАТЬ
ТаблицаДвижений.ProdiD КАК ProdiD,
ТаблицаДвижений.Количество КАК Количество,
ТаблицаДвижений.cDate КАК cDate
ПОМЕСТИТЬ ТабДвижений
ИЗ
&ТаблицаДвижений КАК ТаблицаДвижений
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТабДвижений.ProdiD КАК ProdiD,
ТабДвижений.Количество КАК Количество,
ТабДвижений.cDate КАК cDate,
СУММА(ТабДвижений1.Количество) КАК Количество1
ПОМЕСТИТЬ ОстатокНаКонецДня
ИЗ
ТабДвижений КАК ТабДвижений
ЛЕВОЕ СОЕДИНЕНИЕ ТабДвижений КАК ТабДвижений1
ПО ТабДвижений.cDate >= ТабДвижений1.cDate
И ТабДвижений.ProdiD = ТабДвижений1.ProdiD
СГРУППИРОВАТЬ ПО
ТабДвижений.ProdiD,
ТабДвижений.Количество,
ТабДвижений.cDate
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОстатокНаКонецДня.ProdiD КАК ProdiD,
ОстатокНаКонецДня.cDate КАК cDate,
ОстатокНаКонецДня.Количество1 КАК Количество1
ПОМЕСТИТЬ НомерДняВр
ИЗ
ОстатокНаКонецДня КАК ОстатокНаКонецДня
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НомерДняВр.ProdiD КАК ProdiD,
&ДатаОкончания КАК ДатаОкончания
ПОМЕСТИТЬ КонецМесяца
ИЗ
НомерДняВр КАК НомерДняВр
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
НомерДняВр.ProdiD КАК ProdiD,
НомерДняВр.cDate КАК cDate,
НомерДняВр.Количество1 КАК Количество
ПОМЕСТИТЬ ДвиженияПлюсКонецМесяца
ИЗ
НомерДняВр КАК НомерДняВр
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
КонецМесяца.ProdiD,
КонецМесяца.ДатаОкончания,
0
ИЗ
КонецМесяца КАК КонецМесяца
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДвиженияПлюсКонецМесяца.ProdiD КАК ProdiD,
ДвиженияПлюсКонецМесяца.cDate КАК cDate,
ДвиженияПлюсКонецМесяца.Количество КАК Количество,
ДЕНЬ(ДвиженияПлюсКонецМесяца.cDate) КАК День
ПОМЕСТИТЬ НомерДня
ИЗ
ДвиженияПлюсКонецМесяца КАК ДвиженияПлюсКонецМесяца
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НомерДня.ProdiD КАК ProdiD,
НомерДня.cDate КАК cDate,
НомерДня.Количество КАК Количество,
НомерДня.День КАК День,
КОЛИЧЕСТВО(НомерДня1.cDate) КАК Номер
ПОМЕСТИТЬ НумерацияСтрок
ИЗ
НомерДня КАК НомерДня
ЛЕВОЕ СОЕДИНЕНИЕ НомерДня КАК НомерДня1
ПО НомерДня.cDate >= НомерДня1.cDate
И НомерДня.ProdiD = НомерДня1.ProdiD
СГРУППИРОВАТЬ ПО
НомерДня.ProdiD,
НомерДня.cDate,
НомерДня.Количество,
НомерДня.День
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НумерацияСтрок.ProdiD КАК ProdiD,
НумерацияСтрок.cDate КАК cDate,
НумерацияСтрок.Количество КАК Количество,
НумерацияСтрок.День КАК День,
НумерацияСтрок.Номер КАК Номер,
НумерацияСтрок1.День КАК День1,
ВЫБОР
КОГДА НЕ НумерацияСтрок1.День ЕСТЬ NULL
ТОГДА ВЫБОР
КОГДА НумерацияСтрок1.День = ДЕНЬ(&ДатаОкончания)
ТОГДА НумерацияСтрок1.День - НумерацияСтрок.День + 1
ИНАЧЕ НумерацияСтрок1.День - НумерацияСтрок.День
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК КолДнейПериодОстатка
ПОМЕСТИТЬ ВрТч
ИЗ
НумерацияСтрок КАК НумерацияСтрок
ЛЕВОЕ СОЕДИНЕНИЕ НумерацияСтрок КАК НумерацияСтрок1
ПО (НумерацияСтрок.Номер = НумерацияСтрок1.Номер - 1)
И НумерацияСтрок.ProdiD = НумерацияСтрок1.ProdiD
СГРУППИРОВАТЬ ПО
НумерацияСтрок.ProdiD,
НумерацияСтрок.cDate,
НумерацияСтрок.Количество,
НумерацияСтрок.День,
НумерацияСтрок.Номер,
НумерацияСтрок1.День
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВрТч.ProdiD КАК ProdiD,
ВрТч.cDate КАК cDate,
ВрТч.Количество КАК Количество,
ВрТч.День КАК День,
ВрТч.Номер КАК Номер,
ВрТч.День1 КАК День1,
ВрТч.КолДнейПериодОстатка КАК КолДнейПериодОстатка,
ВЫБОР
КОГДА ВрТч.КолДнейПериодОстатка > 0
И ВрТч.Количество > 0
ТОГДА ВрТч.КолДнейПериодОстатка * ВрТч.Количество
ИНАЧЕ 0
КОНЕЦ КАК СуммаОстаткаПоПериоду
ПОМЕСТИТЬ ИтоговыеДанные
ИЗ
ВрТч КАК ВрТч
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИтоговыеДанные.ProdiD КАК ProdiD,
СУММА(ИтоговыеДанные.СуммаОстаткаПоПериоду) КАК СуммаОстаткаПоПериоду
ПОМЕСТИТЬ СуммировалОстатки
ИЗ
ИтоговыеДанные КАК ИтоговыеДанные
СГРУППИРОВАТЬ ПО
ИтоговыеДанные.ProdiD
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СуммировалОстатки.ProdiD КАК ProdiD,
СуммировалОстатки.СуммаОстаткаПоПериоду КАК СуммаОстаткаПоПериоду,
ВЫРАЗИТЬ(СуммировалОстатки.СуммаОстаткаПоПериоду / ДЕНЬ(&ДатаОкончания) КАК ЧИСЛО(15, 2)) КАК aCount
ИЗ
СуммировалОстатки КАК СуммировалОстатки