Имя: Пароль:
1C
1С v8
Конвертация данных 2.1. Перенос пользователей
0 Georg_QQ
 
05.12.17
14:39
Столкнулся со следующей проблемой.

есть 2 (К1, К2)конфигурации источника и 1 конфиг приемника (К3).

При переносе пользователей. выполняется следующий код

При выгрузке

ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Источник.ИдентификаторПользователяИБ);

Если ПользовательИБ <> Неопределено Тогда

    РежимыЗапуска = Новый Соответствие;
    РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.Авто, "Авто");
    РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение, "ОбычноеПриложение");
    РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение, "УправляемоеПриложение");
    
    ИнформацияОПользователе = СоздатьУзел("ИнформацияОПользователе");
    
    УстановитьАтрибут(ИнформацияОПользователе, "Имя", ПользовательИБ.Имя);
    УстановитьАтрибут(ИнформацияОПользователе, "ПолноеИмя", ПользовательИБ.ПолноеИмя);
    УстановитьАтрибут(ИнформацияОПользователе, "АутентификацияОС", ПользовательИБ.АутентификацияОС);
    УстановитьАтрибут(ИнформацияОПользователе, "АутентификацияOpenID", ПользовательИБ.АутентификацияOpenID);
    УстановитьАтрибут(ИнформацияОПользователе, "АутентификацияСтандартная", ПользовательИБ.АутентификацияСтандартная);
    УстановитьАтрибут(ИнформацияОПользователе, "ЗапрещеноИзменятьПароль", ПользовательИБ.ЗапрещеноИзменятьПароль);
    УстановитьАтрибут(ИнформацияОПользователе, "ПоказыватьВСпискеВыбора", ПользовательИБ.ПоказыватьВСпискеВыбора);
    УстановитьАтрибут(ИнформацияОПользователе, "ПользовательОС", ПользовательИБ.ПользовательОС);
    УстановитьАтрибут(ИнформацияОПользователе, "СохраняемоеЗначениеПароля", ПользовательИБ.СохраняемоеЗначениеПароля);
    УстановитьАтрибут(ИнформацияОПользователе, "РежимЗапуска", РежимыЗапуска[ПользовательИБ.РежимЗапуска]);
    
    Если ПользовательИБ.ОсновнойИнтерфейс <> Неопределено Тогда
        УстановитьАтрибут(ИнформацияОПользователе, "ОсновнойИнтерфейс", ПользовательИБ.ОсновнойИнтерфейс.Имя);
    Иначе
        УстановитьАтрибут(ИнформацияОПользователе, "ОсновнойИнтерфейс", "");
    КонецЕсли;
    Если ПользовательИБ.Язык <> Неопределено Тогда
        УстановитьАтрибут(ИнформацияОПользователе, "Язык",ПользовательИБ.Язык.Имя);
    Иначе
        УстановитьАтрибут(ИнформацияОПользователе, "Язык", "");
    КонецЕсли;    
    
    ЧислоРолей = 0;
    Для Каждого Роль Из ПользовательИБ.Роли Цикл
        ЧислоРолей = ЧислоРолей + 1;
        УстановитьАтрибут(ИнформацияОПользователе, "Роль"+Формат(ЧислоРолей,"ЧГ="), Роль.Имя);
    КонецЦикла;
    УстановитьАтрибут(ИнформацияОПользователе, "ЧислоРолей", ЧислоРолей);
    ДобавитьПодчиненный(Приемник, ИнформацияОПользователе);
Иначе
    Отказ = Истина;    
КонецЕсли;
/////////////////////////////////////
/////////////////////////////////////
после загрузки:

Если ОбъектНайден Тогда
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Объект.ИдентификаторПользователяИБ);
    СоздатьПользователяИБ = (ПользовательИБ = Неопределено);
Иначе
    СоздатьПользователяИБ = Истина;    
КонецЕсли;



