Как настроить RLS в Комплексной автоматизации 1.1, чтобы менеджеры видели документы с пустым контрагентом

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

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

Почему RLS скрывает пустых контрагентов?

Рассмотрим механику работы системы. Когда мы включаем ограничение доступа, 1С модифицирует каждый запрос к базе данных, добавляя в него условие ГДЕ.... В типовом механизме КА 1.1 ограничение по контрагентам обычно строится на проверке вхождения контрагента в разрешенные Группы доступа контрагентов. Если в документе или записи регистра поле Контрагент содержит пустую ссылку, то система пытается найти для этой «пустоты» разрешенную группу доступа. Поскольку пустая ссылка не принадлежит ни к какой группе, условие RLS возвращает «Ложь», и запись скрывается из выборки. Это приводит к тому, что менеджеры видят некорректные остатки или неполную сумму продаж в отчетах.

Способ 1. Модификация шаблона RLS в конфигураторе

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

Для этого в конфигураторе найдем нужную роль (например, МенеджерПоПродажам) и перейдем на вкладку «Права». Выберем объект Справочник.Контрагенты или соответствующий регистр накопления (например, Продажи). В окне настройки RLS нам необходимо добавить условие проверки на пустую ссылку. Типовой запрос часто использует шаблоны, но в общем виде нам нужно добиться следующей логики:


ГДЕ (Контрагент.Ссылка В (&СписокРазрешенныхГрупп))
   ИЛИ (Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
   ИЛИ (Контрагент ЕСТЬ NULL)

Разберем, что дают эти строки. Условие ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) позволяет системе игнорировать ограничение, если поле не заполнено. Использование ЕСТЬ NULL необходимо для корректной обработки левых соединений в сложных запросах отчетов. После внесения таких правок документы типа ОтчетОРозничныхПродажах, где контрагент пуст, станут доступны для чтения.

Способ 2. Использование стратегии «от обратного» (Группы доступа)

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

Посмотрим на алгоритм настройки:

  1. Создаем специальную группу доступа контрагентов, например, «VIP» или «Секретные».
  2. В настройках прав доступа для обычных менеджеров указываем, что им разрешен доступ ко всем группам, кроме этой спецгруппы.
  3. Поскольку «пустой контрагент» не входит в список запрещенных групп, система по умолчанию разрешит его просмотр.

Выясним причину, почему это удобно: при создании нового контрагента, если менеджер забыл указать ему группу доступа, объект останется видимым для всех. Это избавляет от проблем, когда новые данные внезапно «исчезают» для сотрудников сразу после записи.

Способ 3. Ограничение по Ответственному или Подразделению

Проанализируем ситуацию, когда менеджеры должны видеть документы только своего отдела. В Отчете о розничных продажах и других первичных документах всегда заполнены реквизиты Ответственный или Подразделение. Мы можем настроить RLS не по справочнику Контрагенты, а по иерархии подразделений.

В этом случае логика доступа будет выглядеть так: «Пользователь видит все документы, где Подразделение совпадает с его Подразделением или входит в разрешенный список». При такой настройке заполненность контрагента вообще перестает влиять на видимость документа. Это особенно актуально для розничной торговли, где продажи идут «обезличенно».

Способ 4. Создание предопределенного контрагента «Розничный покупатель»

Если менять программный код RLS нельзя, а отчеты должны сходиться, можно применить административный метод. Заведем в справочнике Контрагенты специальный элемент, например, РозничныйПокупатель. Этому элементу присвоим общую группу доступа, которая открыта всем менеджерам.

Рассмотрим шаги по реализации:

  1. В настройках параметров учета или через подписки на события настроим автоматическую подстановку этого контрагента в документы, где он ранее оставался пустым.
  2. Для Отчетов о розничных продажах укажем этого контрагента в качестве значения по умолчанию.

Таким образом, поле Контрагент всегда будет заполнено ссылкой, имеющей корректную группу доступа, и RLS пропустит эти записи в отчеты Продажи и ПродажиСебестоимость.

Важное замечание по отчетам и регистрам

Многие забывают, что в Комплексной автоматизации 1.1 ограничение может быть установлено не только на справочники и документы, но и на Регистры накопления. Если вы настроили доступ к справочнику, но менеджер все равно видит пустые строки в отчете или не видит их вовсе, проверьте права на регистры:

Посмотрим на пример: если в регистре Продажи включен RLS по измерению Контрагент, то текст ограничения в регистре должен дублировать логику разрешения пустых ссылок, иначе данные будут отсекаться еще на этапе запроса к виртуальным таблицам регистра. Для внесения правок используйте конструкцию ГДЕ непосредственно в настройках доступа к регистрам в конфигураторе.

Резюме

Для решения проблемы видимости пустых контрагентов в RLS мы рекомендуем комбинированный подход: Во-первых, если есть ресурсы разработчика, внесите правку в шаблон RLS, добавив условие ИЛИ Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка). Во-вторых, проверьте, чтобы аналогичные условия были добавлены в права доступа к регистрам накопления, по которым строятся отчеты. В-третьих, рассмотрите возможность использования «разрешающей» политики доступа (доступно всё, что не запрещено), что значительно упрощает администрирование системы в долгосрочной перспективе.

← На главную