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