Как изменить заголовок формы отчета, использующего БСП, без правки типового кода?

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

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

Понимание архитектуры БСП

Прежде всего, давайте разберем, как БСП управляет заголовком. Механизм Варианты отчетов спроектирован так, чтобы пользователь мог гибко настраивать отчеты «под себя». Система принудительно устанавливает заголовок формы, опираясь на текущее представление варианта. Это обеспечивает единообразие интерфейса во всех конфигурациях. Попытки передать «внешний» заголовок через параметры формы при открытии обычно игнорируются, так как в событиях ПриСозданииНаСервере или ПриЗагрузкеНастроек БСП перезаписывает это свойство самостоятельно.

Решение 1: Использование представления варианта

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

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

Решение 2: Программная модификация в модуле объекта

Если специфика вашей задачи требует вывода данных, которые нецелесообразно хранить в представлении варианта, можно воспользоваться возможностями модуля объекта, предоставленными самой БСП. Рассмотрим пример реализации логики управления заголовком через процедуру ОпределитьНастройкиФормы.

В модуле объекта вашего отчета вы можете перехватить управление заголовком через экспортную процедуру:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
КонецПроцедуры

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

Процедура УстановитьЗаголовокОтчета(Форма)
    МетаданныеОбъекта = Метаданные;
    Заголовок = Форма.ОтчетНаименованиеТекущегоВарианта;
    Заголовок = ?(ЗначениеЗаполнено(Заголовок), Заголовок + " ", "") + ?(ЗначениеЗаполнено(МетаданныеОбъекта.Комментарий), "(" + МетаданныеОбъекта.Комментарий + ")", "");
    Форма.ОтчетНаименованиеТекущегоВарианта = Заголовок;
КонецПроцедуры

Этот подход позволяет динамически конструировать заголовок, например, добавляя к нему комментарий из метаданных объекта. При этом мы не правим код типовой формы, а используем штатный механизм событий БСП.

Решение 3: Настройки СКД

Иногда путают заголовок окна и заголовок самого табличного документа. Если ваша задача — изменить отображение имени отчета внутри области вывода, рассмотрите настройки системы компоновки данных (СКД).

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку Настройки.
  3. Найдите пункт Другие настройки.
  4. Установите свойство Заголовок.

Обратите внимание: этот параметр влияет только на отображение заголовка внутри выведенного отчета, но не на заголовок самой формы приложения или закладки в окне 1С.

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

Проанализировав ситуацию, мы выяснили следующее:

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

← На главную