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