К статье
Практический материал

Администрирование · 10 мин

Как узнать роль текущего пользователя в 1С

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

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

Единой кнопки «показать мою роль» в типовом интерфейсе нет, поэтому используют несколько рабочих способов: просмотр в конфигураторе, программное обращение через встроенный язык, функцию РольДоступна и механизм профилей групп доступа в конфигурациях на базе БСП. Выбор способа зависит от того, кто вы — администратор, разработчик или обычный пользователь, и есть ли у вас доступ к конфигуратору.

Ниже разобраны все практические варианты с примерами кода, ограничениями каждого метода и типичными ошибками, из-за которых проверка роли даёт неверный результат.

Что такое роль в 1С и чем она отличается от профиля доступа

Роль — это объект метаданных конфигурации, который задаёт набор прав на объекты: чтение, добавление, изменение, удаление, проведение, использование команд. Роли жёстко зашиты в конфигурацию, и изменить их состав может только разработчик через конфигуратор.

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

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

Как посмотреть роли пользователя через конфигуратор

Самый прямой способ доступен администратору. Откройте конфигуратор, перейдите в меню «Администрирование» → «Пользователи» и дважды щёлкните по нужной учётной записи. В диалоге свойств пользователя перейдите на вкладку, где перечислены доступные роли (в зависимости от версии платформы она называется «Прочие», «Роли» или находится в отдельном разделе диалога). Отмеченные флажками роли — это и есть роли пользователя.

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

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор под учётной записью с правами администратора
  2. 2
    Перейдите: Администрирование → Пользователи
  3. 3
    Откройте нужного пользователя двойным щелчком
  4. 4
    Найдите вкладку со списком ролей и выпишите отмеченные
  5. 5
    Если список пуст — проверьте профили групп доступа в режиме предприятия

Если пользователей много, удобнее выгрузить список обработкой или открыть свойства сразу нескольких учётных записей и сравнить наборы ролей. Это быстрее, чем поочерёдный просмотр.

Как получить роли программно через встроенный язык

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

ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();

Для Каждого Роль Из ТекПользователь.Роли Цикл

Сообщить(Роль.Имя);

КонецЦикла;

Этот код выполняется в контексте сервера или толстого клиента. Важное ограничение: обращение к ПользователиИнформационнойБазы требует права «Администрирование» либо выполняется в привилегированном модуле. Обычный пользователь без административных прав получит ошибку доступа.

Для безопасного варианта оберните вызов в привилегированный серверный модуль и возвращайте наружу только список имён ролей, не передавая сам объект пользователя ИБ. Так вы не нарушите модель безопасности и сможете использовать проверку в клиентской логике.

bsl
Функция ПолучитьРолиТекущегоПользователя() Экспорт
    УстановитьПривилегированныйРежим(Истина);
    Результат = Новый Массив;
    Для Каждого Роль Из ПользователиИнформационнойБазы.ТекущийПользователь().Роли Цикл
        Результат.Добавить(Роль.Имя);
    КонецЦикла;
    Возврат Результат;
КонецФункции

Проверка конкретной роли через РольДоступна

Чаще всего полный список ролей не нужен — требуется ответить на вопрос «есть ли у пользователя конкретное право». Для этого существует функция РольДоступна(ИмяРоли), которая возвращает Истина, если указанная роль назначена текущему пользователю.

Если РольДоступна("ПолныеПрава") Тогда

// показываем административные команды

КонецЕсли;

У функции есть важное преимущество: её можно вызывать без административных прав и в тонком клиенте. Но есть и ограничение — она проверяет именно роль, а не фактическое право на объект. Если право дано через другую роль или профиль, проверка конкретной роли вернёт Ложь, хотя операция пользователю доступна.

Для проверки права на конкретный объект корректнее использовать ПравоДоступа("Чтение", Метаданные.Справочники.Номенклатура). Эта функция учитывает все роли пользователя суммарно и отвечает на вопрос «может ли он это сделать», а не «есть ли у него роль с таким именем».

Как узнать профиль доступа в конфигурациях на БСП

В «1С:Бухгалтерии», «Управлении торговлей», «ЗУП» и других конфигурациях на базе БСП права назначаются через профили групп доступа. Откройте раздел «Администрирование» → «Настройки прав и пользователей» → «Группы доступа». Найдите пользователя в списке участников групп — название группы обычно совпадает с профилем и говорит о его роли в системе: «Бухгалтер», «Кассир», «Менеджер по продажам».

Программно профиль получают через справочник «ПрофилиГруппДоступа» и регистры состава групп. В БСП есть готовые функции модуля УправлениеДоступом, например проверка УправлениеДоступом.ЕстьРоль("ИмяРоли") — она учитывает и роли, и профили, поэтому предпочтительнее прямой РольДоступна в типовых конфигурациях.

Сравнение способов проверки

Конфигуратор → Пользователи

Подходит администратору для разового просмотра; не показывает права, назначенные профилями

РольДоступна()

Быстрая проверка конкретной роли из кода без админправ; не учитывает права через другие роли

ПравоДоступа()

Проверяет фактическое право на объект с учётом всех ролей; требует знать объект метаданных

ПользователиИнформационнойБазы.ТекущийПользователь()

Даёт полный список ролей; требует админправ или привилегированного режима

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Проверка роли в активном сеансе после изменения прав — пользователь видит старые права до перезахода в программу
02
Поиск «одной главной роли» вместо анализа всего набора — права складываются из нескольких ролей
03
Использование РольДоступна без учёта профилей БСП — проверка возвращает Ложь, хотя доступ есть
04
Забытый привилегированный режим — обычный пользователь получает ошибку при обращении к ПользователиИнформационнойБазы
05
Сравнение роли по синониму вместо имени — имя роли в коде пишется латиницей, как в дереве метаданных

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

Контрольные точки

Как проверить результат

Список ролей из кода совпадает с конфигуратором
Норма

Наборы идентичны

Тревожный признак

В коде ролей меньше — часть прав назначена профилями

Поведение под реальным пользователем
Норма

Пользователь видит нужные разделы

Тревожный признак

Права отличаются от ожидаемых — проверьте группы доступа

РольДоступна после изменения прав
Норма

Возвращает актуальное значение после перезахода

Тревожный признак

Возвращает устаревшее значение — сеанс не перезапущен

FAQ

Может ли обычный пользователь узнать свою роль без конфигуратора?

Напрямую — нет, штатной кнопки в интерфейсе нет. Обычный пользователь может посмотреть свою группу доступа в разделе настроек прав (если у него есть туда доступ) или попросить администратора. Разработчик может вывести список ролей через привилегированный серверный модуль.

Почему РольДоступна возвращает Ложь, хотя доступ к объекту есть?

Функция проверяет назначение конкретной роли, а не итоговое право. Если доступ дан через другую роль или профиль групп доступа, проверка по имени роли вернёт Ложь. Для проверки фактического права используйте ПравоДоступа.

Как узнать роль пользователя, если конфигурация на поддержке и дорабатывать её нельзя?

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

Чем отличается проверка роли от проверки права?

Роль — это именованный набор прав в метаданных, а право — конкретное действие над объектом (чтение, изменение, проведение). Одно право может даваться несколькими ролями. Для прикладной логики надёжнее проверять право через ПравоДоступа, а не привязываться к имени роли.

Нужно ли перезапускать сеанс после изменения ролей пользователя?

Да. Набор ролей загружается при старте сеанса, поэтому изменения, внесённые администратором, применяются только после перезахода пользователя в программу. До перезапуска он работает со старыми правами.

Как проверить роль другого пользователя, а не текущего?

Через ПользователиИнформационнойБазы.НайтиПоИмени("ИмяПользователя") или НайтиПоУникальномуИдентификатору, затем перебрать его коллекцию Роли. Такая проверка требует административных прав или привилегированного режима.

Итог

Что важно запомнить

Роли текущего пользователя смотрят в конфигураторе (Администрирование → Пользователи) или получают кодом через ПользователиИнформационнойБазы.ТекущийПользователь().Роли. Для точечной проверки используйте РольДоступна, а для проверки фактического права — ПравоДоступа. В конфигурациях на БСП учитывайте профили групп доступа и перезапуск сеанса после смены прав.