Почему новая роль не добавляется пользователям в пользовательском режиме 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработчики 1С часто сталкиваются с ситуацией, когда после добавления новой роли в Конфигураторе и назначения её пользователю через профили групп доступа в режиме «1С:Предприятие», роль фактически не начинает работать. При проверке списка ролей пользователя непосредственно в Конфигураторе оказывается, что заветная «галочка» напротив новой роли просто не установлена. В данной статье мы подробно разберем, почему возникает этот разрыв между пользовательским режимом и Конфигуратором, и изучим пошаговые алгоритмы решения этой проблемы для конфигураций на базе Библиотеки стандартных подсистем (БСП).

Причина возникновения проблемы: Механизмы синхронизации БСП

В современных конфигурациях 1С управление правами доступа осуществляется через подсистему «Управление доступом» (входящую в состав БСП). Эта подсистема выступает посредником между настройками в пользовательском режиме (профили и группы доступа) и реальными правами в Конфигураторе. Когда вы добавляете роль в Конфигураторе, система «1С:Предприятие» не узнает о ней мгновенно. Для того чтобы роль стала доступна для выбора в профилях и корректно назначалась пользователям, должны обновиться внутренние регистры и справочники системы.

Рассмотрим основные факторы, препятствующие автоматическому назначению ролей:

  1. Отсутствие записи о новой роли в справочнике ИдентификаторыОбъектовМетаданных.
  2. Особенности логики БСП в отношении пользователей с «Полными правами» (Администраторов).
  3. Очередь отложенного обновления прав доступа.
  4. Кэширование данных сеанса и параметров доступа.

Проанализируем каждое решение по порядку.

Решение 1. Обновление справочника идентификаторов объектов метаданных

Это самый распространенный и эффективный метод. Справочник ИдентификаторыОбъектовМетаданных хранит информацию о структуре вашей конфигурации. Если в нем нет записи о новой роли, БСП просто «не видит» её при попытке назначить права пользователю.

Разберем, как принудительно обновить эти данные. Для этого можно воспользоваться специальным ключом запуска 1С. Закройте программу и запустите её снова, добавив в строку запуска (в параметрах информационной базы) следующий код:

/C ЗапуститьОбновлениеИнформационнойБазы

Этот ключ инициирует выполнение всех процедур обновления, предусмотренных при изменении версии конфигурации, включая актуализацию метаданных. Однако этот процесс может занять значительное время в больших базах.

Если вы хотите обновить только идентификаторы, мы можем выполнить это программно. Откройте консоль кода или создайте внешнюю обработку и выполните следующий фрагмент:


Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);

Параметры (Истина, Истина) означают, что система должна выполнить полное обновление, даже если она считает, что данные актуальны. После выполнения этого метода попробуйте снова перевыбрать роль в профиле групп доступа.

Решение 2. Использование обработки «Обновление вспомогательных данных»

В составе БСП поставляется специализированный инструмент для исправления подобных проблем — внешняя обработка ОбновлениеВспомогательныхДанных.epf. Её можно найти на портале ИТС в составе дистрибутива БСП соответствующей версии.

Посмотрим на алгоритм работы с этой обработкой:

  1. Выясните версию БСП в вашей базе, заглянув в регистр сведений ВерсииПодсистем.
  2. Скачайте обработку именно для этой версии.
  3. Запустите обработку в режиме «1С:Предприятие».
  4. В интерфейсе обработки вы увидите множество флажков. Если вы не уверены, какие данные нужно обновить, рекомендуется оставить все флажки по умолчанию, но обязательно убедитесь, что выбраны пункты, касающиеся прав доступа и идентификаторов метаданных.
  5. Нажмите «Выполнить обновление».

Это действие «протолкнет» изменения из Конфигуратора во все служебные таблицы БСП.

Решение 3. Нюансы для пользователей с административными правами

Выясним причину странного поведения системы в отношении администраторов. В БСП заложена оптимизация: если пользователю назначена роль ПолныеПрава (или он включен в предопределенную группу «Администраторы»), система может игнорировать добавление дополнительных ролей в его список в Конфигураторе. Логика проста: администратор и так может всё.

