Как настроить RLS по группам номенклатуры в УТ 11, чтобы в отчетах не отображались данные с текстом Объект не найден?

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

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

Разберем причину возникновения «Объект не найден»

Для начала проанализируем механику работы платформы 1С. Когда мы настраиваем RLS только для справочника Номенклатура, мы запрещаем пользователю видеть записи в конкретной таблице базы данных. Однако данные о продажах хранятся в других таблицах — регистрах накопления (например, ВыручкаИСебестоимостьПродаж). В этих регистрах номенклатура представлена в виде ссылки (уникального идентификатора GUID).

Когда пользователь формирует отчет, система выполняет следующие действия:

  1. Запрос обращается к регистру накопления. Если на чтение этого регистра у пользователя нет ограничений (RLS не настроен), система выбирает все записи, включая числовые показатели (количество, выручка).
  2. В запросе используется ключевое слово РАЗРЕШЕННЫЕ. Оно говорит системе: «Выбери только те записи, на которые у пользователя есть права». Но поскольку на сам регистр ограничений нет, выбираются все строки.
  3. При выводе данных в отчет система пытается получить строковое представление номенклатуры по ссылке из регистра. В этот момент срабатывает RLS справочника Номенклатура. Так как доступа к конкретному элементу у пользователя нет, платформа возвращает стандартную заглушку «Объект не найден».

Таким образом, мы видим ситуацию, когда данные о продажах «видны», а их «владелец» (товар) — «скрыт». Чтобы решить задачу, нам необходимо настроить ограничение прав доступа на уровне самих регистров.

Шаг 1: Настройка групп доступа номенклатуры

В современных версиях УТ 11 (начиная с 11.4 и выше) для разделения прав используется механизм «Группы доступа номенклатуры». Это специальный справочник, который позволяет объединять товары в логические группы для целей безопасности, независимо от иерархии в справочнике номенклатуры.

Выполним следующие действия:

  1. Перейдем в раздел НСИ и администрирование — Настройка пользователей и прав — Группы доступа.
  2. Убедимся, что включена возможность использования групп доступа для номенклатуры.
  3. В карточке каждого товара (справочник Номенклатура) заполним поле ГруппаДоступа. Без заполнения этого поля RLS по группам работать не будет.

Шаг 2: Проверка ролей и профилей групп доступа

Выясним, какие роли дают пользователю право на чтение регистров продаж. Посмотрим на профиль групп доступа, назначенный пользователю. В типовой конфигурации УТ 11 за продажи обычно отвечают роли, связанные с чтением регистра ВыручкаИСебестоимостьПродаж.

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

Шаг 3: Настройка RLS на регистры накопления

Чтобы отчеты не выводили лишние строки, необходимо, чтобы ограничение #ПоЗначениям было прописано не только для справочника, но и для регистра накопления. В типовых конфигурациях это уже сделано для большинства ролей. Нам нужно лишь убедиться, что в Профиле групп доступа правильно настроены виды доступа.

Рассмотрим алгоритм настройки в профиле:

  1. Откроем нужный Профиль групп доступа.
  2. На закладке Виды доступа найдем строку Группы номенклатуры.
  3. Установим значение доступа: «Все запрещены, исключения назначаются в группах доступа».
  4. После этого в конкретной Группе доступа (где включен этот профиль и добавлены пользователи) укажем только те Группы доступа номенклатуры, которые разрешены данному пользователю.

Шаг 4: Использование «Производительного режима» RLS

При включении RLS на крупные регистры накопления (такие как ВыручкаИСебестоимостьПродаж) производительность системы может снизиться. В 1С v8.3 реализован производительный режим RLS, который использует заранее рассчитанные таблицы прав доступа.

Проанализируем ситуацию: если вы внесли изменения в настройки прав, но отчет по-прежнему показывает «Объект не найден», возможно, данные в таблицах прав еще не обновились. Посмотрим на состояние регламентного задания Обновление прав доступа (оперативное). Для принудительного обновления можно запустить обработку «Управление доступом» из раздела администрирования.

Пример настройки в конфигураторе (для разработчиков)

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


#ПоЗначениям( "РегистрНакопления.ВыручкаИСебестоимостьПродаж", "Чтение", "", 
"Номенклатура", "ГруппаДоступа", 
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

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

Резюме для решения проблемы

Подведем итог. Чтобы в отчете продажи не выводились запрещенные данные, выполним следующие шаги:

После правильной настройки регистр будет возвращать только те записи, ссылки на номенклатуру в которых разрешены пользователю. Ключевое слово РАЗРЕШЕННЫЕ в запросе отчета отсечет все строки с запрещенным GUID еще на уровне базы данных, и строки с «Объект не найден» полностью исчезнут из отчета, как и соответствующие им суммы.

← На главную