Как помочь сисадмину при большой текучке кадров

Доброго времени суток всем читающим! Работаю в компании, где сотрудников более 2.500, много подразделений и неплохая текучка в сфере торговли. Сисадмины просто "зашивались"  на создании пользователей и раздаче типовых прав, заявки поступают, сисадмины помимо обслуживания ЛВС, поломки принтеров, подключения ПК и т.д. и т.п. создавали пользователей. По сути создать пользователя несложно им, но согласно регламенту в данных пользователя AD должны быть ФИО, должность, отдел, личный телефон, рабочий телефон, домашний телефон, про стандартные реквизиты понятно все, и вот тут была заминка, доступа у сисадмина к 1С: ЗУП 2.5 нет и не должно быть, а вот личные данные где ему взять? Из - за этой заминки создание пользователей занимало немало времени, сходи в кадры, возьми данные, приди к себе на рабочее место, создай пользователя, забей данные, и не дай Бог неверно. Но мой начальник решил пойти другим путем, почему бы все это дело по созданию пользователей не переложить на плечи HR-отдела, по сути HR имеют доступ в данным сотрудников, вот пусть и колотят пользаков, но тут возникает заминка, что в HR-отделе женщины с серверам на ВЫ, следовательно надо озадачить этим делом ЗУП. 

Для начала попросил менеджера по персоналу выкрутить должности из ЗУП 2.5 и выделить те должности, которым нужен доступ к компьютеру, а следовательно в AD.

Создал РС по хранению пользователей домена где имееются поля ДатаСоздания, ПользовательАД, ПочтаАД, и  ФизЛицо, в который изначально обработкой с простым кодом были добавлены все пользователи AD, обработку прикрепил, вдруг кому понадобится.

Так как у нас в организации несколько почтовых доменов и много организация, создал справочник, в котором указывается Организация, и записывается почтовый домен, получилось см. рис 1

Дальше встал вопрос, как реализовать синхронизацию должностей и групп доступа AD, а также определить папки (группы) где должны находится пользователи. Сначала создал справочник для подразделений и групп см. рис 2. Потом создал справочник для должностей и групп доступа см. рис 3.

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

Следующим этапом было определено, что доступ к AD автоматом заводится только для пользователей которые устраиваются на Основное место работы, остальные идут только через согласованием с мега боссом. ))

Дальше возник вопрос как написать ФИО сотрудника в транслите, ранее эти вопросом не задавался, но решил спросить у гугла, перепробовал много разных вариантов, и решил остановится вот на этом (где взял уже не помню), но этот не мое, да простит меня автор сего дела, что не указал ссылку))


Функция Транслит(Вход) 
	
	Русский = "абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
	Англ	= "a;b;v;g;d;e;yo;zh;z;i;y;k;l;m;n;o;p;r;s;t;u;f;kh;ts;ch;sh;shch;;y;;e;yu;ya;A;B;V;G;D;E;Yo;Zh;Z;I;Y;K;L;M;N;O;P;R;S;T;U;F;Kh;Ts;Ch;Sh;Shch;;Y;;E;Yu;Ya";
	МассивАнгл = _РазложитьСтрокуВМассивПодстрок(Англ,";");
	ДлиннаВход = СтрДлина(Вход);
	Выход = "";
	Для а=1 По ДлиннаВход Цикл 
		ТекущийСимвол = Сред(Вход,а,1);	
		Позиция = Найти(Русский,ТекущийСимвол);
		Если Позиция > 0 Тогда 
			Выход = Выход + МассивАнгл[Позиция-1];
		Иначе 
			Выход = Выход + ТекущийСимвол;
		КонецЕсли;
	КонецЦикла;
	Возврат Выход;
	
КонецФункции

Функция _РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
   
КонецФункции

После этого много «Пока гуглю» изучение методов создания пользователей из 1с, в итоге последующее, для документов Прием на работу, Кадровый перевод, Оплата больничного (вид больничного «беременность и роды»), Отпуск сотрудника (кадровый), Увольнение создал подписки на событие с обработкой события ПриПроведении, так как создавать пользователей необходимо не всем кадровикам, а только отвественным лицам, была создана роль "ДобавлениеУдалениеПользователейАД", проверка который проводится перед выполнением кода самой задачи, нет прав, код не выполняется))

