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

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

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

Шаг 1: Подготовка данных в запросе

Для начала нам необходимо выделить период в запросе. Обычное обращение к полю Период не даст нужной группировки, так как нам нужно сгруппировать данные по началу месяца. Для этого воспользуемся стандартной функцией языка запросов НАЧАЛОПЕРИОДА.

В тексте запроса к регистру накопления Продажи необходимо создать поле, которое будет отвечать за группировку по месяцам:


ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК ПериодМесяц,
    ГОД(ПродажиОбороты.Период) КАК ПериодГод,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

Шаг 2: Настройка отображения названий месяцев

Проблема использования поля ПериодМесяц в том, что по умолчанию оно будет выводиться как дата (например, 01.01.2023). Чтобы превратить его в понятное название «Январь», «Февраль» и так далее, воспользуемся функционалом Выражение представления в СКД.

  1. Перейдем на вкладку Наборы данных.
  2. Для поля ПериодМесяц в колонке Выражение представления пропишем логику, которая преобразует номер месяца в строку.

Рассмотрим вариант реализации через ВЫБОР КОГДА:


ВЫБОР 
    КОГДА МЕСЯЦ(ПериодМесяц) = 1 ТОГДА "Январь"
    КОГДА МЕСЯЦ(ПериодМесяц) = 2 ТОГДА "Февраль"
    ...
    КОГДА МЕСЯЦ(ПериодМесяц) = 12 ТОГДА "Декабрь"
КОНЕЦ

Важное замечание: При использовании строкового представления важно помнить о сортировке. Система будет сортировать «Апрель» перед «Январем» по алфавиту. Чтобы этого избежать, установите в настройках группировки Сортировка по исходному полю ПериодМесяц, а не по его строковому представлению.

Шаг 3: Настройка иерархии в структуре отчета

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

Альтернативный профессиональный подход: Форматирование

Если вы хотите избежать «хардкода» с перечислением месяцев, воспользуйтесь встроенными форматами дат. В настройках поля ПериодМесяц на вкладке Выбранные поля в свойстве Формат укажите строку ДФ=MMMM. Система автоматически подставит название месяца, соответствующее региональным настройкам пользователя.

Для достижения наилучшего результата рекомендуется использовать вычисляемые поля. Создайте поле МесяцСтрокой, в выражении которого укажите Формат(ПериодМесяц, \"ДФ=MMMM\"). Это позволит использовать это поле в отчете как заголовок, сохранив возможность корректной сортировки по исходному полю даты.

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

← На главную