1с 8.2 пример чтения xml.
Пример выгрузки в xml
(код для 1с 7.7 Здесь)
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Фабрика = ФабрикаXDTO.ПрочитатьXML(Чтение);
Для каждого стр Из Фабрика.строка Цикл
Имя = стр.Наименование;
Код = стр.Код;
Резерв = Число_(стр.Резерв);
Остаток = Число_(стр.Факт);
Свободно = Остаток-Резерв;
Если ПустаяСтрока(Имя) или ПустаяСтрока(Код) Тогда Продолжить;КонецЕсли;
Ном = Справочники.Номенклатура.ПустаяСсылка();
Н = ТзНомКод.НайтиСтроки(Новый Структура("Код",Код));
Если Н.Количество()=1 Тогда
Ном = Н[0].Ссылка;
Иначе
Если Н.Количество()>1 Тогда
ТзОш.Добавить().Ош = "Найдено по коду77: "+Код+" "+Строка(Н.Количество())+" элементов; Имя77:"+Имя;
КонецЕсли;
Н = ТзНом.НайтиСтроки(Новый Структура("Наименование",Код));
Если Н.Количество()=1 Тогда
Ном = Н[0].Ссылка;
Иначе
ТзОш.Добавить().Ош = "Найдено по имени77: "+Имя+" "+Строка(Н.Количество())+" элементов (Код:"+Код+")";
КонецЕсли;
КонецЕсли;
Нов = Тз.Добавить();
Нов.Код77 = Код;
Нов.Имя77 = Имя;
Нов.Ном = Ном;
Нов.Остаток = Остаток;
Нов.Резерв = Резерв;
Нов.Свободно = Свободно;
КонецЦикла;
Вот еще вариант, но он хуже:
МинУровень=0;
НачалоЭлемента=Ложь;
Хмл = новый ЧтениеXML;
Хмл.ОткрытьФайл(Файл);
пока Хмл.Прочитать() Цикл
ИмяУзла = Хмл.Имя;
ТипУзла = Хмл.ТипУзла;
Если НРег(ИмяУзла)="элементы" Тогда
Если ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
МинУровень=Хмл.ПолучитьАтрибут("МинУровень");
КонецЕсли;
КонецЕсли;
Если НРег(ИмяУзла)="элемент" Тогда
Если ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
НачалоЭлемента=Истина;
Имя = СокрЛП(Хмл.ПолучитьАтрибут("Имя"));
ИмяП = СокрЛП(Хмл.ПолучитьАтрибут("ИмяП"));
ИмяР = СокрЛП(Хмл.ПолучитьАтрибут("ИмяР"));
ЭтоГруппа_ = Хмл.ПолучитьАтрибут("ЭтоГруппа");
ЭтоГруппа = ?(ЭтоГруппа_="1",Истина,Ложь);
Уровень = Хмл.ПолучитьАтрибут("Уровень");
Родитель = Справочники.Номенклатура.ПустаяСсылка();
Если Уровень=МинУровень Тогда
Родитель = Группа;
Иначе
Если не ПустаяСтрока(ИмяР) Тогда
Родитель = ПолучитьР(ИмяР);
КонецЕсли;
КонецЕсли;
НайденнаяНом = ПолучитьНом(Имя,Родитель,ЭтоГруппа);
Если НайденнаяНом=Неопределено Тогда
НачалоЭлемента=Ложь;
Продолжить;
КонецЕсли;
Если НайденнаяНом.Пустая() Тогда
Если ЭтоГруппа Тогда
Об = Справочники.Номенклатура.СоздатьГруппу();
Иначе
Об = Справочники.Номенклатура.СоздатьЭлемент();
КонецЕсли;
Иначе
Об = НайденнаяНом.ПолучитьОбъект();
КонецЕсли;
Об.Наименование = Имя;
Об.Родитель=Родитель;
Если ЭтоГруппа Тогда
Об.Записать();
НачалоЭлемента=Ложь;
Продолжить;
КонецЕсли;
Об.Артикул = Хмл.ПолучитьАтрибут("Артикул");
Если не ПустаяСтрока(ИмяП) Тогда
Об.НаименованиеПолное = ИмяП;
Иначе
Об.НаименованиеПолное = Имя;
КонецЕсли;
ВидНом_ = СокрЛП(Хмл.ПолучитьАтрибут("ВидНом"));
Если ВидНом_="Товары" Тогда
ВидНом_="Товар";
КонецЕсли;
Об.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(ВидНом_,Истина);
Если об.ВидНоменклатуры.Пустая() Тогда Сообщить("Не нашли вид номенклатуры по наимн.:"+ВидНом_);КонецЕсли;
Еи_ = Хмл.ПолучитьАтрибут("Еи");
ЕиКл = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(Еи_);
Если ЕиКл.Пустая() Тогда
Сообщить("Не нашли ЕИ в классификаторе ЕИ по коду:"+Еи_);
Иначе
Об.БазоваяЕдиницаИзмерения = ЕиКл;
КонецЕсли;
СтНдс_ = Хмл.ПолучитьАтрибут("СтНдс");
Если не ПустаяСтрока(СтНдс_) Тогда
Если СтНдс_="10" Тогда
Об.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
КонецЕсли;
Если СтНдс_="18" Тогда
Об.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
Если СтНдс_="0" Тогда
Об.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
КонецЕсли;
Попытка
Об.Записать();
Исключение
Сообщить(ОписаниеОшибки());
НачалоЭлемента=Ложь;
Продолжить;
КонецПопытки;
НашлиЕи=Ложь;
выбокаЕи = Справочники.ЕдиницыИзмерения.Выбрать(,Об.Ссылка);
Пока выбокаЕи.Следующий() Цикл
Если выбокаЕи.ЕдиницаПоКлассификатору=Об.БазоваяЕдиницаИзмерения Тогда
НашлиЕи=Истина;
КонецЕсли;
КонецЦикла;
Если не НашлиЕи Тогда
ВесСтр = Хмл.ПолучитьАтрибут("ВесНетто");
Вес = Число_(ВесСтр);
Длина = Число_(Хмл.ПолучитьАтрибут("Длина"))/100;
Ширина = Число_(Хмл.ПолучитьАтрибут("Ширина"))/100;
Высота = Число_(Хмл.ПолучитьАтрибут("Высота"))/100;
НовЕи = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НовЕи.Наименование = Об.БазоваяЕдиницаИзмерения.Наименование;
НовЕи.Владелец = Об.ссылка;
НовЕи.Коэффициент = 1;
НовЕи.ЕдиницаПоКлассификатору = Об.БазоваяЕдиницаИзмерения;
НовЕи.Вес = Вес;
НовЕи.Объем = Длина*Ширина*Высота;
НовЕи.Записать();
Об.ЕдиницаХраненияОстатков = НовЕи.Ссылка;
Об.ЕдиницаДляОтчетов = НовЕи.Ссылка;
Попытка
Об.Записать();
Исключение
Сообщить(ОписаниеОшибки());
НачалоЭлемента=Ложь;
КонецПопытки;
КонецЕсли;
для Каждого стр из Свойства Цикл
Св77 = Хмл.ПолучитьАтрибут(стр.Ключ);
СвСтр = стр.Значение;
Св = ПолучитьСв(СвСтр);
Если Св=Неопределено Тогда
Продолжить;
КонецЕсли;
_З = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
_З.Объект = Об.ССылка;
_З.Свойство = Св;
Если Св.ТипЗначения=новый описаниетипов("число") или НРег(строка(Св.ТипЗначения)) = "число" Тогда
_З.Значение = число(Св77);
ИначеЕсли Св.ТипЗначения=новый описаниетипов("булево") Тогда
_З.Значение = ?(Св77="1",Истина,Ложь);//строка
ИначеЕсли Св.ТипЗначения=новый описаниетипов("строка") Тогда
_З.Значение = Св77;
Иначе
_З.Значение = Св77;
Сообщить("Не отработанный тип:"+СвСтр);
КонецЕсли;
Попытка
_З.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
ИначеЕсли ТипУзла=ТипУзлаXML.КонецЭлемента Тогда
НачалоЭлемента=Ложь;
КонецЕсли;
ИначеЕсли НРег(ИмяУзла)="шк" Тогда
Если ТипУзла=ТипУзлаXML.НачалоЭлемента и НачалоЭлемента Тогда
Шк = Хмл.ПолучитьАтрибут("ШкСтр");
Если не ПустаяСтрока(Шк) Тогда
ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
ТекЗапись.Владелец = Об.Ссылка;
ТекЗапись.ЕдиницаИзмерения = Об.ЕдиницаХраненияОстатков;
ТекЗапись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
ТекЗапись.Качество = Справочники.Качество.Новый;
ТекЗапись.Штрихкод = Шк;
Попытка
ТекЗапись.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЕсли;
ИначеЕсли НРег(ИмяУзла)="цены" Тогда
Если ТипУзла=ТипУзлаXML.НачалоЭлемента и НачалоЭлемента Тогда
ТцСтр = Хмл.ПолучитьАтрибут("ТипЦены");
Если ТцСтр = "Основная цена (без налогов)" Тогда
ТцСтр = "Основная цена (без налого";
КонецЕсли;
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию(ТцСтр,Истина);
Если ТипЦен.Пустая() Тогда
Сообщить("Не нашли тип цен по наименованию:"+Хмл.ПолучитьАтрибут("ТипЦены"));
КонецЕсли;
Нов = ТзЦен.Добавить();
Нов.ссылка = Об.Ссылка;
Нов.цена = Число(Хмл.ПолучитьАтрибут("Цена"));
Нов.ТипЦен = ТипЦен;
КонецЕсли;
ИначеЕсли НРег(ИмяУзла)="норма" Тогда
Если ТипУзла=ТипУзлаXML.НачалоЭлемента и НачалоЭлемента Тогда
Состояние("Получаем нормы...");
НайденныйТзНорм = ТзНорм.Найти(Об.Ссылка,"Номенклат");
Если НайденныйТзНорм<>Неопределено Тогда
Нормы = НайденныйТзНорм.Нормы;
Иначе
НовТзНорм = ТзНорм.Добавить();
НовТзНорм.Номенклат = Об.Ссылка;
Нормы = Новый ТаблицаЗначений;
Нормы.Колонки.Добавить("Ном");
Нормы.Колонки.Добавить("Норма");
Нормы.Колонки.Добавить("КолПрод");
НовТзНорм.Нормы = Нормы;
КонецЕсли;
ИмяНоменклат = Хмл.ПолучитьАтрибут("Номенклат");
Номенклат = ПолучитьНом(ИмяНоменклат,Справочники.Номенклатура.ПустаяСсылка(),Ложь);
Если Номенклат = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Номенклат.Пустая() Тогда
Продолжить;
КонецЕсли;
НовНормы = Нормы.Добавить();
НовНормы.Ном = Номенклат;
НовНормы.Норма = число(Хмл.ПолучитьАтрибут("Норм"));
НовНормы.КолПрод = число(Хмл.ПолучитьАтрибут("КолПрод"));
КонецЕсли;
КонецЕсли;
КонецЦикла;