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