Как ограничить доступ менеджеров на чтение (просмотр) номенклатуры по группам доступа в 1С:ERP через RLS?

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

В типовых конфигурациях 1С:ERP Управление предприятием, 1С:Комплексная автоматизация и 1С:Управление торговлей 11 механизм ограничения прав на уровне записей (RLS) для номенклатуры по умолчанию действует только на права Добавление и Изменение. Право Чтение в типовых ролях остается открытым. В результате менеджеры видят полный перечень товаров, материалов и услуг всех подразделений компании. Разберем, почему так сделано, как корректно настроить ограничение на чтение через роли и какие альтернативные варианты решения задачи существуют.

Почему в типовых решениях RLS на чтение номенклатуры отключен

Проанализируем технические причины, по которым разработчики типовых конфигураций не ограничивают чтение номенклатуры из коробки:

  1. Нагрузка на СУБД и снижение производительности. Справочник Номенклатура задействован практически во всех товарных документах, регистрах накопления и отчетах. Динамическое наложение условий RLS на чтение каждой строки запроса существенно усложняет планы выполнения SQL-запросов.
  2. Ошибки при проведении документов. Если алгоритм проведения документа обращается к скрытой для пользователя номенклатуре в непереведенном в привилегированный режим модуле, система выдаст ошибку нарушения прав доступа.
  3. Отображение форм и журналов документов. Если пользователь откроет журнал или форму документа, в котором присутствует запрещенная для него позиция номенклатуры, система либо заблокирует открытие документа, либо отобразит битую ссылку <Объект не найден>.

Пошаговая настройка RLS на чтение справочника «Номенклатура»

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

Шаг 1. Настройка шаблона RLS для справочника «Номенклатура»

Откроем конфигуратор, найдем типовую роль чтения номенклатуры (например, ЧтениеИнформацииПоНоменклатуре) или создадим ее копию в расширении. Для права Чтение справочника Справочник.Номенклатура укажем шаблон ограничения доступа по значениям:


#ПоЗначениям( "Справочник.Номенклатура","Чтение","",
"ГруппыНоменклатуры","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

Шаг 2. Настройка ограничения для справочника «Группы доступа номенклатуры»

Для корректного сопоставления групп доступа и исключения чтения значений классификатора настроим аналогичное ограничение на чтение для справочника Справочник.ГруппыДоступаНоменклатуры:


#ПоЗначениям( "Справочник.ГруппыДоступаНоменклатуры","Чтение","",
"ГруппыНоменклатуры","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

Шаг 3. Регистрация видов ограничений в модулях БСП (при необходимости)

Проверим регистрацию состава ограничений в общем модуле подсистемы управления доступом. В процедуре ПриЗаполненииВидовОграниченийПравОбъектовМетаданных убедимся в наличии строки:

|Справочник.Номенклатура.Чтение.ГруппыНоменклатуры

Шаг 4. Устранение конфликта прав (дизъюнкция прав доступа)

В платформе 1С действует принцип: любое полное право перекрывает ограниченное. Если у пользователя назначено несколько ролей и хотя бы в одной из них право Чтение на Справочник.Номенклатура не ограничено условием RLS, пользователь продолжит видеть всю номенклатуру.

Проанализируем все назначенные пользователю профили и роли:

  1. Выявим роли, в которых открыто чтение справочников Номенклатура, ХарактеристикиНоменклатуры и СерииНоменклатуры.
  2. Создадим нетиповые копии этих ролей, в которых право Чтение ограничено шаблоном #ПоЗначениям либо полностью отключено, если роль не критична.
  3. Назначим скорректированные роли в профилях групп доступа пользователя.

Шаг 5. Настройка профилей и групп доступа в режиме предприятия

В пользовательском режиме в справочнике Профили групп доступа для вида доступа Группы номенклатуры установим значение «Запрещены все, исключения назначаются в группах доступа». В соответствующих Группах доступа добавим только те группы номенклатуры, с которыми разрешено работать конкретным менеджерам.

Альтернативные способы скрытия номенклатуры без изменения RLS

Чтобы избежать падения производительности и ошибок в отчетах или документах прошлых периодов, рассмотрим альтернативные варианты решения задачи без наложения RLS на чтение:

  1. Фильтрация в формах выбора и автоподборе (через расширение):

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

  2. Использование типового механизма сегментов номенклатуры и соглашений:

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

← На главную