Как в отчете на СКД вывести последнее значение цены для номенклатуры?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывести не все данные за период, а только актуальное (последнее) значение, например, последнюю цену номенклатуры. Стандартные настройки группировок часто выводят первую найденную запись, что не всегда соответствует бизнес-задачам. Давайте разберем, как правильно реализовать получение последней цены.

Метод 1: Использование временных таблиц в запросе (рекомендуемый)

Этот подход наиболее эффективен с точки зрения производительности, так как вычисления происходят на стороне сервера СУБД еще до передачи данных в СКД. Мы используем временные таблицы для определения максимальной даты и получения цены, соответствующей этой дате.

Рассмотрим пошаговый процесс реализации:

  1. Сначала соберем все данные в одну временную таблицу ВР_Осн, объединив документы (например, АвансовыйОтчет и ПоступлениеТоваровУслуг).
  2. Выделим во временную таблицу ВР_Цены только необходимые поля: Номенклатура, Цена и Дата.
  3. Определим максимальную дату для каждой позиции в таблице ВР_ПослДата с помощью группировки.
  4. Соединим таблицу цен с таблицей максимальных дат, чтобы отобрать именно те записи, где дата совпадает с максимальной.
  5. Присоединим полученный результат к основному набору данных.

Пример реализации запроса:


ВЫБРАТЬ Т.Номенклатура, Т.Ссылка КАК Регистратор, Т.Ссылка.Дата КАК Дата, Т.Цена 
ПОМЕСТИТЬ ВР_Осн 
ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК Т 
ГДЕ Т.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2;

ВЫБРАТЬ Номенклатура, МАКСИМУМ(Дата) КАК Дата 
ПОМЕСТИТЬ ВР_ПослДата 
ИЗ ВР_Осн 
СГРУППИРОВАТЬ ПО Номенклатура;

ВЫБРАТЬ ВР_Осн.Номенклатура, ВР_Осн.Цена КАК ЦенаПоследняя
ПОМЕСТИТЬ ВР_ПослЦены
ИЗ ВР_Осн КАК ВР_Осн
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВР_ПослДата КАК ВР_ПослДата 
ПО ВР_Осн.Номенклатура = ВР_ПослДата.Номенклатура 
И ВР_Осн.Дата = ВР_ПослДата.Дата;

Метод 2: Использование функций языка выражений СКД

Если структура отчета простая и данных не очень много, можно воспользоваться функцией ВычислитьВыражениеСГруппировкойМассив или ВычислитьВыражение непосредственно в ресурсах СКД.

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

Выражение в ресурсах может выглядеть так:

МИНИМУМ(ВычислитьВыражениеСГруппировкойМассив("ВычислитьВыражение(""Цена"",,,""Последняя"",""Последняя"")", "Регистратор"))

Важные нюансы и советы

При работе с подобными задачами всегда обращайте внимание на следующие аспекты:

Надеемся, что данные методы помогут вам корректно настроить отчет и получать актуальные данные по ценам. Если возникнут дополнительные вопросы, всегда обращайтесь к настройкам соединения наборов данных, так как использование виртуальных таблиц (например, СрезПоследних для регистров сведений) является наиболее архитектурно правильным решением в 1С.

← На главную