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