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