При попытке добавить новую роль в расширение конфигурации разработчики нередко сталкиваются с ошибкой в режиме 1С:Предприятие при попытке открыть список полномочий, профилей или групп доступа: «Для объекта метаданных "Роль.ИмяРоли" не найден идентификатор в справочнике "Идентификаторы объектов метаданных" и регистре сведений "Идентификаторы объектов версий расширений"». Разберем причины возникновения этой ситуации и рассмотрим рабочие способы её решения.
Проанализируем механику работы подсистемы «Управление доступом» Библиотеки Стандартных Подсистем (БСП). В типовых решениях права назначаются не напрямую через роли в интерфейсе пользователя, а через профили и группы доступа (в 1С:Документооборот — через полномочия). Для контроля целостности прав БСП использует справочники ИдентификаторыОбъектовМетаданных, ИдентификаторыОбъектовРасширений и регистр сведений ИдентификаторыОбъектовВерсийРасширений.
Данная ошибка возникает по двум основным причинам:
Рассмотрим подробнее по шагам, как можно решить данную проблему или корректно обойти платформенные ограничения.
Параметр командной строки /C ЗапуститьОбновлениеИнформационнойБазы инициирует процедуры обновления данных конфигурации, однако для объектов расширений регистрация в ряде версий требует отдельного вызова.
Для принудительного обновления идентификаторов расширений выполним программный запуск служебных методов во внешней обработке:
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(Истина);
Константы.ПараметрыРаботыПользователей.СоздатьМенеджерЗначения().ОбновитьОбщиеПараметры();
Также можно воспользоваться специализированной внешней обработкой «Инструменты разработчика: Обновление вспомогательных данных», которая поставляется в составе дистрибутива БСП соответствующей версии конфигурации.
Если версия БСП не поддерживает полноценную регистрацию новых ролей расширений в справочниках доступа, наиболее надежным решением является заимствование существующей роли.
Разберем данный подход по шагам:
БазовыеПрава, БазовыеПраваПользователя или специализированную роль, права которой планируется расширить).ИдентификаторыОбъектовМетаданных основной конфигурации, подсистема управления доступом не вызывает критических ошибок при открытии полномочий.На некоторых релизах платформы собственная роль из расширения не отображается в списке доступных ролей пользователя в окне полномочий. В таком случае подключение прав пользователю можно реализовать программным путем через сеансовые процедуры или внешнюю обработку.
Посмотрим на пример программного добавления роли текущему пользователю информационной базы:
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
ИмяНовойРоли = "Роль1";
Если Метаданные.Роли.Найти(ИмяНовойРоли) <> Неопределено Тогда
РольОбъект = Метаданные.Роли[ИмяНовойРоли];
Если Не ПользовательИБ.Роли.Содержит(РольОбъект) Тогда
ПользовательИБ.Роли.Добавить(РольОбъект);
ПользовательИБ.Записать();
КонецЕсли;
КонецЕсли;
Если проект допускает снятие конфигурации с полной поддержки (с сохранением поддержки и возможностью редактирования), оптимальным архитектурным решением для старых версий БСП будет создание «каркаса» роли в основной конфигурации:
В этом случае основная конфигурация корректно регистрирует идентификатор метаданных роли, а вся прикладная настройка прав остается изолированной внутри расширения.