При разработке отчетов в системе компоновки данных (СКД) часто возникает задача сделать их более информативными и гибкими для пользователя. Одна из таких задач — динамическое изменение заголовков колонок. Например, вместо статичного названия «Продажи» нужно выводить «Продажи за Январь 2023 г.» или «Остатки на 01.01.2023». Для быстрой отладки подобных выражений и проверки данных удобно использовать Консоль запросов с поддержкой СКД (поможет универсальная консоль запросов с поддержкой СКД), что делает отчет более понятным и избавляет от необходимости постоянно смотреть на установленные параметры периода.
Рассмотрим два основных способа, как можно реализовать такой функционал в СКД (хотя в некоторых случаях может быть полезен СКДБилдер для упрощения программного создания схем), применяя различные методы изменения заголовков полей, на примере формирования заголовка с названием месяца из параметра отчета.
Этот метод заключается в создании нового поля в СКД, значением которого будет служить наш динамический заголовок. Затем это поле используется для группировки, а в качестве ресурса выводится нужный показатель.
Разберем по шагам:
ПериодМесяцЗаголовок.СтандартныйПериод, который называется Период.Для вывода названия месяца и года можно использовать функцию Формат(), учитывая особенности форматирования дат в выражениях СКД. Выражение будет выглядеть так:
Формат(НачалоПериода(&Период, "Месяц"), "ДФ='MMMM гггг'")
Проанализируем это выражение:
&Период — это обращение к параметру нашего отчета. Грамотный вывод периода в заголовке на основе этого параметра позволяет сделать шапку отчета максимально информативной.НачалоПериода(&Период, "Месяц") — эта функция возвращает дату начала месяца для указанного периода. Это гарантирует, что мы всегда будем получать правильный месяц, даже если пользователь выберет произвольный интервал.Формат(..., "ДФ='...'") — основная функция для форматирования. Параметр ДФ (ДатаФормат) указывает, как именно нужно представить дату в виде строки. MMMM выводит полное название месяца (например, «Январь»), а гггг — год четырьмя цифрами.После создания этого вычисляемого поля, его нужно использовать в настройках отчета. На вкладке «Настройки»:
ПериодМесяцЗаголовок.СуммаПродаж).В результате СКД сформирует колонку с заголовком, например, «Январь 2023», и под ней будет рассчитана сумма продаж за этот месяц.
Если нужно вывести несколько колонок для разных периодов (например, текущий и предыдущий месяцы), можно создать несколько вычисляемых полей. Для предыдущего месяца выражение будет таким:
Формат(ДобавитьМесяц(НачалоПериода(&Период, "Месяц"), -1), "ДФ='MMMM гггг'")
Здесь функция ДобавитьМесяц(Дата, -1) отнимает один месяц от начала указанного периода.
Этот способ часто является более предпочтительным, так как он не требует создания дополнительных вычисляемых полей и позволяет изменять заголовок уже существующего поля в отчете. Однако стоит учитывать, что в некоторых сложных случаях может потребоваться программное изменение заголовка группировки отчета СКД, особенно если стандартные средства настройки не позволяют добиться нужного результата (например, сделать заголовок пустым).
Разберем по шагам:
Выручка).Например, если мы хотим, чтобы заголовок был «Выручка за Январь 2023 г.», выражение будет таким:
"Выручка за " + Формат(&Период.ДатаНачала, "ДФ = ""MMMM гггг 'г.'""")
Рассмотрим подробнее это выражение:
"Выручка за " — это статичная текстовая часть нашего заголовка.+ — оператор конкатенации (сложения) строк. Эффективное использование параметров в выражениях заголовков позволяет комбинировать текст со свойствами выбранного периода.Формат(&Период.ДатаНачала, "ДФ = ""MMMM гггг 'г.'""") — уже знакомая нам функция форматирования.
&Период.ДатаНачала — мы обращаемся к начальной дате стандартного периода.""MMMM гггг 'г.'"". Внутренние двойные кавычки нужны для экранирования, чтобы система поняла, что это часть строки формата. Альтернативно можно использовать одинарные кавычки, как в первом примере. 'г.' — это литерал, который будет добавлен в конец строки.Этот способ очень гибкий. Например, если пользователь выбрал целый интервал, можно вывести обе даты:
"Продажи с " + Формат(&Период.ДатаНачала, "ДФ=dd.MM.yyyy") + " по " + Формат(&Период.ДатаОкончания, "ДФ=dd.MM.yyyy")
Важный момент: этот способ изменяет заголовок в конкретном варианте настроек. Если вы хотите добиться максимальной гибкости для конечного пользователя, можно изучить решение Пользовательская СКД, которое расширяет возможности настройки отчетов на стороне клиента. Если же вам нужно реализовать крайне нестандартную логику, иногда применяют две разных схемы в одном отчете СКД.
Таким образом, используя простые выражения в настройках СКД, можно значительно повысить информативность и удобство ваших отчетов, сделав заголовки динамическими и зависимыми от выбранных пользователем параметров.