Паттерны работы с БСП (вход, профили доступа, допреквизиты)
Рекомендация
Рекомендация
Заголовок раздела «Рекомендация»Переиспользуемые приёмы для конфигураций на БСП. Каждый — про неочевидную модель данных, где «наивное» решение тихо ломается.
1. Управление входом пользователей
Заголовок раздела «1. Управление входом пользователей»ВходВПрограммуРазрешен в БСП — не реквизит, который пишется в регистр, а
вычисляемое OR всех auth-флагов ПользователяИБ (Стандартная, OpenID, OpenIDConnect,
ТокеномДоступа, ОС). Управлять входом — через запись СправочникОбъект.Пользователи
с заполненным ДополнительныеСвойства.ОписаниеПользователяИБ (см.
Catalogs/Пользователи/ObjectModule.bsl). Прямая запись регистра
СведенияОПользователях не работает / разваливается через время. Нельзя пометить
Недействителен = Истина пользователя с разрешённым входом — платформа бросит
исключение.
2. Профили групп доступа пользователя
Заголовок раздела «2. Профили групп доступа пользователя»Получая профили, через которые у пользователя есть доступ, нельзя выбирать только из
табчасти ГруппыДоступа.Пользователи: персональные группы доступа хранят
пользователя в реквизите шапки Пользователь. Брать оба источника одним
пакетным запросом; «административными» считать профили с ролями ПолныеПрава /
АдминистраторСистемы.
3. Значение допреквизита одним пакетным запросом
Заголовок раздела «3. Значение допреквизита одним пакетным запросом»Допреквизит БСП («Свойства») вытаскивать одним пакетным запросом по имени свойства,
без обхода в цикле и без разыменования ссылочного поля Свойство через точку.
Решение — JOIN с ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения по полю
Свойство и фильтр по Наименование.
Модель данных БСП здесь контринтуитивна: прямые записи в регистры и выборки «в лоб» дают код, который проходит тесты, но ломается на проде или теряет часть связей.
Когда не применять
Заголовок раздела «Когда не применять»В конфигурациях без БСП (самописные) этих подсистем нет — правила неприменимы.
В старых версиях БСП состав структур может отличаться — сверяйтесь с
ObjectModule.bsl своей версии, а не копируйте примеры вслепую.