При построении отчетов в Системе Компоновки Данных (СКД) часто возникает задача сделать заголовки колонок более информативными и читаемыми. Стандартно, при группировке по периоду (например, по неделям или месяцам), СКД выводит в заголовок дату начала этого периода в полном формате, например, "22.01.2024 0:00:00". Это не всегда удобно для анализа. Разберем, как заменить такой заголовок на более понятный, например, "4 неделя (22.01.2024)" для еженедельной группировки или "Январь 2024" для ежемесячной.
Проанализируем по шагам, как настроить такое представление в отчете СКД, используя СКД: пример формирования шапки отчета по неделям, месяцам.
Этот способ идеально подходит, если ваш отчет всегда имеет один и тот же тип группировки — например, только по неделям. Чтобы быстрее получить результат, можно использовать Шаблон отчета на СКД. Версия 1.2 или настроить механизм "Выражение представления" для поля группировки вручную.
Пример для группировки по неделям
Чтобы получить заголовок вида "4 неделя (22.01.2024)", используем комбинацию функций НеделяГода(), Формат() и Строка().
В поле "Выражение представления" вставьте следующий код:
Строка(НеделяГода(Период)) + " неделя (" + Формат(Период, "ДФ=dd.MM.yyyy") + ")"
Рассмотрим, что делает эта строка:
НеделяГода(Период) — эта функция возвращает порядковый номер недели в году для даты, указанной в поле Период.Формат(Период, "ДФ=dd.MM.yyyy") — форматирует дату начала периода в привычный вид "день.месяц.год".Строка(...) — преобразует числовое значение (номер недели) в строку. Это важный момент! Без явного преобразования в строку при попытке сложить число и строку (операция конкатенации "+") возникнет ошибка несоответствия типов.Пример для группировки по месяцам
Если отчет сгруппирован по месяцам, и вы хотите видеть заголовок "Январь 2024", выражение будет еще проще. Здесь достаточно одной функции Формат().
В поле "Выражение представления" вставьте следующий код:
Формат(Период, "ДФ='MMMM yyyy'")
Разберем параметры функции Формат:
'MMMM' — специальный параметр, который означает "полное название месяца" (например, "Январь", "Февраль").'yyyy' — выводит год в формате четырех цифр.После применения этих настроек ваш отчет будет выглядеть гораздо нагляднее. Дополнительно может возникнуть задача собрать значения колонки из нескольких строк для более компактного вида.
Часто пользователю предоставляется возможность самому выбирать периодичность отчета прямо в настройках (день, неделя, месяц). В этом случае статичное выражение представления из первого способа не подойдет. Если мы зададим формат для недели, он будет некорректно отображаться при выборе месяца, и наоборот. Рассмотрим несколько подходов для решения этой задачи.
Вариант А: Создание нескольких вариантов отчета (самый простой)
Это самый надежный и простой в реализации метод, не требующий программирования. Суть в том, чтобы создать и сохранить для пользователей несколько предопределенных вариантов одного и того же отчета.
В результате пользователь сможет просто выбирать нужный вариант из списка, и каждый будет иметь корректные заголовки колонок (также полезно изучить решение, когда нет данных — нет столбцов).
Вариант Б: Использование параметра и конструкции ВЫБОР в запросе (продвинутый)
Этот метод более гибок и позволяет обойтись одним вариантом отчета. Он заключается в том, что мы добавляем в отчет собственный параметр, который будет управлять форматом вывода, и обрабатываем его прямо в запросе набора данных.
Периодичность. Задайте для него список доступных значений: "Неделя", "Месяц". Включите его в состав быстрых пользовательских настроек.ВЫБОР КОГДА ... КОНЕЦ. Это поле будет формировать текстовое представление в зависимости от значения нашего параметра.Пример кода для запроса:
ВЫБОР
КОГДА &Периодичность = "Неделя"
ТОГДА ВЫРАЗИТЬ(НомерНеделиГода(Таблица.Период) КАК СТРОКА(10)) + " неделя (" + ФОРМАТ(Таблица.Период, "ДФ=dd.MM.yyyy") + ")"
КОГДА &Периодичность = "Месяц"
ТОГДА ФОРМАТ(Таблица.Период, "ДФ='MMMM yyyy'")
ИНАЧЕ ФОРМАТ(Таблица.Период, "ДФ=dd.MM.yyyy")
КОНЕЦ КАК ПредставлениеПериода
Важно: в языке запросов для конкатенации строк также используется "+", а для преобразования числа в строку — функция ВЫРАЗИТЬ(... КАК СТРОКА(...)).
ПредставлениеПериода.Таким образом, когда пользователь будет выбирать периодичность в параметрах отчета, запрос будет формировать правильное представление, которое и отобразится в заголовках.
Вариант В: Программная доработка (самый сложный)
Для самых сложных случаев можно прибегнуть к программной модификации схемы компоновки данных перед формированием отчета. Это требует навыков программирования на 1С. Можно в модуле отчета, в обработчике события ПриКомпоновкеРезультата, получить доступ к настройкам компоновщика, проанализировать, какой тип дополнения периода выбран пользователем, и программно установить нужное выражение представления. Этот способ обеспечивает максимальную гибкость, но является наиболее трудозатратным.
Таким образом, для решения задачи по кастомизации заголовков периодов в СКД существует несколько методов — от простой настройки в конструкторе до сложного программирования, что позволяет выбрать оптимальный вариант для любой ситуации.