Зачастую перед специалистами 1С встает задача по ограничению доступа к специфическим данным. В частности, ограничение просмотра платежных поручений или заявок на расходование денежных средств, относящихся к заработной плате. Рассмотрим, как реализовать такую задачу с помощью встроенного механизма RLS (ограничение доступа на уровне записей), разберем типичные ошибки и лучшие практики реализации.
Для реализации ограничения доступа мы будем использовать сочетание параметров сеанса и условий в шаблонах ограничений. Основная идея заключается в том, чтобы на уровне роли задать условие, которое будет проверяться системой при каждом обращении к данным документа. В качестве практического примера настройки ограничений для конкретного бизнес-сценария можно использовать руководство по настройке роли менеджера в УПП с помощью RLS.
ВидетьВсе или ИспользоватьОграничениеПоЗарплате).Ограничение доступа к данным и для нужного документа (например, ЗаявкаНаРасходованиеСредств) пропишите условие в шаблоне.При написании условий в RLS важно помнить, что шаблон — это строковый макрос, который подставляется в SQL-запрос. Если вы получаете ошибку вида «Синтаксическая ошибка КОНЕЦ», это означает, что результат вашего условия не является валидным фрагментом запроса. RLS всегда должен возвращать логическое выражение, которое будет интерпретировано системой как условие ГДЕ.
Рассмотрим, как правильно структурировать условие:
#Если &ИспользоватьОграничениеПоЗарплате #Тогда
(ТвояТаблица.ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОпераций.ВыплатаЗарплаты))
#Иначе
ИСТИНА
#КонецЕсли
Обратите внимание: если условие не закрывается корректно или возвращает не то выражение, система не сможет выполнить запрос. Всегда проверяйте, чтобы в любом сценарии результатом было корректное логическое условие для базы данных.
Важный момент, с которым сталкиваются разработчики при использовании RLS, — это работа с отчетами. Если вы ограничиваете доступ к данным, то любой запрос к таблице, в которой есть RLS, будет вызывать ошибку доступа, если в тексте запроса не указано ключевое слово РАЗРЕШЕННЫЕ. Это слово сообщает системе, что нужно выбрать только те записи, к которым у пользователя есть право доступа.
Если после включения RLS ваши отчеты перестали формироваться, необходимо найти все места в коде или запросах отчетов, где происходит обращение к документам, и добавить это ключевое слово:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Заявка.Ссылка,
Заявка.Сумма
ИЗ
Документ.ЗаявкаНаРасходованиеСредств КАК Заявка
Разберем основные причины, почему ограничение может не работать или вести себя непредсказуемо:
RLS в 1С работает по принципу «разрешающего» доступа. Если пользователю назначена хотя бы одна роль, в которой не настроено ограничение для данного документа, он будет видеть все записи. Ограничение вступает в силу только при условии, что для всех ролей пользователя, имеющих право на чтение документа, настроен ограничивающий фильтр.УстановитьПривилегированныйРежим(Истина), то все ограничения RLS игнорируются. Будьте осторожны при написании функций, которые должны работать с закрытыми данными.RLS может замедлить выполнение запросов к таблицам документов. Если вы видите, что система «тормозит» после внедрения RLS, стоит проанализировать план выполнения запроса через технологический журнал.Если RLS оказывается слишком сложным в поддержке или требует изменения большого количества отчетов, рассмотрите использование групп доступа. Они позволяют управлять ограничениями через профили, что намного удобнее при изменении бизнес-процессов.
Для диагностики ошибок всегда используйте Технологический журнал. Он позволяет увидеть итоговый SQL-запрос, который формирует платформа. Сравните этот запрос с тем, что вы ожидаете увидеть, и вы быстро найдете место, где синтаксис шаблона создает ошибку.
Надеемся, что этот разбор поможет вам эффективно настроить права доступа и обеспечить безопасность данных в вашей учетной системе!