При доработке типовых конфигураций на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией: в конфигураторе создан новый документ и новая роль с полным набором прав на него, роль назначена пользователю, однако в режиме «1С:Предприятие» пользователь не видит документ в интерфейсе или получает ошибку нарушения прав доступа. При этом, если выдать права через типовую роль (например, БазовыеПрава), документ становится доступным.
Разберем детально, почему это происходит, как устроена подсистема управления доступом в типовых решениях на базе Библиотеки стандартных подсистем (БСП) и какими способами можно быстро решить данную проблему.
В типовых конфигурациях (таких как 1С:Бухгалтерия предприятия 3.0, 1С:ERP, 1С:Управление торговлей 11 и др.) назначение прав работает не напрямую через платформенные роли, а через механизмы подсистемы «Управление доступом» БСП. Проанализируем ключевые факторы, влияющие на доступность новых объектов:
ИдентификаторыОбъектовМетаданных. Если в конфигурацию добавляется новая роль или новый объект, БСП не видит их до тех пор, пока не будет выполнена процедура сопоставления и актуализации данных справочника.Чтение, Добавление и Редактирование.Самый быстрый и надежный способ инициализировать все вспомогательные таблицы и зарегистрировать новые метаданные в БСП — запустить сеанс с ключом обновления. Рассмотрим порядок действий:
/ЗапуститьОбновлениеИнформационнойБазы.Если монопольный перезапуск базы невозможен или неудобен, выполним процедуру обновления программно через внешнюю обработку или консоль кода под учетной записью администратора.
Посмотрим на пример кода, инициирующего обновление идентификаторов метаданных и параметров работы пользователей:
// Принудительное обновление идентификаторов объектов метаданных БСП
ПараметрыОбновления = Новый Структура;
ПараметрыОбновления.Вставить("ВыгружатьМетаданные", Истина);
ПараметрыОбновления.Вставить("Рекурсивно", Истина);
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина, Ложь);
// Актуализация кэша параметров доступа пользователей
ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей();
После выполнения этого кода подсистема управления доступом зафиксирует появление новой роли и нового документа, после чего права вступят в силу.
В типовых конфигурациях доступно штатное обновление идентификаторов без написания программного кода. Выполним следующие шаги:
Чтобы избежать подобных ошибок при дальнейшей разработке, разберем рекомендуемый регламент добавления прав в типовые базы:
Чтение, Добавление, Изменение, но и Просмотр, Интерактивное добавление, а также право Чтение на все зависимые справочники, реквизиты которых используются в документе.Просмотр на эту подсистему.ИдентификаторыОбъектовМетаданных одним из описанных выше способов.