При разработке в среде 1С:Управление нашей фирмой 3.0 программисты часто сталкиваются с необходимостью добавления новых документов через расширения. Одной из ключевых задач при этом является реализация механизмов печати с использованием Библиотеки стандартных подсистем (БСП). Однако стандартный алгоритм подключения печатных форм, который отлично работает в основной конфигурации, может давать сбои в расширении. Типичная ситуация: документ создан, макет прописан, команда печати в самом документе работает, но при попытке открыть список всех макетов или при инициализации подключаемых команд в форме списка возникает критическая ошибка: Поле объекта не обнаружено (СсылкаМетаданных).
В этой статье мы подробно проанализируем, почему возникает эта ошибка в модуле ПодключаемыеКоманды, разберем механизмы взаимодействия расширений с БСП и выясним, какие шаги необходимо предпринять для корректной работы системы.
Для начала проанализируем ситуацию, в которой оказывается система. Ошибка в строке 260 общего модуля ПодключаемыеКоманды обычно выглядит так:
Если Источник.СсылкаМетаданных = Неопределено Тогда
// ...
КонецЕсли;
Проблема заключается в том, что объект Источник (которым чаще всего является форма документа или списка) не может предоставить свойство СсылкаМетаданных. В контексте БСП это происходит, когда подсистема пытается определить идентификатор объекта метаданных для формирования состава команд (печать, заполнение, отчеты). Если документ добавлен в расширении, БСП должна корректно зарегистрировать его в справочнике Идентификаторы объектов метаданных или его расширении Идентификаторы объектов расширений.
Если версия БСП в вашей конфигурации (например, как в УНФ 3.0.4.45 — версия 3.1.8) содержит недоработки в части обработки метаданных расширений, механизм сопоставления объектов «ломается». Система ищет данные не в том справочнике или не находит актуальный кэш идентификаторов, что и приводит к обращению к несуществующему свойству объекта.
Как показывает практика и опыт разработчиков, наиболее эффективным решением является обновление конфигурации до актуальной версии. Рассмотрим, почему это важно. В версии УНФ 3.0.9 и выше используется обновленная версия БСП (3.1.9 и далее), в которой механизмы интеграции объектов расширений с подключаемыми командами были существенно переработаны.
Почему обновление решает проблему:
Идентификаторы объектов расширений, который теперь корректно синхронизируется при обновлении информационной базы.ПодключаемыеКоманды добавлены дополнительные проверки на существование свойств метаданных, что предотвращает «вылет» системы с критической ошибкой.Если обновление в данный момент невозможно, нам необходимо убедиться, что все требования БСП по регистрации печатных форм выполнены в модуле менеджера документа внутри расширения. Проанализируем обязательные процедуры.
Во-первых, проверьте наличие процедуры ПриОпределенииНастроекПечати. Она должна быть экспортной и находиться в модуле менеджера вашего документа в расширении:
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
Настройки.ПриДобавленииКомандПечати = Истина;
Настройки.ПриОпределенииПолучателей = Истина;
КонецПроцедуры
Во-вторых, убедитесь, что реализована процедура ДобавитьКомандыПечати. Без неё БСП не «подцепит» ваш макет в общее дерево команд. Пример реализации:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ВашаПечатнаяФорма";
КомандаПечати.Представление = НСтр("ru = 'Печать документа из расширения'");
КомандаПечати.ПроверкаПроведенности = Истина;
КомандаПечати.Порядок = 1;
КонецПроцедуры
Важный нюанс: в некоторых версиях УНФ 3.0 для того, чтобы документ появился в списке макетов печатных форм, требуется явно добавить его в настройки в общем модуле УправлениеПечатьюПереопределяемый. Однако, если документ полностью находится в расширении, лучше использовать расширение этого модуля.
Выясним причину, по которой справочник идентификаторов может «не видеть» ваш новый документ. БСП хранит структуру метаданных в специальных справочниках для быстрого доступа. При добавлении документа в расширение автоматическое обновление данных не всегда срабатывает корректно.
Попробуем выполнить следующие действия:
/С ЗапуститьОбновлениеИнформационнойБазы.
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();
После выполнения этой команды система перечитает состав метаданных всех активных расширений и заполнит недостающие связи. Это должно устранить неопределенность при обращении к СсылкаМетаданных.
Рассмотрим еще один неочевидный момент. Подсистема печати БСП при построении списка макетов фильтрует объекты по их принадлежности к подсистемам. Если ваш документ в расширении не включен ни в одну подсистему (ни в основную, ни в созданную в расширении), он может игнорироваться некоторыми механизмами отображения.
Что нужно сделать:
В процессе работы с печатными формами в расширениях УНФ 3.0 мы рекомендуем придерживаться следующих правил, чтобы минимизировать ошибки:
ТипПараметраКоманды) указан ваш новый документ из расширения.Подводя итог, отметим: если вы столкнулись с ошибкой СсылкаМетаданных в УНФ версии ниже 3.0.9, наиболее стабильным решением будет обновление до версии 3.0.9.Х. Если же обновление невозможно, используйте ручное обновление справочника идентификаторов объектов расширений и тщательно проверяйте наличие всех экспортных процедур в модуле менеджера объекта. Это позволит БСП корректно инициализировать подключаемые команды и отобразить ваши макеты в общем списке.