Работа с правами доступа в 1С:Предприятие — одна из ключевых задач администратора. Часто требуется получить актуальный список пользователей, отфильтрованный по конкретным ролям: для аудита безопасности, подготовки отчётности или настройки новых прав. В этой статье разберём все возможные способы — от стандартных отчётов до SQL-запросов и программного кода.
Особенность задачи в том, что роли в 1С могут назначаться как напрямую пользователям, так и через группы доступа, профили или подсистемы. Это усложняет извлечение данных, если не знать нюансов хранения информации в базе. Мы рассмотрим методы для разных версий платформы (8.3.20+), включая облачные решения, и укажем на подводные камни каждого подхода.
Важно: если вы работаете с 1С:ERP или 1С:Управление холдингом, некоторые методы могут требовать адаптации из-за специфики конфигураций. Для типовых решений (1С:Бухгалтерия, 1С:ЗУП, 1С:УТ) все инструкции применимы без изменений.
1. Стандартные отчёты 1С: быстрый способ без программирования
Начнём с самого простого — встроенных инструментов платформы. В большинстве конфигураций есть отчёт Пользователи и права или Анализ прав доступа, который позволяет получить список пользователей с фильтрацией по ролям.
Как открыть:
- Перейдите в меню
Администрирование → Настройка пользователей и прав(пункт может отличаться в зависимости от конфигурации). - Выберите отчёт
Пользователи и праваилиАнализ прав доступа. - В настройках отчёта найдите поле
Рольи укажите нужную (например,Полные праваилиБухгалтер). - Сформируйте отчёт и экспортируйте в
ExcelилиPDF.
Преимущества метода:
- 🔹 Не требует технических навыков — подходит для бухгалтеров и HR-специалистов.
- 🔹 Визуальное представление данных с группировкой по ролям.
- 🔹 Возможность сохранения отчёта для истории (например, для аудита).
Ограничения:
- ⚠️ В некоторых конфигурациях отчёт может не показывать непрямые роли (назначенные через группы или профили).
- ⚠️ Нет возможности автоматизировать выгрузку (например, по расписанию).
2. SQL-запросы: извлечение данных напрямую из базы
Для администраторов, имеющих доступ к SQL-серверу (например, Microsoft SQL Server или PostgreSQL), самый гибкий способ — прямые запросы к системным таблицам 1С. Этот метод подходит для крупных баз с тысячами пользователей, где стандартные отчёты работают медленно.
Основные таблицы, которые понадобятся:
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-запросу
⚠️ Внимание: Если база используется в режиме файлового варианта (например, 1С:Предприятие 8.3 для одного пользователя), SQL-запросы не применимы. В этом случае используйте методы из следующих разделов.
3. Программное получение списка через встроенный язык
Для разработчиков и администраторов, владеющих встроенным языком 1С, доступен программный способ извлечения данных. Этот метод универсален и работает во всех конфигурациях, включая облачные.
Пример кода для получения пользователей с ролью "Бухгалтер":
Процедура ПолучитьПользователейПоРоли(ИмяРоли)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка КАК Пользователь,
| Пользователи.Наименование КАК ИмяПользователя,
| Роли.Ссылка КАК Роль,
| Роли.Наименование КАК ИмяРоли
|ИЗ
| Справочник.Пользователи КАК Пользователи
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПользователей КАК Права
| ПО Пользователи.Ссылка = Права.Пользователь
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Роли КАК Роли
| ПО Права.Роль = Роли.Ссылка
|ГДЕ
| Роли.Наименование = &ИмяРоли";
Запрос.УстановитьПараметр("ИмяРоли", ИмяРоли);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(СтрШаблон("Пользователь: %1, Роль: %2", Выборка.ИмяПользователя, Выборка.ИмяРоли));
КонецЦикла;
КонецПроцедуры
Как использовать:
- Откройте
Конфигураторв режиме1С:Предприятие. - Создайте внешнюю обработку или добавьте код в модуль.
- Вызовите процедуру:
ПолучитьПользователейПоРоли("Бухгалтер").
Преимущества:
- 🔹 Работает в любых конфигурациях, включая 1С:Fresh.
- 🔹 Можно интегрировать в регламентные задания для автоматической выгрузки.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP 2.5) структура регистраПраваПользователейможет отличаться. Перед использованием проверьте актуальную структуру вКонфигураторе.
4. Использование внешних отчётов и обработок
Если стандартные отчёты не подходят, а писать код нет времени, можно воспользоваться готовыми внешними обработками. Многие разработчики выкладывают их на порталах Infostart или 1С:ИТС.
Популярные решения:
- 📊 "Анализ прав доступа" от 1С-Рарус — показывает иерархию ролей и групп.
- 🔍 "Пользователи и их права" (бесплатная обработка) — экспорт в
Excelс фильтрами. - 🛡️ "Аудит безопасности" — анализирует избыточные права.
Как установить:
- Скачайте файл обработки (
.epfили.erf). - В
1С:ПредприятиевыберитеФайл → Открыть. - Запустите обработку и следуйте инструкциям.
Пример интерфейса обработки:
| Поле | Описание |
|---|---|
Фильтр по ролям |
Мultiple-choice список доступных ролей |
Показать группы |
Флаг для отображения пользователей из групп доступа |
Экспорт в Excel |
Кнопка для выгрузки результата в таблицу |
Показать неактивных |
Флаг для включения удалённых или заблокированных пользователей |
Перед использованием внешней обработки проверьте её на тестовой базе — некоторые решения могут конфликтовать с обновлениями конфигурации.
5. Получение списка через OData (для веб-клиента и мобильных приложений)
Если вы работаете с 1С:Предприятие через веб-клиент или мобильное приложение, можно использовать OData-сервис для извлечения данных. Этот метод подходит для интеграции с внешними системами.
Пример запроса к OData для получения пользователей с ролью "Кадровик":
GET /odata/standard.odata/Catalog_Пользователи?
$expand=Роли_Key($filter=contains(Наименование,'Кадровик'))
Как настроить:
- В
АдминистрированиивключитеOData-сервис. - Сгенерируйте токен доступа (в разделе
Интеграция → Настройки OData). - Используйте
Postmanилиcurlдля тестирования запросов.
Ограничения:
- 🔹 Требуется настройка прав доступа к OData.
- 🔹 Не все конфигурации поддерживают фильтрацию по ролям через OData.
Как получить токен для OData?
1. Перейдите в Администрирование → Настройки интеграции → OData.
2. Нажмите Создать токен и укажите срок действия.
3. Скопируйте сгенерированный ключ и используйте его в заголовке Authorization: Bearer {токен}.
6. Автоматизация: регламентные задания и рассылка отчётов
Для регулярного мониторинга прав доступа можно настроить регламентное задание, которое будет формировать отчёт и отправлять его на email.
Пример настройки:
- В
Конфигураторесоздайте новое регламентное задание. - Добавьте код из раздела 3 (программное получение списка).
- Настройте отправку результата через
ПомощникПочтовыхСообщений:
Сообщение = Новый СообщениеЭлектроннойПочты;
Сообщение.Текст = РезультатВСтроку(РезультатЗапроса);
Сообщение.Тема = "Список пользователей по роли: " + ИмяРоли;
Сообщение.Получатели.Добавить("audit@company.ru");
ПомощникПочтовыхСообщений.Отправить(Сообщение);
Преимущества:
- 🔹 Автоматическое выполнение без участия администратора.
- 🔹 Возможность архивирования отчётов (например, для ГИТ или внутреннего аудита).
⚠️ Внимание: При настройке регламентных заданий проверьте, что у пользователя, от имени которого выполняется задача, есть права на чтение справочникаПользователии регистраПраваПользователей.
Регламентные задания позволяют не только автоматизировать выгрузку, но и отслеживать изменения прав во времени (например, кто и когда назначил новую роль).
Сравнение методов: какой выбрать?
Выбор способа зависит от ваших задач и технических возможностей. Ниже таблица сравнения:
| Метод | Сложность | Требуемые права | Подходит для облака | Автоматизация |
|---|---|---|---|---|
| Стандартный отчёт | ⭐ | Права на просмотр пользователей | ✅ | ❌ |
| SQL-запрос | ⭐⭐⭐ | Доступ к СУБД | ❌ | ✅ (через SQL Agent) |
| Встроенный язык | ⭐⭐ | Полные права в конфигураторе | ✅ | ✅ (регламентные задания) |
| Внешняя обработка | ⭐ | Права на запуск обработок | ✅ | ❌ |
| OData | ⭐⭐⭐ | Настройка интеграции | ✅ | ✅ (через API) |
Рекомендации:
- Для разовых проверок используйте стандартные отчёты или внешние обработки.
- Для аудита безопасности настройте регламентное задание с программным кодом.
- Для интеграции с другими системами подключитесь через OData.
- Для крупных баз (1000+ пользователей) оптимальны SQL-запросы.
FAQ: Частые вопросы
Можно ли получить список пользователей без ролей?
Да, для этого в SQL-запросе или программном коде используйте условие WHERE Права.Роль IS NULL (для SQL) или фильтр по пустой ссылке на роль во встроенном языке. Это покажет пользователей, у которых не назначено ни одной роли (что обычно указывает на ошибку конфигурации).
Как экспортировать список в Excel с сохранением форматирования?
Используйте метод ЗаписьJSON или ЗаписьXLSX из библиотеки ПомощникОтчетовИОбработок. Пример:
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Пользователь");
Таблица.Колонки.Добавить("Роль");
// Заполнение таблицы данными
ПомощникОтчетовИОбработок.ЗаписатьТаблицуВФайлExcel(Таблица, "C:\Отчет\Пользователи.xlsx");
Почему в отчёте не отображаются пользователи из групп?
Стандартные отчёты часто показывают только прямые роли. Чтобы увидеть пользователей, которым роль назначена через группу, модифицируйте запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Пользователи.Ссылка КАК Пользователь
ИЗ
Справочник.Пользователи КАК Пользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПользователей КАК Права
ПО Пользователи.Ссылка = Права.Пользователь ИЛИ Пользователи.Ссылка В (ВЫБРАТЬ ГруппыПользователей.Пользователь ИЗ Справочник.ГруппыПользователей КАК ГруппыПользователей)
ГДЕ
Права.Роль = &НужнаяРоль
Как проверить, какие права даёт конкретная роль?
Откройте роль в Конфигураторе (раздел Администрирование → Роли) и изучите список прав в таблице. Для анализа эффективных прав (с учётом групп) используйте отчёт "Права пользователя", указав конкретного пользователя и роль.
Можно ли получить историю изменения ролей пользователя?
Да, если в конфигурации ведётся журнал регистрации изменений. Используйте запрос к регистру сведений ЖурналРегистрации с фильтром по объекту "ПраваПользователей". Пример:
ВЫБРАТЬ
Журнал.Дата,
Журнал.Пользователь КАК КтоИзменил,
Журнал.ПредставлениеОбъекта КАК ЧтоИзменено
ИЗ
РегистрСведений.ЖурналРегистрации КАК Журнал
ГДЕ
Журнал.Объект = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) И
Журнал.Действие = "Изменение"
Если журнал не ведётся, настройте его в Администрирование → Настройки программы → Журналы регистрации.