Срез последних на каждую дату в запросе 1С
Используя виртуальную таблицу для среза последних периодического регистра сведений можно получить данные только на определенную дату, указанную в параметрах.
Но часто требуется делать срезы на различные даты для каждой строки в запросе. Для этого запрос разбивается на две части(при помощи вложенного запроса или пакета).
- В первой части делается выборка данных и ищется дата в регистре, максимально близкая к дате на которую нужно сделать срез.
- Во второй части запроса к строкам выборки присоединяем регистр сведений по найденным датам.
Например, у нас есть запрос к табличным частям Товары документа Реализация товаров и услуг, требуется получить цены номенклатуры на дату каждого документа.
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Ссылка КАК Документ,
| РеализацияТоваровУслугТовары.Номенклатура,
| МАКСИМУМ(ЦеныНоменклатуры.Период) КАК МаксимальнаяДатаРегистра
|ПОМЕСТИТЬ Выборка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
| И РеализацияТоваровУслугТовары.Ссылка.ТипЦен = ЦеныНоменклатуры.ТипЦен
| И РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Ссылка,
| РеализацияТоваровУслугТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Выборка.Документ,
| Выборка.Номенклатура,
| ЦеныНоменклатуры.Цена,
| Выборка.МаксимальнаяДатаРегистра
|ИЗ
| Выборка КАК Выборка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ПО Выборка.Документ.ТипЦен = ЦеныНоменклатуры.ТипЦен
| И Выборка.Номенклатура = ЦеныНоменклатуры.Номенклатура
| И Выборка.МаксимальнаяДатаРегистра = ЦеныНоменклатуры.Период