Как получить остатки на каждый день по регистру накопления?
Например:
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
| ТоварыНаСкладахОстаткиИОбороты.Период
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты";
(1) barm, Подобный запрос, для получения остатков на каждый день, для бухгалтерии, смысл, я думаю, уловите:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Период,
ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстатокДт,
ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстатокКт,
ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстатокДт,
ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстатокКт,
ХозрасчетныйОстаткиИОбороты.Валюта,
ХозрасчетныйОстаткиИОбороты.Субконто1,
ХозрасчетныйОстаткиИОбороты.Субконто2,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
&ДатаНачала,
&ДатаОкончания,
День,
ДвиженияИГраницыПериода,
Счет В ИЕРАРХИИ (&Счет),
,
Субконто1 = &Контрагент
И Субконто2 = &Договор
И Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
;
X
ВЫБРАТЬ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря,
ВложенныйЗапрос.Субконто1,
ВложенныйЗапрос.Субконто2,
ВложенныйЗапрос.Валюта
ПОМЕСТИТЬ ВТ_Календарь
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь,
(ВЫБРАТЬ
ВТ_Остатки.Субконто1 КАК Субконто1,
ВТ_Остатки.Субконто2 КАК Субконто2,
ВТ_Остатки.Валюта КАК Валюта
ИЗ
ВТ_Остатки КАК ВТ_Остатки
СГРУППИРОВАТЬ ПО
ВТ_Остатки.Субконто1,
ВТ_Остатки.Субконто2,
ВТ_Остатки.Валюта) КАК ВложенныйЗапрос
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончания
;
X
ВЫБРАТЬ
ВложенныйЗапрос.Субконто1 КАК Контрагент,
ВложенныйЗапрос.Субконто2 КАК Договор,
ВложенныйЗапрос.Дата КАК Дата,
ЕСТЬNULL(ВТ_Остатки.ВалютнаяСуммаНачальныйОстатокДт, 0) КАК ВалютныйОстатокНачалоДт,
ЕСТЬNULL(ВТ_Остатки.ВалютнаяСуммаНачальныйОстатокКт, 0) КАК ВалютныйОстатокНачалоКт,
ЕСТЬNULL(ВТ_Остатки1.ВалютнаяСуммаКонечныйОстатокДт, 0) КАК ВалютныйОстатокКонецДт,
ЕСТЬNULL(ВТ_Остатки1.ВалютнаяСуммаКонечныйОстатокКт, 0) КАК ВалютныйОстатокКонецКт,
ЕСТЬNULL(ВТ_Остатки.СуммаНачальныйОстатокДт, 0) КАК РублевыйОстатокНачалоДт,
ЕСТЬNULL(ВТ_Остатки.СуммаНачальныйОстатокКт, 0) КАК РублевыйОстатокНачалоКт,
ЕСТЬNULL(ВТ_Остатки1.СуммаКонечныйОстатокДт, 0) КАК РублевыйОстатокКонецДт,
ЕСТЬNULL(ВТ_Остатки1.СуммаКонечныйОстатокКт, 0) КАК РублевыйОстатокКонецКт
ИЗ
(ВЫБРАТЬ
МИНИМУМ(ВТ_Остатки.Период) КАК ПериодНач,
МАКСИМУМ(ВТ_Остатки1.Период) КАК ПериодКон,
ВТ_Календарь.ДатаКалендаря КАК Дата,
ВТ_Календарь.Субконто1 КАК Субконто1,
ПРЕДСТАВЛЕНИЕ(ВТ_Календарь.Субконто1) КАК Субконто1Представление,
ВТ_Календарь.Субконто2 КАК Субконто2,
ПРЕДСТАВЛЕНИЕ(ВТ_Календарь.Субконто2) КАК Субконто2Представление,
ВТ_Календарь.Валюта КАК Валюта,
ПРЕДСТАВЛЕНИЕ(ВТ_Календарь.Валюта) КАК ВалютаПредставление
ИЗ
ВТ_Календарь КАК ВТ_Календарь
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО ВТ_Календарь.ДатаКалендаря <= ВТ_Остатки.Период
И ВТ_Календарь.Субконто2 <= ВТ_Остатки.Субконто2
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки1
ПО ВТ_Календарь.ДатаКалендаря >= ВТ_Остатки1.Период
И ВТ_Календарь.Субконто2 >= ВТ_Остатки1.Субконто2
СГРУППИРОВАТЬ ПО
ВТ_Календарь.ДатаКалендаря,
ВТ_Календарь.Субконто1,
ВТ_Календарь.Субконто2,
ВТ_Календарь.Валюта) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО ВложенныйЗапрос.ПериодНач = ВТ_Остатки.Период
И ВложенныйЗапрос.Субконто2 = ВТ_Остатки.Субконто2
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки1
ПО ВложенныйЗапрос.ПериодКон = ВТ_Остатки1.Период
И ВложенныйЗапрос.Субконто2 = ВТ_Остатки1.Субконто2
Если необходимо получить остатки на каждый день периода (даже если не было движений), то можно попользовать СКД.
ТАм есть возможность передавать пар-ры между 2-я наборами данных:
1-ый будет формировать список дней, на которые нам нужно получить остатки.
2-ой - будет получать остаток на даты из первого набора.
А эти даты из 1-го набора во 2-ой передаем в кач-ве параметра.
В статье Минимализмы (Пример 6) приведено очень короткое (из одного запроса) решение этой задачи. Это то же решение, что и ссылке из (8) (в комментариях).
Если я правильно понял идею решения (7), то там предлагается "разворачивать" остатки на те периоды, где они не были заданы, выделяя периоды постоянства остатков. Тоже вариант. Пока непонятно, достигается ли таким путем какая-либо экономия, учитывая механизм расчета остатков внутри периода рассчитанных итогов.