Загрузка данных из XML в ТЧ обработки

1. user1C99 01.08.23 10:47 Сейчас в теме
Здравствуйте!
Прошу сильно не ругаться, так получилось, что получать данные из XML файлов не приходилось, но вот появилась возможность попробовать восполнить пробел и столкнулся с проблемой.
Есть файл XML с данными:

<?xml version="1.0" encoding="windows-1251"?>
<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="1115103_3128148454312801001_3128_2bf9ce5e-c69f-4c63-bfc5-cd1e5ebbf3b8_20230731_2735c8b5-3642-4842-9401-fb42057c0ad7" ВерсФорм="5.06" ВерсПрог="1С:БУХГАЛТЕРИЯ 3.0.135.22" ИдФайлИсх="1115103_3128148454312801001_3128_2bf9ce5e-c69f-4c63-bfc5-cd1e5ebbf3b8_20230731_2735c8b5-3642-4842-9401-fb42057c0ad7" ИдФайлПерв="1115103_3128148454312801001_3128_2bf9ce5e-c69f-4c63-bfc5-cd1e5ebbf3b8_20230731_2735c8b5-3642-4842-9401-fb42057c0ad7" КолФайл="1" НомФайл="1">
	<Документ КНД="1115103">
		<СвПродав>
			<СведЮЛ НаимОрг="Общество с ограниченной ответственностью "Организация"" ИННЮЛ="1111111111" КПП="000000000"/>
		</СвПродав>
		<СвКнПрод Период="22" ОтчетГод="2023">
			<Всего СтТовРубКоп20="833.33" СумНДСРубКоп20="166.67"/>
		</СвКнПрод>
		<СвПродаж НомПП="1" НомерСчФ="1" ДатаСчФ="30.06.2023" НаимПок="ООО  "Контаргент"" ИННЮЛ="2222222222" КПП="000000000" КодОКВ="643" СтТовУчНалРубКоп="1000.00" СтТовРубКоп20="833.33" СумНДСРубКоп20="166.67">
			<КодВидОпер>01</КодВидОпер>
		</СвПродаж>
		<Подписант ПрПодп="1">
			<ФИО Фамилия="Фамилия" Имя="Имя" Отчество="Отчетсво"/>
		</Подписант>
	</Документ>
</Файл>
Показать


а также есть внешняя обработка с ТЧ частью и реквизитами, аналогичными атрибутам "СвПродаж" (НомерСФ, ДатаСФ, Контрагент и т.д.)

Пытаюсь получить данные из файла, а именно атрибуты <СвПродаж>, но пока что выходить только информация из <Файл .....

Подскажите, пожалуйста.
Вот код
ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(Объект.ФайлКнигиПродаж);
	ЧтениеXML.Прочитать();
	
	ИмяУзла = ЧтениеXML.Имя;
	Если ИмяУзла = "СвПродаж" Тогда
		ИД = 1;
	КонецЕсли;
	
	Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
		НоваяСтрока = Объект.Список.Добавить();
		НоваяСтрока.НомерСФ = ЧтениеXML.Значение;
		НоваяСтрока.ИНН = ЧтениеXML.Значение;	
	КонецЦикла;	
Показать
По теме из базы знаний
Найденные решения
2. starik-2005 3166 01.08.23 11:57 Сейчас в теме
ХМЛ = Новый ЧтениеХМЛ;
ХМЛ.Открыть(ИмяФайла);
Данные = ФабрикаХДТО.ПрочитатьХМЛ(ХМЛ);
НаимОрг = Данные.Документ.СвПродав.НаимОрг;
//...
Ошибки сам исправь...
4. starik-2005 3166 01.08.23 13:00 Сейчас в теме
(3)
цикл
Для Каждого ОбъектХ ИЗ Данные.Документ.СвПродаж Цикл
  НомПП = ОбъектХ.НомПП;
КонецЦикла;

