Представим достаточно сложную ситуацию с имеющимися учетными записями.
Имена учетных записей поражают своими вариациями:
- "Пупкин", за которым скрывается уволенный в незапамятные времена Пупкин Василий Кондратьевич
- "Надежда Петровна" — какова вероятность что эта комбинация имени и отчества среди сотрудников встречается больше одного раза? Вероятность увеличивается пропорционально численности предприятия, спасибо кэп
- "Аристотель", который в жизни Минчев Аристотель Борисович, Первый заместитель генерального директора. Кто осмелился создать его учетку без отчества?
- "Мейерсон Софья Карловна Кадровик" — вроде все не так плохо, но во-первых для должности и подразделения есть специальные красивые поля, а во вторых Софья Карловна уже давно не кадровик, а заместитель начальника Сметно-Штатного отдела
- "Мартынюк" — главного инженера тоже не пощадили, ни имени, ни отчества 🙁
- "Борис Семенович Кузьминых" — указано полное имя, но порядок у всех разный, то ФИО, то ИОФ
- "Савинская З" — что-то знакомое.. о, это же администратор демо базы Савинская Зоя Юрьевна!
- "Саныч", "Иванова Окcана Валерьевна" (заметно, что в имени Оксана стоит английская буква "c"?) — бывает и такое, why not
(Реальные ситуации смоделированы с помощью данных демо базы ЗУП. Забегая вперед — все эти учетные записи поддаются идентификации, кроме последнего, Саныч и Окcана автоматизации не подлежат)
Учетные записи не содержат иной информации, кроме как наименования:
Которое как мы видим создано "как получится". Бонусом в поле "фамилия" стоит имя, а поле "имя" стоит фамилия, или вообще отчество. Отсутствуют данные о сотруднике, использующем учетную запись — не известна организация, в которой он работает, не известны подразделение и должность, но самое неприятное — отсутствует какой-либо уникальный идентификатор его сущности, каким мог бы быть табельный номер (EmpoyeeID).
В этом хаосе наверняка присутствует внушительный процент уволенных сотрудников, чьи учетные записи давно не актуальны и должны быть отключены.
Как в такой ситуации понять кто есть кто и что с ним делать?
Единственная зацепка, которая у нас есть, это некоторое подобие ФИО сотрудника:
Если бы при именовании учетных записей соблюдался какой-то единый порядок, в идеале Фамилия Имя Отчество — именно в таком порядке и без лишних символов, то все было бы намного проще. Можно было бы сопоставлять учетную запись с сотрудником по наименованию, да и от лишних символов тоже было бы легко избавиться и сопоставление бы удалось. Но в данном случае нужен произвольный алгоритм поиска, который будет искать приблизительное соответствие и также по возможности отсекать лишние слова ("Мейерсон Софья Карловна Кадровик", лишнее слово "Кадровик").
Данный алгоритм реализован в предлагаемой внешней обработке — переданное наименование учетной записи (Колонка "cn") ищется среди сотрудников ЗУП, работающих и уволенных:
Сразу возникает вопрос — сколько в организации частичных/полных тезок? В одной фирме вполне могут работать Иванов Иван Иванович — кладовщик и Иванов Иван Иванович — бухгалтер, как быть в такой ситуации? Ответ — сопоставление происходит только в случае единственного совпадения.
Т.к. поиск происходит по части ФИО, например учетные записи Петр Максимович и Аристотель на деле соответствуют сотрудникам Сорока Петр Максимович и Минчев Аристотель Борисович, то нужно учесть, что вполне возможно Петр Максимович такой не один, есть также Королёв Петр Максимович и это совершенно другой сотрудник (два Аристотеля в одной фирме вряд ли встретятся, но для имени принцип тот же).
Поэтому в случае, если для переданного cn находится несколько похожих сотрудников, поиск не считается успешным, колонка "Сотрудник" остается пустой, но для справки в колонку "Несколько вариантов" выводятся все совпадения.
При успешном поиске напротив учетной записи выводится ФИО найденного сотрудника (колонка "Сотрудник"), выводятся все кадровые данные из ЗУП , в том числе ДатаУвольнения, из какой базы получены данные (2.5 или 3.1) и выводятся данные учетной записи: кадровые данные по версии AD, отключена учетная запись или нет (колонка "AccountDisable"), комментарий (колонка "Description"), и дата последнего входа в систему (колонка "LastLogin"). Если соответствий в 1С найдено не было, выводятся только данные учетной записи.
колонки, не поместившиеся на предыдущем скрине:
Для удобства у колонок, данные которых получены из ЗУП стоит картинка со значком "1С", а у колонок данных учетных записей картинка, напоминающая пользователя с компьютером.
Внимание! Achtung! Attention! В связи с тем, что происходит изменение данных (особенно если большого массива данных), перед использование обработки необходимо сделать резервную копию любым удобным способом, например.
Теперь, когда мы получили соответствие "Учетная запись — Сотрудник", можем привести в соответствие наименование учетной записи. Выбираем соответствующую команду обработки "Переименовать в формат Фамилия Имя Отчество" и нажимаем "Выполнить". Обратите внимание, меняется именно системное наименование учетной записи, а вместе с ним и корректно присваиваются значения полей отображаемой наименование "DisplayName", Фамилия "sn" и Имя "GivenName". Поля "Отчество" в данной системе не существует, есть только поле инициалы, но если углубиться в вопрос — на самом деле это не совсем инициалы (советую почитать об этом, если вопрос с ними актуален).
Проверяем — перезаполним данные по кнопке "Заполнить", заходим в оснастку ADUC — учетные записи переименованы:
Идеально!
Далее заполним кадровые данные для всех сотрудников, либо выберем конкретных:
помните бывшего кадровика Софью Карловну? Теперь у нее все как должно быть:
Следующая задача — избавиться от "мертвых душ".
Достаточно для этого, как вариант, отобрать тех пользователей, которые длительное время не используют свою учетную запись. Для этого в настройках добавлен отбор "Последний вход в систему в интервале". С помощью него можно выбрать тех людей, которые последний раз "логинились", например, еще в позапрошлом году — тогда значение отбора "Последний вход в систему в интервале" составит период с 01.01.2024 по 31.01.2024, те, кто последний раз логинился раньше или позже в список соответственно не попадут. Нажимаем заполнить для вывода списка, отмечаем все элементы либо произвольный список, выбираем команду "Отключить учетную запись" и нажимаем "Выполнить".
Также один из вариантов — это отключить тех, кто миллион лет назад уволен. Для этого в настройках указываем фильтр "Уволенные за период". К примеру, для того чтобы отключить всех уволенных за прошедшие два года, установите интервал с 01.01.2024 по 31.01.2024. Пример на демо-базе (там уволенные 7 лет назад, пора бы их отключить):
Однако обратите внимание, под этими учетными записями могут сидеть другие люди! На всякий случай поставьте также к уволенным фильтр "Последний вход в систему" сегодняшний день(или к примеру, неделю) — так будет понятно, какие учетные записи уволенных до сих пор используются.
Также в настройках есть фильтр по организации, подразделению и должности. Для подключения необходимо через типовую форму выбрать пользователя домена, данные домена для подключения заполнятся автоматически в соответствии с выбранным пользователем.
Какие еще задачи можно решить с помощью это обработки?
Снова о Софье Карловне, бывшем кадровике 🙂 Сегодня она заместитель начальника Сметно-Штатного отдела, а завтра она уже Начальник отдела труда и заработной платы и числится в подразделении "Управление", а в Active Directory все по-старому. С помощью обработки можно также актуализировать кадровые данные сотрудника, для этого просто выбираем вид операции "Заполнить кадровые данные".
По подобным случаям также готовится к публикации расширение для конфигурации ЗУП, которое автоматизирует процесс создания, отключения и актуализации учетных записей в связи с наступлением кадровых событий (прием, увольнение и перевод). Также предлагаю обратить внимание на мою предыдущую публикацию — групповое создание учетных записей из ЗУП 3.1 если нужно массово создать учетные записи всех работающих(или произвольного списка) сотрудников.
Всем удачи и порядка в Active Directory!
Есть небольшой подводный камушек: требуются права админа домена (а то и всего леса) для пользователя службы 1С. Если рядовой кадровик запустит в ЗУПе какую-нить (например, присланную по почте) обработку через Файл-Открыть, то обладая правами админа домена можно… много чего.
Поэтому считаю, что нужно при подключении по LDAP вводить логин-пароль администратора домена.
(1) Привет! Не совсем понимаю твоего замечания — конкретно здесь не нужно назначать эти права кадровику, пользователь 1С, связанный аутентификацией с админским пользователем домена, только выбирается в настройках. Поправь если я что-то упускаю.