Как программно изменить имя для входа и параметры аутентификации ОС в справочнике Пользователи

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

При разработке обработок по синхронизации данных или импорту пользователей из внешних систем (например, из файлов Excel или Active Directory) программисты часто сталкиваются с проблемой: в справочнике Пользователи отсутствуют реквизиты «Имя для входа» или «Аутентификация ОС». Попытка просто записать объект справочника не приводит к изменению учетных данных, необходимых для авторизации в системе. Разберем детально, почему это происходит и как правильно реализовать запись этих данных.

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

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

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

Способ 1: Использование коллекции ПользователиИнформационнойБазы

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

Разберем алгоритм действий по шагам:

  1. Находим ссылку на элемент справочника Пользователи.
  2. Получаем объект справочника и извлекаем его ИдентификаторПользователяИБ.
  3. Ищем соответствующего пользователя ИБ в системе.
  4. Вносим правки и сохраняем объект.

Пример программной реализации:


// Предположим, Выборка — это результат запроса, где есть Ссылка на справочник и новое Имя из Excel
Пока Выборка.Следующий() Цикл
    
    // 1. Получаем GUID пользователя ИБ из справочника
    ИдентификаторИБ = Выборка.Ссылка.ИдентификаторПользователяИБ;
    
    // 2. Ищем пользователя ИБ
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторИБ);
    
    Если ПользовательИБ <> Неопределено Тогда
        // Проверяем, нужно ли менять имя
        Если ПользовательИБ.Имя <> Выборка.ИмяИзЭксель Тогда
            ПользовательИБ.Имя = Выборка.ИмяИзЭксель;
            
            // Настройка аутентификации ОС
            ПользовательИБ.АутентификацияОС = Истина;
            // Формат строки: "Windows:<ИмяДомена>\<ИмяПользователя>"
            ПользовательИБ.ПользовательОС = "Windows:CORP\" + Выборка.ИмяПользователяОС;
            
            Попытка
                ПользовательИБ.Записать();
            Исключение
                Сообщить("Не удалось записать пользователя: " + ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
    
КонецЦикла;

Способ 2: Работа через Библиотеку стандартных подсистем (БСП)

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

Выясним, как это сделать правильно. Основным инструментом здесь является процедура Пользователи.ЗаписатьПользователя(). Она принимает структуру, описывающую все свойства пользователя.

Проанализируем пример использования БСП:


// Подготовим структуру с описанием пользователя
ОписаниеПользователя = Новый Структура;
ОписаниеПользователя.Вставить("Имя", "ИвановИИ");
ОписаниеПользователя.Вставить("АутентификацияОС", Истина);
ОписаниеПользователя.Вставить("ПользовательОС", "Windows:OFFICE\ivanov_ii");
ОписаниеПользователя.Вставить("АутентификацияСтандартная", Истина);

// Ссылка на элемент справочника Пользователи
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();

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

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

Особенности реквизита Аутентификация ОС

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

Важные правила заполнения:

Если вы просто запишете строку "abdulin_as", аутентификация не сработает, так как платформа не поймет, к какому провайдеру безопасности обращаться.

Обработка типичных ошибок

Рассмотрим ситуации, в которых код может выдать ошибку:

  1. Дублирование имен: Платформа не позволит создать двух пользователей ИБ с одинаковым именем. Если в вашем файле Excel есть дубли, метод .Записать() вызовет исключение. Перед записью всегда проверяйте уникальность имени с помощью функции ПользователиИнформационнойБазы.НайтиПоИмени().
  2. Недостаточно прав: Для программного изменения свойств пользователей у текущего пользователя, под которым запущена обработка, должна быть роль Администрирование или ПолныеПрава. В противном случае метод ПолучитьОбъект или Записать вернет ошибку доступа.
  3. Активные сеансы: Иногда изменение параметров пользователя, который в данный момент работает в системе, может привести к конфликтам блокировок. Рекомендуется выполнять массовое обновление пользователей в периоды низкой активности системы.

Заключение

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

← На главную