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

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

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

Рассмотрим подробнее причины возникновения этой проблемы и разберем по шагам, как правильно актуализировать метаданные и настроить проверку прав в коде.

Причины проблемы в архитектуре БСП

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

  1. Справочник «Идентификаторы объектов метаданных»: Подсистема «Управление доступом» связывает роли, справочники, документы и другие объекты с элементами служебного справочника ИдентификаторыОбъектовМетаданных. Если после создания новой роли этот справочник не обновлен, система БСП не видит объект метаданных и не может сопоставить роль с профилями пользователей.
  2. Кэширование в регистрах сведений: Права пользователей кэшируются в специальных регистрах (например, Права ролей). Если профиль создается до обновления структуры метаданных, связи не формируются, и платформа не прописывает роль в учетную запись пользователя ПользовательИнформационнойБазы.
  3. Особая логика для полных прав: В подсистеме «Управление доступом» заложено правило: пользователям с полными правами (администраторам) дополнительные роли физически не назначаются. Подразумевается, что администраторам и так доступны все объекты. Из-за этого стандартный платформенный метод РольДоступна("ИмяРоли") для администратора возвращает Ложь, если не предусмотрена специальная обработка.

Способ 1. Обновление вспомогательных данных метаданных

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

Вариант А. Запуск программы с ключом обновления

Самый простой способ — запустить клиент «1С:Предприятие» с параметром командной строки:

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

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

Вариант Б. Использование обработки с диска/сайта ИТС

Для разработчиков на портале ИТС доступна специальная внешняя обработка: ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf. При её запуске в режиме «1С:Предприятие» выполняется принудительное переписывание и обновление идентификаторов объектов метаданных.

Вариант В. Выполнение кода в программном модуле или внешней обработке

Если требуется обновить параметры прямо из кода, выполним следующие вызовы:


Константы.ПараметрыРаботыПользователей.СоздатьМенеджерЗначения().ОбновитьОбщиеПараметры();
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеПОДаннымИнформационнойБазы();

Способ 2. Корректная проверка доступности роли в коде BSL

Разберем ситуацию, когда роль назначена рядовому пользователю и работает, но у администратора (с полными правами) проверка права выдает Ложь.

Обычный платформенный метод РольДоступна() проверяет физическоеличие роли у текущего сеанса. Поскольку БСП не добавляет администраторам лишние роли в списки учетной записи, этот метод вернет Ложь.

Не рекомендуемый способ (обходной):


Если РольДоступна("МояНоваяРоль") Или РольДоступна("ПолныеПрава") Тогда
    // Выполняем действие
КонецЕсли;

Данный подход рабочий, но усложняет поддержку кода и требует явного перечисления административных ролей.

Рекомендуемый способ (стандарт БСП):

В конфигурациях на БСП следует использовать встроенную функцию модуля Пользователи:


Если Пользователи.РолиДоступны("МояНоваяРоль") Тогда
    // Логика программы
КонецЕсли;

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

Пошаговый алгоритм правильного добавления роли

  1. Создаем новую роль в конфигураторе и настраиваем права на нужные объекты метаданных.
  2. Обновляем конфигурацию базы данных.
  3. Запускаем «1С:Предприятие» и обновляем метаданные (через ключ /С ЗапуститьОбновлениеИнформационнойБазы или программно через Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеПОДаннымИнформационнойБазы()).
  4. Создаем или перезаполняем Профиль групп доступа, добавляя в него новую роль.
  5. Назначаем профиль нужной Группе доступа и включаем в нее пользователей.
  6. В программном коде проверяем права с помощью функции Пользователи.РолиДоступны("ИмяРоли").
← На главную