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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В типовых конфигурациях, таких как "1С:Управление торговлей 11.4", количество ролей может исчисляться сотнями. Когда возникает задача выяснить, какие именно роли предоставляют право на чтение, запись или проведение конкретного документа, ручной перебор каждой роли в конфигураторе становится долгой и утомительной задачей. Разберем несколько способов, как можно значительно ускорить этот процесс.

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

Способ 1: Программный анализ с помощью функции ПравоДоступа()

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

Синтаксис функции:

ПравоДоступа(<ИмяПрава>, <ОбъектМетаданных>, <Роль>)

Она возвращает Истина, если указанная <Роль> имеет право <ИмяПрава> на <ОбъектМетаданных>.

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

Шаг 1. Получаем объект метаданных и указываем право.

Сначала нужно определить, какой документ и какое право мы хотим проверить. Например, нас интересует право на проведение документа "Возврат товаров от клиента".


// Получаем объект метаданных нужного документа
_Мета = Метаданные.Документы.ВозвратТоваровОтКлиента;

// Указываем имя права, которое хотим проверить.
// Возможные варианты: "Чтение", "Добавление", "Изменение", "Удаление", "Проведение" и др.
_Право = "Проведение";

Шаг 2. Организуем цикл по всем ролям конфигурации.

Далее мы перебираем коллекцию всех ролей, доступную через Метаданные.Роли.

Шаг 3. Внутри цикла проверяем право и выводим результат.

В теле цикла используем функцию ПравоДоступа() и, если она возвращает Истина, выводим имя роли в окно сообщений.

Полный пример кода:

Этот код можно вставить в кнопку на форме внешней обработки и запустить в режиме 1С:Предприятие.


// Указываем объект метаданных, который будем проверять
_Мета = Метаданные.Документы.ВозвратТоваровОтКлиента;

// Указываем право для проверки. Можно подставить "Чтение", "Запись", "Проведение" и т.д.
_Право = "Проведение";

Сообщить("Проверка права """ + _Право + """ для объекта: " + _Мета.ПолноеИмя());
Сообщить("---------------------------------------------");

// Перебираем все роли, определенные в конфигурации
Для каждого Роль Из Метаданные.Роли Цикл

    // Проверяем, есть ли у текущей роли указанное право на наш объект
    Если ПравоДоступа(_Право, _Мета, Роль) Тогда 
    
        // Если право есть, выводим имя роли
        Сообщить(""+Роль.Имя);
        
    КонецЕсли;
    
КонецЦикла;

Сообщить("---------------------------------------------");
Сообщить("Проверка завершена.");

Преимущества этого способа:

Способ 2: Стандартный отчет "Все роли" в конфигураторе

В конфигураторе есть встроенный инструмент, который позволяет в наглядной матрице увидеть права всех ролей на все объекты. Этот способ не требует программирования, но может быть менее удобным при большом количестве ролей.

Рассмотрим по шагам:

  1. Откройте нужную конфигурацию в режиме Конфигуратор.
  2. В дереве метаданных найдите ветку Общие и раскройте ее.
  3. Найдите объект Роли. Нажмите на него правой кнопкой мыши.
  4. В контекстном меню выберите пункт Все роли.
  5. Откроется большое окно в виде таблицы, где по строкам расположены все объекты метаданных, а по столбцам — все роли конфигурации. На пересечении строк и столбцов галочками отмечены установленные права.
  6. Чтобы найти нужный документ, воспользуйтесь поиском по таблице (стандартное сочетание клавиш Ctrl+F). Введите имя документа, например, "ВозвратТоваровОтКлиента".
  7. Найдя нужную строку, вы можете горизонтально просмотреть ее и увидеть, у каких ролей установлены флажки для прав "Чтение", "Запись", "Проведение" и т.д.

Недостаток этого способа в том, что при большом количестве ролей (в УТ их более 200) таблица становится очень широкой, и анализировать ее визуально неудобно. Именно эту проблему и хотел решить автор исходного вопроса.

Способ 3: Использование сторонних инструментов

Сообщество 1С-разработчиков создало множество удобных утилит, которые упрощают анализ прав доступа. Часто они выполнены в виде расширений или внешних отчетов и предоставляют более удобный интерфейс, чем стандартные средства.

Отчет "Анализ прав доступа" из "Инструментов разработчика"

Один из самых мощных и популярных наборов инструментов — это "Инструменты разработчика" (ИР). В его состав входит отчет "Анализ прав доступа". Если у вас установлено это расширение, вы можете получить информацию о правах прямо из формы интересующего вас объекта.

Как это сделать:

  1. Убедитесь, что у вас подключено расширение "Инструменты разработчика".
  2. В пользовательском режиме откройте любой документ того вида, который вас интересует (например, любой "Возврат товаров от клиента").
  3. Вызовите глобальное меню инструментов разработчика. Обычно это делается сочетанием клавиш Ctrl+` (на английской раскладке) или Ctrl+Ё (на русской).
  4. В открывшемся меню выполните команду "Форма. Редактор объекта".
  5. В окне редактора объекта внизу будет меню "Прочее", в котором нужно выбрать команду "Анализ прав доступа".
  6. Откроется отчет. В его верхней части найдите подменю "Варианты" и выберите вариант "Роли с доступом к объекту".

В результате вы получите удобный отчет, показывающий полный список ролей, которые имеют те или иные права на данный тип документа.

Также на портале Инфостарт можно найти множество других готовых отчетов и обработок для анализа прав, которые могут обладать еще более широким функционалом.

Таким образом, для быстрой разовой проверки разработчику удобнее всего использовать программный способ, для визуального анализа без программирования подойдет стандартный отчет "Все роли", а для глубокого и частого анализа прав доступа лучшим выбором станут специализированные сторонние инструменты.

← На главную