Как вывести в запросе 1С данные по разным периодам в отдельные колонки?

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

В процессе разработки отчетов часто возникает задача сравнения показателей за разные периоды, например, количество позиций в заказах за прошлый и текущий год. Рассмотрим, как эффективно решить эту задачу средствами языка запросов 1С, избегая дублирования кода и лишних сложностей.

Способ 1: Использование конструкции ВЫБОР КОГДА

Это наиболее компактный способ, если периоды заранее известны. Мы можем добавить условие прямо внутри оператора ВЫБРАТЬ. Суть метода заключается в проверке даты документа и заполнении колонки только при выполнении заданного условия.

Разберем пример реализации:


ВЫБРАТЬ
    Заказ.Контрагент КАК Контрагент,
    Заказ.Менеджер КАК Менеджер,
    СУММА(ВЫБОР 
        КОГДА Заказ.Дата МЕЖДУ ДАТАВРЕМЯ(2020, 1, 1) И ДАТАВРЕМЯ(2020, 12, 31) 
        ТОГДА 1 
        ИНАЧЕ 0 
    КОНЕЦ) КАК Количество_2020
ИЗ
    Документ.ЗаказПоставщику.Товары КАК Заказ
СГРУППИРОВАТЬ ПО
    Заказ.Контрагент,
    Заказ.Менеджер

Обратите внимание на использование ИНАЧЕ 0 внутри конструкции ВЫБОР. Это гарантирует, что в случае отсутствия данных за указанный период, мы получим числовой ноль, а не значение NULL, что значительно упрощает дальнейшую обработку данных в СКД.

Способ 2: Использование временных таблиц и соединений

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

Рассмотрим по шагам логику такого построения:

  1. Создаем временную таблицу для первого периода (например, 2019 год) с помощью инструкции ПОМЕСТИТЬ.
  2. Создаем аналогичную временную таблицу для второго периода (2020 год).
  3. Выполняем финальный запрос, соединяя основную таблицу Документ.ЗаказПоставщику с нашими временными таблицами через ЛЕВОЕ СОЕДИНЕНИЕ.

Пример объединения данных:


ВЫБРАТЬ
    Док.Ссылка,
    Вт2019.Количество КАК НК_2019,
    Вт2020.Количество КАК НК_2020
ИЗ
    Документ.ЗаказПоставщику КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ втКоличество2019 КАК Вт2019 
    ПО Вт2019.Ссылка = Док.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ втКоличество2020 КАК Вт2020 
    ПО Вт2020.Ссылка = Док.Ссылка

Важные рекомендации по оптимизации

В процессе работы над запросами важно помнить о следующих правилах:

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

← На главную