Перейти к содержимому

Паттерны работы с БСП (вход, профили доступа, допреквизиты)

Рекомендация

диагностикаQueryNestedFieldsByDot

#бсп#запросы

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

ВходВПрограммуРазрешен в БСП — не реквизит, который пишется в регистр, а вычисляемое OR всех auth-флагов ПользователяИБ (Стандартная, OpenID, OpenIDConnect, ТокеномДоступа, ОС). Управлять входом — через запись СправочникОбъект.Пользователи с заполненным ДополнительныеСвойства.ОписаниеПользователяИБ (см. Catalogs/Пользователи/ObjectModule.bsl). Прямая запись регистра СведенияОПользователях не работает / разваливается через время. Нельзя пометить Недействителен = Истина пользователя с разрешённым входом — платформа бросит исключение.

Получая профили, через которые у пользователя есть доступ, нельзя выбирать только из табчасти ГруппыДоступа.Пользователи: персональные группы доступа хранят пользователя в реквизите шапки Пользователь. Брать оба источника одним пакетным запросом; «административными» считать профили с ролями ПолныеПрава / АдминистраторСистемы.

3. Значение допреквизита одним пакетным запросом

Заголовок раздела «3. Значение допреквизита одним пакетным запросом»

Допреквизит БСП («Свойства») вытаскивать одним пакетным запросом по имени свойства, без обхода в цикле и без разыменования ссылочного поля Свойство через точку. Решение — JOIN с ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения по полю Свойство и фильтр по Наименование.

Модель данных БСП здесь контринтуитивна: прямые записи в регистры и выборки «в лоб» дают код, который проходит тесты, но ломается на проде или теряет часть связей.

В конфигурациях без БСП (самописные) этих подсистем нет — правила неприменимы. В старых версиях БСП состав структур может отличаться — сверяйтесь с ObjectModule.bsl своей версии, а не копируйте примеры вслепую.