При переходе с редакции 2.5 на 3.1 многие разработчики сталкиваются с тем, что привычные механизмы работы с пользователями через Конфигуратор или прямое создание записей в списке пользователей информационной базы (ИБ) перестают работать корректно. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), управление доступом — это сложный многоуровневый процесс. Разберем подробно, как реализовать программное добавление пользователя в группу доступа, особенно при работе через внешнее подключение (COM или веб-сервисы).
Прежде чем переходить к коду, проанализируем ситуацию: в ЗУП 3.1 существует разделение между технической учетной записью и объектом базы данных. Рассмотрим эти уровни:
Важно: В ЗУП 3.1 нельзя просто создать пользователя в ИБ — он не будет функционален без связанного элемента в справочнике Пользователи. Программный интерфейс БСП обеспечивает синхронизацию этих данных через уникальный идентификатор (UUID).
Для создания пользователя «с нуля» настоятельно рекомендуется использовать методы общего модуля Пользователи. Это гарантирует, что все необходимые связи будут созданы корректно. Рассмотрим пример создания описания пользователя и его записи:
// Подготовим структуру с данными пользователя
ДанныеПользователя = Пользователи.НовоеОписаниеПользователяИБ();
ДанныеПользователя.Имя = "IvanovII";
ДанныеПользователя.ПолноеИмя = "Иванов Иван Иванович";
ДанныеПользователя.АутентификацияСтандартная = Истина;
ДанныеПользователя.Пароль = "StrongPassword123";
// Создаем или находим элемент справочника
ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент();
ПользовательОбъект.Наименование = "Иванов Иван Иванович";
ПользовательОбъект.Записать();
// Связываем справочник с пользователем ИБ через API
Пользователи.ЗаписатьПользователяИБ(ПользовательОбъект.Ссылка, ДанныеПользователя);
После выполнения этого кода у нас появляется полноценный пользователь, который может зайти в систему, но пока не имеет никаких прав доступа.
Теперь разберем, как включить созданного пользователя в существующую группу доступа. Группы доступа в ЗУП 3.1 хранятся в справочнике ГруппыДоступа. Проанализируем алгоритм добавления:
Пользователи этого справочника.Рассмотрим пример кода для этой задачи:
ГруппаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект();
// Проверим, нет ли пользователя уже в этой группе
СтрокаГруппы = ГруппаОбъект.Пользователи.Найти(ПользовательСсылка, "Пользователь");
Если СтрокаГруппы = Неопределено Тогда
НоваяСтрока = ГруппаОбъект.Пользователи.Добавить();
НоваяСтрока.Пользователь = ПользовательСсылка;
ГруппаОбъект.Записать();
КонецЕсли;
Одной из самых частых ошибок является пропуск шага обновления прав. В БСП права рассчитываются динамически и кэшируются. Если вы просто добавили запись в справочник ГруппыДоступа, пользователь может увидеть изменения не сразу. Выясним причину: системе нужно пересчитать фактические роли и ограничения для конкретного пользователя.
Для принудительного обновления прав из кода следует вызвать метод модуля управления доступом:
УправлениеДоступом.ОбновитьЗависимыеПраваДоступа(ПользовательСсылка);
Если задача стоит в добавлении пользователя из внешней базы (например, из «1С:Бухгалтерия»), то мы работаем через объект соединения. Посмотрим на нюансы:
Администратор системы или Полные права.Пример фрагмента кода при COM-подключении:
// Предположим, Connector — это объект COM-соединения к ЗУП
ЗУП_ГруппаСсылка = Connector.Справочники.ГруппыДоступа.НайтиПоНаименованию("Расчетчики");
ЗУП_ПользовательСсылка = Connector.Справочники.Пользователи.НайтиПоНаименованию("Иванов Иван Иванович");
Если Не ЗУП_ГруппаСсылка.Пустая() И Не ЗУП_ПользовательСсылка.Пустая() Тогда
ГруппаОбъект = ЗУП_ГруппаСсылка.ПолучитьОбъект();
// Логика добавления в ТЧ Пользователи аналогична приведенной выше
// ...
ГруппаОбъект.Записать();
// Обязательно вызываем обновление прав через коннектор
Connector.УправлениеДоступом.ОбновитьЗависимыеПраваДоступа(ЗУП_ПользовательСсылка);
КонецЕсли;
Проанализируем еще один важный момент, специфичный именно для ЗУП 3.1. Для корректной работы кадровых отчетов и механизмов самообслуживания, пользователь справочника Пользователи должен быть связан с соответствующим элементом справочника ФизическиеЛица. Если вы создаете пользователя программно для сотрудника, не забудьте заполнить реквизит ФизическоеЛицо. Без этой связи многие типовые отчеты «по текущему пользователю» будут пустыми.
Таким образом, для успешного программного добавления пользователя в группу доступа в ЗУП 3.1 необходимо:
Пользователи для корректного создания связки «Справочник — Пользователь ИБ».ГруппыДоступа.УправлениеДоступом.Соблюдение этих шагов обеспечит корректную работу системы прав доступа и избавит от необходимости ручного вмешательства в конфигураторе.