А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3166 01.08.23 11:57 Сейчас в теме
ХМЛ = Новый ЧтениеХМЛ;
ХМЛ.Открыть(ИмяФайла);
Данные = ФабрикаХДТО.ПрочитатьХМЛ(ХМЛ);
НаимОрг = Данные.Документ.СвПродав.НаимОрг;
//...
Ошибки сам исправь...
3. user1C99 01.08.23 12:53 Сейчас в теме
(2)Подскажите условие цикла, если таких записей несколько, например:

<СвПродаж НомПП="1" НомерСчФ="1" ДатаСчФ="30.06.2023" НаимПок="ООО  "Контаргент"" ИННЮЛ="2222222222" КПП="000000000" КодОКВ="643" СтТовУчНалРубКоп="1000.00" СтТовРубКоп20="833.33" СумНДСРубКоп20="166.67">
            <КодВидОпер>01</КодВидОпер>
        </СвПродаж>
<СвПродаж НомПП="1" НомерСчФ="2" ДатаСчФ="30.06.2023" НаимПок="ООО  "Контаргент"" ИННЮЛ="3333333333" КПП="000000000" КодОКВ="643" СтТовУчНалРубКоп="1000.00" СтТовРубКоп20="833.33" СумНДСРубКоп20="166.67">
            <КодВидОпер>01</КодВидОпер>
        </СвПродаж>
<СвПродаж НомПП="1" НомерСчФ="2" ДатаСчФ="30.06.2023" НаимПок="ООО  "Контаргент"" ИННЮЛ="4444444444" КПП="000000000" КодОКВ="643" СтТовУчНалРубКоп="1000.00" СтТовРубКоп20="833.33" СумНДСРубКоп20="166.67">
            <КодВидОпер>01</КодВидОпер>
        </СвПродаж>
Показать
4. starik-2005 3166 01.08.23 13:00 Сейчас в теме
(3)
цикл
Для Каждого ОбъектХ ИЗ Данные.Документ.СвПродаж Цикл
  НомПП = ОбъектХ.НомПП;
КонецЦикла;

А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
5. user1C99 01.08.23 13:34 Сейчас в теме
(4) Спасибо, вы мне очень помогли!
6. starik-2005 3166 01.08.23 13:41 Сейчас в теме
7. user1C99 15.08.23 13:28 Сейчас в теме
(6)В файле есть бывают в перемешку ИННФЛ и ИННЮЛ

При использовании такого варианта, выскакивает ошибка, если у контрагента ИННФЛ

Для Каждого ОбъектХМЛ ИЗ Данные.Документ.СвПродаж Цикл
		НоваяСтрока = Объект.Список.Добавить();
		НоваяСтрока.НомерСФ = ОбъектХМЛ.НомерСчФ;
		
		СтрокаДата=Строка(ОбъектХМЛ.ДатаСчФ);
		Дата1С = Дата(Прав(СтрокаДата, 4), Сред(СтрокаДата, 4, 2), Лев(СтрокаДата, 2));
		
		НоваяСтрока.ДатаСФ = Дата1С;
		НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
		НоваяСтрока.ИНН = ОбъектХМЛ.ИННЮЛ;
		НоваяСтрока.Сумма = ОбъектХМЛ.СтТовУчНалРубКоп;
		НоваяСтрока.СуммаНДС = ОбъектХМЛ.СумНДСРубКоп20;
	КонецЦикла;
Показать


Понимаю, что нужно сделать условие на проверку наличия ИННФЛ или ИННЮЛ, но не пойму как.
Подскажите, пожалуйста.
8. user1C99 15.08.23 13:56 Сейчас в теме
(6)Пробую так, но не работает
Если ОбъектХМЛ.ИННЮЛ = Неопределено Тогда
			НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННФЛ);
		Иначе	
			НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
		КонецЕсли;
9. user1C99 15.08.23 14:07 Сейчас в теме
Вот так сработало
Если ОбъектХМЛ.Свойства().Получить("ИННЮЛ") = Неопределено Тогда
			НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННФЛ);
			НоваяСтрока.ИНН = ОбъектХМЛ.ИННФЛ;
		Иначе	
			НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
			НоваяСтрока.ИНН = ОбъектХМЛ.ИННЮЛ;
		КонецЕсли;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот