В крупных торговых компаниях часто возникает задача разграничения прав доступа. Типичный сценарий: менеджер по продажам должен иметь доступ только к тем заказам, за которые он несет ответственность, не видя при этом документы своих коллег. В конфигурации «1С:Управление торговлей 11» (а также в ERP и КА 2) эта задача решается с помощью механизма RLS (Record Level Security) — ограничения доступа на уровне записей.
Давайте вместе разберем по шагам, как правильно настроить систему, чтобы каждый сотрудник работал только в своем информационном поле, и проанализируем различные способы реализации этой задачи.
Это самый стандартный и рекомендуемый метод для 1С:УТ 11. Он основан на логике, что если менеджер имеет доступ к клиенту (партнеру), то он видит и его заказы. Рассмотрим этот процесс подробно.
Шаг 1. Включение функциональной опции
Прежде всего, проверим, активирован ли сам механизм ограничений в базе. Перейдем в раздел НСИ и администрирование -> Настройка пользователей и прав. Здесь нам необходимо развернуть подраздел Группы доступа и убедиться, что установлена галочка Ограничивать доступ на уровне записей.
Шаг 2. Активация групп доступа партнеров
В этом же окне настроек найдем ссылку Группы доступа партнеров. Нам нужно включить этот функционал, чтобы в карточках клиентов появилось соответствующее поле. Без этой настройки мы не сможем сегментировать клиентскую базу для разных менеджеров.
Шаг 3. Создание групп и привязка к партнерам
Теперь создадим саму «корзину», в которую поместим клиентов конкретного менеджера:
Партнера (клиента) и на вкладке «Основное» или в специальном поле укажем созданную группу доступа (также полезно настроить видимость реквизитов справочников).Шаг 4. Настройка профиля и группы доступа пользователя
Теперь свяжем пользователя с разрешенными данными (для ускорения процесса можно использовать копирование прав между пользователями). Проанализируем настройки в разделе Настройка пользователей и прав -> Группы доступа:
После этих действий система автоматически пересчитает права, и менеджер увидит только те заказы, клиенты которых входят в его группу.
Иногда требуется ограничить видимость не персонально по менеджеру, а по отделу или организации. Рассмотрим ситуацию: в заказе клиента всегда заполняется поле Подразделение. Если мы настроим ограничение по этому объекту, менеджер отдела продаж «Запад» не увидит документы отдела «Восток».
Для этого в профиле групп доступа нужно добавить вид доступа Подразделения и указать элементы справочника СтруктураПредприятия.
Важно понимать, что включение RLS может замедлить работу системы, так как к каждому запросу к базе данных 1С будет добавлять дополнительные условия (подзапросы). Выясним, как минимизировать потери производительности.
В настройках пользователей и прав обязательно проверьте режим работы ограничений. Мы рекомендуем использовать Производительный режим. В этом режиме данные об ограничениях кэшируются в специальных вспомогательных таблицах, что значительно ускоряет выборку данных в списках заказов по сравнению со «Стандартным» режимом.
Если менеджер все равно видит лишние заказы, проанализируем ситуацию с помощью встроенного отчета. В карточке пользователя нажмите кнопку Права доступа. Выберите отчет «Отчет по правам доступа». Он позволит увидеть, через какую именно роль или группу доступа «просачивается» видимость документов. Часто бывает, что пользователю назначена роль (например, «Просмотр всех заказов»), которая не содержит условий RLS и перекрывает все наши ограничения.
Если база очень большая и включение RLS недопустимо из-за падения скорости, рассмотрим вариант «визуального» ограничения. Мы можем создать расширение конфигурации, которое будет автоматически накладывать фильтр при открытии списка заказов.
Посмотрим на пример логики, которую можно реализовать в процедуре ПриСозданииНаСервере для формы списка заказов:
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Устанавливаем отбор по ответственному для текущего пользователя
ЭлементОтбора = Список.КомпоновкаДанных.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Менеджер");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ПараметрыСеанса.ТекущийПользователь;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецПроцедуры
Важно: Этот метод лишь скрывает записи из списка. Если пользователь знает номер документа или имеет прямую ссылку, он сможет его открыть. Для полноценной защиты данных используйте только первый способ с настройкой групп доступа.
Для того чтобы менеджер в 1С:УТ 11 видел только свои заказы, необходимо: