При разработке в конфигурации Зарплата и управление персоналом 3.1 программисты часто сталкиваются с необходимостью доработать типовой отчет, например, СправкаОРасчетахСФизическимЛицом. Казалось бы, задача тривиальная: скопировать отчет в дерево конфигурации или расширение, изменить имя и внести правки. Однако на практике возникают сложности: в новом отчете может перестать отображаться стандартный параметр Период в шапке формы, хотя в оригинальном отчете он присутствует. В этой статье мы подробно разберем, почему это происходит и как правильно зарегистрировать отчет в механизмах БСП (Библиотеки стандартных подсистем), чтобы все пользовательские настройки работали корректно.
В типовых конфигурациях на платформе 1С 8.3 большинство отчетов строятся на базе универсальной формы отчета БСП. Эта форма динамически формирует элементы управления на основании настроек СКД (Схемы компоновки данных) и программных описаний в модулях. Когда мы просто копируем отчет, система перестает ассоциировать его с предопределенными алгоритмами, которые управляют видимостью параметров.
Рассмотрим ситуацию: мы скопировали отчет, указали в свойстве ХранилищеВариантов объект ХранилищеВариантовОтчетов, проверили вкладку "Параметры" в СКД. В типовом отчете параметр Период может быть даже скрыт (снята галочка "Доступность"), но на форме он есть. Это происходит потому, что БСП программно выводит его, используя механизмы расширения формы отчета. Чтобы наш новый отчет заработал так же, нужно выполнить ряд шагов по его "легализации" в системе.
Первым делом необходимо убедиться, что система "увидела" новый объект метаданных. Все механизмы БСП завязаны на справочник ИдентификаторыОбъектовМетаданных. Если вы добавили отчет, а справочник не обновился, программные вызовы будут возвращать пустые значения или ошибки.
Проанализируем способ принудительного обновления. Для этого можно запустить базу с параметром командной строки:
/c ЗапуститьОбновлениеИнформационнойБазы
Или выполнить программный код в консоли кода:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Это позволит системе сопоставить ваш новый отчет с уникальным идентификатором, который будет использоваться в подсистеме вариантов отчетов.
Даже после обновления идентификаторов отчет может работать некорректно, если он не включен в списки "доверенных" отчетов, которые должны обрабатываться подсистемой ВариантыОтчетов в особом режиме. В ЗУП 3 за это отвечают функции в общем модуле ОтчетыВызовСервера.
Выясним причину: если ваш отчет не зарегистрирован, функция НастройкиОтчета в общем модуле ВариантыОтчетов может не найти ваш вариант, и структура настроек останется пустой. Чтобы это исправить, необходимо создать расширение и переопределить (используя &После или &Вместо) две важные процедуры в модуле ОтчетыВызовСервера.
Разберем пример кода для расширения:
&После("СписокОтчетовПоддерживаемыхПодсистемой")
Процедура ИмяРасширения_СписокОтчетовПоддерживаемыхПодсистемой(СписокОтчетов)
// Добавляем имя нашего нового отчета в общий список
СписокОтчетов.Добавить("ИмяВашегоНовогоОтчета");
КонецПроцедуры
&После("СписокОтчетовВсегдаВРежимеВариантыОтчетов")
Процедура ИмяРасширения_СписокОтчетовВсегдаВРежимеВариантыОтчетов(СписокОтчетов)
// Указываем, что отчет должен всегда использовать механизм вариантов
СписокОтчетов.Добавить("ИмяВашегоНовогоОтчета");
КонецПроцедуры
Важный нюанс: при добавлении в список убедитесь, что имя отчета совпадает с тем, которое указано в метаданных (с учетом префикса расширения, если отчет создан внутри расширения).
В современных версиях БСП важную роль играет модуль менеджера отчета. Именно там прописываются настройки того, как отчет будет выглядеть в интерфейсе. Проанализируем наличие процедуры НастроитьВариантыОтчетов. Рассмотрим типичный пример заполнения этой процедуры:
Процедура НастроитьВариантыОтчетов(Настройки, ОписаниеОтчета) Экспорт
ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, ОписаниеОтчета, "Основной");
ОписаниеВарианта.Описание = НСтр("ru = 'Справка о расчетах (своя)'");
ОписаниеВарианта.Размещение.Вставить(Метаданные.Подсистемы.Выплаты, "Выплаты");
КонецПроцедуры
Если эта процедура отсутствует или не содержит описания для вашего ключа варианта (например, "Основной"), БСП может применять настройки по умолчанию, которые скрывают определенные параметры СКД.
Если после всех регистраций период все равно не появился, следует заглянуть в модуль формы или модуль объекта, где может вызываться процедура ОпределитьНастройкиФормы. В типовых отчетах через эту процедуру можно явно управлять составом доступных полей в шапке.
Посмотрим на пример установки настроек периода:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
// Здесь можно указать, что период должен быть всегда доступен в шапке
Настройки.ВыводитьПараметры = Истина;
Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
КонецПроцедуры
Эта процедура связывает настройки СКД и визуальное представление формы. Когда пользователь открывает отчет, система вызывает ПриЗагрузкеПользовательскихНастроекНаСервере, где и происходит магия восстановления состояния формы.
Подведем итог. Для того чтобы успешно клонировать типовой отчет в ЗУП 3 с сохранением всех его функциональных особенностей (включая отображение периода), необходимо выполнить следующие действия:
ОтчетыВызовСервера, добавив его в списки поддерживаемых отчетов.ОпределитьНастройкиФормы.Использование механизмов расширений для изменения общих модулей БСП — это наиболее правильный и "чистый" путь, который позволит избежать проблем при последующих обновлениях конфигурации. Помните, что в типовых решениях визуализация параметров часто управляется программно, а не только через галочки в конструкторе СКД.