TGViewer
1024B 1024B @thou24b · 106 subscribers
Post #66 347
Набралось 17 огонечков. Немного больше чем просила, немного меньше чем хотелось бы😅

Пост получился очень технически направленным.   Но, обещания нужно выполнять, поэтому рассказываю. С другой стороны. Это демонстрация, что творится в голове среднестатистического программиста 🤓 Если идея делиться реализаций нетривиальных задач интересна - прошу поставить 👍. При наличии поддержки - создам чат для таких постовой и мыслей. 

Дабы не резать глаза тем, кто 🔥 не ставил, текст скрываю под спойлер.

Постановка задачи. Из Active Directory (далее АД) загружать данные учётных записей в базу 1С. Результат загрузки - новый пользователь или обновление данных существующего пользователя.

Соединение с АД выполняется посредством ADODB.Connection.

Причём тут
сумма?

Решение задачи синхронизации с АД легко можно найти в интернет. Говорят об этом много, умно и красиво. Но есть нюанс, который, на момент решения задачи, был практически не затронут.

А как понять, что учётная запись активна? На этот вопрос в 90% случаев вам ответят, что проверь поле userAccountControl на значения 2, 16 и 512 и не парься. Точка.

Моя практика показала, что это не работает. А не работает, потому что значение этого поля накопительное. Т. е. 512 это обычный пользователь, 2 это неактивная учётка. 2 + 512 = 514 и равно отключенная учётная запись 😵 на этом красивый алгоритм, описанный абзацем выше, рассыпается.

Интернет пестрил решениями типа подключения внешней библиотеки для анализа шестнадцатиричного формата записи значения поля. Перебор различный вариантов десятиричных значений, где одно из условий - подписание договора с сисадмином о соблюдении оговорённых настроек... Я пошла иным путём.

Раз значение состоит по сути из флагов, имеющих представление в виде числа. Раз флаги являются накопительными. То почему бы нам не проанализировать полученное значение поля userAccountControl на вхождение заранее нам известных значений флагов? Таким образом, в таблице значений я перечислила все флаги, согласно справочнику Microsoft, с их значениями в десятичном формате. Создала две промежуточные пустые таблицы с идентичными колонками. Одну заполнила флагами, которые по значению меньше или равны, чем моё проверяемое значение (оптимизон) и отсортировала по убыванию. Вторую таблицу в цикле заполняла значениями из первой отсортированной таблицы и пыталась получить искомую сумму. Как только моя сумма в таблице становилась равна значению проверяемого поля userAccountControl - останавливаюсь и смотрю содержит ли вторая таблица строку с флагом неактивного аккаунта. Если содержит, то понимаю, что пользователя в базе 1С нужно сделать неактивным.

Вот так идея решения задачки с массивом мутировала в анализ суммы по колонке таблицы значений
🤪
  • 🔥 9
More from @thou24b
  1. Aug 9, 2024Ощутила эмоциональное состояние ребёнка, впервые посетившего зоопарк, знакомясь в рамках с…
  2. Aug 7, 2024Коллеги пошутили, что моя самая любимая тема за последний месяц это Узбекистан😱😂 Что ж.…
  3. Jun 18, 2024Ну что ж.. Вернулась я к своему курсу дата сатаниста сайентиста в части изучения блока по…
  4. May 20, 2024😅 Поделился со мной товарищ картинкой Да, тут нам, программистам, не повезло. Заказчики и…
  5. Apr 24, 2024Уйдя отдыхать 7-го марта, очнулась вечером 24 апреля) хорошо хоть в рамках одного года. Ес…
  6. Mar 7, 2024Женщина - ИТ-шник явление распространённое, но по-прежнему не повседневное. К женщинам - п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →