При попытке создать нового сотрудника или отредактировать существующего в справочнике Пользователи разработчики и администраторы нередко сталкиваются с ошибкой платформы: «Ошибка при записи пользователя информационной базы: Пользователь с указанными параметрами аутентификации операционной системы уже имеется в списке пользователей ИБ». При этом визуальный поиск по справочнику в режиме предприятия может показывать, что пользователя с таким доменным логином в базе нет. Разберем подробно причины такого поведения платформы и рассмотрим способы устранения проблемы.
Для понимания корня проблемы проанализируем внутреннее устройство подсистемы управления доступом в платформе «1С:Предприятие»:
ПользователиИнформационнойБазы (хранится в системных таблицах базы данных). Именно на этом уровне настраиваются пароли, права (роли) и параметры аутентификации операционной системы (Windows-аутентификация). Второй уровень — прикладной справочник Пользователи (или ВнешниеПользователи), созданный разработчиками конфигурации для связи учетной записи с бизнес-логикой, подразделениями, контактной информацией и настройками интерфейса.Пользователи был помечен на удаление и физически удален обработкой удаления помеченных объектов без сопутствующей программной очистки системных пользователей, системная учетная запись в платформе сохраняется.ОСПользователь среди всех системных учетных записей, у которых включен флаг АутентификацияОС = Истина. При попытке привязать этот же доменный логин к новому элементу справочника возникает блокирующая ошибка.Самый простой интерактивный способ устранить коллизию — проверить системный список пользователей в Конфигураторе:
DOMAIN\UserName или UserName@domain.local).Delete или контекстное меню).Важный нюанс: изменение списка системных пользователей через меню «Администрирование → Пользователи» не является изменением структуры метаданных конфигурации. Для этой операции не требуется монопольный захват базы — ее можно выполнять без отключения остальных пользователей от информационной базы.
Если пользователей в информационной базе сотни или тысячи, ручной поиск в Конфигураторе занимает много времени. Системная таблица пользователей недоступна для языка запросов 1С через конструкцию ВЫБРАТЬ ..., однако мы можем использовать объектную коллекцию ПользователиИнформационнойБазы.
Создадим внешнюю обработку и выполним поиск системной записи по доменному логину:
// Укажем доменный логин, на который ругается платформа
ИскомыйПользовательОС = "DOMAIN\UserName";
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Найден = Ложь;
Для Каждого ТекПользователь Из СписокПользователей Цикл
Если ТекПользователь.АутентификацияОС И ВРег(ТекПользователь.ОСПользователь) = ВРег(ИскомыйПользовательОС) Тогда
Сообщить("Обнаружен конфликтный пользователь ИБ: " + ТекПользователь.Имя
+ " (Полное имя: " + ТекПользователь.ПолноеИмя + ", UUID: " + Строка(ТекПользователь.УникальныйИдентификатор) + ")");
Найден = Истина;
КонецЕсли;
КонецЦикла;
Если Не Найден Тогда
Сообщить("Пользователь с параметрами ОС " + ИскомыйПользовательОС + " в списке пользователей ИБ не обнаружен.");
КонецЕсли;
Когда имя системного пользователя известно, мы можем программно удалить его или очистить свойства операционной системы под учетной записью с полными административными правами:
ИмяКонфликтногоПользователя = "ИмяЗависшегоПользователя";
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяКонфликтногоПользователя);
Если ПользовательИБ <> Неопределено Тогда
// Вариант А: Полное удаление системной учетной записи
ПользовательИБ.Удалить();
Сообщить("Пользователь ИБ успешно удален.");
// Вариант Б: Только отключение аутентификации ОС (альтернатива удалению)
// ПользовательИБ.АутентификацияОС = Ложь;
// ПользовательИБ.ОСПользователь = "";
// ПользовательИБ.Записать();
// Сообщить("Параметры аутентификации ОС очищены.");
Иначе
Сообщить("Пользователь с именем " + ИмяКонфликтногоПользователя + " не найден в списке ИБ.");
КонецЕсли;
После удаления дублирующей системной записи или очистки реквизита ОСПользователь возвращаемся в режим «1С:Предприятие» и повторно записываем элемент справочника Пользователи. Запись пройдет без ошибок.
Пользователи, чтобы типовые механизмы корректно связывали системного пользователя и элемент справочника по уникальному идентификатору (UUID).Внешние пользователи — системная коллекция для них и обычных пользователей общая.v8users) через SQL-запросы. Это приводит к повреждению целостности базы данных и полной блокировке авторизации. Все операции должны производиться строго через Конфигуратор или объектную модель ПользователиИнформационнойБазы.