Почему после обновления БСП пропадают варианты отчетов и как их вернуть?

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

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

Причины возникновения проблемы

Механизм ВариантыОтчетов в БСП активно полагается на кэширование данных для обеспечения быстрого доступа к настройкам. Информация о том, какие отчеты доступны, какие у них есть варианты и в каких подсистемах они размещены, хранится в РегистрСведений.ПараметрыРаботыПрограммы.

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

Способ №1: Корректная регистрация отчетов в коде

Частой причиной является отсутствие или некорректное описание отчета в переопределяемом модуле. Если система не «видит» ваш отчет как объект, требующий специфических настроек, она будет игнорировать его при формировании списка. Разберем, как правильно прописать настройки в модуле ВариантыОтчетовПереопределяемый.

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

Рассмотрим пример правильной реализации в процедуре НастроитьВариантыОтчетов:


// В модуле ВариантыОтчетовПереопределяемый
ОписаниеОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ВашИмяОтчета);
ОписаниеОтчета.ОпределитьНастройкиФормы = Истина;

ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, ОписаниеОтчета, "ВашКлючВарианта");
ОписаниеВарианта.Описание = НСтр("ru = 'Описание вашего отчета'");
ОписаниеВарианта.ВидимостьПоУмолчанию = Истина;
ОписаниеВарианта.Размещение.Вставить(Метаданные.Подсистемы.ИмяПодсистемы);

После этого необходимо убедиться, что в модуле объекта самого отчета реализована процедура:


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

Без установки флага ПриСозданииНаСервере логика инициализации настроек, описанная в форме, просто не будет вызвана.

Способ №2: Очистка кэша через регистр сведений

Если программная регистрация выполнена верно, но отчет все равно не отображается, необходимо принудительно обновить кэш в РегистрСведений.ПараметрыРаботыПрограммы. Поскольку этот регистр является хранилищем ХранилищеЗначений, его содержимое часто скрыто от простого просмотра, и обычные методы обновления 1С не всегда могут его сбросить.

Порядок действий:

  1. Проанализируйте модуль менеджера регистра. Функция ХранимыеДанныеПараметраРаботыПрограммы показывает, что данные извлекаются через прямой запрос к регистру с использованием привилегированного режима.
  2. Для сброса данных можно воспользоваться универсальной обработкой Выгрузка и загрузка данных XML. Вы можете выгрузить содержимое регистра, удалить записи, относящиеся к подсистеме СтандартныеПодсистемы.ВариантыОтчетов, и загрузить их обратно, либо просто очистить эти записи.
  3. После удаления записей из регистра при следующем входе пользователя или обращении к списку отчетов БСП будет вынуждена пересобрать кэш, считав актуальные метаданные из конфигурации.

Важные замечания

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

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

← На главную