Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Загрузка выгрузка с xml в 1с


Автор: edzie 11.4.2013, 22:05
Здравствуйте, помогите доделать работу. Как сделать чтобы сохраненные в xml организации сотрудника загружались в справочник? и как 
сделать так, чтобы одинаковые записи не появлялись? 
http://rghost.ru/45218617.view как сделать чтобы при чтении xml добавляло организацию? 
http://rghost.ru/45218804.view - структура xml 
http://rghost.ru/45218853 - сама база
Код

Процедура ЗаписьXML(файл)
    // Выгрузить в файл xml
    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(файл, "UTF-8");
    
    // Записать директиву
    Запись.ЗаписатьОбъявлениеXML();
    
    // Записать начало корневого элемента
    Запись.ЗаписатьНачалоЭлемента("Запись_Данных");
    Выборка = Справочники.Организации.Выбрать();
    Запись.ЗаписатьНачалоЭлемента("Организации");
    пока Выборка.Следующий() цикл
        
        // Записать начало корневого элемента
        Запись.ЗаписатьНачалоЭлемента("Организация");
        
        // Записать атрибут корневого элемента
        Запись.ЗаписатьАтрибут("Код",Строка(Выборка.Код));
        Запись.ЗаписатьАтрибут("Наименование",Строка(Выборка.Наименование));
        Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;
    Запись.ЗаписатьКонецЭлемента();

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


Код

Процедура Загрузить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С прошла успешно");
КонецПроцедуры

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)