В процессе разработки на платформе 1С:Предприятие 8.3 с использованием Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с ситуацией, когда новые объекты (документы, справочники, регистры), созданные в расширении, не появляются в справочнике ИдентификаторыОбъектовМетаданных. Это приводит к серьезным проблемам: невозможности настроить права доступа (RLS), сбоям в работе отчетов, подсистемы печати и, что самое критичное, к невозможности завершить обновление информационной базы. Рассмотрим подробно, почему это происходит и как решить данную проблему.
Проанализируем архитектуру системы. Справочник ИдентификаторыОбъектовМетаданных предназначен для хранения ссылок на объекты конфигурации, чтобы на них можно было ссылаться в данных (например, в регистрах прав или настройках). В старых версиях БСП (ветки 2.4 и ниже) этот механизм был жестко ориентирован только на основную конфигурацию. Разберем основные причины ограничений:
Часто проблема проявляется не сразу, а при попытке обновления. Разберем ситуацию: вы добавили документ в расширение, все работает, но при запуске системы с параметром /C ЗапуститьОбновлениеИнформационнойБазы происходит аварийное завершение. Это происходит потому, что подсистема «Обновление информационной базы» вызывает метод:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Если в системе есть объекты, на которые ссылаются другие механизмы, но которых нет в справочнике идентификаторов, возникает конфликт. Программа пытается инициализировать параметры сеанса, обращается к пустому идентификатору и «падает» с критической ошибкой.
Если ваша конфигурация (например, УТ 11.3 или ранние версии УТ 11.4) использует старую БСП, у вас есть два основных пути:
Вариант 1: Перенос объектов в основную конфигурацию.
Как ни прискорбно, это самый стабильный метод для старых систем. Если документ или регистр должен полноценно участвовать в бизнес-логике (права доступа, проведение, участие в подписках БСП), его лучше создать непосредственно в основной конфигурации. Расширение в данном случае лучше использовать только для кастомизации форм и логики.
Вариант 2: Использование «пустышек» (не рекомендуется для продакшена).
Некоторые разработчики используют методику создания пустого объекта с тем же именем в основной конфигурации, запускают обновление идентификаторов, а затем удаляют объект, оставляя расширение. Однако это крайне рискованный путь, который может привести к нарушению уникальности GUID и необратимой порче данных в справочнике идентификаторов.
В современных реалиях процесс автоматизирован, но иногда требует «ручного толчка». Проанализируем шаги, которые необходимо выполнить, чтобы объекты расширения корректно зарегистрировались:
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновления();
ПараметрыОбновления.ВыполнятьТолькоВПотокеОбновления = Ложь;
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, ПараметрыОбновления);
Обратите внимание на первый параметр Истина — он указывает системе, что нужно принудительно перечитать метаданные, включая расширения.
Если вы добавили объект в расширение и пытаетесь добавить его в справочник идентификаторов вручную (через код), вы можете столкнуться с ошибкой: «Объект содержит изменяемые данные и должен быть добавлен как источник в подписки на события».
Выясним причину: БСП следит за тем, чтобы при изменении метаданных идентификаторы обновлялись автоматически. Для этого используются подписки. Но подписка из основной конфигурации не видит объект расширения.
Как поступить:
В современных версиях платформы создайте собственную подписку на событие прямо в расширении. В качестве источника укажите ваш новый объект из этого же расширения, а в качестве обработчика — процедуру из модуля расширения. Это позволит соблюсти требования целостности данных, не ломая логику основной конфигурации.
Иногда идентификаторы не появляются из-за банального кэширования. Рассмотрим алгоритм «чистки» для исправления ситуации:
reg_1541 на сервере 1С).AllowExecuteScheduledJobs -Force.Мы проанализировали проблему добавления идентификаторов объектов расширений и пришли к выводу, что основной корень зла кроется в версиях БСП. Если вы работаете на устаревших редакциях (УТ 11.3, ЗиКГУ 3.1.3), добавление новых типов данных через расширения будет постоянно вызывать конфликты со справочником идентификаторов. В таких случаях рекомендуется миграция на актуальные версии БСП (3.1+) или перенос структуры данных в основную конфигурацию. В современных же версиях достаточно следить за актуальностью ролей и корректно вызывать процедуру ОбновитьДанныеСправочника.