Пока ФайлОбмена.Прочитать() Цикл
    ИмяУзла = ФайлОбмена.ЛокальноеИмя;
    ТипУзла = ФайлОбмена.ТипУзла;
    Если ИмяУзла = "ИнформацияОПользователе" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
        
        ИмяПользователяИБ = одАтрибут(ФайлОбмена, одТипСтрока, "Имя");
        Если СоздатьПользователяИБ Тогда
            ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ);
            Если ПользовательИБ = Неопределено Тогда
                ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
            КонецЕсли;
        КонецЕсли;
        
        
        ПользовательИБ.Имя                         = ИмяПользователяИБ;
        ПользовательИБ.ПолноеИмя                = одАтрибут(ФайлОбмена, одТипСтрока, "ПолноеИмя");
        ПользовательИБ.АутентификацияОС            = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияОС");
        ПользовательИБ.АутентификацияOpenID        = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияOpenID");
        ПользовательИБ.АутентификацияСтандартная= одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияСтандартная");
        ПользовательИБ.ЗапрещеноИзменятьПароль    = одАтрибут(ФайлОбмена, одТипБулево, "ЗапрещеноИзменятьПароль");
        ПользовательИБ.ПоказыватьВСпискеВыбора    = одАтрибут(ФайлОбмена, одТипБулево, "ПоказыватьВСпискеВыбора");
        ПользовательИБ.ПользовательОС            = одАтрибут(ФайлОбмена, одТипСтрока, "ПользовательОС");
        ПользовательИБ.СохраняемоеЗначениеПароля= одАтрибут(ФайлОбмена, одТипСтрока, "СохраняемоеЗначениеПароля");
        ПользовательИБ.РежимЗапуска                = РежимЗапускаКлиентскогоПриложения[одАтрибут(ФайлОбмена, одТипСтрока, "РежимЗапуска")];
        
        ИмяОсновногоИнтерфейса = одАтрибут(ФайлОбмена, одТипСтрока, "ОсновнойИнтерфейс");
        Если Не ПустаяСтрока(ИмяОсновногоИнтерфейса) Тогда
            Интерфейс = Метаданные.Интерфейсы.Найти(ИмяОсновногоИнтерфейса);
            Если Интерфейс <> Неопределено Тогда
                ПользовательИБ.ОсновнойИнтерфейс = Интерфейс;
            Иначе
                ПользовательИБ.ОсновнойИнтерфейс = Неопределено;    
            КонецЕсли;
        Иначе
            ПользовательИБ.ОсновнойИнтерфейс = Неопределено;    
        КонецЕсли;
        
        ИмяЯзыка = одАтрибут(ФайлОбмена, одТипСтрока, "Язык");
        Если Не ПустаяСтрока(ИмяЯзыка) Тогда
            Язык = Метаданные.Языки.Найти(ИмяЯзыка);
            Если Язык <> Неопределено Тогда
                ПользовательИБ.Язык = Язык;
            Иначе
                ПользовательИБ.Язык = Неопределено;    
            КонецЕсли;
        Иначе
            ПользовательИБ.Язык = Неопределено;    
        КонецЕсли;
        
        ПользовательИБ.Роли.Очистить();
        
        ЧислоРолей = одАтрибут(ФайлОбмена, одТипЧисло, "ЧислоРолей");
        Если ЧислоРолей > 0 Тогда
            
            Для Итерация = 1 По ЧислоРолей Цикл
                
                СтрокаРоль = одАтрибут(ФайлОбмена, одТипСтрока, "Роль"+Формат(Итерация,"ЧГ="));
                Роль = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль));
                Если Роль = Неопределено Тогда
                    Сообщить("Роль " +СтрокаРоль + " не найдена");
                Иначе
                    ПользовательИБ.Роли.Добавить(Роль);    
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
    
    ИначеЕсли (ИмяУзла = "ИнформацияОПользователе") И (ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда
        Прервать;
    КонецЕсли;
КонецЦикла;

ПользовательИБ.Записать();

Объект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;


Для конвертации К1 > К3 - все отрабатывает корректно

а для К2 > К3 выдает ошибку

Ошибка формата файла обмена
ИмяУзла =  ИнформацияОПользователе

не могу понять в чем проблема. Код идентичен, почему во втором случае оно не может разобрать xml файл?
1 tomvlad
 
05.12.17
14:46
2 Georg_QQ
 
05.12.17
14:47
Извините. Нашел в чем ошибка. код должен был быть "при загрузке" а не "после загрузки"
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.