Получение списка ролей в 1С:Предприятие — стандартная задача для администраторов, разработчиков и аудиторов систем. Роли определяют права доступа пользователей к объектам конфигурации, и их анализ критичен при настройке безопасности, миграции данных или поиске уязвимостей. В этой статье разберём все актуальные способы извлечения ролей: от встроенных инструментов конфигуратора до программных методов с использованием запросов и API.
Важно понимать, что подход зависит от цели: для быстрой проверки подойдёт ручной экспорт через интерфейс, а для автоматизированного мониторинга потребуется скрипт. Мы рассмотрим варианты для разных версий платформы (включая 1С 8.3.23 и 8.2.19), а также учтём нюансы работы с управляемыми формами и обычными приложениями. Если вам нужно не просто список, а анализ прав конкретной роли — в статье есть отдельный раздел с детальной инструкцией.
1. Получение списка ролей через Конфигуратор 1С
Самый простой способ — использовать встроенные инструменты конфигуратора. Этот метод не требует знания кода и подходит для разовых задач. Откройте базу в режиме Конфигуратор (с правами администратора) и выполните следующие шаги:
- 📌 Перейдите в меню
Администрирование → Пользователи и права(для управляемых форм) илиСервис → Пользователи(для обычных форм). - 🔍 В открывшемся окне выберите вкладку
Роли— здесь отображается полный перечень ролей, доступных в текущей конфигурации. - 📋 Чтобы экспортировать список, нажмите
Все действия → Выгрузить список(или используйте комбинациюCtrl+Shift+S). Файл сохранится в формате.txtили.mxl.
Обратите внимание: в этом разделе отображаются все роли, включая системные (например, ПолныеПрава) и пользовательские. Если список слишком большой, используйте фильтр по имени — введите часть названия в поле поиска справа.
Открыть базу в режиме Конфигуратор|Перейти в Администрирование → Пользователи и права|Выбрать вкладку "Роли"|Нажать "Выгрузить список" (Ctrl+Shift+S)|Сохранить файл в удобном формате-->
⚠️ Внимание: В версиях 1С 8.3.18 и ниже экспорт списка ролей может не поддерживать формат.mxl. В этом случае используйте копирование данных в буфер обмена (Ctrl+C) с последующей вставкой в Excel или текстовый редактор.
2. Использование отчёта «Права пользователей»
Встроенный отчёт Права пользователей позволяет не только увидеть список ролей, но и проанализировать их назначение конкретным пользователям или группам. Этот метод полезен для аудита безопасности. Чтобы открыть отчёт:
- В режиме
1С:Предприятиеперейдите вАдминистрирование → Права пользователей → Права пользователей. - В настройках отчёта выберите параметр
Показывать ролии снимите галочку сПоказывать пользователей(если нужны только роли). - Нажмите
Сформировать— в результате получите таблицу со всеми ролями и их свойствами (например,Имя,Пометка удаления,Комментарий).
Преимущество этого способа — возможность группировки ролей по признакам (например, по модулям конфигурации) и экспорта в Excel через кнопку Выгрузить. Однако учтите, что отчёт не показывает детальные права каждой роли — для этого потребуется другой инструмент (см. раздел 5).
| Поле отчёта | Описание | Пример значения |
|---|---|---|
Имя |
Уникальный идентификатор роли в конфигурации | Бухгалтер |
Синоним |
Пользовательское название роли (может отличаться от имени) | Главный бухгалтер (полные права) |
ПометкаУдаления |
Признак, что роль помечена на удаление (да/нет) | Нет |
Комментарий |
Описание роли, заданное разработчиком | Доступ к регистрам бухгалтерии и отчётам |
Ручной экспорт через Конфигуратор|Отчёт "Права пользователей"|Запросы к метаданным|Скрипты на встроенном языке|Другое-->
3. Программное получение списка ролей на встроенном языке
Для автоматизации задач (например, при разработке отчётов или обработок) используйте встроенный язык 1С. Ниже приведён универсальный код, который возвращает список ролей в виде таблицы значений:
Процедура ПолучитьСписокРолей()
ТаблицаРолей = Новый ТаблицаЗначений;
ТаблицаРолей.Колонки.Добавить("Имя");
ТаблицаРолей.Колонки.Добавить("Синоним");
ТаблицаРолей.Колонки.Добавить("Комментарий");
Для Каждого Роль Из Метаданные.Роли Цикл
НоваяСтрока = ТаблицаРолей.Добавить();
НоваяСтрока.Имя = Роль.Имя;
НоваяСтрока.Синоним = Роль.Синоним;
НоваяСтрока.Комментарий = Роль.Комментарий;
КонецЦикла;
Возврат ТаблицаРолей;
КонецПроцедуры
Этот код можно вставить в обработку или отчёт, а результат вывести на экран или сохранить в файл. Для выгрузки в Excel добавьте после цикла:
Запись = Новый ЗаписьДанныхXML;
Запись.УстановитьДанные(ТаблицаРолей);
Запись.Записать(Новый Файл("C:\Temp\СписокРолей.xml"));
Критическая деталь: В управляемых формах для доступа к метаданным используйте контекст Метаданные, а в обычных формах — Конфигурация.Метаданные. Ошибка в этом месте приведёт к исключению.
Если НЕ Роль.Имя = "ПолныеПрава" Тогда ...-->
4. Запрос к метаданным для анализа ролей
Для сложного анализа (например, поиска ролей с определёнными правами) используйте запросы к метаданным. Этот метод гибче, чем отчёт, и позволяет получать данные в структурированном виде. Пример запроса, возвращающего роли с их правами на объекты:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Роли.Имя КАК Роль,
| РолиПрава.Тип КАК ТипОбъекта,
| РолиПрава.Имя КАК Объект,
| РолиПрава.Права КАК Права
|ИЗ
| Метаданные.Роли КАК Роли
| ЛЕВОЕ СОЕДИНЕНИЕ Метаданные.РолиПрава КАК РолиПрава
| ПО Роли.Имя = РолиПрава.Роль
|УПОРЯДОЧИТЬ ПО
| Роль, ТипОбъекта, Объект";
Результат = Запрос.Выполнить();
Этот запрос вернёт таблицу, где каждой роли соответствуют объекты конфигурации (справочники, документы, отчёты) и назначенные права (например, Чтение, Изменение). Для упрощения анализа можно добавить фильтрацию:
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Роли.Имя КАК Роль
|ИЗ
| Метаданные.Роли КАК Роли
|ГДЕ
| Роли.Имя НЕ ПОДОБНО ""%Администратор%""";
⚠️ Внимание: Запросы к метаданным могут значительно нагружать сервер при большом количестве ролей (более 500). Для производственных баз выполняйте их в нерабочее время или на тестовом сервере.
5. Анализ прав конкретной роли
Если вам нужно не просто перечислить роли, а детализировать их права, используйте специализированные обработки или скрипты. Например, следующая процедура выведет все объекты, к которым роль имеет доступ:
Процедура АнализПравРоли(ИмяРоли)
Роль = Метаданные.Роли.НайтиПоИмени(ИмяРоли);
Если Роль = Неопределён Тогда
Сообщить("Роль не найдена!");
Возврат;
КонецЕсли;
Для Каждого Право Из Роль.Права Цикл
Сообщить(СтрШаблон("Объект: %1, Права: %2",
Право.Объект.Имя, Право.Права));
КонецЦикла;
КонецПроцедуры
Для визуализации результатов можно создать дерево прав в обработке:
- Добавьте реквизит типа
ДеревоЗначений. - В цикле заполните узлы дерева, группируя объекты по типам (справочники, документы и т.д.).
- Используйте иконки для обозначения уровня прав (например, 🔒 для
Чтение, ✏️ дляИзменение).
Для ускорения работы с большими конфигурациями (например, 1С:ERP или 1С:УТ 11) предварительно кэшируйте метаданные в коллекцию:
МетаданныеКэш = Новый Соответствие;
Для Каждого Объект Из Метаданные Цикл
МетаданныеКэш.Вставить(Объект.Имя, Объект);
КонецЦикла;
Как экспортировать права роли в JSON?
Используйте библиотеку ЗаписьJSON:
Запись = Новый ЗаписьJSON;
Запись.УстановитьДанные(ПолучитьПраваРоли("Бухгалтер"));
Запись.Записать(Новый Файл("C:\Temp\ПраваБухгалтера.json"));
Файл будет содержать структурированные данные, пригодные для интеграции с внешними системами.
6. Автоматизация через REST API (для 1С:Предприятие 8.3.20+)
В современных версиях 1С (начиная с 8.3.20) доступен REST-интерфейс, позволяющий получать данные о ролях удалённо. Этот метод актуален для облачных решений или распределённых систем. Пример запроса к API:
GET /hs/role/list HTTP/1.1
Host: your-1c-server.ru
Authorization: Basic base64-credentials
Content-Type: application/json
Ответ сервера будет содержать JSON-массив с описанием ролей:
{
"roles": [
{
"name": "Бухгалтер",
"synonym": "Бухгалтерские права",
"rights": [
{"object": "Справочник.Контрагенты", "access": "read,write"},
{"object": "Документ.ПоступлениеТоваров", "access": "read"}
]
},
...
]
}
Для работы с API необходимо:
- 🔑 Настроить аутентификацию (обычно используется
Basic Authили токены). - 📡 Убедиться, что на сервере 1С включён веб-сервис (в настройках публикации).
- 🔧 Проверить права доступа пользователя, от имени которого выполняется запрос (требуется роль с правом
Администрирование).
⚠️ Внимание: REST API в 1С может быть отключён по умолчанию из соображений безопасности. Перед использованием согласуйте настройки с администратором сервера.
REST API удобен для интеграции 1С с внешними системами (например, BI-аналитикой или SIEM), но требует дополнительной настройки сервера и защиты канала связи (рекомендуется использовать HTTPS).
7. Экспорт ролей для миграции или резервного копирования
При переносе конфигурации между базами или создании резервных копий ролей используйте выгрузку/загрузку через файлы. Этот метод гарантирует сохранение всех прав и связей. Инструкция:
- В конфигураторе выберите
Файл → Сохранить данные конфигурации в файлы. - В диалоговом окне отметьте галочкой
Ролии снимите остальные флажки. - Укажите папку для сохранения (например,
C:\Backup\Roles) и нажмитеСохранить. - Для импорта в другую базу используйте
Файл → Загрузить данные конфигурации из файлов.
Файлы ролей сохраняются в формате .xml и содержат полное описание прав, включая:
- 📄 Имя и синоним роли.
- 🔐 Права на объекты (чтение, изменение, удаление и т.д.).
- 📝 Параметры роли (например, ограничения по организациям).
Для автоматизации резервного копирования напишите скрипт на PowerShell или Bash, который будет запускать 1С в режиме /Execute с параметрами выгрузки:
"C:\Program Files\1cv8\8.3.23.1234\bin\1cv8.exe"
/S "C:\Bases\MainBase"
/N "Admin"
/P "password"
/Execute "ВыгрузитьРоли();"
/Out "C:\Logs\ExportRoles.log"
8. Анализ ролей с помощью внешних инструментов
Для глубокого аудита прав используйте специализированные утилиты:
- 🛠️ 1С:Аудит — встроенный инструмент для анализа безопасности, доступен в дистрибутиве платформы.
- 🔍 EDT (1С:Enterprise Development Tools) — позволяет визуализировать связи между ролями и объектами.
- 📊 Сторонние обработки, например, "Анализ прав пользователей" от Инфостарт.
Пример отчёта из 1С:Аудит:
| Роль | Количество объектов с правами | Критические права |
|---|---|---|
Бухгалтер |
42 | Удаление документов |
МенеджерПоПродажам |
18 | Изменение цен |
Внешние инструменты полезны для:
- 🔎 Поиска избыточных прав (например, роли с правами на удаление, которые не должны их иметь).
- 📈 Сравнения ролей между разными базами (например, при обновлении конфигурации).
- 🛡️ Выявления уязвимостей (например, ролей с правами на выполнение опасных операций).
⚠️ Внимание: Детали работы внешних инструментов (например, поддерживаемые версии 1С или форматы отчётов) могут меняться. Перед использованием проверяйте совместимость с вашей конфигурацией в документации разработчика.
FAQ: Частые вопросы о ролях в 1С
Как найти роль, которая даёт доступ к конкретному документу?
Используйте запрос к метаданным с фильтром по типу объекта:
ВЫБРАТЬ РАЗЛИЧНЫЕ Роли.Имя
ИЗ Метаданные.РолиПрава КАК РолиПрава
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Метаданные.Роли КАК Роли
ПО РолиПрава.Роль = Роли.Имя
ГДЕ РолиПрава.Тип = "Документ.ПоступлениеТоваров"
Можно ли изменить системную роль (например, ПолныеПрава)?
Нет, системные роли (например, ПолныеПрава, Администратор) нельзя модифицировать. Вы можете только создать новую роль на их основе или скопировать права в пользовательскую роль.
Как экспортировать роли вместе с пользователями, которым они назначены?
Скомбинируйте данные из Метаданные.Роли и Пользователи.ПрофилиПользователей:
ВЫБРАТЬ
Пользователи.Имя КАК Пользователь,
Роли.Имя КАК Роль
ИЗ
Метаданные.Пользователи КАК Пользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Метаданные.ПользователиРоли КАК ПользователиРоли
ПО Пользователи.Имя = ПользователиРоли.Пользователь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Метаданные.Роли КАК Роли
ПО ПользователиРоли.Роль = Роли.Имя
Что делать, если роль не отображается в списке, но существует в конфигурации?
Вероятные причины:
- Роль помечена на удаление (проверьте флаг
ПометкаУдаления). - Отсутствуют права на просмотр метаданных у текущего пользователя.
- Роль является динамической (создана программно и не сохранена в конфигурации).
Для диагностики выполните запрос:
ВЫБРАТЬ Роли.Имя, Роли.ПометкаУдаления
ИЗ Метаданные.Роли КАК Роли
Как сравнить роли между двумя базами 1С?
Используйте внешнюю обработку (например, "Сравнение конфигураций" из 1С:EDT) или напишите скрипт:
- Выгрузите роли из обеих баз в
JSONилиXML. - Сравните файлы с помощью утилит вроде WinMerge или Beyond Compare.
- Обратите внимание на различия в правах на объекты с одинаковыми именами.