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