При проведении Прием на работу :


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

					Попытка
				    objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
				    objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
				    strCN = РС.ПользовательАД ;
				    strSam = РС.ПочтаАД;
				    strPWD = РС.Пароль;
				    objUser = objContainer.Create("User", "CN=" +CтрокаФамилия+" "+СтрокаИмя);
					objUser.Put("name", CтрокаФамилия+" "+СтрокаИмя);
				    objUser.Put("userPrincipalName", strSam);
				    objUser.Put("sAMAccountName",strCN);
				    objUser.Put("mail", strSam);
				    objUser.Put("sn", CтрокаФамилия);
				    objUser.Put("givenName", СтрокаИмя);
				    objUser.Put("displayName", CтрокаФамилия+" "+СтрокаИмя);
					
				    
				    РС = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
				    РС.Отбор.Объект.Установить(ТекСтрока.Сотрудник.ФизЛицо);
				    РС.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ТелефонФизЛица);
				    РС.Прочитать();
				    Если РС.Количество() > 0 Тогда
				    	Тел = РС.Получить(0).Представление;
				    	objUser.Put("mobile", Тел);
				    КонецЕсли;
				    objUser.Put("company", Источник.Организация.Наименование);
				    objUser.Put("title", ТекСтрока.Должность.Наименование);
				    objUser.Put("department", ТекСтрока.ПодразделениеОрганизации.Наименование);
				    objUser.SetInfo();
				     					
				    objUser.userAccountControl = 512;
				    objUser.SetPassword(strPWD);
				    objUser.SetInfo();
					
					ЗапросГруппы = НОвый Запрос;
				    ЗапросГруппы.УстановитьПараметр("Организация", Источник.Организация);
				    ЗапросГруппы.УстановитьПараметр("Должность", ТекСтрока.Должность);
					ЗапросГруппы.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
				    ЗапросГруппы.Текст =
				    "ВЫБРАТЬ
				    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
				    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
				    |ИЗ
				    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
				    |ГДЕ
				    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
				    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
				    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
				    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
				    ВыборкаГрупп = ЗапросГруппы.Выполнить().Выгрузить();
				    Для Каждого ТекГруппа из ВыборкаГрупп Цикл
				     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекГруппа.ПутьГруппы);
				     ГруппаБезопасности.Add(objUser.ADsPath);
					 objUser.SetInfo();
				   КонецЦикла;
					   
					ТабДок = Новый ТабличныйДокумент;
					Макет = ПолучитьОбщийМакет("грсМакетЛогиПарольАД");
					ОбластьМакета = Макет.ПолучитьОбласть("ПользователиАД");
					ОбластьМакета.Параметры.пользователь ="Сотрудник: "+ ТекСтрока.Сотрудник.ФизЛицо.Наименование;
					ОбластьМакета.Параметры.логин = "Логин: "+РС.ПользовательАД;
					ОбластьМакета.Параметры.логин1 = "Логин: domen\"+РС.ПользовательАД;
					ОбластьМакета.Параметры.пароль ="Пароль: "+ РС.Пароль;
					ОбластьМакета.Параметры.почта = "Е-mail: "+РС.ПочтаАД;
					ТабДок.Вывести(ОбластьМакета);
		            ТабДок.ТолькоПросмотр = Истина;
				   	ТабДок.ОтображатьЗаголовки = Истина;
					ТабДок.ОтображатьСетку = Ложь;
					ТабДок.Показать();
					
                    //печатаем инструкции по подключению к RDP
					ЗапуститьПриложение("\\file\Common\Секретари\Инструкции ИТ\Подключение к удаленному рабочему столу Linux.doc");
					ЗапуститьПриложение("\\file\Common\Секретари\Инструкции ИТ\Подключение к удаленному рабочему столу Windows.docx");
				Исключение
					КонецПопытки;
				Иначе
					Сообщить("Для сотрудника " + ТекСтрока.Сотрудник.ФизЛицо + " уже создан пользователь AD", СтатусСообщения.Важное);
				КонецЕсли;
			Иначе
				Сообщить("Для должности "+ ТекСтрока.Должность + " не назначен доступ к ИС");
			КонецЕсли;
			
		КонецЕсли; 
	КонецЦикла;
	 
КонецЕсли;

При проведении Кадрового перемещения:


