В процессе работы в конфигурации «Управление производственным предприятием» (УПП) часто возникает необходимость разграничить права менеджеров и кассиров при оформлении кассовых документов. Если сотрудники периодически выбирают чужие кассы при создании приходных (ПКО) или расходных (РКО) кассовых ордеров, это приводит к путанице в учете и усложняет поиск ошибок. Проанализируем способы решения этой задачи как без применения механизма RLS (Record Level Security), так и с его использованием.
Разберем распространенную ошибку: попытку настроить ограничение только на уровне формы документа через установку отбора для поля выбора. Такой подход легко обходится пользователями через следующие механизмы:
Касса сохраняется, если проверка выполняется только в момент нажатия кнопки выбора.Рассмотрим вариант реализации, который не требует настройки сложных шаблонов RLS и не оказывает негативного влияния на скорость формирования отчетов.
Для реализации этого подхода выполним следующие шаги:
Создадим новый справочник (например, ПользователиКассы) или независимый регистр сведений (измерения: Пользователь, Касса). Использование регистра сведений предпочтительнее с точки зрения производительности при выполнении запросов.
Если используется справочник, в нем создается табличная часть, куда для каждого пользователя добавляется список доступных ему элементов справочника Кассы.
Чтобы не дублировать код в каждом кассовом документе, создадим подписку на событие ПередЗаписью для документов ПриходныйКассовыйОрдер, РасходныйКассовыйОрдер и других требуемых кассовых документов.
В обработчике подписки выполняем запрос к созданной структуре прав и проверяем, входит ли указанная в документе касса в список разрешенных для текущего пользователя. Если касса не разрешена, устанавливаем параметр Отказ = Истина и выводим понятное предупреждение.
Для предотвращения подстановки неразрешенных касс через быстрый ввод переопределим процедуру ОбработкаПолученияДанныхВыбора в модуле менеджера справочника Кассы. Это позволит ограничить список выдаваемых значений во всех полях ввода системы.
Если необходимо запретить доступ на уровне платформы, проанализируем настройку RLS. Стоит учесть, что в типовой конфигурации 1С:УПП встроенный разрез RLS для справочника Кассы отсутствует, поэтому его необходимо добавлять самостоятельно.
Рассмотрим пошагово организацию RLS через параметры сеанса:
При старте системы (в модуле сеанса) формируем список разрешенных касс для текущего пользователя (ссылка из справочника Пользователи) и записываем его в ПараметрСеанса.ДоступныеКассы (массив или фиксированный список ссылок).
В роли пользователей для справочника Кассы прописываем условие ограничения доступа:
ГДЕ Ссылка В (&ДоступныеКассы)
Важные особенности применения RLS к кассам:
Наложение RLS на право «Чтение» приведет к тому, что пользователи перестанут видеть чужие кассы в старых документах и отчетах (вместо наименования кассы будет отображаться <Объект не найден>). Если задача заключается только в том, чтобы запретить выбор чужих касс при создании новых документов, но сохранить возможность просмотра всей истории, RLS следует настраивать на операции «Добавление» и «Изменение», либо ограничиться первым решением через проверку перед записью.