Как программно создавать пользователей и назначать группы доступа в базах на БСП через Обновлятор 1С?

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

При автоматизации обслуживания большого количества баз данных 1С (например, через Обновлятор 1С) часто возникает задача массового создания пользователей. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «Бухгалтерия предприятия 3.0» или «Зарплата и управление персоналом 3.1», этот процесс значительно сложнее, чем в старых версиях. Рассмотрим подробно, как правильно решить эту задачу, избежав типичных ошибок. Для регулярного проведения подобных работ на множестве баз их запуск настраивают по расписанию через программу для автоматического обновления и тестирования 1С.

Понимание архитектуры пользователей в БСП

Прежде всего, разберем ситуацию с точки зрения архитектуры системы. В современных базах 1С пользователь существует одновременно в двух ипостасях:

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

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

Использование программного интерфейса (API) БСП для создания пользователя

Вместо того чтобы вручную создавать записи в справочниках, лучше воспользоваться высокоуровневым API, который предоставляет БСП. Основным методом здесь является Пользователи.ЗаписатьПользователя(). Рассмотрим пример структуры кода, который можно использовать в скриптах OneScript или внешних обработках:


ОписаниеПользователя = Новый Структура;
ОписаниеПользователя.Вставить("Имя", "IvanovII");
ОписаниеПользователя.Вставить("ПолноеИмя", "Иванов Иван Иванович");
ОписаниеПользователя.Вставить("Аутентификация1СПредприятия", Истина);
ОписаниеПользователя.Вставить("Пароль", "StrongPassword123");
ОписаниеПользователя.Вставить("ПользовательДолженИзменитьПарольПриПервомВходе", Истина);

// Вызов процедуры БСП для создания связки Пользователь ИБ + Справочник
Пользователи.ЗаписатьПользователя(Неопределено, ОписаниеПользователя);

Этот метод хорош тем, что он автоматически создает элемент справочника Пользователи, связывает его с пользователем ИБ через уникальный идентификатор (UUID) и инициирует все необходимые фоновые задания по обновлению параметров работы программы.

Программное включение пользователя в группы доступа

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

Подход 1: Использование предопределенных методов управления доступом.
Для массового назначения прав в коде лучше использовать метод УправлениеДоступом.УстановитьГруппыПользователя(). Это наиболее «чистый» способ с точки зрения системы. Посмотрим на пример кода:


// Получаем ссылку на пользователя (справочник)
ТекПользователь = Справочники.Пользователи.НайтиПоНаименованию("Иванов Иван Иванович");

// Формируем массив групп доступа, в которые нужно включить пользователя
МассивГрупп = Новый Массив;
ГруппаБухгалтеры = Справочники.ГруппыДоступа.НайтиПоНаименованию("Бухгалтеры");
Если Не ГруппаБухгалтеры.Пустая() Тогда
    МассивГрупп.Добавить(ГруппаБухгалтеры);
КонецЕсли;

// Устанавливаем состав групп (предыдущие группы будут заменены этим списком)
УправлениеДоступом.УстановитьГруппыПользователя(ТекПользователь, МассивГрупп);

Подход 2: Ручное добавление в табличную часть (через объект справочника).
Если нам нужно точечно добавить пользователя в конкретную группу, не затрагивая его членство в других группах, можно обратиться напрямую к справочнику ГруппыДоступа. Рассмотрим ситуацию подробнее:


ТекПользователь = Справочники.Пользователи.НайтиПоНаименованию("ГБ2");
ТекГруппаДоступа = Справочники.ГруппыДоступа.НайтиПоНаименованию("Администрирование");

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

Особенности работы в «Обновляторе 1С»

При использовании скриптов в Обновляторе 1С мы часто работаем через контекст внешнего соединения или OneScript. Разберем важные технические нюансы:

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

Синхронизация параметров сеанса

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

ПараметрыСеанса.ГруппыТекущегоПользователя = Неопределено;

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

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

← На главную