Часто в процессе разработки конфигураций на платформе 1С возникает задача выбора актуальных данных из справочников. Например, нам нужно получить список номенклатур, где для каждой позиции будет указан только тот сертификат, который имеет самую позднюю ДатаОкончанияСертификата. В данной статье мы разберем, как реализовать это с помощью механизмов запросов 1С.
Представим, что у нас есть справочник СертификатыНоменклатуры, содержащий историю сертификатов. Для одной номенклатуры может быть создано множество записей с разными датами окончания. Наша цель — отфильтровать эти данные так, чтобы в итоговой выборке для каждого элемента справочника Номенклатура осталась только одна строка — с самой свежей датой.
Наиболее надежным и понятным способом решения этой задачи является использование пакетного запроса. Мы разобьем нашу работу на два этапа: сначала определим максимальные даты для каждой позиции, а затем соединим полученные данные с исходным справочником.
На первом этапе нам необходимо сформировать временную таблицу, в которой каждой Номенклатура будет соответствовать только одна Дата — максимальная из всех имеющихся. Для этого используем группировку по номенклатуре и функцию МАКСИМУМ.
ВЫБРАТЬ
Сертификаты.Номенклатура КАК Номенклатура,
МАКСИМУМ(Сертификаты.ДатаОкончанияСертификата) КАК МаксДата
ПОМЕСТИТЬ ВТ_МаксДаты
ИЗ
Справочник.СертификатыНоменклатуры КАК Сертификаты
СГРУППИРОВАТЬ ПО
Сертификаты.Номенклатура
Теперь, имея временную таблицу ВТ_МаксДаты, мы можем выполнить основной запрос. Мы соединяем исходный справочник с нашей временной таблицей по двум условиям: совпадению номенклатуры и совпадению даты. Это позволит отсечь все «старые» записи, оставив только актуальные сертификаты.
ВЫБРАТЬ
Сертификаты.Номенклатура,
Сертификаты.Сертификат,
Сертификаты.ДатаОкончанияСертификата
ИЗ
Справочник.СертификатыНоменклатуры КАК Сертификаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксДаты КАК ВТ
ПО Сертификаты.Номенклатура = ВТ.Номенклатура
И Сертификаты.ДатаОкончанияСертификата = ВТ.МаксДата
Сертификаты.Ссылка = МИНИМУМ(ВТ.Ссылка), либо использовать конструкцию ПЕРВЫЕ 1 в подзапросе.РегистрСведений с периодичностью «В пределах дня» или «В пределах секунды». Это позволит использовать мощный механизм СрезПоследних, который работает быстрее и проще написания соединений вручную.Теперь вы знаете, как организовать выборку последних сертификатов. Этот подход является универсальным и может применяться для поиска последних цен, актуальных статусов или любых других периодических данных в вашей системе.