Skip to content

Чтение XML

С помощью XDTO

&НаКлиенте
Асинх Процедура ПрочитатьФайл(Команда)
Расширение = "xml";
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Заголовок = "Выберите файл";
ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
Если ОписаниеФайла = Неопределено Тогда
Возврат;
КонецЕсли;
АдресДанных = ОписаниеФайла.Адрес;
Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;
ПрочитатьФайлНаСервере(АдресДанных, Расширение);
КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
ДанныеФайла.Записать(ПутьКФайлу);
СоответствиеПолей = Новый Соответствие;
СоответствиеПолей.Вставить("name", "Наименование");
СоответствиеПолей.Вставить("fullname", "НаименованиеПолное");
СоответствиеПолей.Вставить("partner_type", "ВидКонтрагента");
СоответствиеПолей.Вставить("inn", "ИНН");
СоответствиеПолей.Вставить("kpp", "КПП");
СоответствиеПолей.Вставить("phone", "Телефон");
СоответствиеПолей.Вставить("email", "ЭлектроннаяПочта");
СоответствиеПолей.Вставить("is_customer", "Покупатель");
СоответствиеПолей.Вставить("is_supplier", "Поставщик");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
// Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти
// Создаем в таком случае принудительно массив
Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда
МассивКонтрагентовXDTO = Новый Массив;
МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner);
Иначе
МассивКонтрагентовXDTO = ДанныеXDTO.Partner;
КонецЕсли;
Для каждого ОбъектXDTO Из МассивКонтрагентовXDTO Цикл
НоваяСтрока = Объект.ДанныеФайла.Добавить();
СвойстваXDTO = ОбъектXDTO.Свойства();
Для каждого СвойствоXDTO Из СвойстваXDTO Цикл
ИмяСвойства = СвойствоXDTO.Имя;
Если ТипЗнч(ОбъектXDTO[ИмяСвойства]) = Тип("ОбъектXDTO") Тогда
Продолжить;
КонецЕсли;
ИмяРеквизита = СоответствиеПолей.Получить(ИмяСвойства);
Если ИмяРеквизита <> Неопределено Тогда
НоваяСтрока[ИмяРеквизита] = ОбъектXDTO[ИмяСвойства];
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЧтениеXML.Закрыть();
УдалитьФайлы(ПутьКФайлу);
КонецПроцедуры