Если РольДоступна("ДобавлениеУдалениеПользователейАД") Тогда

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

					Попытка
				    objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
				    objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
				    strCN = РС.ПользовательАД ;
				    strSam = РС.ПочтаАД;
				    strPWD = РС.Пароль;
				    objUser = objContainer.Create("User", "CN=" +CтрокаФамилия+" "+СтрокаИмя);
					objUser.Put("name", CтрокаФамилия+" "+СтрокаИмя);
				    objUser.Put("userPrincipalName", strSam);
				    objUser.Put("sAMAccountName",strCN);
				    objUser.Put("mail", strSam);
				    objUser.Put("sn", CтрокаФамилия);
				    objUser.Put("givenName", СтрокаИмя);
				    objUser.Put("displayName", CтрокаФамилия+" "+СтрокаИмя);
					
				    
				    РС = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
				    РС.Отбор.Объект.Установить(ТекСтрока.Сотрудник.ФизЛицо);
				    РС.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ТелефонФизЛица);
				    РС.Прочитать();
				    Если РС.Количество() > 0 Тогда
				    	Тел = РС.Получить(0).Представление;
				    	objUser.Put("mobile", Тел);
				    КонецЕсли;
				    objUser.Put("company", Источник.Организация.Наименование);
				    objUser.Put("title", ТекСтрока.Должность.Наименование);
				    objUser.Put("department", ТекСтрока.ПодразделениеОрганизации.Наименование);
				    objUser.SetInfo();
				     					
				    objUser.userAccountControl = 512;
				    //65536;
				    //objUser.AccountDisabled=1;
				    objUser.SetPassword(strPWD);
				    //objUser.pwdLastSet=0;
				    objUser.SetInfo();
					
					ЗапросГруппы = НОвый Запрос;
				    ЗапросГруппы.УстановитьПараметр("Организация", Источник.Организация);
				    ЗапросГруппы.УстановитьПараметр("Должность", ТекСтрока.Должность);
					ЗапросГруппы.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
				    ЗапросГруппы.Текст =
				    "ВЫБРАТЬ
				    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
				    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
				    |ИЗ
				    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
				    |ГДЕ
				    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
				    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
				    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
				    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
				    ВыборкаГрупп = ЗапросГруппы.Выполнить().Выгрузить();
				    Для Каждого ТекГруппа из ВыборкаГрупп Цикл
				     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекГруппа.ПутьГруппы);
				     ГруппаБезопасности.Add(objUser.ADsPath);
					 objUser.SetInfo();
				   КонецЦикла;
				   
				   ТабДок = Новый ТабличныйДокумент;
				   Макет = ПолучитьОбщийМакет("грсМакетЛогиПарольАД");
				   ОбластьМакета = Макет.ПолучитьОбласть("ПользователиАД");
				   ОбластьМакета.Параметры.пользователь ="Сотрудник: "+ ТекСтрока.Сотрудник.ФизЛицо.Наименование;
				   ОбластьМакета.Параметры.логин = "Логин: "+РС.ПользовательАД;
				   ОбластьМакета.Параметры.логин1 = "Логин: domen\"+РС.ПользовательАД;
				   ОбластьМакета.Параметры.пароль ="Пароль: "+ РС.Пароль;
				   ОбластьМакета.Параметры.почта = "Е-mail: "+РС.ПочтаАД;
				   ТабДок.Вывести(ОбластьМакета);
	               ТабДок.ТолькоПросмотр = Истина;
				   	ТабДок.ОтображатьЗаголовки = Истина;
					ТабДок.ОтображатьСетку = Ложь;
					ТабДок.Показать();
					
					ЗапуститьПриложение("\\file\Common\Секретари\Инструкции ИТ\Подключение к удаленному рабочему столу Linux.doc");
					ЗапуститьПриложение("\\file\Common\Секретари\Инструкции ИТ\Подключение к удаленному рабочему столу Windows.docx");
				Исключение
					КонецПопытки;

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

					//если найден сверям должности и при различии перемещаем с новыми правами
					Отбор = Новый Структура;
					Отбор.Вставить("Сотрудник",ТекСтрока.Сотрудник); 
					СтарДанные = РегистрыСведений.РаботникиОрганизаций.ПолучитьПоследнее(Источник.Дата, Отбор);
					Если Не  ТекСтрока.Должность =  СтарДанные.Должность или не  СтарДанные.ПодразделениеОрганизации = ТекСтрока.ПодразделениеОрганизации Тогда
						//не равны должности но равны подразделения
						Если Не  ТекСтрока.Должность = СтарДанные.Должность и СтарДанные.ПодразделениеОрганизации = ТекСтрока.ПодразделениеОрганизации Тогда
								ЗапросДол = Новый Запрос;
								ЗапросДол.Текст =
								ЗапросДол = Новый Запрос;
								ЗапросДол.УстановитьПараметр("Должность", ТекСтрока.Должность);
								ЗАпросДол.Текст = 
								"ВЫБРАТЬ
								|	грсДолжностиДляАДСписокДолжностейАД.Должность
								|ИЗ
								|	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
								|ГДЕ
								|	грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
								|	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
								ВыборкаДол = ЗапросДол.Выполнить().Выгрузить();
								
								Если ВыборкаДол.Количество() > 0 Тогда
									ЗапросПуть = Новый Запрос;
									ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
									ЗапросПуть.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
									ЗапросПуть.Текст = 
									"ВЫБРАТЬ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
									|ИЗ
									|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
									|ГДЕ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
									ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
									
									ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
									    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
									КонецЦикла;
												
									objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
									objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
									strCN = СтрокаФИО;
									element_user = objContainer.GetObject("User", "CN=" +strCN);
									element_user.Put("title", ТекСтрока.Должность.Наименование);
									element_user.SetInfo(); 
									
									ЗапросСтарГрупп = НОвый Запрос;
								    ЗапросСтарГрупп.УстановитьПараметр("Владелец", Источник.Организация);
								    ЗапросСтарГрупп.УстановитьПараметр("Должность", СтарДанные.Должность);
									ЗапросСтарГрупп.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
								    ЗапросСтарГрупп.Текст =
								    "ВЫБРАТЬ
								    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
								    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
								    |ИЗ
								    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
								    |ГДЕ
								    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
								    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
								    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
								    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
									ВыборкаСтарГрупп = ЗапросСтарГрупп.Выполнить().Выгрузить();	
									Для Каждого ТекСтарГруппа из ВыборкаСтарГрупп Цикл
									     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекСтарГруппа.ПутьГруппы);
									     ГруппаБезопасности.Remove(element_user.ADsPath);
										 element_user.SetInfo();
									КонецЦикла;

									ЗапросГруппы = НОвый Запрос;
								    ЗапросГруппы.УстановитьПараметр("Организация", Источник.Организация);
								    ЗапросГруппы.УстановитьПараметр("Должность", ТекСтрока.Должность);
									ЗапросГруппы.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
								    ЗапросГруппы.Текст =
								    "ВЫБРАТЬ
								    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
								    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
								    |ИЗ
								    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
								    |ГДЕ
								    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
								    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
								    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
								    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
									ВыборкаГрупп = ЗапросГруппы.Выполнить().Выгрузить();
								    Для Каждого ТекГруппа из ВыборкаГрупп Цикл
								     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекГруппа.ПутьГруппы);
								     ГруппаБезопасности.Add(element_user.ADsPath);
									 element_user.SetInfo();
								   КонецЦикла;
					              КонецЕсли;
							КонецЕсли;
							//равны должности но не равны подразделения
							Если ТекСтрока.Должность =  СтарДанные.Должность и Не СтарДанные.ПодразделениеОрганизации = ТекСтрока.ПодразделениеОрганизации Тогда
								ЗапросДол = Новый Запрос;
								ЗапросДол.Текст =
								ЗапросДол = Новый Запрос;
								ЗапросДол.УстановитьПараметр("Должность", ТекСтрока.Должность);
								ЗАпросДол.Текст = 
								"ВЫБРАТЬ
								|	грсДолжностиДляАДСписокДолжностейАД.Должность
								|ИЗ
								|	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
								|ГДЕ
								|	грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
								|	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
								ВыборкаДол = ЗапросДол.Выполнить().Выгрузить();
								
								Если ВыборкаДол.Количество() > 0 Тогда
									ЗапросПуть = Новый Запрос;
									ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
									ЗапросПуть.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
									ЗапросПуть.Текст = 
									"ВЫБРАТЬ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
									|ИЗ
									|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
									|ГДЕ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
									ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
									
									ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
									    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
									КонецЦикла;
											
									objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
									objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
									strCN = СтрокаФИО;
									element_user = objContainer.GetObject("User", "CN=" +strCN);
									element_user.Put("department", ТекСтрока.ПодразделениеОрганизации.Наименование);
									element_user.SetInfo(); 
									
									ЗапросСтарПодр = Новый Запрос; 
									ЗапросСтарПодр.УстановитьПараметр("Организация", Источник.Организация);
									ЗапросСтарПодр.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
									ЗапросСтарПодр.Текст = 
									"ВЫБРАТЬ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
									|ИЗ
									|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
									|ГДЕ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
									ВыборкаСтарПодр = ЗапросСтарПодр.Выполнить().Выгрузить();
									
									ДЛя Каждого ТекПутьСтары из ВыборкаСтарПодр Цикл
									    ПутьАДСтарый = СтрЗаменить(ТекПутьСтары.ГруппаАД,"/","");
									КонецЦикла;
									element_group = ПолучитьCOMОбъект("LDAP://"+ПутьАДСтарый+",DC=domen,DC=ru");
									element_group.MoveHere("LDAP://CN=" +strCN+","+ПутьАД+",DC=domen,DC=ru", "CN=" +strCN);
									element_group.SetInfo();				
									КонецЕсли;
								КонецЕсли;
								//ни подразделение ни должность не равно
								Если Не  ТекСтрока.Должность =  СтарДанные.Должность и не СтарДанные.ПодразделениеОрганизации = ТекСтрока.ПодразделениеОрганизации Тогда
									ЗапросДол = Новый Запрос;
									ЗапросДол.Текст =
									ЗапросДол = Новый Запрос;
									ЗапросДол.УстановитьПараметр("Должность", ТекСтрока.Должность);
									ЗАпросДол.Текст = 
									"ВЫБРАТЬ
									|	грсДолжностиДляАДСписокДолжностейАД.Должность
									|ИЗ
									|	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
									|ГДЕ
									|	грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
									|	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
									ВыборкаДол = ЗапросДол.Выполнить().Выгрузить();
									
									Если ВыборкаДол.Количество() > 0 Тогда
										ЗапросПуть = Новый Запрос;
										ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
										ЗапросПуть.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
										ЗапросПуть.Текст = 
										"ВЫБРАТЬ
										|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
										|ИЗ
										|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
										|ГДЕ
										|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
										|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
										|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
										ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
										
										ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
										    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
										КонецЦикла;
											
										objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
										objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
										strCN = СтрокаФИО;
										element_user = objContainer.GetObject("User", "CN=" +strCN);
										element_user.Put("title", ТекСтрока.Должность.Наименование);
										element_user.Put("department", ТекСтрока.ПодразделениеОрганизации.Наименование);
										element_user.SetInfo(); 
										ЗапросСтарГрупп = НОвый Запрос;
									  	ЗапросСтарГрупп.УстановитьПараметр("Владелец", Источник.Организация);
									    ЗапросСтарГрупп.УстановитьПараметр("Должность", СтарДанные.Должность);
										ЗапросСтарГрупп.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
									    ЗапросСтарГрупп.Текст =
									    "ВЫБРАТЬ
									    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
									    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
									    |ИЗ
									    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
									    |ГДЕ
									    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
									    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
									    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
									    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
									    ВыборкаСтарГрупп = ЗапросСтарГрупп.Выполнить().Выгрузить();
										
										Для Каждого ТекСтарГруппа из ВыборкаСтарГрупп Цикл
									     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекСтарГруппа.ПутьГруппы);
									     ГруппаБезопасности.Remove(element_user.ADsPath);
										 element_user.SetInfo();
									   КонецЦикла;

										ЗапросГруппы = НОвый Запрос;
									  	ЗапросГруппы.УстановитьПараметр("Организация", Источник.Организация);
									    ЗапросГруппы.УстановитьПараметр("Должность", ТекСтрока.Должность);
										ЗапросГруппы.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
									    ЗапросГруппы.Текст =
									    "ВЫБРАТЬ
									    |	грсДолжностиДляАДСписокДолжностейАД.ГруппаБезопасности,
									    |	грсДолжностиДляАДСписокДолжностейАД.ПутьГруппы
									    |ИЗ
									    |	Справочник.грсДолжностиДляАД.СписокДолжностейАД КАК грсДолжностиДляАДСписокДолжностейАД
									    |ГДЕ
									    |	грсДолжностиДляАДСписокДолжностейАД.Ссылка.ПометкаУдаления = ЛОЖЬ
									    |	И грсДолжностиДляАДСписокДолжностейАД.Должность = &Должность
									    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Организация = &Организация
									    |	И грсДолжностиДляАДСписокДолжностейАД.Ссылка.Подразделение = &Подразделение";
									    ВыборкаГрупп = ЗапросГруппы.Выполнить().Выгрузить();
										
										Для Каждого ТекГруппа из ВыборкаГрупп Цикл
									     ГруппаБезопасности = ПолучитьCOMОбъект("LDAP://" + ТекГруппа.ПутьГруппы);
									     ГруппаБезопасности.Add(element_user.ADsPath);
										 element_user.SetInfo();
									   КонецЦикла;
									   
									 	ЗапросСтарПодр = Новый Запрос; 
										ЗапросСтарПодр.УстановитьПараметр("Организация", Источник.Организация);
										ЗапросСтарПодр.УстановитьПараметр("Подразделение", ТекСтрока.ПодразделениеОрганизации);
										ЗапросСтарПодр.Текст = 
										"ВЫБРАТЬ
										|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
										|ИЗ
										|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
										|ГДЕ
										|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
										|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
										|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
										ВыборкаСтарПодр = ЗапросСтарПодр.Выполнить().Выгрузить();
										
										ДЛя Каждого ТекПутьСтары из ВыборкаСтарПодр Цикл
										    ПутьАДСтарый = СтрЗаменить(ТекПутьСтары.ГруппаАД,"/","");
										КонецЦикла;
										element_group = ПолучитьCOMОбъект("LDAP://"+ПутьАДСтарый+",DC=domen,DC=ru");
										element_group.MoveHere("LDAP://CN=" +strCN+","+ПутьАД+",DC=domen,DC=ru", "CN=" +strCN);
										element_group.SetInfo();

									КонецЕсли;
								КонецЕсли;
								
								
							ИНаче
								//если новая должность не имеет доступа к АД лочим юзверя
									Запрос = Новый Запрос;
									Запрос.УстановитьПараметр("ФизЛицо", ТекСтрока.Сотрудник.ФизЛицо);
									Запрос.Текст =
									"ВЫБРАТЬ
									|	ФИОФизЛицСрезПоследних.Фамилия,
									|	ФИОФизЛицСрезПоследних.Имя,
									|	ФИОФизЛицСрезПоследних.Отчество
									|ИЗ
									|	РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
									|ГДЕ
									|	ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
									Выборка = Запрос.Выполнить().Выбрать();
												
									Пока Выборка.Следующий() Цикл
										СтрокаВход = Выборка.Фамилия + Лев(Выборка.Имя, 1)+Лев(Выборка.Отчество, 1);
										СтрокаФио = Выборка.Фамилия + " "+Выборка.Имя+" "+Выборка.Отчество;
									КонецЦикла;
									Отбор = Новый Структура;
									Отбор.Вставить("Сотрудник",ТекСтрока.Сотрудник); 
									СтарДанные = РегистрыСведений.РаботникиОрганизаций.ПолучитьПоследнее(Источник.Дата, Отбор);
			
									ЗапросПуть = Новый Запрос;
									ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
									ЗапросПуть.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
									ЗАпросПуть.Текст = 
									"ВЫБРАТЬ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
									|ИЗ
									|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
									|ГДЕ
									|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
									|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
									ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
									ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
									    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
									КонецЦикла;
															 			
																					 										
									objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
									objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
									strCN = СтрокаФИО;
									element_user = objContainer.GetObject("User", "CN=" +strCN);
									element_user.userAccountControl = 2;
									element_user.SetInfo(); 
									
									element_group = ПолучитьCOMОбъект("LDAP://OU=user,OU=Dead,DC=domen,DC=ru");
									element_group.MoveHere("LDAP://CN=" +strCN+","+ПутьАД+",DC=domen,DC=ru", "CN=" +strCN);
									element_group.SetInfo();
								КонецЕсли;
							КонецЕСли;
						КонецЕсли;	
					КонецЕсли;
				Исключение;
				КонецПопытки;
				
			КонецЦикла;
		КонецЕсли;
		

