Механизм RLS (Record Level Security) — это мощный инструмент платформы «1С:Предприятие», позволяющий ограничивать доступ к данным на уровне отдельных записей базы данных. Однако при его внедрении в конфигурации, работающие на обычных формах (например, 1С:Управление торговлей 10.3), администраторы и разработчики часто сталкиваются с проблемой: пользователь видит только «своих» контрагентов, но при попытке создать нового получает ошибку нарушения прав доступа.
В этой статье мы подробно разберем, почему возникает такая ситуация, проанализируем технические нюансы работы ограничений и найдем способы автоматизации процесса, чтобы работа пользователей оставалась комфортной и безопасной.
Основная причина, по которой пользователь с включенным RLS не может нажать кнопку «Записать» в карточке нового контрагента, кроется в логике проверки условий доступа. Давайте проанализируем, как система «видит» попытку создания записи. Типичное правило RLS для справочника Контрагенты выглядит следующим образом:
ГДЕ ГруппаДоступа В (&СписокРазрешенныхГрупп)
ИЛИ ГруппаДоступа ЕСТЬ NULL
Однако во многих типовых настройках условие ЕСТЬ NULL опускается в целях безопасности. В этом случае при создании нового элемента поле ГруппаДоступа изначально является пустым. Когда срабатывает транзакция записи, SQL-сервер выполняет проверку: соответствует ли записываемый объект условиям, разрешенным для данного пользователя. Если поле ГруппаДоступа пустое, а в списке разрешенных групп пустого значения нет, система блокирует запись. С точки зрения 1С это выглядит как нарушение прав доступа при попытке добавления объекта.
Как показывает практика и обсуждения на форумах, самым быстрым способом решения проблемы является обучение пользователя. Чтобы контрагент был успешно создан, необходимо:
В этом случае в момент фиксации транзакции в базе данных поле уже не будет пустым, и система пропустит запись, так как она соответствует правилам RLS.
Заставлять пользователей каждый раз вручную выбирать группу доступа — это путь, ведущий к ошибкам и лишним трудозатратам. В УТ 10.3 предусмотрен штатный механизм для решения этой задачи. Разберем по шагам, как настроить автоматическое заполнение:
После этой настройки при нажатии кнопки «Создать» в справочнике Контрагенты поле группы доступа будет заполнено автоматически. Пользователю останется только ввести наименование и ИНН, а запись пройдет без ошибок RLS.
Иногда даже при заполненной группе доступа пользователь получает отказ. Рассмотрим ситуацию, когда в справочнике используется иерархия (папки). Если в правилах RLS настроено ограничение не только по реквизиту ГруппаДоступа, но и по родительской папке, может возникнуть конфликт.
Если пользователь пытается создать контрагента в «корне» справочника или в папке, на которую у него нет прав «Изменение» или «Добавление», система отклонит операцию. Выясним причину: запись элемента в папку — это модификация иерархических связей. Поэтому важно убедиться, что пользователю разрешено создание объектов внутри конкретных групп справочника.
В конфигурации Управление торговлей 10.3 запись контрагента часто сопровождается программным созданием основного договора. Это происходит в подписках на события или в процедуре ПередЗаписью модуля объекта.
Если на справочник ДоговорыКонтрагентов также наложены ограничения RLS, может возникнуть «каскадная» ошибка:
Для решения этой проблемы необходимо проверить правила RLS для договоров и убедиться, что при программном создании договора в коде прописано заполнение группы доступа, аналогичной группе доступа контрагента.
Если причина ошибки не очевидна, программисту рекомендуется использовать консоль запросов. Посмотрим, как это сделать правильно:
ВЫБРАТЬ * ИЗ Справочник.Контрагенты КАК Контрагенты.Проанализировав результат, мы увидим, какие записи доступны пользователю. Если при попытке программного создания объекта (через код) он не появляется в выборке с учетом RLS — значит, установленные значения реквизитов не попадают в «окно» разрешенных данных. Это верный признак того, что логику заполнения реквизитов при записи нужно корректировать.
Важно различать эти два права в контексте RLS. Рассмотрим подробнее:
В УТ 10.3 на обычных формах часто после записи объекта происходит его повторное перечитывание или обновление экранных форм. Если у пользователя есть право на «Добавление» (по определенной группе доступа), но нет права на «Чтение» или «Изменение» этой же группы, он сможет нажать кнопку «ОК», объект создастся, но сразу после этого пользователь получит ошибку «Объект не найден» или «Нарушение прав доступа», так как система не сможет отобразить ему только что созданный элемент. Всегда проверяйте, чтобы права на чтение, добавление и изменение для разрешенных групп доступа выдавались в комплексе.
Работа с RLS требует дисциплины в заполнении данных. Ошибка при создании контрагента в 1С:УТ 10.3 — это не программный сбой, а следствие работы системы безопасности. Использование настроек пользователя по умолчанию и внимательный анализ связанных объектов (договоров) позволяют полностью устранить эти сложности, обеспечив стабильную работу пользователей в условиях ограниченного доступа.