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