Срез последних на каждую дату в запросе 1С

Используя виртуальную таблицу для среза последних периодического регистра сведений можно получить данные только на определенную дату, указанную в параметрах.

Параметры виртуальной таблицы

Но часто требуется делать срезы на различные даты для каждой строки в запросе. Для этого запрос разбивается на две части(при помощи вложенного запроса или пакета).

  • В первой части делается выборка данных и ищется дата в регистре, максимально близкая к дате на которую нужно сделать срез.
  • Во второй части запроса к строкам выборки присоединяем регистр сведений по найденным датам.

Например, у нас есть запрос к табличным частям Товары документа Реализация товаров и услуг, требуется получить цены номенклатуры на дату каждого документа.

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