Как сделать внешний отчет из типового в 1С 8.3 и обойти ошибку «Неизвестный тип объекта метаданных»

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

В процессе разработки и поддержки конфигураций на платформе 1С:Предприятие 8.3 (особенно в типовых решениях, таких как Управление торговлей, ERP, Комплексная автоматизация или Бухгалтерия предприятия) часто возникает необходимость кастомизировать стандартный отчет. Самый простой и безопасный способ сделать это, не снимая конфигурацию с поддержки, — сохранить типовой отчет как внешний (в формате .erf), внести изменения и подключить его пользователям.

Однако при попытке открыть такой отчет через меню «Файл — Открыть» и нажать кнопку «Сформировать», разработчики часто сталкиваются с неприятной ошибкой: «Неизвестный тип объекта метаданных ВнешнийОтчет.[ИмяОтчета]» или «Объект метаданных не найден по полному имени...». В этой статье мы подробно разберем, почему возникает эта проблема и как ее эффективно решить тремя разными способами.

Выясним первопричину такого поведения платформы и программных модулей.

Почему возникает ошибка при сохранении типового отчета во внешний?

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

  1. Использование Общих форм БСП. Большинство типовых отчетов не имеют собственной уникальной формы. Вместо этого в свойствах отчета в качестве основной формы указана ОбщаяФорма.ФормаОтчета. Эта форма жестко завязана на метаданные конфигурации.
  2. Контроль типов в БСП. При запуске отчета общие модули БСП (например, подсистема ВариантыОтчетов) пытаются определить контекст выполнения. Они ищут объект в коллекции Метаданные.Отчеты. Так как наш отчет запущен как внешний, платформа определяет его тип как ВнешнийОтчет.ИмяВашегоОтчета. Общие модули конфигурации не находят этот тип в метаданных и выдают ошибку.
  3. Жесткая привязка типов в реквизитах. Если у отчета все-таки есть своя форма, то тип ее главного реквизита (обычно с именем Отчет или Объект) имеет тип ОтчетОбъект.[ИмяТиповогоОтчета]. Когда мы сохраняем отчет как внешний, этот тип реквизита становится недоступным для внешнего файла, что приводит к конфликту типов данных при инициализации формы на сервере.

Проанализируем три практических метода решения этой проблемы в зависимости от ваших задач.

---

Способ 1. Изменение типа основного реквизита формы и локализация (Быстрый метод)

Если вам необходимо запускать отчет напрямую через меню «Файл — Открыть» и при этом крайне важно сохранить оригинальный интерфейс формы типового отчета, выполните следующие шаги:

Шаг 1. Перенос формы в тело внешнего отчета

Если в свойствах вашего внешнего отчета в поле «Основная форма отчета» пусто или указана общая форма конфигурации, нам необходимо создать локальную форму. Для этого скопируйте ОбщуюФорму.ФормаОтчета из конфигурации (раздел «Общие — Общие формы») и вставьте ее в ветку «Формы» вашего внешнего отчета. Назначьте ее основной формой отчета.

Шаг 2. Корректировка основного реквизита формы

  1. Откройте редактор созданной формы внешнего отчета.
  2. Перейдите на вкладку «Реквизиты» (в правой части экрана).
  3. Найдите основной реквизит формы (он выделен жирным шрифтом, обычно называется Отчет или Объект).
  4. Откройте его свойства и обратите внимание на поле «Тип». Скорее всего, там указано значение ОтчетОбъект.[ИмяВстроенногоОтчета].
  5. Измените тип реквизита. Установите флажок на значении ВнешнийОтчетОбъект.[ИмяВашегоВнешнегоОтчета]. Это ключевой шаг, который устраняет конфликт типов на уровне платформы.

Шаг 3. Адаптация кода формы под работу вне БСП

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

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


// Пример стандартного вызова БСП, который нужно закомментировать
// ВариантыОтчетов.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);

Вместо этого можно добавить проверку, является ли отчет внешним, чтобы сохранить работоспособность стандартного механизма, когда это возможно:


Если ЭтоВнешнийОтчет() Тогда
    // Альтернативная упрощенная инициализация формы без БСП
    СтандартнаяОбработка = Ложь;
КонецЕсли;

---

Способ 2. Регистрация через механизм «Дополнительные отчеты и обработки» (Рекомендуемый способ)

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

Для реализации этого способа рассмотрим подробнее процедуру интеграции:

Шаг 1. Добавление функции регистрации в модуль объекта

Откройте модуль объекта вашего внешнего отчета и добавьте туда стандартную экспортную функцию СведенияОВнешнейОбработке. Этот код сообщает системе, как именно нужно зарегистрировать данный отчет в интерфейсе:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Наименование = "Внешний отчет: Задолженность поставщикам по срокам";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Создание команды для открытия отчета
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Открыть внешний отчет";
    НоваяКоманда.Идентификатор = "ОткрытьОтчет";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипЗапускаОткрытиеФормы();
    
    Возврат ПараметрыРегистрации;

КонецФункции

Шаг 2. Загрузка отчета в пользовательском режиме

  1. Запустите предприятие под правами администратора.
  2. Перейдите в раздел «НСИ и администрирование» — «Печатные формы, отчеты и обработки» — «Дополнительные отчеты и обработки».
  3. Нажмите кнопку «Добавить из файла» и укажите ваш внешний отчет (.erf).
  4. Настройте размещение отчета в нужных разделах командного интерфейса и укажите права доступа для пользователей.

При таком запуске БСП берет на себя управление формой, подменяет контекст метаданных, и отчет формируется без каких-либо ошибок.

---

Способ 3. Перенос Схемы компоновки данных (СКД) в чистый отчет (Самый надежный способ для разработки)

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

Разберем этот процесс по шагам:

  1. Создайте в конфигураторе абсолютно новый пустой внешний отчет (меню «Файл — Новый — Внешний отчет»).
  2. Откройте конфигурацию-донор, найдите нужный типовой отчет и раскройте его структуру.
  3. Найдите основную схему компоновки данных (обычно она называется ОсновнаяСхемаКомпоновкиДанных).
  4. Нажмите на ней правой кнопкой мыши и выберите пункт «Сохранить схему в файл» (сохраните в формате .xml). Также вы можете просто скопировать схему через буфер обмена, выделив ее и нажав сочетание клавиш Ctrl+C.
  5. Перейдите во вновь созданный внешний отчет, добавьте новую схему компоновки данных и загрузите сохраненный файл схемы (или нажмите Ctrl+V для вставки).
  6. Не создавайте форму отчета вручную. Оставьте поле «Основная форма» пустым. Платформа 1С автоматически сгенерирует стандартную форму на основе вашей СКД в момент открытия.

Такой отчет будет открываться моментально через «Файл — Открыть», в нем гарантированно не будет устаревших связей с модулями БСП, и вы сможете беспрепятственно отлаживать запросы, параметры и настройки вывода данных.

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

← На главную