При настройке прав доступа на уровне записей (RLS) в программе 1С:Управление торговлей 11 администраторы часто сталкиваются с ситуацией, когда ограничение на справочник номенклатуры работает корректно, но типовые отчеты (например, «Продажи» или «Выручка и себестоимость») продолжают показывать строки с запрещенными товарами. Вместо наименования номенклатуры пользователь видит надпись «Объект не найден», при этом все количественные и суммовые показатели остаются доступными. Рассмотрим, почему это происходит и как правильно настроить систему, чтобы полностью скрыть обороты по запрещенным группам номенклатуры.
Для начала проанализируем механику работы платформы 1С. Когда мы настраиваем RLS только для справочника Номенклатура, мы запрещаем пользователю видеть записи в конкретной таблице базы данных. Однако данные о продажах хранятся в других таблицах — регистрах накопления (например, ВыручкаИСебестоимостьПродаж). В этих регистрах номенклатура представлена в виде ссылки (уникального идентификатора GUID).
Когда пользователь формирует отчет, система выполняет следующие действия:
РАЗРЕШЕННЫЕ. Оно говорит системе: «Выбери только те записи, на которые у пользователя есть права». Но поскольку на сам регистр ограничений нет, выбираются все строки.Номенклатура. Так как доступа к конкретному элементу у пользователя нет, платформа возвращает стандартную заглушку «Объект не найден».Таким образом, мы видим ситуацию, когда данные о продажах «видны», а их «владелец» (товар) — «скрыт». Чтобы решить задачу, нам необходимо настроить ограничение прав доступа на уровне самих регистров.
В современных версиях УТ 11 (начиная с 11.4 и выше) для разделения прав используется механизм «Группы доступа номенклатуры». Это специальный справочник, который позволяет объединять товары в логические группы для целей безопасности, независимо от иерархии в справочнике номенклатуры.
Выполним следующие действия:
Номенклатура) заполним поле ГруппаДоступа. Без заполнения этого поля RLS по группам работать не будет.Выясним, какие роли дают пользователю право на чтение регистров продаж. Посмотрим на профиль групп доступа, назначенный пользователю. В типовой конфигурации УТ 11 за продажи обычно отвечают роли, связанные с чтением регистра ВыручкаИСебестоимостьПродаж.
Важно помнить правило 1С: Права суммируются. Если пользователю назначено две роли, и в одной RLS настроен, а в другой чтение регистра разрешено без ограничений, то пользователь увидит все данные. Проанализируем список ролей пользователя и найдем ту, которая дает «лишние» права.
Чтобы отчеты не выводили лишние строки, необходимо, чтобы ограничение #ПоЗначениям было прописано не только для справочника, но и для регистра накопления. В типовых конфигурациях это уже сделано для большинства ролей. Нам нужно лишь убедиться, что в Профиле групп доступа правильно настроены виды доступа.
Рассмотрим алгоритм настройки в профиле:
Группы номенклатуры.Группы доступа номенклатуры, которые разрешены данному пользователю.При включении RLS на крупные регистры накопления (такие как ВыручкаИСебестоимостьПродаж) производительность системы может снизиться. В 1С v8.3 реализован производительный режим RLS, который использует заранее рассчитанные таблицы прав доступа.
Проанализируем ситуацию: если вы внесли изменения в настройки прав, но отчет по-прежнему показывает «Объект не найден», возможно, данные в таблицах прав еще не обновились. Посмотрим на состояние регламентного задания Обновление прав доступа (оперативное). Для принудительного обновления можно запустить обработку «Управление доступом» из раздела администрирования.
Если вы создаете свою роль или дорабатываете типовую, убедитесь, что в ограничении доступа на чтение регистра накопления прописан правильный шаблон. Посмотрим на пример стандартного шаблона 1С:
#ПоЗначениям( "РегистрНакопления.ВыручкаИСебестоимостьПродаж", "Чтение", "",
"Номенклатура", "ГруппаДоступа",
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
В данном коде параметр ГруппаДоступа указывает системе, что фильтрация данных регистра должна происходить на основании значения реквизита ГруппаДоступа, хранящегося в справочнике Номенклатура, ссылка на который есть в самом регистре.
Подведем итог. Чтобы в отчете продажи не выводились запрещенные данные, выполним следующие шаги:
ВыручкаИСебестоимостьПродаж или Продажи.После правильной настройки регистр будет возвращать только те записи, ссылки на номенклатуру в которых разрешены пользователю. Ключевое слово РАЗРЕШЕННЫЕ в запросе отчета отсечет все строки с запрещенным GUID еще на уровне базы данных, и строки с «Объект не найден» полностью исчезнут из отчета, как и соответствующие им суммы.