При проведении Отпуска:


Если РольДоступна("ДобавлениеУдалениеПользователейАД") Тогда

		Для Каждого ТекСтрока из Источник.РаботникиОрганизации Цикл
			Попытка;
				//находим пользователя
		ЗапросАД = Новый Запрос;
				ЗапросАД.УстановитьПараметр("ФизЛицо", ТекСтрока.Сотрудник.ФизЛицо);
				ЗапросАД.Текст = 
				"ВЫБРАТЬ
				|	грсСписокПользователейАД.ДатаСоздания,
				|	грсСписокПользователейАД.ПользовательАД,
				|	грсСписокПользователейАД.ПочтаАД,
				|	грсСписокПользователейАД.ФизЛицо
				|ИЗ
				|	РегистрСведений.грсСписокПользователейАД КАК грсСписокПользователейАД
				|ГДЕ
				|	грсСписокПользователейАД.ФизЛицо = &ФизЛицо";
				ВыборкаАД = ЗапросАД.Выполнить().Выбрать();
				ВыборкаАД.Следующий();
				Если ВыборкаАД.Количество() > 0 Тогда
					Если ТекСтрока.Сотрудник.ВидЗанятости = Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы Тогда
					Запрос = Новый Запрос;
					Запрос.УстановитьПараметр("ФизЛицо", ТекСтрока.Сотрудник.ФизЛицо);
					Запрос.Текст =
					"ВЫБРАТЬ
					|	ФИОФизЛицСрезПоследних.Фамилия,
					|	ФИОФизЛицСрезПоследних.Имя,
					|	ФИОФизЛицСрезПоследних.Отчество
					|ИЗ
					|	РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
					|ГДЕ
					|	ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
					Выборка = Запрос.Выполнить().Выбрать();
								
					Пока Выборка.Следующий() Цикл
						СтрокаВход = Выборка.Фамилия + Лев(Выборка.Имя, 1)+Лев(Выборка.Отчество, 1);
						СтрокаФио = Выборка.Фамилия + " "+Выборка.Имя+" "+Выборка.Отчество;
					КонецЦикла;
					//находим группу АД			
					ЗапросПуть = Новый Запрос;
								ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
								ЗапросПуть.УстановитьПараметр("Подразделение", ТекСтрока.Сотрудник.ПодразделениеОрганизации);
								ЗАпросПуть.Текст = 
								"ВЫБРАТЬ
								|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
								|ИЗ
								|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
								|ГДЕ
								|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
								|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
								|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
								ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
								ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
								    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
								КонецЦикла;
																								 										
					objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
					objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
					strCN = СтрокаФио;
					element_user = objContainer.GetObject("User", "CN=" +strCN);
					//расчитываем время блокировки пользователя = день начала отпуска
					ДатаАД = Формат((НачалоДня(ТекСтрока.ДатаНачала+86400) - НАчалоДня(Дата("16010101"))), "ЧГ=0");
					element_user.accountExpires = Формат(ДатаАД*10000000, "ЧГ=0");
					element_user.SetInfo(); 
					
				КонецЕсли;
			КонецЕсли;
		Исключение;
			
		КонецПопытки;
		КонецЦикла;
		
	КонецЕСли;

