Правило обмена реализовано на КД2.
Особенности: Выгрузка всех действующих сотрудников, а также уволенных сотрудников (за последний месяц), пользователи выгружаются со всеми настройками (пароли и т.д.). Выдаются базовые права.
Сначала переносим пользователей, а затем уже пользователей информационной базы. Ниже показан фрагмент кода из правила:
Создаем подчиненный узел с информацией о пользователе информационной базы:
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Источник.УИД));
Если ПользовательИБ <> Неопределено Тогда
Описание = Новый Структура("Имя,ПолноеИмя,АутентификацияOpenID,АутентификацияОС,АутентификацияСтандартная,
|ЗапрещеноИзменятьПароль,СохраняемоеЗначениеПароля,ПоказыватьВСпискеВыбора,Пароль,ПарольУстановлен,ЗащитаОтОпасныхДействий,
|ПользовательОС,УникальныйИдентификатор,АутентификацияOpenIDConnect,ЗапрещеноВосстанавливатьПароль,АдресЭлектроннойПочты");
ЗаполнитьЗначенияСвойств(Описание,ПользовательИБ,,"ЗащитаОтОпасныхДействий");
Описание.ЗащитаОтОпасныхДействий = ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях;
ИнформацияОПользователе = СоздатьУзел("ИнформацияОПользователе");
Для каждого КлючИЗначение ИЗ Описание Цикл
УстановитьАтрибут(ИнформацияОПользователе, КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
ДобавитьПодчиненный(Приемник, ИнформацияОПользователе);
КонецЕсли;
Прочитаем информацию о пользователе и запишем его в список пользователей информационной базы:
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ТипУзла = ФайлОбмена.ТипУзла;
Если ИмяУзла = "ИнформацияОПользователе" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
ИмяПользователя = одАтрибут(ФайлОбмена, одТипСтрока, "Имя");
Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если Пользователь = Неопределено Тогда
Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
Пользователь.Имя = ИмяПользователя;
Пользователь.ПолноеИмя = одАтрибут(ФайлОбмена, одТипСтрока, "ПолноеИмя");
Пользователь.АутентификацияOpenID = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияOpenID");
Пользователь.АутентификацияОС = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияОС");
Пользователь.АутентификацияСтандартная = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияСтандартная");
Пользователь.ЗапрещеноИзменятьПароль = одАтрибут(ФайлОбмена, одТипБулево, "ЗапрещеноИзменятьПароль");
Пользователь.ПоказыватьВСпискеВыбора = одАтрибут(ФайлОбмена, одТипБулево, "ПоказыватьВСпискеВыбора");
Пользователь.СохраняемоеЗначениеПароля = одАтрибут(ФайлОбмена, одТипСтрока, "СохраняемоеЗначениеПароля");
Пользователь.ПользовательОС = одАтрибут(ФайлОбмена, одТипСтрока, "ПользовательОС");
Пользователь.АутентификацияOpenIDConnect = одАтрибут(ФайлОбмена, одТипСтрока, "АутентификацияOpenIDConnect");
Пользователь.ЗапрещеноВосстанавливатьПароль = одАтрибут(ФайлОбмена, одТипСтрока, "ЗапрещеноВосстанавливатьПароль");
Пользователь.АдресЭлектроннойПочты = одАтрибут(ФайлОбмена, одТипСтрока, "АдресЭлектроннойПочты");
ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий;
ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = одАтрибут(ФайлОбмена, одТипБулево, "ЗащитаОтОпасныхДействий");
Пользователь.ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий;
Пользователь.Записать();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","ИдентификаторПользователяЗУП"));
Запрос.УстановитьПараметр("Значение", одАтрибут(ФайлОбмена, одТипСтрока, "УникальныйИдентификатор"));
Запрос.Текст = "ВЫБРАТЬ
| ПользователиДополнительныеРеквизиты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Пользователи.ДополнительныеРеквизиты КАК ПользователиДополнительныеРеквизиты
|ГДЕ
| ПользователиДополнительныеРеквизиты.Свойство = &Свойство
| И ПользователиДополнительныеРеквизиты.Значение = &Значение";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект();
ПользовательОбъект.ИдентификаторПользователяИБ = Пользователь.УникальныйИдентификатор;
ПользовательОбъект.ОбменДанными.Загрузка = Истина;
ПользовательОбъект.Записать();
КонецЕсли;
ИначеЕсли (ИмяУзла = "ИнформацияОПользователе") И (ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Когда будете загружать через УниверсальныйОбменДаннымиXML, то обязательно выставите Загрузка данными в режиме обмена в Ложь.
В справочнике Пользователи нужно будет создать дополнительный реквизит "ИдентификаторПользователяЗУП"
В справочнике Сотрудники нужно будет создать дополнительный реквизит "ТабельныйНомер"
Проверено на следующих конфигурациях и релизах:
- Документооборот КОРП, редакция 3.0, релизы 3.0.14.31
- Зарплата и управление персоналом КОРП, редакция 3.1, релизы 3.1.29.78