Здравствуйте!
Прошу сильно не ругаться, так получилось, что получать данные из XML файлов не приходилось, но вот появилась возможность попробовать восполнить пробел и столкнулся с проблемой.
Есть файл XML с данными:
а также есть внешняя обработка с ТЧ частью и реквизитами, аналогичными атрибутам "СвПродаж" (НомерСФ, ДатаСФ, Контрагент и т.д.)
Пытаюсь получить данные из файла, а именно атрибуты <СвПродаж>, но пока что выходить только информация из <Файл .....
Подскажите, пожалуйста.
Вот код
Прошу сильно не ругаться, так получилось, что получать данные из 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.Значение;
КонецЦикла;
ПоказатьПо теме из базы знаний
- Выгрузка и загрузка данных XML 8.3 с отбором
- Выгрузка и загрузка данных XML. Ускоряем выгрузку регистров бухгалтерии
- Выгрузка и загрузка данных XML с гибкими отборами
- Выгрузка и загрузка данных XML 8.3 на управляемых формах с отбором и конструктором запроса (в полной мере возможности реализованы для версии 1С:Предприятия 8.3 выше версии 8.3.5)
- Выгрузка и загрузка данных XML адаптивная с гибкими отборами 2024
Найденные решения
(3)
А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
цикл
Для Каждого ОбъектХ ИЗ Данные.Документ.СвПродаж Цикл
НомПП = ОбъектХ.НомПП;
КонецЦикла;
А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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</КодВидОпер>
</СвПродаж>
Показать
(3)
А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
цикл
Для Каждого ОбъектХ ИЗ Данные.Документ.СвПродаж Цикл
НомПП = ОбъектХ.НомПП;
КонецЦикла;
А условие, что в поле больше одного значения - это условие проверки типов. Если тип поля - это СписокХДТО - значит это список, если объект - значит не список. Гоу в отладчик - там все нарисовано.
(6)В файле есть бывают в перемешку ИННФЛ и ИННЮЛ
При использовании такого варианта, выскакивает ошибка, если у контрагента ИННФЛ
Понимаю, что нужно сделать условие на проверку наличия ИННФЛ или ИННЮЛ, но не пойму как.
Подскажите, пожалуйста.
При использовании такого варианта, выскакивает ошибка, если у контрагента ИННФЛ
Для Каждого ОбъектХМЛ ИЗ Данные.Документ.СвПродаж Цикл
НоваяСтрока = Объект.Список.Добавить();
НоваяСтрока.НомерСФ = ОбъектХМЛ.НомерСчФ;
СтрокаДата=Строка(ОбъектХМЛ.ДатаСчФ);
Дата1С = Дата(Прав(СтрокаДата, 4), Сред(СтрокаДата, 4, 2), Лев(СтрокаДата, 2));
НоваяСтрока.ДатаСФ = Дата1С;
НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
НоваяСтрока.ИНН = ОбъектХМЛ.ИННЮЛ;
НоваяСтрока.Сумма = ОбъектХМЛ.СтТовУчНалРубКоп;
НоваяСтрока.СуммаНДС = ОбъектХМЛ.СумНДСРубКоп20;
КонецЦикла;
ПоказатьПонимаю, что нужно сделать условие на проверку наличия ИННФЛ или ИННЮЛ, но не пойму как.
Подскажите, пожалуйста.
(6)Пробую так, но не работает
Если ОбъектХМЛ.ИННЮЛ = Неопределено Тогда
НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННФЛ);
Иначе
НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
КонецЕсли;
Вот так сработало
Если ОбъектХМЛ.Свойства().Получить("ИННЮЛ") = Неопределено Тогда
НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННФЛ);
НоваяСтрока.ИНН = ОбъектХМЛ.ИННФЛ;
Иначе
НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ОбъектХМЛ.ИННЮЛ);
НоваяСтрока.ИНН = ОбъектХМЛ.ИННЮЛ;
КонецЕсли;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот