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

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

Как получить список пользователей по роли в 1С

Как получить список пользователей по роли в 1С: запрос к метаданным, код на встроенном языке, консоль запросов, типовые отчёты. Примеры, ошибки и FAQ.

Задача получить список пользователей, которым назначена конкретная роль, возникает при аудите прав доступа, перед выдачей новых полномочий или при проверке, кто имеет доступ к критичным операциям — например, к проведению документов или администрированию. В 1С нет единой кнопки «показать всех по роли», но есть несколько рабочих способов: от встроенного отчёта до программного обхода пользователей информационной базы.

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

Что нужно знать перед началом

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

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

Способ 1. Программный перебор пользователей

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

Функция ПользователиПоРоли(ИмяРоли) Экспорт

Результат = Новый Массив;

РольМетаданные = Метаданные.Роли.Найти(ИмяРоли);

Если РольМетаданные = Неопределено Тогда

ВызватьИсключение "Роль """ + ИмяРоли + """ не найдена в конфигурации";

КонецЕсли;

Для Каждого Пользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл

Если Пользователь.Роли.Содержит(РольМетаданные) Тогда

Результат.Добавить(Пользователь.Имя);

КонецЕсли;

КонецЦикла;

Возврат Результат;

КонецФункции

Функция возвращает массив имён пользователей. Если нужны дополнительные данные — полное имя, признак аутентификации, дата последнего входа — собирайте структуры вместо строк. Обратите внимание: имя роли передаётся как имя объекта метаданных, а не синоним. Посмотреть его можно в конфигураторе: «Конфигурация → Открыть конфигурацию → Общие → Роли».

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

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

Способ 2. Отчёт «Анализ прав доступа» в конфигурациях на БСП

Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, БП 3.0, ЗУП и другие типовые), задача решается без программирования. Откройте раздел «Администрирование → Пользователи и права» и найдите отчёт «Анализ прав доступа» (в некоторых версиях — «Права доступа» или «Кто что может делать»).

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

Способ 3. Через профили и группы доступа

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ГруппыДоступаПользователи.Пользователь КАК Пользователь

|ИЗ

| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи

|ГДЕ

| ГруппыДоступаПользователи.Ссылка.Профиль = &Профиль";

Запрос.УстановитьПараметр("Профиль", ПрофильСсылка);

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

Способ 4. Просмотр в конфигураторе и консольных инструментах

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

Также существуют внешние обработки-анализаторы прав, которые строят сводную таблицу «пользователь — роли». Они удобны для аудита: выгружают результат в табличный документ или Excel. Используйте только обработки из доверенных источников — код с доступом к списку пользователей потенциально может читать чувствительные данные.

Сравнение вариантов

Программный перебор

Подходит для любой конфигурации и автоматизации; требует права администрирования и не видит права через профили БСП

Отчёт «Анализ прав доступа»

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

Запрос к группам доступа

Точная картина прав в типовых решениях; нужно знать структуру профилей

Конфигуратор вручную

Быстро для 2–3 пользователей; не масштабируется на сотни учётных записей

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

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

Отдельная ситуация — роли, назначенные через расширения. Метод Метаданные.Роли.Найти() видит роли расширений только если расширение подключено в текущем сеансе. В фоновом задании или на сервере контекст может отличаться, и роль «не найдётся». Проверяйте результат поиска роли на Неопределено до перебора пользователей.

Типичные ошибки
01
Поиск роли по синониму вместо имени метаданных — роль не находится, список пуст
02
Игнорирование профилей групп доступа — в список не попадают пользователи с правами через профиль
03
Запуск кода без права администрирования — исключение нарушения прав доступа
04
Роль из расширения не видна в сеансе фонового задания — ложный пустой результат
Контрольные точки

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

Наличие контрольного пользователя
Норма

Пользователь с известной ролью есть в списке

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

Пользователь отсутствует — проверьте имя роли и механизм назначения прав

Полнота списка
Норма

Количество совпадает с отчётом «Анализ прав доступа»

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

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

Ошибки выполнения
Норма

Код отработал без исключений

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

Исключение «Нарушение прав доступа» — нет права администрирования

Часто задаваемые вопросы

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

Напрямую — нет: список пользователей информационной базы не является объектом запроса и недоступен в консоли запросов. Запросом можно обратиться только к справочникам «Пользователи» и «Группы доступа» в конфигурациях на БСП. Для прямого списка пользователей ИБ используйте перебор через ПользователиИнформационнойБазы.

Почему пользователь с ролью не попал в список?

Чаще всего роль назначена не напрямую, а через профиль группы доступа БСП — перебор пользователей ИБ такие права не показывает. Проверьте пользователя в отчёте «Анализ прав доступа». Также убедитесь, что вы ищете роль по имени метаданных, а не по синониму.

Как получить пользователей с ролью «ПолныеПрава»?

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

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

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

Как выгрузить результат в Excel или таблицу?

Соберите данные в таблицу значений с колонками «Имя», «ПолноеИмя», «Роль», затем выведите её в табличный документ и сохраните через метод Записать с типом файла MXL или XLSX. В типовых конфигурациях проще настроить отчёт «Анализ прав доступа» и сохранить его результат штатной кнопкой.

Работает ли код в фоновом задании на сервере?

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

Итог

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

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