Администрирование · 9 мин
Как получить список пользователей по роли в 1С
Как получить список пользователей по роли в 1С: запрос к метаданным, код на встроенном языке, консоль запросов, типовые отчёты. Примеры, ошибки и FAQ.
Задача получить список пользователей, которым назначена конкретная роль, возникает при аудите прав доступа, перед выдачей новых полномочий или при проверке, кто имеет доступ к критичным операциям — например, к проведению документов или администрированию. В 1С нет единой кнопки «показать всех по роли», но есть несколько рабочих способов: от встроенного отчёта до программного обхода пользователей информационной базы.
Выбор метода зависит от контекста. Администратору обычно достаточно типового отчёта или консоли кода, разработчику — программного перебора через ПользователиИнформационнойБазы, а если нужно регулярно контролировать права — удобнее оформить процедуру в общем модуле или внешнюю обработку. Ниже разобраны все варианты с готовым кодом и проверкой результата.
Что нужно знать перед началом
Роли в 1С назначаются на уровне метаданных конфигурации, а связь пользователя с ролями хранится в списке пользователей информационной базы. Важно различать роли конфигуратора (объекты метаданных) и роли, которые видны в режиме предприятия через подсистему управления доступом БСП — профили групп доступа. Это разные механизмы: пользователь может не иметь роли напрямую, но получать права через профиль.
Для программного доступа к списку пользователей у текущего сеанса должно быть право «Администрирование» или выполнение должно идти в привилегированном режиме. Иначе метод ПолучитьПользователей() вызовет исключение. Учтите это при запуске кода из пользовательского сеанса.
Способ 1. Программный перебор пользователей
Универсальный метод — перебрать всех пользователей информационной базы и проверить наличие нужной роли у каждого. Код работает в любой конфигурации, где есть доступ к метаданным роли:
Функция ПользователиПоРоли(ИмяРоли) Экспорт
Результат = Новый Массив;
РольМетаданные = Метаданные.Роли.Найти(ИмяРоли);
Если РольМетаданные = Неопределено Тогда
ВызватьИсключение "Роль """ + ИмяРоли + """ не найдена в конфигурации";
КонецЕсли;
Для Каждого Пользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
Если Пользователь.Роли.Содержит(РольМетаданные) Тогда
Результат.Добавить(Пользователь.Имя);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция возвращает массив имён пользователей. Если нужны дополнительные данные — полное имя, признак аутентификации, дата последнего входа — собирайте структуры вместо строк. Обратите внимание: имя роли передаётся как имя объекта метаданных, а не синоним. Посмотреть его можно в конфигураторе: «Конфигурация → Открыть конфигурацию → Общие → Роли».
Для разового запуска удобно выполнить код через внешнюю обработку или консоль кода, не меняя конфигурацию. Если база файловая и монопольный доступ невозможен, код на чтение всё равно выполнится — он не требует исключительного режима.
Для Каждого П Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл Если П.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда Сообщить(П.Имя); КонецЕсли; КонецЦикла;Способ 2. Отчёт «Анализ прав доступа» в конфигурациях на БСП
Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, БП 3.0, ЗУП и другие типовые), задача решается без программирования. Откройте раздел «Администрирование → Пользователи и права» и найдите отчёт «Анализ прав доступа» (в некоторых версиях — «Права доступа» или «Кто что может делать»).
В настройках отчёта выберите вариант анализа по правам и укажите нужную роль или объект метаданных. Отчёт покажет пользователей и группы доступа, через которые права получены. Его преимущество — он учитывает не только прямое назначение ролей, но и профили групп доступа, то есть отражает реальную картину прав.
Способ 3. Через профили и группы доступа
В конфигурациях с подсистемой управления доступом роли обычно не назначаются пользователям напрямую — вместо этого создаются профили, объединяющие роли, а пользователи включаются в группы доступа с этими профилями. В этом случае список получают запросом к справочникам:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГруппыДоступаПользователи.Пользователь КАК Пользователь
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
|ГДЕ
| ГруппыДоступаПользователи.Ссылка.Профиль = &Профиль";
Запрос.УстановитьПараметр("Профиль", ПрофильСсылка);
Сначала найдите профиль, которому соответствует нужная роль: откройте справочник «Профили групп доступа» и проверьте состав ролей в закладке «Разрешённые роли». Затем получите пользователей всех групп доступа с этим профилем. Этот способ точнее отражает фактические права в типовых конфигурациях.
Способ 4. Просмотр в конфигураторе и консольных инструментах
В конфигураторе можно открыть «Администрирование → Пользователи» и вручную проверить роли каждого пользователя на закладке «Прочие». Для базы с сотнями пользователей это непрактично, но для быстрой проверки двух-трёх учётных записей — приемлемо. Ускоряет задачу сортировка и поиск по списку.
Также существуют внешние обработки-анализаторы прав, которые строят сводную таблицу «пользователь — роли». Они удобны для аудита: выгружают результат в табличный документ или Excel. Используйте только обработки из доверенных источников — код с доступом к списку пользователей потенциально может читать чувствительные данные.
Сравнение вариантов
Подходит для любой конфигурации и автоматизации; требует права администрирования и не видит права через профили БСП
Без кода, учитывает профили; доступен только в конфигурациях на БСП
Точная картина прав в типовых решениях; нужно знать структуру профилей
Быстро для 2–3 пользователей; не масштабируется на сотни учётных записей
Проверка результата и типичные ошибки
После получения списка убедитесь, что он полный. Контрольная проверка: возьмите двух пользователей, у которых роль точно есть и точно нет, и убедитесь, что первый вошёл в список, а второй — нет. Если список подозрительно пуст, чаще всего причина в неверном имени роли: использован синоним вместо имени метаданных или роль находится в расширении конфигурации.
Отдельная ситуация — роли, назначенные через расширения. Метод Метаданные.Роли.Найти() видит роли расширений только если расширение подключено в текущем сеансе. В фоновом задании или на сервере контекст может отличаться, и роль «не найдётся». Проверяйте результат поиска роли на Неопределено до перебора пользователей.
Как проверить результат
Пользователь с известной ролью есть в списке
Пользователь отсутствует — проверьте имя роли и механизм назначения прав
Количество совпадает с отчётом «Анализ прав доступа»
Программный список меньше — часть прав выдана через профили
Код отработал без исключений
Исключение «Нарушение прав доступа» — нет права администрирования
Часто задаваемые вопросы
Можно ли получить список пользователей по роли запросом?
Напрямую — нет: список пользователей информационной базы не является объектом запроса и недоступен в консоли запросов. Запросом можно обратиться только к справочникам «Пользователи» и «Группы доступа» в конфигурациях на БСП. Для прямого списка пользователей ИБ используйте перебор через ПользователиИнформационнойБазы.
Почему пользователь с ролью не попал в список?
Чаще всего роль назначена не напрямую, а через профиль группы доступа БСП — перебор пользователей ИБ такие права не показывает. Проверьте пользователя в отчёте «Анализ прав доступа». Также убедитесь, что вы ищете роль по имени метаданных, а не по синониму.
Как получить пользователей с ролью «ПолныеПрава»?
Используйте тот же перебор: проверяйте Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава). Дополнительно полезно проверить свойство пользователя, отвечающее за защиту от опасных действий, и наличие роли администратора — в типовых конфигурациях это отдельные роли.
Нужно ли монопольный режим для чтения списка пользователей?
Нет. Получение списка пользователей и чтение их ролей не требует монопольного доступа и не блокирует работу базы. Монопольный режим нужен только для изменений, затрагивающих структуру базы.
Как выгрузить результат в Excel или таблицу?
Соберите данные в таблицу значений с колонками «Имя», «ПолноеИмя», «Роль», затем выведите её в табличный документ и сохраните через метод Записать с типом файла MXL или XLSX. В типовых конфигурациях проще настроить отчёт «Анализ прав доступа» и сохранить его результат штатной кнопкой.
Работает ли код в фоновом задании на сервере?
Да, при условии что фоновое задание выполняется от имени пользователя с правом администрирования или в привилегированном режиме. Учтите, что роли из расширений конфигурации в фоновом сеансе могут быть недоступны — проверяйте результат поиска роли на Неопределено.
Что важно запомнить
Список пользователей по роли получают перебором ПользователиИнформационнойБазы с проверкой Роли.Содержит() или типовым отчётом «Анализ прав доступа». Имя роли берут из метаданных, а не из синонима. В конфигурациях на БСП права часто выданы через профили — для полной картины анализируйте группы доступа.