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

Особенность задачи в том, что роли в 1С могут назначаться как напрямую пользователям, так и через группы доступа, профили или подсистемы. Это усложняет извлечение данных, если не знать нюансов хранения информации в базе. Мы рассмотрим методы для разных версий платформы (8.3.20+), включая облачные решения, и укажем на подводные камни каждого подхода.

Важно: если вы работаете с 1С:ERP или 1С:Управление холдингом, некоторые методы могут требовать адаптации из-за специфики конфигураций. Для типовых решений (1С:Бухгалтерия, 1С:ЗУП, 1С:УТ) все инструкции применимы без изменений.

1. Стандартные отчёты 1С: быстрый способ без программирования

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

Как открыть:

  1. Перейдите в меню Администрирование → Настройка пользователей и прав (пункт может отличаться в зависимости от конфигурации).
  2. Выберите отчёт Пользователи и права или Анализ прав доступа.
  3. В настройках отчёта найдите поле Роль и укажите нужную (например, Полные права или Бухгалтер).
  4. Сформируйте отчёт и экспортируйте в Excel или PDF.

Преимущества метода:

  • 🔹 Не требует технических навыков — подходит для бухгалтеров и HR-специалистов.
  • 🔹 Визуальное представление данных с группировкой по ролям.
  • 🔹 Возможность сохранения отчёта для истории (например, для аудита).

Ограничения:

  • ⚠️ В некоторых конфигурациях отчёт может не показывать непрямые роли (назначенные через группы или профили).
  • ⚠️ Нет возможности автоматизировать выгрузку (например, по расписанию).
📊 Как часто вам нужно получать списки пользователей по ролям?
Еженедельно
Ежемесячно
Раз в квартал
По запросу аудиторов
Никогда не приходилось

2. SQL-запросы: извлечение данных напрямую из базы

Для администраторов, имеющих доступ к SQL-серверу (например, Microsoft SQL Server или PostgreSQL), самый гибкий способ — прямые запросы к системным таблицам . Этот метод подходит для крупных баз с тысячами пользователей, где стандартные отчёты работают медленно.

Основные таблицы, которые понадобятся:

  • v8users — список пользователей.
  • v8roles — список ролей.
  • v8userroles — связь пользователей и ролей.

Пример запроса для MS SQL Server:

SELECT

u.NAME AS Пользователь,

r.NAME AS Роль

FROM

v8users u

JOIN

v8userroles ur ON u.ID = ur.USERID

JOIN

v8roles r ON ur.ROLEID = r.ID

WHERE

r.NAME LIKE '%Бухгалтер%'

ORDER BY

u.NAME;

Для PostgreSQL (используется в 1С:Предприятие для Linux):

SELECT

u.name AS пользователь,

r.name AS роль

FROM

v8user u

JOIN

v8userrole ur ON u.id = ur.userid

JOIN

v8role r ON ur.roleid = r.id

WHERE

r.name ILIKE '%бухгалтер%'

ORDER BY

u.name;

Важно:

  • 🔹 Имена таблиц могут отличаться в зависимости от версии платформы (например, в старых версиях использовались префиксы _1S).
  • 🔹 Для облачных баз (1С:Fresh) прямой доступ к SQL запрещён — используйте другие методы.

☑️ Подготовка к SQL-запросу

Выполнено: 0 / 4
⚠️ Внимание: Если база используется в режиме файлового варианта (например, 1С:Предприятие 8.3 для одного пользователя), SQL-запросы не применимы. В этом случае используйте методы из следующих разделов.

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

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

Пример кода для получения пользователей с ролью "Бухгалтер":

Процедура ПолучитьПользователейПоРоли(ИмяРоли)

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

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

"ВЫБРАТЬ

| Пользователи.Ссылка КАК Пользователь,

| Пользователи.Наименование КАК ИмяПользователя,

| Роли.Ссылка КАК Роль,

| Роли.Наименование КАК ИмяРоли

|ИЗ

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

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПользователей КАК Права

| ПО Пользователи.Ссылка = Права.Пользователь

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Роли КАК Роли

| ПО Права.Роль = Роли.Ссылка

|ГДЕ

| Роли.Наименование = &ИмяРоли";

Запрос.УстановитьПараметр("ИмяРоли", ИмяРоли);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(СтрШаблон("Пользователь: %1, Роль: %2", Выборка.ИмяПользователя, Выборка.ИмяРоли));

КонецЦикла;

КонецПроцедуры

Как использовать:

  1. Откройте Конфигуратор в режиме 1С:Предприятие.
  2. Создайте внешнюю обработку или добавьте код в модуль.
  3. Вызовите процедуру: ПолучитьПользователейПоРоли("Бухгалтер").

Преимущества:

  • 🔹 Работает в любых конфигурациях, включая 1С:Fresh.
  • 🔹 Можно интегрировать в регламентные задания для автоматической выгрузки.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP 2.5) структура регистра ПраваПользователей может отличаться. Перед использованием проверьте актуальную структуру в Конфигураторе.

4. Использование внешних отчётов и обработок

Если стандартные отчёты не подходят, а писать код нет времени, можно воспользоваться готовыми внешними обработками. Многие разработчики выкладывают их на порталах Infostart или 1С:ИТС.

Популярные решения:

  • 📊 "Анализ прав доступа" от 1С-Рарус — показывает иерархию ролей и групп.
  • 🔍 "Пользователи и их права" (бесплатная обработка) — экспорт в Excel с фильтрами.
  • 🛡️ "Аудит безопасности" — анализирует избыточные права.

Как установить:

  1. Скачайте файл обработки (.epf или .erf).
  2. В 1С:Предприятие выберите Файл → Открыть.
  3. Запустите обработку и следуйте инструкциям.

