Как исправить ошибку «Поле объекта не обнаружено (СсылкаМетаданных)» при печати из расширения в УНФ 3.0?

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

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

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

Разбор причины возникновения ошибки

Для начала проанализируем ситуацию, в которой оказывается система. Ошибка в строке 260 общего модуля ПодключаемыеКоманды обычно выглядит так:


Если Источник.СсылкаМетаданных = Неопределено Тогда
    // ...
КонецЕсли;

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

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

Решение 1: Обновление конфигурации (рекомендуемый способ)

Как показывает практика и опыт разработчиков, наиболее эффективным решением является обновление конфигурации до актуальной версии. Рассмотрим, почему это важно. В версии УНФ 3.0.9 и выше используется обновленная версия БСП (3.1.9 и далее), в которой механизмы интеграции объектов расширений с подключаемыми командами были существенно переработаны.

Почему обновление решает проблему:

  1. Исправлены алгоритмы парсинга имен метаданных для объектов, имеющих префикс расширения.
  2. Улучшена работа справочника Идентификаторы объектов расширений, который теперь корректно синхронизируется при обновлении информационной базы.
  3. В модуле ПодключаемыеКоманды добавлены дополнительные проверки на существование свойств метаданных, что предотвращает «вылет» системы с критической ошибкой.

Решение 2: Проверка настроек в модуле менеджера документа

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

Во-первых, проверьте наличие процедуры ПриОпределенииНастроекПечати. Она должна быть экспортной и находиться в модуле менеджера вашего документа в расширении:


Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
    Настройки.ПриДобавленииКомандПечати = Истина;
    Настройки.ПриОпределенииПолучателей = Истина;
КонецПроцедуры

Во-вторых, убедитесь, что реализована процедура ДобавитьКомандыПечати. Без неё БСП не «подцепит» ваш макет в общее дерево команд. Пример реализации:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ВашаПечатнаяФорма";
    КомандаПечати.Представление = НСтр("ru = 'Печать документа из расширения'");
    КомандаПечати.ПроверкаПроведенности = Истина;
    КомандаПечати.Порядок = 1;
КонецПроцедуры

Важный нюанс: в некоторых версиях УНФ 3.0 для того, чтобы документ появился в списке макетов печатных форм, требуется явно добавить его в настройки в общем модуле УправлениеПечатьюПереопределяемый. Однако, если документ полностью находится в расширении, лучше использовать расширение этого модуля.

Решение 3: Принудительное обновление идентификаторов объектов

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

Попробуем выполнить следующие действия:

  1. Запустите сеанс 1С:Предприятие с параметром запуска /С ЗапуститьОбновлениеИнформационнойБазы.
  2. Если это не помогло, воспользуйтесь стандартной обработкой БСП «Обновление вспомогательных данных». Ее можно найти через «Все функции» (или «Функции для технического специалиста») в разделе «Обработки».
  3. В крайнем случае, можно программно инициировать обновление идентификаторов расширений, выполнив в консоли кода следующую команду:

Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();

После выполнения этой команды система перечитает состав метаданных всех активных расширений и заполнит недостающие связи. Это должно устранить неопределенность при обращении к СсылкаМетаданных.

Решение 4: Проверка принадлежности к подсистемам

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

Что нужно сделать:

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

Дополнительные рекомендации по работе в УНФ 3.0

В процессе работы с печатными формами в расширениях УНФ 3.0 мы рекомендуем придерживаться следующих правил, чтобы минимизировать ошибки:

Подводя итог, отметим: если вы столкнулись с ошибкой СсылкаМетаданных в УНФ версии ниже 3.0.9, наиболее стабильным решением будет обновление до версии 3.0.9.Х. Если же обновление невозможно, используйте ручное обновление справочника идентификаторов объектов расширений и тщательно проверяйте наличие всех экспортных процедур в модуле менеджера объекта. Это позволит БСП корректно инициализировать подключаемые команды и отобразить ваши макеты в общем списке.

← На главную