При проведении больничного листа по беременности и родам:


Если РольДоступна("ДобавлениеУдалениеПользователейАД") Тогда

		Если Источник.Сотрудник.ВидЗанятости = Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы и Источник.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
			Попытка;
		//находим пользователя АД		
		ЗапросАД = Новый Запрос;
		ЗапросАД.УстановитьПараметр("ФизЛицо", Источник.Сотрудник.ФизЛицо);
		ЗапросАД.Текст = 
		"ВЫБРАТЬ
		|	грсСписокПользователейАД.ДатаСоздания,
		|	грсСписокПользователейАД.ПользовательАД,
		|	грсСписокПользователейАД.ПочтаАД,
		|	грсСписокПользователейАД.ФизЛицо
		|ИЗ
		|	РегистрСведений.грсСписокПользователейАД КАК грсСписокПользователейАД
		|ГДЕ
		|	грсСписокПользователейАД.ФизЛицо = &ФизЛицо";
		ВыборкаАД = ЗапросАД.Выполнить().Выбрать();
		ВыборкаАД.Следующий();
		Если ВыборкаАД.Количество() > 0 Тогда
			Запрос = Новый Запрос;
			Запрос.УстановитьПараметр("ФизЛицо", Источник.Сотрудник.ФизЛицо);
			Запрос.Текст =
			"ВЫБРАТЬ
			|	ФИОФизЛицСрезПоследних.Фамилия,
			|	ФИОФизЛицСрезПоследних.Имя,
			|	ФИОФизЛицСрезПоследних.Отчество
			|ИЗ
			|	РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
			|ГДЕ
			|	ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
			Выборка = Запрос.Выполнить().Выбрать();
						
			Пока Выборка.Следующий() Цикл
				СтрокаВход = Выборка.Фамилия + Лев(Выборка.Имя, 1)+Лев(Выборка.Отчество, 1);
				СтрокаФио = Выборка.Фамилия + " "+Выборка.Имя+" "+Выборка.Отчество;
			КонецЦикла;
			//Находим группу АД			
			ЗапросПуть = Новый Запрос;
						ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
						ЗапросПуть.УстановитьПараметр("Подразделение", Источник.Сотрудник.ПодразделениеОрганизации);
						ЗАпросПуть.Текст = 
						"ВЫБРАТЬ
						|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
						|ИЗ
						|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
						|ГДЕ
						|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
						|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
						|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
						ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
						ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
						    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
						КонецЦикла;
								 										
			objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
			objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
			strCN = СтрокаФио;
			element_user = objContainer.GetObject("User", "CN=" +strCN);
			//начала больничного по беременности и родам
			ДатаАД = Формат((НачалоДня(Источник.ДатаНачалаСобытия+86400) - НАчалоДня(Дата("16010101"))), "ЧГ=0");
			element_user.accountExpires = Формат(ДатаАД*10000000, "ЧГ=0");
			element_user.SetInfo(); 
		КонецЕсли;
	Исключение;
		
	КонецПопытки;
	
	КонецЕсли;
 КонецЕсли;

