Имя: Пароль:
1C
1С v8
Загрузка выгрузка с xml в 1с
0 edzie
 
11.04.13
22:46
Здравствуйте, помогите доделать работу. Как сделать чтобы сохраненные в xml организации сотрудника загружались в справочник? и как
сделать так, чтобы одинаковые записи не появлялись? http://rghost.ru/45218562.view
http://rghost.ru/45218617.view
[code]Процедура ЗаписьXML(файл)
   // Выгрузить в файл xml
   Запись = Новый ЗаписьXML;
   Запись.ОткрытьФайл(файл, "UTF-8");
   
   // Записать директиву
   Запись.ЗаписатьОбъявлениеXML();
   
   // Записать начало корневого элемента
   Запись.ЗаписатьНачалоЭлемента("Запись_Данных");
   Выборка = Справочники.Организации.Выбрать();
   Запись.ЗаписатьНачалоЭлемента("Организации");
   пока Выборка.Следующий() цикл
       
       // Записать начало корневого элемента
       Запись.ЗаписатьНачалоЭлемента("Организация");
       
       // Записать атрибут корневого элемента
       Запись.ЗаписатьАтрибут("Код",Строка(Выборка.Код));
       Запись.ЗаписатьАтрибут("Наименование",Строка(Выборка.Наименование));
       Запись.ЗаписатьКонецЭлемента();
   КонецЦикла;
   Запись.ЗаписатьКонецЭлемента();

   Выборка = Справочники.Сотрудники.Выбрать();
   Запись.ЗаписатьНачалоЭлемента("Сотрудники");
   пока Выборка.Следующий() цикл
       Запись.ЗаписатьНачалоЭлемента("Сотрудник");
       Запись.ЗаписатьАтрибут("Код",Строка(Выборка.Код));
       Запись.ЗаписатьАтрибут("Наименование",Строка(Выборка.Наименование));
       Запись.ЗаписатьАтрибут("Паспорт",Строка(Выборка.паспорт));
       ВыбОрг = Выборка.Организации.Количество();                  
       Если ВыбОрг > 0 Тогда
            Запись.ЗаписатьНачалоЭлемента("Место_работы");
           Для сч=0 по ВыбОрг-1 цикл
               Запись.ЗаписатьНачалоЭлемента("Место_работы");
               Запись.ЗаписатьАтрибут("Организация",Формат(Выборка.Организации.Получить(сч).Организация.Код, "ЧГ=0"));
               Запись.ЗаписатьКонецЭлемента();
           КонецЦикла;
           Запись.ЗаписатьКонецЭлемента();
       КонецЕсли;
   
       ВыбОрг = Выборка.Адрес.Количество();  
       Если ВыбОрг > 0 Тогда
           Запись.ЗаписатьНачалоЭлемента("Контакты");
           Для сч=0 по ВыбОрг-1 цикл
               Запись.ЗаписатьНачалоЭлемента("Контакты");
               Запись.ЗаписатьАтрибут("Адрес",Выборка.Адрес.Получить(сч).адрес);
               Запись.ЗаписатьАтрибут("Телефон",Выборка.Адрес.Получить(сч).телефон);
                Запись.ЗаписатьКонецЭлемента();
           КонецЦикла;
           Запись.ЗаписатьКонецЭлемента();
       КонецЕсли;    
       Запись.ЗаписатьКонецЭлемента();
   
   КонецЦикла;
   Запись.ЗаписатьКонецЭлемента();
   Запись.ЗаписатьКонецЭлемента();
   Сообщить("Выгрузка данных из 1С прошла успешно");
КонецПроцедуры[/code]

[code]Процедура ЗагрузитьXML(файл)
   СпрОрг = Справочники.Организации;
   СпрСот = Справочники.Сотрудники;
   
//    ВыборкаИзСотрудников = СпрСот.Выбрать();
//    Пока ВыборкаИзСотрудников.Следующий() Цикл
//        del = ВыборкаИзСотрудников.ПолучитьОбъект();
//        del.Удалить();
//    КонецЦикла;

//    ВыборкаИзОрганизаций = СпрОрг.Выбрать();
//    Пока ВыборкаИзОрганизаций.Следующий() Цикл
//        del = ВыборкаИзОрганизаций.ПолучитьОбъект();
//        del.Удалить();
//    КонецЦикла;        
   
   загXML = Новый ЧтениеXML;
   загXML.ОткрытьФайл(файл);
   НовыйОбъектОрганизации = NULL;

   // Прочитать фрагменты элемента
   Пока загXML.Прочитать() Цикл
       
           // После чтения проверить тип уза
           Если загXML.Имя = "Организация" И загXML.ТипУзла = ТипУзлаXML.НачалоЭлемента тогда
               РезультатПоиска = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Организация Код"));
               Если РезультатПоиска.Пустая() Тогда
                   НовыйОбъектОрганизации = СпрОрг.СоздатьЭлемент();
                   НовыйОбъектОрганизации.Код = загXML.ПолучитьАтрибут("Организация Код");
                   НовыйОбъектОрганизации.Наименование = загXML.ПолучитьАтрибут("Наименование");
                   НовыйОбъектОрганизации.Записать();                
               КонецЕсли;
               
           НовыйОбъектСотрудника = NULL;
   ИначеЕсли загXML.Имя = "Сотрудник" И загXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
           РезультатПоиска = СпрСот.НайтиПоКоду(загXML.ПолучитьАтрибут("Сотрудник Код"));
           Если РезультатПоиска.Пустая() Тогда
                   НовыйОбъектСотрудника = СпрСот.СоздатьЭлемент();
                   НовыйОбъектСотрудника.Код = загXML.ПолучитьАтрибут("Сотрудник Код");
                   НовыйОбъектСотрудника.Наименование = загXML.ПолучитьАтрибут("Наименование");
                   НовыйОбъектСотрудника.паспорт = загXML.ПолучитьАтрибут("Паспорт");                
                   НовыйОбъектМестоРаботыСотрудника = НовыйОбъектСотрудника.Организации.Добавить();
                   НовыйОбъектМестоРаботыСотрудника.Организация = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Организация"));
                   НовыйОбъектКонтактыСотрудника = НовыйОбъектСотрудника.Адрес.Добавить();
                   НовыйОбъектКонтактыСотрудника.адрес = загXML.ПолучитьАтрибут("Адрес");
                   НовыйОбъектКонтактыСотрудника.телефон = загXML.ПолучитьАтрибут("Телефон");
                   НовыйОбъектСотрудника.Записать();
               КонецЕсли;
           КонецЕсли;
   КонецЦикла;
   загXML.Закрыть();
   Сообщить("Загрузка данных в 1С прошла успешно");
КонецПроцедуры
[/code]
1 edzie
 
11.04.13
22:55
http://rghost.ru/45218617.view как сделать чтобы при чтении xml добавляло организацию?
http://rghost.ru/45218804.view - структура xml
http://rghost.ru/45218853 - сама база
2 Aleksey
 
11.04.13
23:02
сдается мне что ПолучитьАтрибут("Сотрудник Код") не будет работать
3 masenshi
 
12.04.13
07:11
(0)
РезультатПоиска = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Организация Код"));

а так пробовал?

РезультатПоиска = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Код"));
4 masenshi
 
12.04.13
07:17
(3) не то цитировал

РезультатПоиска = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Сотрудник Код"));


а так пробовал?

РезультатПоиска = СпрОрг.НайтиПоКоду(загXML.ПолучитьАтрибут("Код"));
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.