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