Как удаленно создать пользователя в другой информационной базе 1С?

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

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

Способ 1. Использование HTTP-сервисов

Это наиболее современный и быстрый способ взаимодействия между базами. HTTP-сервис позволяет передать команду на создание пользователя мгновенно, не требуя длительного ожидания инициализации тяжелых объектов, как в случае с COM.

Проанализируем структуру реализации:

  1. На стороне базы-приемника (где нужно создать пользователя) необходимо создать объект HTTP-сервис.
  2. В сервисе определяется шаблон URL и метод (например, POST) для приема данных о новом пользователе в формате JSON.
  3. На стороне базы-отправителя (центр) формируется запрос.

Разберем типичную проблему — получение ошибки 404 при попытке вызвать сервис. Основная причина кроется в неверном формировании строки URL. Правильный формат адреса выглядит так: URL_Сервера/Имя_Базы/hs/Имя_Сервиса/Название_Метода. Обязательно должен присутствовать сегмент /hs/, указывающий на обращение именно к HTTP-сервису.

Рассмотрим пример кода для отправки запроса из центральной базы:


ИмяСервера = "server.domain.ru";
ПользовательАдмин = "Admin";
ПарольАдмин = "P@ssword";

Соединение = Новый HTTPСоединение(ИмяСервера, , ПользовательАдмин, ПарольАдмин);

// Формируем структуру с данными нового пользователя
ДанныеПользователя = Новый Структура;
ДанныеПользователя.Вставить("Name", "IvanovII");
ДанныеПользователя.Вставить("FullName", "Иванов Иван Иванович");
ДанныеПользователя.Вставить("Password", "12345");
ДанныеПользователя.Вставить("Roles", "ПолныеПрава");

// Преобразуем в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеПользователя);
СтрокаJSON = ЗаписьJSON.Закрыть();

Запрос = Новый HTTPЗапрос("/BaseName/hs/UserManagement/CreateUser");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);

Результат = Соединение.ОтправитьДляОбработки(Запрос);

Если Результат.КодСостояния = 200 Тогда
    Сообщить("Пользователь успешно создан");
Иначе
    Сообщить("Ошибка: " + Результат.КодСостояния);
КонецЕсли;

Способ 2. Использование механизмов РИБ и БСП

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

Для реализации этого метода достаточно в настройках состава плана обмена включить регистрацию для справочника Пользователи. Однако стоит помнить, что пароли пользователей ИБ обычно не хранятся в справочнике в явном виде. Для их передачи может потребоваться создание специального регистра сведений или использование дополнительных реквизитов, которые будут программно обрабатываться в базе-приемнике при загрузке данных в процедурах ПриЗагрузкеДанныхВУзле.

Способ 3. Прямое управление через COM-соединение

Метод через V83.ComConnector считается классическим. Несмотря на то, что он работает медленнее HTTP-запросов, он предоставляет прямой доступ к программному интерфейсу базы-приемника.

Выполним следующие шаги для реализации через COM:

  1. Устанавливаем соединение с удаленной базой.
  2. Используем менеджер ПользователиИнформационнойБазы удаленной базы.
  3. Создаем новый объект, заполняем реквизиты и вызываем метод Записать().

Посмотрим на пример кода:


Connector = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr='ServerName';Ref='BaseName';Usr='Admin';Pwd='Password';";

Попытка
    Connection = Connector.Connect(СтрокаПодключения);
Исключение
    Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Создаем пользователя в удаленной базе
NewUser = Connection.InfoBaseUsers.CreateUser();
NewUser.Name = "PetrovPP";
NewUser.FullName = "Петров Петр Петрович";
NewUser.Password = "StrongPass123";
NewUser.StandardAuthentication = Истина;

// Назначение ролей (нужно знать точные имена ролей в удаленной базе)
Role = Connection.Metadata.Roles.Find("ПолныеПрава");
NewUser.Roles.Add(Role);

Попытка
    NewUser.Write();
    Сообщить("Пользователь успешно создан через COM");
Исключение
    Сообщить("Ошибка при записи пользователя: " + ОписаниеОшибки());
КонецПопытки;

Важные технические нюансы

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

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

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


НовыйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
// ... заполнение реквизитов ...
НовыйПользовательИБ.Записать();

// Создание элемента в справочнике Пользователи
СпрПользователь = Справочники.Пользователи.СоздатьЭлемент();
СпрПользователь.Наименование = НовыйПользовательИБ.ПолноеИмя;
СпрПользователь.ИдентификаторПользователяИБ = НовыйПользовательИБ.УникальныйИдентификатор;
СпрПользователь.Записать();

Копирование настроек: Если стоит задача "создать пользователя по образу и подобию другого", воспользуйтесь объектом ХранилищеОбщихНастроек. Метод Скопировать() позволяет перенести настройки интерфейса, избранное и персональные отчеты от одного пользователя (прототипа) другому. Это значительно упрощает жизнь конечным пользователям при переходе в новую базу или при создании дублирующих аккаунтов для разных задач.

Выясним, какой метод выбрать? Для мгновенной реакции и интеграции с веб-витринами лучше всего подходят HTTP-сервисы. Для централизованного администрирования в рамках одной компании с единым стандартом конфигураций оптимальным будет использование планов обмена РИБ с доработкой в части передачи паролей.

← На главную