Имя: Пароль:
1C
1С v8
Стандартная обработка загрузки-выгрузки пользователей
0 Aleksey1989
 
21.05.12
10:15
Добрый день. Никак не могу понять, где в следующем коде указывается UUID загружаемого пользователя:

Функция ЗагрузитьПользователей(Адрес, ПриоритетФайла, ФормироватьПротокол) Экспорт
   
   Результат = Новый Структура("Статус, ИзФайла, Загружено, Совпадений, ФайлПротокола", Ложь, 0, 0, 0, "");
   
   РежимыЗапуска = Новый Соответствие;
   РежимыЗапуска.Вставить("Auto", РежимЗапускаКлиентскогоПриложения.Авто);
   РежимыЗапуска.Вставить("OrdinaryApplication", РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение);
   РежимыЗапуска.Вставить("ManagedApplication", РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение);

   ИмяФайла = ПолучитьИмяВременногоФайла();
   Данные = ПолучитьИзВременногоХранилища(Адрес);
   Данные.Записать(ИмяФайла);
   
   Фабрика = СоздатьФабрику();
   Сериализатор = Новый СериализаторXDTO(Фабрика);
   ТипРоль = Фабрика.Тип(ИмяПространстваИмен(), "Role");
   ТипПользователь = Фабрика.Тип(ИмяПространстваИмен(), "User");
   
   Чтение = Новый ЧтениеXML;
   Чтение.ОткрытьФайл(ИмяФайла);
   Чтение.Прочитать();
   Чтение.ПерейтиКСодержимому();
   
   Если ФормироватьПротокол Тогда
       
       ИмяПротокола = ПолучитьИмяВременногоФайла("log");
       Протокол = Новый ЗаписьТекста(ИмяПротокола, КодировкаТекста.UTF8);
       ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'Приоритет данных из файла:'", "ru") + " " + Строка(ПриоритетФайла));
       
   КонецЕсли;
   
   Если НЕ(Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "users") Тогда
       
       ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'ОШИБКА: Неверный формат файла. Отсутствует узел <users>.'", "ru"));
       Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
       Возврат Результат;
       
   КонецЕсли;
   Чтение.Прочитать();
   Чтение.ПерейтиКСодержимому();
   Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "User" Цикл
       
       Попытка
           
           ПрочитанныйОбъект = Фабрика.ПрочитатьXML(Чтение, ТипПользователь);
           Результат.ИзФайла = Результат.ИзФайла + 1;
           ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПрочитанныйОбъект.Name);
           Если ПользовательИБ <> Неопределено Тогда
               
               Результат.Совпадений = Результат.Совпадений + 1;
               Если НЕ ПриоритетФайла Тогда
                   
                   Если ФормироватьПротокол Тогда
                       
                       ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Не изменен.'", "ru"), "%1", ПрочитанныйОбъект.Name));
                       
                   КонецЕсли;
                   Продолжить;
                   
               КонецЕсли;
               
           КонецЕсли;
           
           Если ПользовательИБ = Неопределено Тогда
               
               Если ФормироватьПротокол Тогда
                   
                   ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Создан новый.'", "ru"), "%1", ПрочитанныйОбъект.Name));
                   
               КонецЕсли;
               ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
               
           Иначе    
               
               Если ФормироватьПротокол Тогда
                   
                   ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Обновлен данными из файла.'", "ru"), "%1", ПрочитанныйОбъект.Name));
                   
               КонецЕсли;
               
           КонецЕсли;
           
           ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
           ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
           ПользовательИБ.АутентификацияОС = ПрочитанныйОбъект.OSAuthentication;
           ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
           ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
           ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
           ПользовательИБ.ПользовательОС = ПрочитанныйОбъект.OSUser;
           ПользовательИБ.СохраняемоеЗначениеПароля = ПрочитанныйОбъект.StoredPasswordValue;
           ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];
           
           Если ПрочитанныйОбъект.Установлено("DefaultInterface") Тогда
               
               ИзФайла = ПрочитанныйОбъект.DefaultInterface;
               Если Метаданные.Интерфейсы.Найти(ИзФайла) = Неопределено Тогда
                   
                   Если ФормироватьПротокол Тогда
                       
                       ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Интерфейс '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
                       
                   КонецЕсли;
                   ВызватьИсключение "Ошибка";
                   
               КонецЕсли;
               ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[ИзФайла];
               
           КонецЕсли;
           Если ПрочитанныйОбъект.Установлено("Language") Тогда
               
               ИзФайла = ПрочитанныйОбъект.Language;
               Если Метаданные.Языки.Найти(ИзФайла) = Неопределено Тогда
                   
                   Если ФормироватьПротокол Тогда
                       
                       ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Язык '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
                       
                   КонецЕсли;
                   ВызватьИсключение "Ошибка";
                   
               КонецЕсли;
               ПользовательИБ.Язык = Метаданные.Языки[ИзФайла];
               
           КонецЕсли;
           Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
               
               ИзФайла = РольXDTO.Name;
               Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда
                   
                   Если ФормироватьПротокол Тогда
                       
                       ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Роль '%1' не обнаружена в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
                       
                   КонецЕсли;
                   ВызватьИсключение "Ошибка";
                   
               КонецЕсли;
               ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
               
           КонецЦикла;
           ПользовательИБ.Записать();
           Результат.Загружено = Результат.Загружено + 1;
           
       Исключение
           
           Если ФормироватьПротокол Тогда
               
               Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
               
           КонецЕсли;
           Чтение.Закрыть();
           УдалитьФайлы(ИмяФайла);
           Возврат Результат;
           
       КонецПопытки;
       
   КонецЦикла;
   
   Если ФормироватьПротокол Тогда
       
       Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
       
   КонецЕсли;
   
   Чтение.Закрыть();
   УдалитьФайлы(ИмяФайла);
   Результат.Статус = Истина;
   
   Возврат Результат;
   
КонецФункции