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