Однако, если вы в своем коде используете проверку РольДоступна("НоваяРоль"), то для администратора она вернет Ложь, так как физически в Конфигураторе она не отмечена. Чтобы обойти это ограничение, рекомендуется использовать программную проверку через функции БСП, которые «умнее» стандартных методов платформы:


Если УправлениеДоступом.ОбладаетПравом("НоваяРоль") Тогда
    // Код выполнится и для обычного пользователя с ролью, и для администратора
КонецЕсли;

Если же вам принципиально нужно, чтобы роль была прописана в Конфигураторе даже у администратора, придется внести изменения в общий модуль УправлениеДоступомСлужебный. Рассмотрим пример корректировки кода для БСП версии 3.1.9 и выше в процедуре ОбновитьРолиПользователей:


// ... код подготовки данных ...
#Удаление
Если Администраторы[ТекущийПользователь] <> Неопределено Тогда
    ТекущиеНовыеРоли = НовыеРоли;
    НовыеРоли = ТекущиеНовыеРоли.Скопировать(Новый Массив);
    Для Каждого КлючИЗначение Из ОбязательныеРолиАдминистратора Цикл
        НовыеРоли.Добавить().Роль = КлючИЗначение.Ключ;
    КонецЦикла;
    Для Каждого КлючИЗначение Из ДополнительныеРолиАдминистратора Цикл
        Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Ключ, "Роль") = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        НовыеРоли.Добавить().Роль = КлючИЗначение.Ключ;
    КонецЦикла;
КонецЕсли;
#КонецУдаления
// ... продолжение процедуры ...

Закомментировав или удалив блок очистки ролей для администраторов, вы заставите систему принудительно прописывать все назначенные роли в список ролей пользователя информационной базы. Также для сохранения назначенных прав можно использовать готовое решение для защиты ролей администраторов в БСП 3.

Решение 4. Проверка расширений конфигурации

Проанализируем ситуацию, если роль добавлена в расширении. Это усложняет задачу, так как расширения имеют собственный жизненный цикл метаданных. Убедитесь в следующем:

  1. В свойствах расширения установлен флаг «Использовать основные роли».
  2. Проверьте заполнение регистра Идентификаторы объектов расширений. При возникновении проблем часто помогает его полная очистка (через обработку удаления записей регистра) и последующий запуск обновления информационной базы.

Решение 5. Принудительная инициализация через профили

Иногда помогает «ручной толчок» механизма записи. Рассмотрим этот простой метод:

  1. Перейдите в справочник Профили групп доступа.
  2. Найдите нужный профиль, в который вы добавили новую роль.
  3. Снимите галочку с этой роли и нажмите Записать.
  4. Снова установите галочку и нажмите Записать и закрыть.

В момент записи профиля срабатывают обработчики БСП, которые проверяют изменения и пытаются синхронизировать состав ролей у всех пользователей, входящих в группы доступа с данным профилем.

Решение 6. Проверка фоновых заданий обновления прав

В последних версиях БСП расчет прав может выполняться в фоновом режиме (так называемое отложенное обновление доступа). Если ваша база большая, изменения могут вступить в силу не сразу, а по мере выполнения регламентных заданий. Для оперативного обновления прав без ожидания регламентных процедур подойдёт обработка для точечного пересчета прав доступа пользователей.

Проанализируем состояние очереди:

  1. Зайдите в раздел Администрирование — Обслуживание — Управление доступом.
  2. Найдите информацию о состоянии обновления прав доступа.
  3. Если там указано, что есть незавершенные задания, дождитесь их окончания или запустите их вручную.

Важное примечание: После того как роль успешно появилась в Конфигураторе, пользователю обязательно нужно перезапустить сеанс. Параметры сеанса, такие как установленные роли, кэшируются при старте системы и не обновляются «на лету» простым открытием форм.

Резюме

Для гарантированного добавления роли выполните последовательность действий: обновите справочник идентификаторов объектов метаданных (через код или ключ запуска), проверьте, не мешает ли логика «Администратора», и убедитесь, что фоновые задания по обновлению прав завершены. Эти шаги решают проблему в 99% случаев работы с конфигурациями на платформе 1С:Предприятие 8.3.

← На главную