Как сформировать внешний отчет в 1С:ERP без ошибки идентификации объектов метаданных?

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

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

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

Выясняем причину: почему БСП блокирует внешние отчеты?

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

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

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


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

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

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

  1. Откроем Конфигуратор нашей базы данных 1С:ERP.
  2. Перейдем в меню Конфигурация — Расширения конфигурации и создадим новое расширение (или откроем существующее, если оно уже используется для доработок).
  3. В дереве метаданных основной конфигурации найдем интересующий нас типовой отчет.
  4. Нажмем на него правой кнопкой мыши и выберем пункт Добавить в расширение.
  5. Теперь отчет находится внутри вашего расширения. Вы можете свободно изменять схему компоновки данных (СКД), добавлять новые макеты, переопределять формы и дописывать программный код.

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


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

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

Проанализируем, как подготовить внешний отчет к корректной интеграции:

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

Посмотрим на пример реализации этой функции:


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

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

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

После добавления этого кода выполним следующие действия в режиме Предприятия:

  1. Перейдем в раздел НСИ и администрирование — Администрирование — Печатные формы, отчеты и обработки.
  2. Установим флаг напротив опции Дополнительные отчеты и обработки и перейдем по одноименной ссылке.
  3. Создадим новый элемент, выберем наш файл отчета на диске. Система автоматически считает параметры из функции СведенияОВнешнейОбработке.
  4. Укажем разделы интерфейса, в которых должен отображаться наш отчет, и настроим права доступа для пользователей.
  5. Сохраним элемент справочника. Теперь запуск отчета из указанных разделов ERP будет проходить через механизмы БСП в штатном режиме, без вызова ошибок метаданных.

Важное примечание: Чтобы пользователи могли сохранять собственные варианты настроек этого внешнего отчета, обязательно откройте свойства корневого элемента внешнего отчета в Конфигураторе и в поле ХранилищеВариантов укажите стандартное системное хранилище БСП — ХранилищеВариантовОтчетов.


Способ 3. Адаптация кода и перенос процедур из модуля менеджера

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

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

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

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


Способ 4. Специальный механизм подмены для Регламентированных отчетов

В случае, если вы дорабатываете сложный регламентированный отчет (например, декларацию по НДС, налогу на прибыль или отчетность в фонды), в 1С:ERP и других типовых конфигурациях со встроенной подсистемой «1С-Отчетность» уже предусмотрен готовый штатный инструмент для безопасной подмены встроенных алгоритмов внешними файлами.

Проанализируем, как использовать этот функционал:

  1. Сохраните изменяемый регламентированный отчет в файл формата .erf на жесткий диск и внесите в него необходимые правки в Конфигураторе.
  2. Запустите информационную базу 1С:ERP в режиме «1С:Предприятие».
  3. Перейдите в справочник Регламентированные отчеты (его можно найти через функции технического специалиста или через раздел регламентированного учета).
  4. Найдите в списке нужную форму отчетности и откройте ее карточку настроек.
  5. Обратите внимание на переключатель источника формирования отчета (поле «Использовать»). По умолчанию там установлено значение «Встроенный отчет».
  6. Переключите тумблер в положение Файл.
  7. В появившемся поле выбора укажите путь к вашему модифицированному внешнему файлу .erf на диске.

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

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

← На главную