Как программно добавить пользователя и включить его в группу доступа в 1С:ЗУП 3.1?

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

При переходе с редакции 2.5 на 3.1 многие разработчики сталкиваются с тем, что привычные механизмы работы с пользователями через Конфигуратор или прямое создание записей в списке пользователей информационной базы (ИБ) перестают работать корректно. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), управление доступом — это сложный многоуровневый процесс. Разберем подробно, как реализовать программное добавление пользователя в группу доступа, особенно при работе через внешнее подключение (COM или веб-сервисы).

Понимание архитектуры пользователей в ЗУП 3.1

Прежде чем переходить к коду, проанализируем ситуацию: в ЗУП 3.1 существует разделение между технической учетной записью и объектом базы данных. Рассмотрим эти уровни:

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

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

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

Для создания пользователя «с нуля» настоятельно рекомендуется использовать методы общего модуля Пользователи. Это гарантирует, что все необходимые связи будут созданы корректно. Рассмотрим пример создания описания пользователя и его записи:


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

// Создаем или находим элемент справочника
ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент();
ПользовательОбъект.Наименование = "Иванов Иван Иванович";
ПользовательОбъект.Записать();

// Связываем справочник с пользователем ИБ через API
Пользователи.ЗаписатьПользователяИБ(ПользовательОбъект.Ссылка, ДанныеПользователя);

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

Добавление пользователя в группу доступа

Теперь разберем, как включить созданного пользователя в существующую группу доступа. Группы доступа в ЗУП 3.1 хранятся в справочнике ГруппыДоступа. Проанализируем алгоритм добавления:

  1. Находим нужную группу доступа (например, по наименованию или предопределенному значению).
  2. Добавляем новую строку в табличную часть Пользователи этого справочника.
  3. Записываем объект.

Рассмотрим пример кода для этой задачи:


ГруппаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект();

// Проверим, нет ли пользователя уже в этой группе
СтрокаГруппы = ГруппаОбъект.Пользователи.Найти(ПользовательСсылка, "Пользователь");

Если СтрокаГруппы = Неопределено Тогда
    НоваяСтрока = ГруппаОбъект.Пользователи.Добавить();
    НоваяСтрока.Пользователь = ПользовательСсылка;
    ГруппаОбъект.Записать();
КонецЕсли;

Обновление прав доступа и регламентные задания

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

Для принудительного обновления прав из кода следует вызвать метод модуля управления доступом:

УправлениеДоступом.ОбновитьЗависимыеПраваДоступа(ПользовательСсылка);

Особенности работы через COM-соединение

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

Пример фрагмента кода при COM-подключении:


// Предположим, Connector — это объект COM-соединения к ЗУП
ЗУП_ГруппаСсылка = Connector.Справочники.ГруппыДоступа.НайтиПоНаименованию("Расчетчики");
ЗУП_ПользовательСсылка = Connector.Справочники.Пользователи.НайтиПоНаименованию("Иванов Иван Иванович");

Если Не ЗУП_ГруппаСсылка.Пустая() И Не ЗУП_ПользовательСсылка.Пустая() Тогда
    ГруппаОбъект = ЗУП_ГруппаСсылка.ПолучитьОбъект();
    // Логика добавления в ТЧ Пользователи аналогична приведенной выше
    // ...
    ГруппаОбъект.Записать();
    
    // Обязательно вызываем обновление прав через коннектор
    Connector.УправлениеДоступом.ОбновитьЗависимыеПраваДоступа(ЗУП_ПользовательСсылка);
КонецЕсли;

Связь с Физическими лицами

Проанализируем еще один важный момент, специфичный именно для ЗУП 3.1. Для корректной работы кадровых отчетов и механизмов самообслуживания, пользователь справочника Пользователи должен быть связан с соответствующим элементом справочника ФизическиеЛица. Если вы создаете пользователя программно для сотрудника, не забудьте заполнить реквизит ФизическоеЛицо. Без этой связи многие типовые отчеты «по текущему пользователю» будут пустыми.

Резюме

Таким образом, для успешного программного добавления пользователя в группу доступа в ЗУП 3.1 необходимо:

  1. Использовать общий модуль Пользователи для корректного создания связки «Справочник — Пользователь ИБ».
  2. Манипулировать табличной частью справочника ГруппыДоступа.
  3. Обязательно инициировать обновление прав через УправлениеДоступом.
  4. Учитывать контекст выполнения (сервер, COM-соединение) и права текущего сеанса.

Соблюдение этих шагов обеспечит корректную работу системы прав доступа и избавит от необходимости ручного вмешательства в конфигураторе.

← На главную