Сколько копий было сломано относительно RLS на чтение. Пожалуй, это самая главная проблема прав доступа, которую не могли решить программисты 1С.
Все остальное так или иначе делалось кодом, а вот в RLS на чтение приходилось ковыряться в ролях руками. На худой конец — с помощью парсеров, но их никто так и не написал.
Суть проблемы в чем. Допустим, есть RLS по организации и складу.
А затем по некоторым документам нужно добавить RLS по проектам.
При этом нужно было вручную во всех объектах менять RLS-запрос, добавлять отбор по проектам. И шаблоны тут не могли помочь.
Решение я придумал только сейчас, 20 февраля 2026 года. Оно было всегда под носом, как часто бывает.
Оно заключается в том, что для каждого объекта прописываем нужное нам условие в одном шаблоне RLS Общий:

Вот пример такого условия:
#Если "Справочник.Номенклатура" = #ИмяТекущейТаблицы #Тогда ГДЕ Истина #КонецЕсли #Если "Справочник.Контрагенты" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка.Наименование ПОДОБНО "а%" #КонецЕсли
Проверяем на контрагентах, без RLS у нас такой список:

С RLS только те контрагенты, что начинаются на букву «а»:

На практике, конечно, будут более осмысленные тексты запросов, например:
#Если "Справочник.Склады" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеСклады) #КонецЕсли #Если "Документ.ПоступлениеТоваров" = #ИмяТекущейТаблицы #Тогда ГДЕ Склад В (&ДоступныеСклады) И Организация В (&ДоступныеОрганизации) #КонецЕсли
Сам текст запросов можно по каждому объекту сгенерировать кодом и вставить уже в шаблон.
Наконец-то программисты 1С избавлены от рутины с правами доступа RLS!
Суть моего гениального решения в RLS понятна любому 1с-нику, знакомому с RLS, но попробую объяснить его программистам из других отраслей.
Итак, 1с для каждого объекта (номенклатура, приходная накладная, расходная накладная, …) позволяет наложить ограничение доступа — Record Level Security (RLS).
Но в каждый объект надо заходить и прописывать это ограничение руками. Это может выглядеть так:
Приходная накладная: Организация в &ДоступныеОрганизации и Склад в &ДоступныеСклады
Расходная накладная: Организация в &ДоступныеОрганизации и Склад в &ДоступныеСклады
Организации: Организация в &ДоступныеОрганизации
Склады: Склад в &ДоступныеСклады
Как видите, тут есть повторяющиеся фрагменты, поэтому билиотека БСП в 1С вам предложит использовать шаблоны:
Приходная накладная: ШаблонПрав(«Организация, Склад»)
Расходная накладная: ШаблонПрав(«Организация, Склад»)
Организации: ШаблонПрав(«Организация»)
Склады: ШаблонПрав(«Склад»)
Стало выглядеть короче, да?
Но что, если вы захотите сделать отбор по проекту? Правила с учетом применения шаблонов должны выглядеть так:
Приходная накладная: ШаблонПрав(«Организация, Склад, Проект»)
Расходная накладная: ШаблонПрав(«Организация, Склад, Проект»)
Организации: ШаблонПрав(«Организация»)
Склады: ШаблонПрав(«Склад»)
Проекыт: ШаблонПрав(«Проект»)
Вы обратили внимание, что мы должны зайти в каждый объект и вручную поправить правило. А таких шаблонов может быть много, несколько десятков, а то и сотни.
Поэтому желание вносить изменения в RLS на чтение очень быстро исчезает. К тому же все эти доработки слетят при обновлении 1С. Выход был бы в написании парсера ролей, чтобы выгрузить роли в XML-файлы, поправить, потом загрузить их обратно, но это довольно сложно и никто так и не сподобился его написать.
Суть моего решения в том, чтобы всем объектам прописать общее правило Основной:
Приходная накладная: Основной
Расходная накладная: Основной
Организации: Основной
Склады: Основной
Проекты: Основной
А уже содержание шаблона Основной будет представлять собой один длинный текст, где для каждого вида объектов будет свое правило RLS:
#Если "Справочник.Склады" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеСклады) #КонецЕсли #Если "Справочник.Организации" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеОрганизации) #КонецЕсли #Если "Документ.ПриходнаяНакладная" = #ИмяТекущейТаблицы #Тогда ГДЕ Склад В (&ДоступныеСклады) И Организация В (&ДоступныеОрганизации) #КонецЕсли #Если "Документ.РасходнаяНакладная" = #ИмяТекущейТаблицы #Тогда ГДЕ Склад В (&ДоступныеСклады) И Организация В (&ДоступныеОрганизации) #КонецЕсли
Тогда если захотеть добавить ограничение по проекту, то поменяется только общий шаблон:
#Если "Справочник.Склады" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеСклады) #КонецЕсли #Если "Справочник.Организации" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеОрганизации) #КонецЕсли #Если "Справочник.Проекты" = #ИмяТекущейТаблицы #Тогда ГДЕ Ссылка В (&ДоступныеПроекты) #КонецЕсли #Если "Документ.ПриходнаяНакладная" = #ИмяТекущейТаблицы #Тогда ГДЕ Склад В (&ДоступныеСклады) И Организация В (&ДоступныеОрганизации) И Проект В (&ДоступныеПроекты) #КонецЕсли #Если "Документ.РасходнаяНакладная" = #ИмяТекущейТаблицы #Тогда ГДЕ Склад В (&ДоступныеСклады) И Организация В (&ДоступныеОрганизации) И Проект В (&ДоступныеПроекты) #КонецЕсли
И, конечно, этот шаблон лучше и проще генерировать программно.
Основное преимущество в том, что убирается рутинный ручной труд и RLS на чтение пишутся автоматизированно. А ведь раньше это было самой сложной темой именно из-за того, что нужно было прописывать изменения во все роли.
И все это возможно было сделать уже 10 лет назад, при появлении RLS.
