Как ограничить выбор касс для пользователей в документах 1С:УПП?

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

В процессе работы в конфигурации «Управление производственным предприятием» (УПП) часто возникает необходимость разграничить права менеджеров и кассиров при оформлении кассовых документов. Если сотрудники периодически выбирают чужие кассы при создании приходных (ПКО) или расходных (РКО) кассовых ордеров, это приводит к путанице в учете и усложняет поиск ошибок. Проанализируем способы решения этой задачи как без применения механизма RLS (Record Level Security), так и с его использованием.

Причина уязвимости простых отборов на форме

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

  1. Ввод по строке и автоподбор: при вводе названия или кода кассы непосредственно в поле ввода платформа вызывает обработку получения данных в обход формы списка.
  2. Копирование документов: при копировании чужого документа реквизит Касса сохраняется, если проверка выполняется только в момент нажатия кнопки выбора.
  3. Групповые обработки и сторонние сервисы: изменение или проведение документов через внешние обработки не задействует логику формы.

Решение 1: Использование вспомогательного объекта и проверки перед записью

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

Для реализации этого подхода выполним следующие шаги:

  1. Создание структуры хранения прав:

    Создадим новый справочник (например, ПользователиКассы) или независимый регистр сведений (измерения: Пользователь, Касса). Использование регистра сведений предпочтительнее с точки зрения производительности при выполнении запросов.

    Если используется справочник, в нем создается табличная часть, куда для каждого пользователя добавляется список доступных ему элементов справочника Кассы.

  2. Централизация проверки перед записью:

    Чтобы не дублировать код в каждом кассовом документе, создадим подписку на событие ПередЗаписью для документов ПриходныйКассовыйОрдер, РасходныйКассовыйОрдер и других требуемых кассовых документов.

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

  3. Перехват ввода по строке:

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

Решение 2: Ограничение доступа через механизм RLS

Если необходимо запретить доступ на уровне платформы, проанализируем настройку RLS. Стоит учесть, что в типовой конфигурации 1С:УПП встроенный разрез RLS для справочника Кассы отсутствует, поэтому его необходимо добавлять самостоятельно.

Рассмотрим пошагово организацию RLS через параметры сеанса:

  1. Инициализация параметра сеанса:

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

  2. Настройка условия в роли:

    В роли пользователей для справочника Кассы прописываем условие ограничения доступа:

    ГДЕ Ссылка В (&ДоступныеКассы)

Важные особенности применения RLS к кассам:

Наложение RLS на право «Чтение» приведет к тому, что пользователи перестанут видеть чужие кассы в старых документах и отчетах (вместо наименования кассы будет отображаться <Объект не найден>). Если задача заключается только в том, чтобы запретить выбор чужих касс при создании новых документов, но сохранить возможность просмотра всей истории, RLS следует настраивать на операции «Добавление» и «Изменение», либо ограничиться первым решением через проверку перед записью.

← На главную