Почему пользователь с RLS не может создать контрагента в 1С:Управление торговлей 10.3 и как это исправить

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

Механизм RLS (Record Level Security) — это мощный инструмент платформы «1С:Предприятие», позволяющий ограничивать доступ к данным на уровне отдельных записей базы данных. Однако при его внедрении в конфигурации, работающие на обычных формах (например, 1С:Управление торговлей 10.3), администраторы и разработчики часто сталкиваются с проблемой: пользователь видит только «своих» контрагентов, но при попытке создать нового получает ошибку нарушения прав доступа.

В этой статье мы подробно разберем, почему возникает такая ситуация, проанализируем технические нюансы работы ограничений и найдем способы автоматизации процесса, чтобы работа пользователей оставалась комфортной и безопасной.

Разберем причину возникновения ошибки

Основная причина, по которой пользователь с включенным RLS не может нажать кнопку «Записать» в карточке нового контрагента, кроется в логике проверки условий доступа. Давайте проанализируем, как система «видит» попытку создания записи. Типичное правило RLS для справочника Контрагенты выглядит следующим образом:


ГДЕ ГруппаДоступа В (&СписокРазрешенныхГрупп)
ИЛИ ГруппаДоступа ЕСТЬ NULL

Однако во многих типовых настройках условие ЕСТЬ NULL опускается в целях безопасности. В этом случае при создании нового элемента поле ГруппаДоступа изначально является пустым. Когда срабатывает транзакция записи, SQL-сервер выполняет проверку: соответствует ли записываемый объект условиям, разрешенным для данного пользователя. Если поле ГруппаДоступа пустое, а в списке разрешенных групп пустого значения нет, система блокирует запись. С точки зрения 1С это выглядит как нарушение прав доступа при попытке добавления объекта.

Решение проблемы через ручное заполнение

Как показывает практика и обсуждения на форумах, самым быстрым способом решения проблемы является обучение пользователя. Чтобы контрагент был успешно создан, необходимо:

  1. Открыть форму создания нового контрагента.
  2. Сразу перейти к полю «Группа доступа».
  3. Выбрать из списка ту группу, к которой у данного пользователя есть права (чтение и добавление).
  4. Заполнить остальные реквизиты и нажать «Записать».

В этом случае в момент фиксации транзакции в базе данных поле уже не будет пустым, и система пропустит запись, так как она соответствует правилам RLS.

Автоматизация с помощью настроек пользователя

Заставлять пользователей каждый раз вручную выбирать группу доступа — это путь, ведущий к ошибкам и лишним трудозатратам. В УТ 10.3 предусмотрен штатный механизм для решения этой задачи. Разберем по шагам, как настроить автоматическое заполнение:

  1. Зайдем в интерфейс «Администрирование» или «Сервис».
  2. Перейдем в справочник «Настройки пользователя».
  3. Найдем конкретного сотрудника и в списке настроек выберем пункт «Основная группа доступа контрагентов».
  4. Установим значение, которое должно подставляться по умолчанию.

После этой настройки при нажатии кнопки «Создать» в справочнике Контрагенты поле группы доступа будет заполнено автоматически. Пользователю останется только ввести наименование и ИНН, а запись пройдет без ошибок RLS.

Проанализируем влияние иерархии справочника

Иногда даже при заполненной группе доступа пользователь получает отказ. Рассмотрим ситуацию, когда в справочнике используется иерархия (папки). Если в правилах RLS настроено ограничение не только по реквизиту ГруппаДоступа, но и по родительской папке, может возникнуть конфликт.

Если пользователь пытается создать контрагента в «корне» справочника или в папке, на которую у него нет прав «Изменение» или «Добавление», система отклонит операцию. Выясним причину: запись элемента в папку — это модификация иерархических связей. Поэтому важно убедиться, что пользователю разрешено создание объектов внутри конкретных групп справочника.

Связанные объекты: ловушка при создании договоров

В конфигурации Управление торговлей 10.3 запись контрагента часто сопровождается программным созданием основного договора. Это происходит в подписках на события или в процедуре ПередЗаписью модуля объекта.

Если на справочник ДоговорыКонтрагентов также наложены ограничения RLS, может возникнуть «каскадная» ошибка:

Для решения этой проблемы необходимо проверить правила RLS для договоров и убедиться, что при программном создании договора в коде прописано заполнение группы доступа, аналогичной группе доступа контрагента.

Методы диагностики: использование консоли запросов

Если причина ошибки не очевидна, программисту рекомендуется использовать консоль запросов. Посмотрим, как это сделать правильно:

  1. Откроем консоль запросов под полными правами.
  2. Напишем простой запрос к справочнику: ВЫБРАТЬ * ИЗ Справочник.Контрагенты КАК Контрагенты.
  3. Включим в настройках консоли флаг «Выполнить с учетом RLS».
  4. Выберем пользователя, у которого возникают проблемы.

Проанализировав результат, мы увидим, какие записи доступны пользователю. Если при попытке программного создания объекта (через код) он не появляется в выборке с учетом RLS — значит, установленные значения реквизитов не попадают в «окно» разрешенных данных. Это верный признак того, что логику заполнения реквизитов при записи нужно корректировать.

Особенности прав «Добавление» и «Изменение»

Важно различать эти два права в контексте RLS. Рассмотрим подробнее:

В УТ 10.3 на обычных формах часто после записи объекта происходит его повторное перечитывание или обновление экранных форм. Если у пользователя есть право на «Добавление» (по определенной группе доступа), но нет права на «Чтение» или «Изменение» этой же группы, он сможет нажать кнопку «ОК», объект создастся, но сразу после этого пользователь получит ошибку «Объект не найден» или «Нарушение прав доступа», так как система не сможет отобразить ему только что созданный элемент. Всегда проверяйте, чтобы права на чтение, добавление и изменение для разрешенных групп доступа выдавались в комплексе.

Заключение

Работа с RLS требует дисциплины в заполнении данных. Ошибка при создании контрагента в 1С:УТ 10.3 — это не программный сбой, а следствие работы системы безопасности. Использование настроек пользователя по умолчанию и внимательный анализ связанных объектов (договоров) позволяют полностью устранить эти сложности, обеспечив стабильную работу пользователей в условиях ограниченного доступа.

← На главную