Как быстро сравнить две роли в 1С и найти все роли, связанные с конкретным документом

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Часть 1. Быстрое сравнение двух ролей в 1С

Сравнить две роли напрямую в конфигураторе «один в один» стандартной кнопкой невозможно. Тем не менее, существует несколько эффективных методик, позволяющих решить эту задачу за считанные минуты. Рассмотрим их подробнее.

Метод 1. Сравнение через выгрузку в табличный документ (формат mxl)

Этот способ является самым популярным среди разработчиков благодаря своей простоте. Нам не потребуется сторонний софт — все действия выполняются непосредственно в Конфигураторе 1С. Разберем этот процесс по шагам:

  1. Откройте первую роль в Конфигураторе. В открывшемся окне настройки прав нажмите кнопку «Действия» в командной панели и выберите пункт «Вывести список».
  2. В появившемся диалоговом окне убедитесь, что отмечены все необходимые колонки (объекты метаданных и права), и нажмите «ОК». Платформа сформирует большой табличный документ.
  3. Сохраните полученный табличный документ через меню Файл -> Сохранить как..., выбрав тип файла «Табличный документ» с расширением .mxl (например, назовите его Роль_Первая.mxl).
  4. Повторите абсолютно аналогичные шаги для второй роли, сохранив результат под именем Роль_Вторая.mxl. Обратите внимание, что состав колонок при выводе списка должен быть идентичным.
  5. Теперь закройте окна ролей и перейдите в меню платформы Файл -> Сравнить файлы....
  6. В открывшемся окне укажите пути к обоим созданным файлам .mxl и нажмите кнопку «Сравнить». Платформа автоматически выполнит сравнение файлов на уровне ячеек и подсветит цветом все обнаруженные различия. С помощью удобных стрелок на панели вы сможете быстро перемещаться между измененными правами.

Метод 2. Сравнение XML-файлов конфигурации (анализ RLS)

Что делать, если в ролях настроены сложные ограничения доступа на уровне записей (RLS)? В табличном документе .mxl длинные тексты запросов RLS обрезаются или отображаются не полностью, что делает их сравнение невозможным. В такой ситуации нам поможет выгрузка конфигурации в файлы XML. Проанализируем этот алгоритм:

  1. В Конфигураторе перейдите в главное меню и выберите Конфигурация -> Выгрузить конфигурацию в файлы.... Укажите пустую локальную папку для выгрузки.
  2. После завершения процесса перейдите в эту папку. Все роли конфигурации выгружаются в текстовые файлы формата XML и располагаются по пути: ИмяПапки\Roles\ИмяРоли.xml.
  3. Для сравнения полученных файлов воспользуйтесь специализированными внешними утилитами. Отлично подойдут такие программы, как WinMerge, Beyond Compare, KDiff3 или встроенные инструменты сравнения в популярном редакторе кода VS Code.
  4. Открыв два XML-файла ролей в такой утилите, вы увидите полную структуру прав, включая детальные шаблоны ограничений и полные тексты запросов RLS. Любые различия будут подсвечены построчно, что позволит вам выявить малейшие расхождения в условиях доступа.

Метод 3. Использование среды разработки EDT (Enterprise Development Tools)

Если вы ведете разработку в современной среде EDT, процесс сравнения значительно упрощается. EDT построена на базе Eclipse и тесно интегрирована с распределенной системой контроля версий Git. При работе в этой среде сравнение объектов метаданных (включая роли) происходит автоматически при коммитах или слиянии веток. Вы можете в любой момент вызвать контекстное сравнение файлов ролей непосредственно из панели проекта, не выполняя ручную выгрузку файлов конфигурации.

Часть 2. Поиск всех ролей, связанных с конкретным документом

Второй частый вопрос, возникающий у разработчиков: как быстро понять, какие именно роли имеют права на определенный документ (например, для настройки прав доступа конкретного пользователя)? Мы можем решить эту задачу как программно, так и интерактивно.

Способ 1. Универсальный программный код для разработчика

