Как ограничить доступ к определенным типам цен номенклатуры в 1С:Управление торговлей 10.3?

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

При работе в конфигурации 1С:Управление торговлей ред. 10.3 часто возникает необходимость скрыть от рядовых пользователей или менеджеров чувствительные данные, например, закупочные цены или себестоимость. Для этого требуется ограничить возможность выбора и просмотра определенных видов цен.

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

Базовое ограничение через RLS в ролях пользователя

Для полного закрытия доступа к элементу справочника на уровне базы данных применяется механизм RLS (Record Level Security) — ограничение доступа на уровне записей. Чтобы настроить его для конкретного пользователя, проанализируем порядок действий:

  1. Откроем конфигуратор 1C и найдем роль, назначенную пользователю (например, персональную роль пользователя или специальную доработанную роль).
  2. В дереве метаданных роли перейдем к справочнику ТипыЦенНоменклатуры.
  3. На вкладке Права для права Чтение установим ограничение доступа (RLS).

Рассмотрим варианты условий, которые можно прописать в ограничении RLS:

Простое условие по коду элемента (например, исключение цены с кодом "000000001"):

ТипыЦенНоменклатуры ГДЕ ТипыЦенНоменклатуры.Код <> "000000001"

Разберем также вариант условия по наименованию цены:

ТипыЦенНоменклатуры ГДЕ ТипыЦенНоменклатуры.Наименование = "Оптовая"

При использовании прямого условия по коду или наименованию пользователь перестанет видеть запрещенные элементы в справочнике ТипыЦенНоменклатуры при подборе и выборе в документах.

Правильный подход: использование параметров сеанса

Прямое жесткое кодирование наименований или кодов непосредственно в RLS-запросах роли считается некорректным по нескольким причинам: это замедляет работу СУБД, а также приводит к сбоям при переименовании типа цены или изменении его кода.

Разберем более грамотную архитектурную реализацию через ПараметрыСеанса:

  1. Создадим в конфигураторе новый параметр сеанса, например ДоступныеТипыЦен, с типом ФиксированныйМассив или Массив элементов справочника ТипыЦенНоменклатуры.
  2. При начале работы системы (в модуле сеанса или при инициализации прав пользователя) заполним этот параметр сеанса списком разрешенных ссылок для текущего пользователя.
  3. В тексте RLS роли укажем условие вхождения ссылки в параметр сеанса:

ТипыЦенНоменклатуры ГДЕ Ссылка В (&ДоступныеТипыЦен)

Кроме ограничения самого справочника ТипыЦенНоменклатуры, крайне важно наложить такое же условие RLS на регистр сведений ЦеныНоменклатуры по измерению ТипЦен:

ЦеныНоменклатуры ГДЕ ТипЦен В (&ДоступныеТипыЦен)

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

Ограничения платформы и особенности работы RLS

Проанализируем риски и особенности, с которыми можно столкнуться при использовании RLS для типов цен:

  1. Ошибки доступа в отчетах и документах: Если типовые запросы в отчетах или документах обращаются к ограниченным таблицам без ключевого слова РАЗРЕШЕННЫЕ, система при попытке прочитать закрытую запись выбросит критическую ошибку «Недостаточно прав доступа».
  2. Отображение битых ссылок: В проведенных ранее документах или журналах вместо скрытого типа цены пользователь увидит надпись <Объект не найден>.
  3. Зависимые (расчетные) цены: В 1С:УТ 10.3 расчетные цены часто вычисляются на основании базовых (например, «Оптовая = Закупочная + 15%»). Если заблокировать пользователю доступ к базовой цене (Закупочной), то пересчет зависимых цен в документах не сможет прочитать исходные данные, что приведет к ошибкам или нулевым ценам.
  4. Влияние на производительность: Каждое условие RLS добавляет вложенный подзапрос к каждому SQL-запросу чтения. Это может вызывать падение скорости работы с документами и регистрами цен.

Альтернативные способы ограничения без применения RLS

Если наложение RLS приводит к снижению производительности или постоянным ошибкам прав, рассмотрим альтернативные методы решения задачи:

1. Интерфейсное ограничение на уровнях форм:

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

2. Использование штатных дополнительных прав пользователей:

В 1С:УТ 10.3 предустановлен механизм дополнительных прав (меню Сервис — Пользователи — Настройка дополнительных прав пользователей). С его помощью можно настроить следующие флаги:

  1. Запретить отклонение от цены номенклатуры: не дает менеджеру возможность изменить цену вручную ниже установленного типа.
  2. Запретить изменение цен и скидок в документах: блокирует редактирование цен в табличных частях.

Данный подход позволяет защитить коммерческие данные и контролировать продажи без сложной доработки ролей и снижения производительности базы данных.

← На главную