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