Красивый код по загрузке УПД через X-Path
Как я писал ранее, помощник мне не помог, пришлось написать код самому. Делюсь красотой:
Функция ЗагрузитьИзXML(НовыйДок, ИмяВФ) //https://infostart.ru/1c/tools/280340/ Ч = Новый ЧтениеXML; Ч.ОткрытьФайл(ИмяВФ); П = Новый ПостроительDOM; ДОМ = П.Прочитать(Ч); Разыменователь = Новый РазыменовательПространствИменDOM(ДОМ); //https://geniy1s.ru/primery-xpath/ //Адрес РФ ТекстЗапроса = ".//ГрузПолуч/Адрес/АдрРФ"; Выражение = ДОМ.СоздатьВыражениеXPath(СокрЛП(ТекстЗапроса), Разыменователь); Результат = Выражение.Вычислить(ДОМ); Узел = Результат.ПолучитьСледующий(); Если Узел <> Неопределено Тогда М = Новый Массив(); Для Каждого Атрибут Из Узел.Атрибуты Цикл М.Добавить(Атрибут.Значение); КонецЦикла; Адрес = СтрСоединить(М, " "); КонецЕсли; //Номер и дата, записать в поле вида: № 250/11/123 от 27 мая 2025 ИсхНомер = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, ДОМ, ".//СвСчФакт/@НомерДок"); Исхдата = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, ДОМ, ".//СвСчФакт/@ДатаДок"); ПоставщикНаименование = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, ДОМ, ".//СвПрод/ИдСв/СвЮЛУч/@НаимОрг"); ПоставщикИНН = СокрЛП(ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, ДОМ, ".//СвПрод/ИдСв/СвЮЛУч/@ИННЮЛ")); ПоставщикКПП = СокрЛП(ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, ДОМ, ".//СвПрод/ИдСв/СвЮЛУч/@КПП")); НовыйДок.Документ = "№ " + ИсхНомер + " от " + Исхдата; НовыйДок.Комментарий = ПоставщикНаименование + " : " + Адрес; НовыйДок.Поставщик = НайтиПоставщика(ПоставщикИНН, ПоставщикКПП); Если ЗначениеЗаполнено(НовыйДок.Поставщик) Тогда НовыйДок.Подразделение = НайтиПодразделениеПоАдресуПоставщика(НовыйДок.Поставщик, Адрес); Иначе Сообщить("Не найден поставщик : " + ПоставщикНаименование + " ИНН: " + ПоставщикИНН + " КПП: " + ПоставщикКПП); КонецЕсли; //Сведения о товаре ТекстЗапроса = ".//СведТов"; Выражение = ДОМ.СоздатьВыражениеXPath(СокрЛП(ТекстЗапроса), Разыменователь); Результат = Выражение.Вычислить(ДОМ); Пока Истина Цикл Узел = Результат.ПолучитьСледующий(); Если Узел = Неопределено Тогда Прервать КонецЕсли; ОписаниеСтроки = ОписаниеСтроки(); ОписаниеСтроки.Код = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, Узел, ".//@КодТов"); //ОписаниеСтроки.Бренд = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, Узел, "string(.//СведТов/@НаимТов)");; ОписаниеСтроки.Количество = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, Узел, ".//@КолТов"); ОписаниеСтроки.Цена = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, Узел, ".//@ЦенаТов"); ОписаниеСтроки.Сумма = ПолучитьПолеXMLЗапросомXPATH(ДОМ, Разыменователь, Узел, ".//СумНал/СумНал"); ОбработатьСтроку(НовыйДок, ОписаниеСтроки); КонецЦикла; КонецФункции
Мне начинает нравиться X-Path, времена, когда я разбирал XML через ЧтениеXML кажутся дурным сном.

Свежие комментарии