Как настроить авторизацию в 1С для сотрудников с одинаковыми ФИО (полных тезок)?

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

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

Разделение понятий «Имя пользователя» и «Полное имя»

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

  1. Имя (логин): это уникальный идентификатор для входа в систему. Он не может повторяться.
  2. Полное имя: это строковое представление, которое обычно выводится в заголовке программы, в печатных формах и отчетах. Оно может быть неуникальным.

Разберем по шагам, как использовать это различие. Для тезок мы можем оставить «Полное имя» одинаковым (например, «Иванов Иван Иванович»), но создать разные «Имена» для входа. В качестве уникального дополнения к логину можно использовать:

Такой подход позволяет пользователю четко понимать, какой логин вводить, при этом в документах он по-прежнему будет значиться как «Иванов Иван Иванович».

Использование уникальных идентификаторов (GUID)

Проанализируем ситуацию с точки зрения программного кода, особенно в самописных конфигурациях. Одной из главных архитектурных ошибок является поиск соответствия между справочником Пользователи в режиме «Предприятие» и пользователем информационной базы в «Конфигураторе» по текстовому имени. Правильным методом является связка через GUID (UUID).

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


// Пример получения пользователя ИБ по его уникальному идентификатору
ИдентификаторПользователя = Справочники.Пользователи.НайтиПоНаименованию("Иванов").ИдентификаторПользователяИБ;
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователя);

Если ПользовательИБ <> Неопределено Тогда
    Сообщить("Найден пользователь: " + ПользовательИБ.ПолноеИмя);
КонецЕсли;

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

Преимущества аутентификации операционной системы

Рассмотрим наиболее надежный способ решения проблемы тезок — использование аутентификации Windows (Active Directory). В этом случае 1С не занимается проверкой пароля, а доверяет операционной системе.

Посмотрим на ситуацию со стороны системного администрирования. В домене Active Directory невозможно создать двух пользователей с одинаковыми логинами (sAMAccountName). Даже если в компании работают два «Иванова Ивана Ивановича», их доменные имена будут различаться (например, domain\ivanov.i1 и domain\ivanov.i2).

При настройке пользователя в 1С мы указываем конкретную доменную учетную запись. Система связывает пользователя 1С с SID (Security Identifier) пользователя Windows. Это гарантирует, что под конкретным пользователем в базу сможет зайти только владелец конкретной учетной записи компьютера, независимо от того, как его карточка называется в самой 1С.

Настройка интерфейса выбора пользователя

Если в вашей информационной базе включена опция «Показывать в списке выбора» при авторизации, то при наличии тезок пользователь увидит в выпадающем списке несколько абсолютно одинаковых строк «Иванов Иван Иванович». Это запутает сотрудников.

Чтобы решить эту задачу в режиме «Предприятие», выполним следующие действия:

  1. В свойствах справочника Пользователи (или ФизическиеЛица, если авторизация завязана на них) найдем настройки Данных выбора.
  2. Настроим отображение дополнительных колонок в списке выбора. Например, добавим «Подразделение» или «Должность».
  3. Для управляемых форм можно использовать обработчик события ОбработкаПолученияДанныхВыбора в модуле менеджера справочника, чтобы динамически формировать текст подсказки.

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


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Пользователи.Ссылка КАК Ссылка,
        |   Пользователи.Наименование + "" ("" + Пользователи.Должность + "")"" КАК Представление
        |ИЗ
        |   Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |   Пользователи.Наименование ПОДОБНО &ТекстЗапроса";
    
    Запрос.УстановитьПараметр("ТекстЗапроса", "%" + Параметры.СтрокаПоиска + "%");
    ТаблицаРезультатов = Запрос.Выполнить().Выгрузить();
    
    СписокВыбора = Новый СписокЗначений;
    Для Каждого Строка Из ТаблицаРезультатов Цикл
        СписокВыбора.Добавить(Строка.Ссылка, Строка.Представление);
    КонецЦикла;
    ДанныеВыбора = СписокВыбора;
КонецПроцедуры

Использование невидимых символов (крайние меры)

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

Внимание: мы рекомендуем использовать этот метод только в самом крайнем случае, так как он может усложнить программный поиск пользователей в будущем.

Суть заключается в добавлении в конец имени одного из тезок неразрывного пробела (комбинация клавиш Alt + 0160 на цифровой клавиатуре). Визуально имена в списке и при входе будут выглядеть одинаково, но для платформы 1С это будут разные строки, так как коды символов различаются. Обычный пробел (код 32) платформа может автоматически обрезать функцией СокрЛП, а неразрывный пробел часто сохраняется, что позволяет обойти проверку на уникальность имени.

Итоги и рекомендации

Проанализировав все доступные методы, мы можем составить оптимальный план действий при появлении однофамильцев:

Помните, что корректная идентификация пользователей важна не только для входа, но и для аудита действий в Журнале регистрации. Использование уникальных логинов (даже с цифровыми индексами) позволит вам всегда точно знать, какой именно «Иванов» внес изменения в документ или удалил запись.

← На главную