Как ограничить просмотр документов по виду операции в 1С:УПП с помощью RLS?

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

Зачастую перед специалистами 1С встает задача по ограничению доступа к специфическим данным. В частности, ограничение просмотра платежных поручений или заявок на расходование денежных средств, относящихся к заработной плате. Рассмотрим, как реализовать такую задачу с помощью встроенного механизма RLS (ограничение доступа на уровне записей), разберем типичные ошибки и лучшие практики реализации.

Основные принципы настройки RLS

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

  1. Создайте параметр сеанса, который будет определять, имеет ли право текущий пользователь видеть все данные или должен быть ограничен (например, ВидетьВсе или ИспользоватьОграничениеПоЗарплате).
  2. Настройте инициализацию этого параметра при начале работы системы в модуле сеанса, анализируя права или роли пользователя.
  3. В конфигураторе перейдите в свойства роли, откройте вкладку Ограничение доступа к данным и для нужного документа (например, ЗаявкаНаРасходованиеСредств) пропишите условие в шаблоне.

Разбор синтаксиса шаблонов и типичные ошибки

При написании условий в RLS важно помнить, что шаблон — это строковый макрос, который подставляется в SQL-запрос. Если вы получаете ошибку вида «Синтаксическая ошибка КОНЕЦ», это означает, что результат вашего условия не является валидным фрагментом запроса. RLS всегда должен возвращать логическое выражение, которое будет интерпретировано системой как условие ГДЕ.

Рассмотрим, как правильно структурировать условие:


#Если &ИспользоватьОграничениеПоЗарплате #Тогда
    (ТвояТаблица.ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОпераций.ВыплатаЗарплаты))
#Иначе
    ИСТИНА
#КонецЕсли

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

Особенности использования РАЗРЕШЕННЫЕ

Важный момент, с которым сталкиваются разработчики при использовании RLS, — это работа с отчетами. Если вы ограничиваете доступ к данным, то любой запрос к таблице, в которой есть RLS, будет вызывать ошибку доступа, если в тексте запроса не указано ключевое слово РАЗРЕШЕННЫЕ. Это слово сообщает системе, что нужно выбрать только те записи, к которым у пользователя есть право доступа.

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


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Заявка.Ссылка,
    Заявка.Сумма
ИЗ
    Документ.ЗаявкаНаРасходованиеСредств КАК Заявка

Почему RLS может не срабатывать?

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

Альтернативы и советы по отладке

Если RLS оказывается слишком сложным в поддержке или требует изменения большого количества отчетов, рассмотрите использование групп доступа. Они позволяют управлять ограничениями через профили, что намного удобнее при изменении бизнес-процессов.

Для диагностики ошибок всегда используйте Технологический журнал. Он позволяет увидеть итоговый SQL-запрос, который формирует платформа. Сравните этот запрос с тем, что вы ожидаете увидеть, и вы быстро найдете место, где синтаксис шаблона создает ошибку.

Надеемся, что этот разбор поможет вам эффективно настроить права доступа и обеспечить безопасность данных в вашей учетной системе!

← На главную