Ошибка RLS «У пользователя нет прав для исполнения операции над базой данных» при записи банковских счетов: причины и решение

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

После очередного обновления типовой конфигурации 1С:Бухгалтерия предприятия, редакция 3.0 администраторы и разработчики часто сталкиваются с неприятной ситуацией. Бухгалтер, который ранее без проблем создавал и редактировал расчетные счета компаний, внезапно теряет эту возможность. При попытке нажать кнопку «Записать» в форме банковского счета система выдает критическую ошибку безопасности: «У пользователя нет прав для исполнения операции над базой данных».

При этом у пользователя назначена специализированная роль Редактирование банковских счетов, а в журнале регистрации фиксируется событие отказа в доступе на изменение метаданных справочника Банковские счета. Ситуация усложняется тем, что в настройках пользователей и прав флаг «Ограничивать доступ на уровне записей» (RLS) может быть полностью отключен. В этой статье мы подробно разберем, почему так происходит, как устроен этот механизм на уровне платформы и БСП, и как решить проблему по шагам.

Выясняем причину: как работает шаблон RLS в справочнике банковских счетов

Для начала проанализируем структуру ограничений доступа, которая прописана непосредственно в роли Редактирование банковских счетов. Шаблон ограничения доступа на уровне записей выглядит следующим образом:


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямИНаборамРасширенный("Справочник.БанковскиеСчета", "",
"",
"",
"",
"ГруппыФизическихЛиц,Огранизации", "Т.Владелец",
"И",
"ПравоИзменения","Т.Владелец",
"",
"","",
"",
"","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","")
#КонецЕсли

Давайте разберем по шагам, как платформа интерпретирует этот код, и почему ошибка возникает даже при выключенной в пользовательском интерфейсе галке ограничения доступа:

  1. Проверка параметра сеанса: Условие #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально проверяет, включен ли в системе новый производительный (универсальный) режим RLS. Если в настройках прав флаг ограничения доступа снят, то данный параметр сеанса принимает значение Ложь.
  2. Переход к ветке #Иначе: Платформа начинает компилировать и выполнять код из ветки #Иначе, где вызывается стандартный шаблон Библиотеки стандартных подсистем (БСП) #ПоЗначениямИНаборамРасширенный. Даже если администрирование прав RLS отключено глобально, правила компиляции шаблонов ролей внутри платформы 1С продолжают действовать.
  3. Анализ зависимости прав (ПравоИзменения): Обратите внимание на строку "ПравоИзменения", "Т.Владелец" в параметрах шаблона. Справочник БанковскиеСчета является подчиненным объектом. Его владельцем (поле Т.Владелец) для организаций выступает справочник Организации.
  4. Логика платформенного ограничения: Конструкция "ПравоИзменения" жестко связывает возможность редактирования подчиненной записи с наличием у пользователя физических прав на редактирование самого владельца. Другими словами, платформа 1С на уровне базы данных запрещает изменять банковский счет организации, если у пользователя в текущем наборе ролей нет прав на изменение элемента справочника Организации.

Таким образом, даже если в интерфейсе отключен RLS, физические ограничения платформы по проверке прав связанных объектов все равно срабатывают. Если у бухгалтера есть роль для редактирования банковских счетов, но нет роли, позволяющей изменять реквизиты самой организации, запись расчетного счета будет заблокирована платформой.

Решение 1. Назначение роли «Редактирование сведений об организациях»

Самый простой и быстрый способ вернуть бухгалтеру возможность редактировать банковские счета — предоставить ему роль, которая дает право на изменение справочника Организации. В типовых конфигурациях 1С:Бухгалтерия предприятия за это отвечает роль «Редактирование сведений об организациях» (в конфигураторе она имеет системное имя ДобавлениеИзменениеСведенийОбОрганизации).

Рассмотрим, как правильно выдать эти права в пользовательском режиме, не прибегая к изменению конфигурации в режиме «Конфигуратор»:

  1. Перейдите в раздел Администрирование, затем выберите пункт Настройки пользователей и прав.
  2. Откройте гиперссылку Группы доступа.
  3. Найдите профиль или группу доступа, в которую входит проблемный пользователь (например, создайте новый профиль «Добавление и изменение расчетных счетов»).
  4. В списке разрешенных ролей добавьте флаг напротив роли Редактирование сведений об организациях (или Добавление и изменение сведений об организациях в зависимости от релиза конфигурации).
  5. Сохраните изменения и попросите пользователя перезапустить сеанс работы с базой данных 1С.

Важное примечание: В последних релизах 1С разработчики сознательно исключили права на изменение реквизитов организаций из стандартного профиля «Бухгалтер» из соображений безопасности (чтобы исключить случайное изменение ИНН, КПП или юридического адреса компании рядовыми сотрудниками). Поэтому точечное добавление этой роли решает коллизию прав.

Решение 2. Переход на универсальный (производительный) режим RLS

Если в вашей организации требуется строгое разграничение прав, и вы не хотите давать рядовым бухгалтерам право на редактирование справочника Организации, можно перевести систему на современный универсальный механизм RLS. В этом случае начнет работать ветка шаблона #Тогда, вызывающая конструкцию #ДляОбъекта(""), которая обрабатывает зависимости прав более гибко.

Для перехода на универсальный режим выполните следующие действия:

  1. Перейдите в меню Функции для технического специалиста (в старых версиях — «Все функции»).
  2. Найдите и откройте константу ОграничениеДоступаНаУровнеЗаписейУниверсально.
  3. Установите значение константы в Истина.
  4. В разделе Администрирование — Настройки пользователей и прав включите флаг Ограничивать доступ на уровне записей.
  5. Запустите регламентное задание Заполнение данных для ограничения доступа (или дождитесь его автоматического выполнения), чтобы система пересчитала и заполнила служебные регистры БСП.

При использовании универсального режима ограничения доступа система начнет анализировать права на основе записей в специальных регистрах БСП. Это избавит вас от жестких платформенных блокировок при записи подчиненных справочников и существенно повысит общую производительность базы данных при работе под ограниченными правами.

← На главную