2025-10-07 13:11:18 +05:00

4.2 KiB
Raw Blame History

title, slug
title slug
Чтение XML общие-обмен-данными-чтение-файлов-примеры/чтение-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.Закрыть();
	
	УдалитьФайлы(ПутьКФайлу);

КонецПроцедуры