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