Как ограничить доступ к справочнику Партнеры по признаку Поставщик в Управлении торговлей 11?

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

При работе с современными конфигурациями на базе 1С:Предприятие 8.3, такими как Управление торговлей 11.5, специалисты часто сталкиваются с задачей тонкой настройки прав доступа. Одной из типичных задач является ограничение видимости справочника Партнеры: например, когда определенному пользователю нужно видеть только тех партнеров, у которых установлен флаг Поставщик. Однако при использовании современного производительного режима ограничений доступа (RLS) обычное копирование типовой роли и добавление простого условия в конструкторе ограничений часто приводит к тому, что пользователь перестает видеть данные вообще.

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

Почему стандартное ограничение в роли не работает?

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

Если вы просто меняете текст ограничения в роли (например, пишите ГДЕ Поставщик = ИСТИНА), система может игнорировать это условие, так как в таблицах ключей доступа нет информации о том, что реквизит Поставщик является значимым для разграничения прав. В итоге система не находит подходящих ключей и блокирует доступ ко всем записям справочника.

Решение 1: Программная доработка через расширение

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

Выясним причину: нам нужно сообщить системе, что поле Поставщик должно учитываться при расчете прав доступа. Для этого в модуле менеджера справочника Партнеры существует специальная процедура ПриЗаполненииОграниченияДоступа. Нам необходимо переопределить её в расширении.

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

  1. Создайте новое расширение и добавьте в него справочник Партнеры.
  2. В модуле менеджера справочника Партнеры создайте обработчик процедуры ПриЗаполненииОграниченияДоступа.
  3. Добавьте программный код, который определит логику фильтрации.

Пример программного кода для модуля менеджера:


Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    
    // Описываем логику ограничения: разрешаем чтение и изменение,
    // если выполняется условие по значению реквизита Поставщик
    Ограничение.Текст = 
    "РазрешитьЧтениеИзменение
    |ГДЕ
    |   ЗначениеРазрешено(Ссылка)
    |   И Поставщик = ИСТИНА";
    
КонецПроцедуры

Обратите внимание, что использование функции ЗначениеРазрешено(Ссылка) позволяет сохранить базовые проверки (например, по группам доступа партнеров), а добавление И Поставщик = ИСТИНА накладывает дополнительный жесткий фильтр. После внесения изменений необходимо обновить ключи доступа (об этом ниже).

Решение 2: Настройка через группы доступа (без программирования)

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

Рассмотрим подробнее этот алгоритм:

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

Этот метод является наиболее безопасным при обновлениях конфигурации, так как он использует типовую архитектуру 1С.

Критически важный шаг: Обновление ключей доступа

Какое бы решение вы ни выбрали (программное или административное), в производительном режиме изменения не вступят в силу мгновенно. Система должна пересчитать записи в служебных таблицах ключей. Если вы пропустите этот шаг, пользователь по-прежнему будет видеть пустой список или получать ошибку доступа.

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

  1. Зайдите в базу под пользователем с правами Администратор.
  2. Перейдите в Обслуживание — Управление доступом.
  3. Найдите раздел Обновление ключей доступа.
  4. Запустите регламентное задание Обновление ключей доступа (все) или выполните оперативное обновление для справочника Партнеры.

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

Особенности работы со связанными объектами

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

Для корректной работы рекомендуется:

Таким образом, настройка доступа в УТ 11 требует комплексного подхода: понимания режима работы RLS, правильной модификации кода в модуле менеджера (при необходимости) и обязательного регламентного обновления ключей доступа в пользовательском режиме.

← На главную