Пример интерфейса обработки:

Поле Описание
Фильтр по ролям Мultiple-choice список доступных ролей
Показать группы Флаг для отображения пользователей из групп доступа
Экспорт в Excel Кнопка для выгрузки результата в таблицу
Показать неактивных Флаг для включения удалённых или заблокированных пользователей
💡

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

5. Получение списка через OData (для веб-клиента и мобильных приложений)

Если вы работаете с 1С:Предприятие через веб-клиент или мобильное приложение, можно использовать OData-сервис для извлечения данных. Этот метод подходит для интеграции с внешними системами.

Пример запроса к OData для получения пользователей с ролью "Кадровик":

GET /odata/standard.odata/Catalog_Пользователи?

$expand=Роли_Key($filter=contains(Наименование,'Кадровик'))

Как настроить:

  1. В Администрировании включите OData-сервис.
  2. Сгенерируйте токен доступа (в разделе Интеграция → Настройки OData).
  3. Используйте Postman или curl для тестирования запросов.

Ограничения:

  • 🔹 Требуется настройка прав доступа к OData.
  • 🔹 Не все конфигурации поддерживают фильтрацию по ролям через OData.
Как получить токен для OData?

1. Перейдите в Администрирование → Настройки интеграции → OData.
2. Нажмите Создать токен и укажите срок действия.
3. Скопируйте сгенерированный ключ и используйте его в заголовке Authorization: Bearer {токен}.

6. Автоматизация: регламентные задания и рассылка отчётов

Для регулярного мониторинга прав доступа можно настроить регламентное задание, которое будет формировать отчёт и отправлять его на email.

Пример настройки:

  1. В Конфигураторе создайте новое регламентное задание.
  2. Добавьте код из раздела 3 (программное получение списка).
  3. Настройте отправку результата через ПомощникПочтовыхСообщений:
Сообщение = Новый СообщениеЭлектроннойПочты;

Сообщение.Текст = РезультатВСтроку(РезультатЗапроса);

Сообщение.Тема = "Список пользователей по роли: " + ИмяРоли;

Сообщение.Получатели.Добавить("audit@company.ru");

ПомощникПочтовыхСообщений.Отправить(Сообщение);

Преимущества:

  • 🔹 Автоматическое выполнение без участия администратора.
  • 🔹 Возможность архивирования отчётов (например, для ГИТ или внутреннего аудита).
⚠️ Внимание: При настройке регламентных заданий проверьте, что у пользователя, от имени которого выполняется задача, есть права на чтение справочника Пользователи и регистра ПраваПользователей.
💡

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

Сравнение методов: какой выбрать?

Выбор способа зависит от ваших задач и технических возможностей. Ниже таблица сравнения:

Метод Сложность Требуемые права Подходит для облака Автоматизация
Стандартный отчёт Права на просмотр пользователей
SQL-запрос ⭐⭐⭐ Доступ к СУБД ✅ (через SQL Agent)
Встроенный язык ⭐⭐ Полные права в конфигураторе ✅ (регламентные задания)
Внешняя обработка Права на запуск обработок
OData ⭐⭐⭐ Настройка интеграции ✅ (через API)

Рекомендации:

  • Для разовых проверок используйте стандартные отчёты или внешние обработки.
  • Для аудита безопасности настройте регламентное задание с программным кодом.
  • Для интеграции с другими системами подключитесь через OData.
  • Для крупных баз (1000+ пользователей) оптимальны SQL-запросы.

FAQ: Частые вопросы

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

Да, для этого в SQL-запросе или программном коде используйте условие WHERE Права.Роль IS NULL (для SQL) или фильтр по пустой ссылке на роль во встроенном языке. Это покажет пользователей, у которых не назначено ни одной роли (что обычно указывает на ошибку конфигурации).

Как экспортировать список в Excel с сохранением форматирования?

Используйте метод ЗаписьJSON или ЗаписьXLSX из библиотеки ПомощникОтчетовИОбработок. Пример:

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Пользователь");

Таблица.Колонки.Добавить("Роль");

// Заполнение таблицы данными

ПомощникОтчетовИОбработок.ЗаписатьТаблицуВФайлExcel(Таблица, "C:\Отчет\Пользователи.xlsx");

Почему в отчёте не отображаются пользователи из групп?

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

ВЫБРАТЬ РАЗЛИЧНЫЕ

Пользователи.Ссылка КАК Пользователь

ИЗ

Справочник.Пользователи КАК Пользователи

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПользователей КАК Права

ПО Пользователи.Ссылка = Права.Пользователь ИЛИ Пользователи.Ссылка В (ВЫБРАТЬ ГруппыПользователей.Пользователь ИЗ Справочник.ГруппыПользователей КАК ГруппыПользователей)

ГДЕ

Права.Роль = &НужнаяРоль

Как проверить, какие права даёт конкретная роль?

Откройте роль в Конфигураторе (раздел Администрирование → Роли) и изучите список прав в таблице. Для анализа эффективных прав (с учётом групп) используйте отчёт "Права пользователя", указав конкретного пользователя и роль.

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

Да, если в конфигурации ведётся журнал регистрации изменений. Используйте запрос к регистру сведений ЖурналРегистрации с фильтром по объекту "ПраваПользователей". Пример:

ВЫБРАТЬ

Журнал.Дата,

Журнал.Пользователь КАК КтоИзменил,

Журнал.ПредставлениеОбъекта КАК ЧтоИзменено

ИЗ

РегистрСведений.ЖурналРегистрации КАК Журнал

ГДЕ

Журнал.Объект = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) И

Журнал.Действие = "Изменение"

Если журнал не ведётся, настройте его в Администрирование → Настройки программы → Журналы регистрации.