Как вывести динамическую дату в заголовок отчета на СКД?

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

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывести в шапку динамическую информацию, например, текущую дату формирования отчета или дату из параметров (&Период, &КонецПериода). Стандартное свойство Заголовок на вкладке «Другие настройки» схемы компоновки данных принимает только статическую текстовую строку. Встроенный интерфейс не позволяет написать там выражение вида ТекущаяДата() или обратиться к переменным схемы напрямую.

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

Программный способ: переопределение заголовка в модуле отчета

Проанализируем программный метод решения задачи. В модуле объекта отчета предусмотрено предопределенное событие ПриКомпоновкеРезультата, которое выполняется непосредственно перед выводом данных в результирующий табличный документ. Мы можем перехватить формирование отчета и программно подставить нужную дату в параметры вывода.

Рассмотрим по шагам, как реализовать этот подход:

  1. Откроем отчет в конфигураторе и перейдем в его Модуль объекта.
  2. Создадим процедуру-обработчик ПриКомпоновкеРезультата.
  3. Найдем параметр компоновки Заголовок в коллекции ПараметрыВывода и присвоим ему динамически сформированную строку с датой, используя функцию Формат.

Посмотрим на базовый пример кода из обсуждения:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок"));
    ЗначениеПараметра.Значение = "Отчет по площадям на " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ЗначениеПараметра.Использование = Истина;
КонецПроцедуры

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

Посмотрим на расширенный и отказоустойчивый пример реализации:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    ТекстЗаголовка = "Отчет по площадям на " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
    ПараметрыВывода = КомпоновщикНастроек.Настройки.ПараметрыВывода;
    
    // Включаем отображение заголовка отчета
    ПараметрыВывода.УстановитьЗначениеПараметра("ВыводитьЗаголовок", ТипВыводаТекстаКомпоновкиДанных.Выводить);
    ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", ТекстЗаголовка);
    
    // Проверяем наличие параметра в пользовательских настройках
    ИДНастройки = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")).ИдентификаторПользовательскойНастройки;
    ЭлементЗаголовок = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИДНастройки);
    Если ЭлементЗаголовок <> Неопределено Тогда
        ЭлементЗаголовок.Значение = ТекстЗаголовка;
        ЭлементЗаголовок.Использование = Истина;
    КонецЕсли;

КонецПроцедуры

Способ без программирования: использование собственного макета группировки

Если внесение изменений в модуль объекта нежелательно или отчет редактируется исключительно через схему компоновки данных без изменения конфигурации, мы можем решить задачу через вкладку Макеты.

Разберем по шагам создание собственного заголовка:

  1. Перейдем на вкладку Настройки в схеме СКД. В структуре отчета над основной таблицей или списком добавим отдельную группировку верхнего уровня без указания поля группировки.
  2. В свойствах созданной группировки зададим имя, например, ШапкаОтчета.
  3. В окне Выбранные поля для этой группировки удалим системное поле Авто, чтобы в шапку не попадали поля детальных записей.
  4. В разделе Другие настройки данной группировки установим Макет оформления в значение Без оформления, а параметр Вариант использования группировки переключим на Дополнительная информация.
  5. Перейдем на вкладку Макеты схемы компоновки и нажмем Добавить макет группировки. В диалоге выберем нашу группировку ШапкаОтчета и укажем тип макета — Заголовок.
  6. В появившейся области табличного документа выделим ячейку и в свойствах зададим тип заполнения:
    — Шаблон с текстом: Отчет по площадям на [ДатаОтчета];
    — Либо Параметр с именем ДатаОтчета.
  7. В нижней таблице параметров макета для созданного параметра ДатаОтчета укажем выражение:
    Для текущей даты: Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy").
    Для параметра отчета (например, периода): Формат(&Период, "ДФ=dd.MM.yyyy") или Формат(&КонецПериода, "ДФ=dd.MM.yyyy").

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

Способ через вычисляемое поле и структуру отчета

Выясним еще один альтернативный вариант создания заголовка средствами схемы компоновки данных. Он удобен тем, что не требует ручной отрисовки макета ячеек.

  1. Откроем вкладку Вычисляемые поля в СКД.
  2. Добавим новое поле с путем к данным ЗаголовокСДатой.
  3. В колонке Выражение укажем формулу конкатенации строки и отформатированной даты:
    "Отчет по площадям на " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy")
    (или с использованием параметра схемы: "Отчет по площадям на " + Формат(&КонецПериода, "ДФ=dd.MM.yyyy")).
  4. На вкладке Настройки в структуре отчета добавим группировку по полю ЗаголовокСДатой на самый верхний уровень, разместив основные данные отчета вложенной веткой или параллельной группировкой ниже.
  5. В персональных настройках этой группировки снимем вывод итогов и установим Макет оформления в значение Без оформления.

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

← На главную