Потребовалось срочно решить проблему в ролях доступа — при обращении к роли у пользователя 1С со включенным RLS по Организации, выдавалась ошибка следующего вида:
Ошибка:
Ошибка при выполнении обработчика - 'ПередЗаписью'
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка в ограничении доступа к данным.
объект: 'РегистрНакопления.ТоварыКОтгрузке'; право: 'Чтение'
{(50, 18)}: Синтаксическая ошибка ":"
НеверноеПраво<<?>>: Изменение
по причине:
{(50, 18)}: Синтаксическая ошибка ":"
НеверноеПраво<<?>>: Изменение
Неясно в итоге, в каком праве ошибка — в «Чтение» или в «Изменение», либо ему «не нравится» двоеточие в каком-то из шаблонов?
Вдобавок, роли редко встречаются в работе, в них нет отладки, и вопрос нужно было решить очень быстро, без стороних инструментов. Первое время я не понимал, как подступиться.
Первым делом я посмотрел через обработку с Инфорстарта «РолиДляДоступаКОбъектамМетаданных», какие роли отвечают за данный регистр:

Роли с RLS выделены, это «СамообслуживаниеВнешнийПользовательОформлениеЗаказов» и «ЧтениеОстатковТоваровКОтгрузке». (Их может быть намного больше)…
******
В Конфигураторе в Роли на первой вкладке:


За кадром убедился что значение: ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейУниверсально = Ложь.
ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейУниверсально = Ложь
Значит, в условие «#Если» не заходит и точно используется шаблон «#ПоЗначениямРасширенный(«
Идём вторую вкладку проверять шаблон «ПоЗначениямРасширенный»

(Бывает, что текст закрашен фоном и конфигуратор не даёт его отредактировать, как на скриншоте ниже. Тогда необходимо предварительно проверить, что редактируемая роль «снята с замка» и не подключена к хранилищу, или заблокирована от редактирования по другим причинам):

Находим фрагмент со словом «НеверноеПраво:»
// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или
"#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "")
Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение"
Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверноеПраво: #Параметр(2)
#КонецЕсли
Приступаем к диагностике. Суть в том, что нам не понятно заранее, в какой роли и с какими значениями переменных возникает ошибка. Мы можем изменить текст ошибки, вписав в неё имя роли, в которой она возникает:
— в роли СамообслуживаниеВнешнийПользовательОформлениеЗаказов:
// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или
"#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "")
Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение"
Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
//НеверноеПраво: #Параметр(2)
РасширеннаяДиагностика Роль_СамообслуживаниеВнешнийПользовательОформлениеЗаказов ИмяТекущегоПраваДоступа_ПриОшибке: #ИмяТекущегоПраваДоступа: Параметр2_ПриОшибке #Параметр(2) Параметр3_ПриОшибке: #Параметр(3)
#КонецЕсли
- в роли ЧтениеОстатковТоваровКОтгрузке:
// Проверка правильности параметра Право.
#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или
"#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "")
Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение"
Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
//НеверноеПраво: #Параметр(2)
РасширеннаяДиагностика Роль_ЧтениеОстатковТоваровКОтгрузке ИмяТекущегоПраваДоступа_ПриОшибке: #ИмяТекущегоПраваДоступа Параметр2_ПриОшибке: #Параметр(2) Параметр3_ПриОшибке: #Параметр(3)
#КонецЕсли
После перезапуска 1С получаем расширенную ошибку:
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка в ограничении доступа к данным.
объект: ‘РегистрНакопления.ТоварыКОтгрузке’; право: ‘Чтение’
{(51, 185)}: Синтаксическая ошибка «:»
РасширеннаяДиагностика Роль_ЧтениеОстатковТоваровКОтгрузке ИмяТекущегоПраваДоступа_ПриОшибке<<?>>: Чтение Параметр2_ПриОшибке: Изменение Параметр3_ПриОшибке:
по причине:
{(51, 185)}: Синтаксическая ошибка «:»
РасширеннаяДиагностика Роль_ЧтениеОстатковТоваровКОтгрузке ИмяТекущегоПраваДоступа_ПриОшибке<<?>>: Чтение Параметр2_ПриОшибке: Изменение Параметр3_ПриОшибке:
Идём на первую вкладку у роли ЧтениеОстатковТоваровКОтгрузке, видим, что у выделенной роли «Чтение» оказалось «сбито» значение доступа, — проверяется «Изменение». Меняем на «Чтение», перезапускаем, — ошибка ушла.