Ну и при проведении увольнения:


Если РольДоступна("ДобавлениеУдалениеПользователейАД") Тогда

		Для Каждого ТекСтрока из Источник.РаботникиОрганизации Цикл
			попытка;
		Если ТекСтрока.Сотрудник.ВидЗанятости = Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы Тогда
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("ФизЛицо", ТекСтрока.Сотрудник.ФизЛицо);
		Запрос.Текст =
		"ВЫБРАТЬ
		|	ФИОФизЛицСрезПоследних.Фамилия,
		|	ФИОФизЛицСрезПоследних.Имя,
		|	ФИОФизЛицСрезПоследних.Отчество
		|ИЗ
		|	РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
		|ГДЕ
		|	ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
		Выборка = Запрос.Выполнить().Выбрать();
					
		Пока Выборка.Следующий() Цикл
			СтрокаВход = Выборка.Фамилия + Лев(Выборка.Имя, 1)+Лев(Выборка.Отчество, 1);
			СтрокаФио = Выборка.Фамилия + " "+Выборка.Имя+" "+Выборка.Отчество;
		КонецЦикла;
		
		Отбор = Новый Структура;
		Отбор.Вставить("Сотрудник",ТекСтрока.Сотрудник); 
		СтарДанные = РегистрыСведений.РаботникиОрганизаций.ПолучитьПоследнее(Источник.Дата, Отбор);
		//находим группу в АД
		ЗапросПуть = Новый Запрос;
		ЗапросПуть.УстановитьПараметр("Организация", Источник.Организация);
		ЗапросПуть.УстановитьПараметр("Подразделение", СтарДанные.ПодразделениеОрганизации);
		ЗАпросПуть.Текст = 
		"ВЫБРАТЬ
		|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.ГруппаАД
		|ИЗ
		|	Справочник.грсСооветствиеПодразделенийИГрупппВАД.ГруппыАД КАК грсСооветствиеПодразделенийИГрупппВАДГруппыАД
		|ГДЕ
		|	грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.Организация = &Организация
		|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Подразделение = &Подразделение
		|	И грсСооветствиеПодразделенийИГрупппВАДГруппыАД.Ссылка.ПометкаУдаления = ЛОЖЬ";
		ВыборкаПуть = ЗапросПуть.Выполнить().Выгрузить();
		ДЛя Каждого ТекПуть из ВыборкаПуть Цикл
		    ПутьАД = СтрЗаменить(ТекПуть.ГруппаАД,"/","");
		КонецЦикла;
		//находим пользователя АД
		ЗапросАД = Новый Запрос;
				ЗапросАД.УстановитьПараметр("ФизЛицо", ТекСтрока.Сотрудник.ФизЛицо);
				ЗапросАД.Текст = 
				"ВЫБРАТЬ
				|	грсСписокПользователейАД.ДатаСоздания,
				|	грсСписокПользователейАД.ПользовательАД,
				|	грсСписокПользователейАД.ПочтаАД,
				|	грсСписокПользователейАД.ФизЛицо
				|ИЗ
				|	РегистрСведений.грсСписокПользователейАД КАК грсСписокПользователейАД
				|ГДЕ
				|	грсСписокПользователейАД.ФизЛицо = &ФизЛицо";
				ВыборкаАД = ЗапросАД.Выполнить().Выбрать();
				ВыборкаАД.Следующий();		 			
	
		Если ВыборкаАД.Количество() > 0 Тогда			 										
		objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
		objContainer = ПолучитьCOMОбъект("LDAP://"+ПутьАД+",DC=domen,DC=ru");
		strCN = СтрокаФио;
		element_user = objContainer.GetObject("User", "CN=" +strCN);
		Если ТекСтрока.ДатаУвольнения = ТекущаяДата() Тогда
		element_user.userAccountControl = 2;
		element_user.SetInfo(); 
		//Лочим пользователя если увольнение в день создания документа
		element_group = ПолучитьCOMОбъект("LDAP://OU=user,OU=Dead,DC=domen,DC=ru");
		element_group.MoveHere("LDAP://CN=" +strCN+","+ПутьАД+",DC=domen,DC=ru", "CN=" +strCN);
		element_group.SetInfo();
	Иначе
		//лочим пользователя если увольнение создано заранее
		ДатаАД = Формат((НачалоДня(ТекСтрока.ДатаУвольнения+86400) - НАчалоДня(Дата("16010101"))), "ЧГ=0");
		element_user.accountExpires = Формат(ДатаАД*10000000, "ЧГ=0");
		element_user.SetInfo();	
	КонецЕсли;
	КонецЕСли;
	КонецЕсли;
Исключение;
	КонецПопытки;
	КонецЦикла;
КонецЕсли;

Потом сисадмины создали группу в AD которая может создавать/редактировать  пользователей AD, включили в нее кадровиков. 2 дня заполнения данных по справочникам созданми изначально и передача в продакшин. Для передачи паролей пользователю, кадровикам сделал ВПФ которая берет данные созданно пользователя из РС, и кадровики отдают в руки с инструкциями пользоватлю. 

Всем спасибо за внимание! Всем добра)

Read Full Article