Как установить заголовок отчета в СКД?

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

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

Способ 1. Программная установка заголовка через параметры вывода

Наиболее распространенный и универсальный способ — изменение свойств ПараметрыВывода в компоновщике настроек. Этот подход позволяет динамически сформировать строку заголовка непосредственно перед компоновкой результата.

Разберем пример кода в процедуре ПриКомпоновкеРезультата модуля объекта отчета:


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

    // Задаем текст заголовка
    ЭлементЗаголовок = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("Заголовок");
    Если ЭлементЗаголовок <> Неопределено Тогда
        ЭлементЗаголовок.Использование = Истина;
        ЭлементЗаголовок.Значение = "Отчет по заказам от: " + Формат(ТекущаяДата(), "ДЛФ=DD");
    КонецЕсли;

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

Посмотрим на аналогичный пример при формировании отчета из модуля формы (например, в обработчике кнопки «Сформировать»):


Процедура ДействияФормыСформировать(Кнопка)

    // Установка параметров периода
    ПараметрНач = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНач");
    ПараметрНач.Значение = НачалоПериода;
    ПараметрНач.Использование = Истина;

    ПараметрКон = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаКон");
    ПараметрКон.Значение = КонецПериода;
    ПараметрКон.Использование = Истина;

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

    ЭлементыФормы.Результат.Очистить();
    ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);

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

Важный нюанс: поиск параметра в коллекции вывода по имени поддерживается как по русскому наименованию "Заголовок", так и по английскому "Title". Избегайте обращения к параметрам по индексу (например, Элементы[11]), так как порядок параметров в платформе 1С может меняться.

Способ 2. Вывод заголовка через дополнительный макет шапки

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

Проанализируем код вывода шапки вручную:


// Очищаем табличный документ
ЭлементыФормы.Результат.Очистить();

// Получаем доп. макет с подготовленной шапкой
Макет = ОтчетОбъект.ПолучитьМакет("Макет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

// Заполняем параметры шапки
ОбластьЗаголовок.Параметры.ДатаОтчета = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
ОбластьЗаголовок.Параметры.Организация = ЭлементыФормы.Организация.Значение;

// Выводим шапку в результат
ЭлементыФормы.Результат.Вывести(ОбластьЗаголовок);

// Выполняем стандартную компоновку отчета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Способ 3. Создание заголовка средствами макетов СКД (без кода)

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

Рассмотрим порядок настройки по шагам:

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

Как динамически изменить наименование варианта отчета?

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


ВариантНастроек = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Основной");
Если ВариантНастроек <> Неопределено Тогда
    ВариантНастроек.Представление = "Продажи за " + Формат(ТекущаяДата(), "ДФ='ММММ yyyy'");
КонецЕсли;

Резюме и рекомендации

Выясним, какой способ выбрать в конкретной ситуации:

← На главную