Как в отчете СКД сделать динамический заголовок колонки, зависящий от выбранного периода?

Программист 1С v8.3 (Управляемые формы)
← На главную

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача сделать их более информативными и гибкими для пользователя. Одна из таких задач — динамическое изменение заголовков колонок. Например, вместо статичного названия «Продажи» нужно выводить «Продажи за Январь 2023 г.» или «Остатки на 01.01.2023». Для быстрой отладки подобных выражений и проверки данных удобно использовать Консоль запросов с поддержкой СКД (поможет универсальная консоль запросов с поддержкой СКД), что делает отчет более понятным и избавляет от необходимости постоянно смотреть на установленные параметры периода.

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

Способ 1. Использование вычисляемых полей

Этот метод заключается в создании нового поля в СКД, значением которого будет служить наш динамический заголовок. Затем это поле используется для группировки, а в качестве ресурса выводится нужный показатель.

Разберем по шагам:

  1. Перейдем на вкладку «Вычисляемые поля» в конструкторе схемы компоновки данных.
  2. Нажмем «Добавить» и создадим новое поле. Назовем его, например, ПериодМесяцЗаголовок.
  3. В поле «Выражение» необходимо написать формулу, которая будет преобразовывать дату из параметра в нужную нам текстовую строку. Предположим, у нас в отчете есть параметр с типом СтандартныйПериод, который называется Период.

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

Формат(НачалоПериода(&Период, "Месяц"), "ДФ='MMMM гггг'")

Проанализируем это выражение:

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

  1. Добавим новую группировку колонок.
  2. В качестве поля группировки выберем наше новое вычисляемое поле ПериодМесяцЗаголовок.
  3. В выбранные поля для этой группировки добавим ресурс, который нужно рассчитать (например, СуммаПродаж).

В результате СКД сформирует колонку с заголовком, например, «Январь 2023», и под ней будет рассчитана сумма продаж за этот месяц.

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

Формат(ДобавитьМесяц(НачалоПериода(&Период, "Месяц"), -1), "ДФ='MMMM гггг'")

Здесь функция ДобавитьМесяц(Дата, -1) отнимает один месяц от начала указанного периода.

Способ 2. Настройка заголовка в структуре отчета

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

Разберем по шагам:

  1. Откроем схему компоновки данных и перейдем на вкладку «Настройки».
  2. В структуре отчета найдем поле, заголовок которого мы хотим изменить (например, поле Выручка).
  3. Выделим это поле и в окне свойств (обычно справа) найдем свойство «Заголовок». По умолчанию оно пустое, и СКД использует синоним поля из запроса.
  4. Нажмем на кнопку выбора (троеточие) в этом свойстве, чтобы открыть редактор выражения.
  5. В редакторе введем выражение, которое будет формировать наш заголовок. Важно помнить, что это должно быть строковое выражение.

Например, если мы хотим, чтобы заголовок был «Выручка за Январь 2023 г.», выражение будет таким:

"Выручка за " + Формат(&Период.ДатаНачала, "ДФ = ""MMMM гггг 'г.'""")

Рассмотрим подробнее это выражение:

Этот способ очень гибкий. Например, если пользователь выбрал целый интервал, можно вывести обе даты:


"Продажи с " + Формат(&Период.ДатаНачала, "ДФ=dd.MM.yyyy") + " по " + Формат(&Период.ДатаОкончания, "ДФ=dd.MM.yyyy")

Важный момент: этот способ изменяет заголовок в конкретном варианте настроек. Если вы хотите добиться максимальной гибкости для конечного пользователя, можно изучить решение Пользовательская СКД, которое расширяет возможности настройки отчетов на стороне клиента. Если же вам нужно реализовать крайне нестандартную логику, иногда применяют две разных схемы в одном отчете СКД.

Таким образом, используя простые выражения в настройках СКД, можно значительно повысить информативность и удобство ваших отчетов, сделав заголовки динамическими и зависимыми от выбранных пользователем параметров.

← На главную