Как правильно настроить RLS для нового регистра сведений в 1С:ERP и БСП?

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

При разработке в современных конфигурациях, таких как 1С:ERP Управление предприятием 2.0, Комплексная автоматизация или Управление торговлей 11, программисты часто сталкиваются с ситуацией, когда стандартное копирование шаблонов ограничений доступа (RLS) в новые объекты метаданных не дает результата. Пользователь просто перестает видеть любые записи в регистре, даже если данные соответствуют условиям. Разберем детально, почему это происходит и как правильно внедрить новый регистр в систему прав доступа на базе Библиотеки стандартных подсистем (БСП).

Причина проблемы: Производительный RLS

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

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

Шаг 1. Настройка роли и использование универсального шаблона

Первым делом нам необходимо модифицировать текст ограничения в роли. Вместо прямой вставки шаблона #ПоЗначениям, который может не сработать в режиме производительного RLS, нам следует использовать конструкцию, учитывающую оба режима работы системы (стандартный и универсальный). Это гарантирует стабильную работу прав при любых настройках программы.

Рассмотрим пример правильного оформления текста ограничения для права «Чтение» в вашей роли:


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
    #ДляОбъекта("Партнер")
#Иначе
    #ПоЗначениям( "РегистрСведений.НаименованиеНоменклатурыПартнеры","Чтение","", "ГруппыПартнеров","Партнер", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

В данном коде параметр #ДляОбъекта("Партнер") указывает системе, что при включенном универсальном механизме фильтрация должна идти по измерению Партнер, используя уже рассчитанные ключи доступа для этого справочника.

Шаг 2. Реализация логики в модуле менеджера регистра

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

Перейдем в модуль менеджера вашего регистра НаименованиеНоменклатурыПартнеры и добавим следующий код:


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

Эта процедура сообщает подсистеме управления доступом, что доступ к записям регистра жестко связан с правами на объект, указанный в измерении Партнер.

Шаг 3. Регистрация в определяемых типах

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

Найдем в дереве метаданных следующие объекты и добавим в их тип ваш новый регистр сведений:

  1. ОпределяемыйТип.ВладелецЗначенийКлючейДоступа — если регистр независимый и записи должны иметь свои ключи.
  2. ОпределяемыйТип.ВладелецЗначенийКлючейДоступаНаборЗаписей — критически важно для корректной работы RLS на уровне наборов записей регистров.

Шаг 4. Обновление вспомогательных данных системы

После внесения изменений в код и метаданные, нам необходимо заставить систему пересчитать свои внутренние таблицы. Обычного сохранения конфигурации (F7) недостаточно. Рассмотрим, какие административные действия нужно выполнить:

  1. Запустим сеанс «1С:Предприятие» с ключом командной строки /С ЗапуститьОбновлениеИнформационнойБазы. Это инициализирует механизмы БСП, зарегистрирует новый объект в справочнике Идентификаторы объектов метаданных и запустит первичную обработку новых ролей.
  2. В режиме «1С:Предприятие» перейдем в раздел Обслуживание — Управление доступом.
  3. Выполним регламентное задание «Обновление доступа на уровне записей». Если записей в регистре много, лучше воспользоваться обработкой «Обновление доступа на уровне записей» (она доступна в составе инструментов разработчика или через «Все функции») и запустить «Полное обновление» для нашего конкретного регистра.

Шаг 5. Нюансы с измерениями типа «Строка»

Проанализируем структуру вашего регистра: в нем есть измерение НаименованиеКлиента с типом Строка. Важно помнить, что RLS в 1С эффективно работает только со ссылочными типами данных. Если в будущем вы захотите ограничить доступ по строковому наименованию, вам придется сначала связать это наименование с реальным объектом (например, справочником Партнеры или Контрагенты) и накладывать ограничение уже на ссылку.

Важный совет: всегда проверяйте, заполнено ли поле ГруппаДоступа у тех партнеров, по которым вы тестируете RLS. Если у партнера не указана группа доступа, а в профиле групп доступа пользователя установлены ограничения по группам, такой партнер (и все связанные с ним записи в вашем регистре) будет скрыт, так как он не попадает ни в одну разрешенную группу.

Таким образом, решив задачу комплексно — через настройку шаблона в роли, программный интерфейс в модуле менеджера и регистрацию в определяемых типах — мы обеспечим надежную и быструю работу системы прав доступа для любого нового объекта в 1С:ERP.

← На главную