Как работает макрос %ВалютаОтчета% в заголовке отчета СКД и как настроить динамический заголовок?

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

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

Почему работает %ВалютаОтчета% и не работают произвольные параметры

Проанализируем поведение платформы и типовых конфигураций:

  1. Ограничение платформы СКД: В стандартной схеме компоновки данных поле Заголовок в параметрах вывода представляет собой обычную статическую строку. Сама платформа 1С:Предприятие не умеет автоматически подставлять значения параметров в это поле (в отличие от макетов компоновки данных).
  2. Прикладной макроподстановочный механизм: Конструкция %ВалютаОтчета% — это специальный текстовый маркер, внедренный разработчиками типовых конфигураций. При формировании отчета срабатывает процедура общего модуля (например, функция СтруктураЗаголовковВалют), которая находит в тексте заголовка данную подстроку и заменяет ее на фактическое наименование выбранной валюты (регламентированной, управленческой или валюты взаиморасчетов).
  3. Отсутствие поддержки произвольных имен: Типовой алгоритм проверяет только строго определенный список зарезервированных макросов. Если указать в заголовке произвольный текст вроде %МойПараметр% или [Валюта], алгоритм его проигнорирует, и строка останется без изменений.
  4. Особенности отладки: Поскольку формирование отчетов выполняется в фоновых заданиях на сервере, точка останова в процедурах формирования заголовка сработает только при включенной отладке фоновых заданий в конфигураторе.

Вариант 1. Использование макетов СКД (без программирования)

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

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

Вариант 2. Программное формирование заголовка в модуле отчета

Если требуется вычислить заголовок по сложной бизнес-логике или динамически переопределить стандартный параметр вывода Title перед формированием, используем обработчик ПриКомпоновкеРезультата в модуле объекта отчета.

Посмотрим на пример кода, позволяющего динамически изменить системный заголовок:


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

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

← На главную