Имя: Пароль:
1C
 
Чтение XML, табличная часть
0 picom
 
15.04.20
14:27
Приветствую!
Загружаю файлы XML в 1С.
Файлы имеют табличную часть:
<Область>
- <усПриемкаФакт НомерЗаявки="009201">
  <Строка Номенклатура="00-00000413"/>
  <Строка Номенклатура="00-00000416"/>
  <Строка Номенклатура="00-00000418"/>
  <Строка Номенклатура="00-00000427"/>
  </усПриемкаФакт>
  </<Область>>

С помощью кода все читается великолепно, НО когда в файл одна строка, он не определяет его как табличная часть и вылазит ошибка про итератор.
Как корректней это обойти без пакета XDTO?

ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);
Contr = ОбъектXDTO.усПриемкаФакт;
Для каждого Contr2 Из Contr.Строка Цикл   //тут словим ошибку
    НоменклатураКод = Contr2.Номенклатура;
КонецЦикла;
1 palsergeich
 
15.04.20
14:31
(0) Есть такая особенность. Надо писать код по обходу.
2 FIXXXL
 
15.04.20
15:10
(0) проверяй тип Contr.Строка Объект это или СписокХДТО
3 Fragster
 
гуру
15.04.20
16:52
Правильнее всего подгрузить схему или создать пакет XDTO и указывать нужный тип при чтении фабрикой
4 Fragster
 
гуру
15.04.20
16:53
заодно там и числа с датами, если они есть, в правильные типы преобразуются и отпарсятся. И ГУИДы в ссылки превратятся, если есть
5 FIXXXL
 
15.04.20
19:31
(3) несомненно
но всегда возможно
6 picom
 
16.04.20
13:35
Победил так

Функция  КоллекцияXDTO(Элемент)
    Если ТипЗнч(Элемент)=Тип("ОбъектXDTO") Тогда
        МассивXDTO=Новый Массив;
        МассивXDTO.Добавить(Элемент);
        Возврат МассивXDTO;
    КонецЕсли;
    Возврат Элемент;
КонецФункции

ля каждого Contr2 Из КоллекцияXDTO(Contr.Строка) Цикл  
    НоменклатураКод = Contr2.Номенклатура;
КонецЦикла;