На форумах часто предлагают простые скрипты, проверяющие только право на «Чтение». Однако для полноценной работы с документом этого недостаточно, ведь у него есть множество других критически важных прав, таких как проведение, изменение, добавление или интерактивное удаление. Чтобы не перебирать все права вручную, напишем универсальный алгоритм, который проверяет ключевые права доступа и выводит структурированную информацию в окно сообщений.

Рассмотрим пример такого программного кода, который можно запустить в любой внешней обработке или в режиме отладки через табло:


// Определяем проверяемый объект метаданных
ОбъектМетаданных = Метаданные.Документы.РеализацияТоваровУслуг;

// Список прав, которые нас интересуют для анализа документа
МассивПрав = Новый Массив;
МассивПрав.Добавить("Чтение");
МассивПрав.Добавить("Добавление");
МассивПрав.Добавить("Изменение");
МассивПрав.Добавить("Проведение");
МассивПрав.Добавить("ОтменаПроведения");
МассивПрав.Добавить("ИнтерактивноеДобавление");

Для Каждого ТекРоль Из Метаданные.Роли Цикл
    НайденныеПрава = Новый СписокЗначений;
    Для Каждого Право Из МассивПрав Цикл
        Если ПравоДоступа(Право, ОбъектМетаданных, ТекРоль) Тогда
            НайденныеПрава.Добавить(Право);
        КонецЕсли;
    КонецЦикла;
    
    // Если у роли обнаружено хотя бы одно право из списка, выводим её в консоль
    Если НайденныеПрава.Количество() > 0 Тогда
        Сообщить("Роль [" + ТекРоль.Имя + "] имеет права: " + Строка(НайденныеПрава));
    КонецЕсли;
КонецЦикла;

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

Способ 2. Использование штатных отчетов платформы 1С

Если писать код не хочется или задача стоит перед администратором системы в режиме «1С:Предприятие», можно воспользоваться стандартным функционалом платформы:

  1. Запустите информационную базу в режиме «1С:Предприятие» под пользователем с полными правами.
  2. Перейдите в главное меню и откройте пункт «Функции для технического специалиста» (в старых версиях платформы этот пункт назывался «Все функции»).
  3. Разверните ветку «Отчеты» и найдите стандартный отчет «Права ролей».
  4. В настройках данного отчета вы можете установить отбор по конкретному интересующему вас объекту метаданных (например, выбрать документ ЗаказПокупателя). Нажмите кнопку «Сформировать».
  5. Система построит наглядную кросс-таблицу, где в строках будут выведены роли, а в колонках — доступные для них права на выбранный документ. Это позволяет быстро оценить всю картину прав доступа без программирования.

Способ 3. Оптимизация поиска через регистры Библиотеки стандартных подсистем (БСП)

В современных конфигурациях, построенных на базе БСП (таких как ERP, Комплексная автоматизация, Управление торговлей или Бухгалтерия предприятия), прямой перебор всех метаданных в цикле через функцию ПравоДоступа() может выполняться довольно медленно из-за колоссального объема объектов. Разработчики БСП предусмотрели этот момент.

В системе присутствует служебный регистр сведений, который кэширует права всех ролей — «Права ролей». Вместо написания циклов мы можем выполнить один мгновенный запрос к этому регистру с отбором по измерению ОбъектМетаданных. Это вернет точный список ролей и их прав за сотые доли секунды, что крайне полезно при разработке сложных внутренних механизмов или отчетов по безопасности данных.

Заключение

Мы рассмотрели различные подходы к сравнению ролей и анализу их связи с объектами метаданных в 1С. Для быстрого визуального сопоставления отлично подходит метод сравнения файлов .mxl в Конфигураторе. Для глубокого аудита, включающего RLS-шаблоны, незаменимым инструментом становится сравнение XML-выгрузок или использование среды разработки EDT. При решении задач по поиску ролей для конкретного документа вы можете использовать как гибкий программный код с функцией ПравоДоступа(), так и готовые встроенные отчеты платформы или регистры БСП.

← На главную