В процессе разработки и поддержки конфигураций на платформе 1С:Предприятие 8.3 (особенно в типовых решениях, таких как Управление торговлей, ERP, Комплексная автоматизация или Бухгалтерия предприятия) часто возникает необходимость кастомизировать стандартный отчет. Самый простой и безопасный способ сделать это, не снимая конфигурацию с поддержки, — сохранить типовой отчет как внешний (в формате .erf), внести изменения и подключить его пользователям.
Однако при попытке открыть такой отчет через меню «Файл — Открыть» и нажать кнопку «Сформировать», разработчики часто сталкиваются с неприятной ошибкой: «Неизвестный тип объекта метаданных ВнешнийОтчет.[ИмяОтчета]» или «Объект метаданных не найден по полному имени...». В этой статье мы подробно разберем, почему возникает эта проблема и как ее эффективно решить тремя разными способами.
Выясним первопричину такого поведения платформы и программных модулей.
В современных конфигурациях 1С, построенных на базе БСП (Библиотеки стандартных подсистем), механизмы работы с отчетами сильно унифицированы. Это дает множество преимуществ (управление вариантами отчетов, рассылки, общие настройки), но накладывает жесткие ограничения на использование внешних файлов. Проблема кроется в следующих факторах:
ОбщаяФорма.ФормаОтчета. Эта форма жестко завязана на метаданные конфигурации.ВариантыОтчетов) пытаются определить контекст выполнения. Они ищут объект в коллекции Метаданные.Отчеты. Так как наш отчет запущен как внешний, платформа определяет его тип как ВнешнийОтчет.ИмяВашегоОтчета. Общие модули конфигурации не находят этот тип в метаданных и выдают ошибку.Отчет или Объект) имеет тип ОтчетОбъект.[ИмяТиповогоОтчета]. Когда мы сохраняем отчет как внешний, этот тип реквизита становится недоступным для внешнего файла, что приводит к конфликту типов данных при инициализации формы на сервере.Проанализируем три практических метода решения этой проблемы в зависимости от ваших задач.
---
Если вам необходимо запускать отчет напрямую через меню «Файл — Открыть» и при этом крайне важно сохранить оригинальный интерфейс формы типового отчета, выполните следующие шаги:
Шаг 1. Перенос формы в тело внешнего отчета
Если в свойствах вашего внешнего отчета в поле «Основная форма отчета» пусто или указана общая форма конфигурации, нам необходимо создать локальную форму. Для этого скопируйте ОбщуюФорму.ФормаОтчета из конфигурации (раздел «Общие — Общие формы») и вставьте ее в ветку «Формы» вашего внешнего отчета. Назначьте ее основной формой отчета.
Шаг 2. Корректировка основного реквизита формы
Отчет или Объект).ОтчетОбъект.[ИмяВстроенногоОтчета].ВнешнийОтчетОбъект.[ИмяВашегоВнешнегоОтчета]. Это ключевой шаг, который устраняет конфликт типов на уровне платформы.Шаг 3. Адаптация кода формы под работу вне БСП
Посмотрим на пример кода в модуле формы. Нам нужно заглянуть в процедуру ПриСозданииНаСервере. В ней содержатся вызовы процедур БСП, которые и вызывают ошибку поиска метаданных.
Найдите и закомментируйте строки, обращающиеся к общему модулю вариантов отчетов. Пример кода, который нужно локализовать или отключить:
// Пример стандартного вызова БСП, который нужно закомментировать
// ВариантыОтчетов.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
Вместо этого можно добавить проверку, является ли отчет внешним, чтобы сохранить работоспособность стандартного механизма, когда это возможно:
Если ЭтоВнешнийОтчет() Тогда
// Альтернативная упрощенная инициализация формы без БСП
СтандартнаяОбработка = Ложь;
КонецЕсли;
---
Если отчет предназначен для постоянной работы пользователей в информационной базе, его не нужно открывать через «Файл — Открыть». БСП предоставляет штатный механизм для интеграции внешних отчетов, при котором система сама корректно инициализирует контекст и не выдает ошибок метаданных.
Для реализации этого способа рассмотрим подробнее процедуру интеграции:
Шаг 1. Добавление функции регистрации в модуль объекта
Откройте модуль объекта вашего внешнего отчета и добавьте туда стандартную экспортную функцию СведенияОВнешнейОбработке. Этот код сообщает системе, как именно нужно зарегистрировать данный отчет в интерфейсе:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = "Внешний отчет: Задолженность поставщикам по срокам";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
// Создание команды для открытия отчета
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Открыть внешний отчет";
НоваяКоманда.Идентификатор = "ОткрытьОтчет";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипЗапускаОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Шаг 2. Загрузка отчета в пользовательском режиме
.erf).При таком запуске БСП берет на себя управление формой, подменяет контекст метаданных, и отчет формируется без каких-либо ошибок.
---
Если ваша цель — просто доработать алгоритм запроса, добавить новые поля или изменить группировки в схеме компоновки данных, лучшим решением будет отказаться от переноса «тяжелой» программной логики управляемой формы типового отчета.
Разберем этот процесс по шагам:
ОсновнаяСхемаКомпоновкиДанных)..xml). Также вы можете просто скопировать схему через буфер обмена, выделив ее и нажав сочетание клавиш Ctrl+C.Ctrl+V для вставки).Такой отчет будет открываться моментально через «Файл — Открыть», в нем гарантированно не будет устаревших связей с модулями БСП, и вы сможете беспрепятственно отлаживать запросы, параметры и настройки вывода данных.
Используя предложенные методики, вы сможете легко справляться с ограничениями БСП и разрабатывать удобные внешние отчеты для любых конфигураций 1С.