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