PDA

Просмотр полной версии : Ошибка: Итератор для значения не определен



skillful
16.12.2018, 20:33
В сокращенном файле 1.xml

<?xml version="1.0" encoding="UTF-8"?>
<ПриходнаяНакладная>
<Документ Num="1" Номер="000827" Дата="01.11.2018 19:00:00">
<Запасы Количество="600" ЕдиницаИзмерения="шт" Цена="18,05" Сумма="10 830"/>
<Запасы Количество="2" ЕдиницаИзмерения="шт" Цена="2 707,5" Сумма="5 415"/>
//2 строки - работает нормально
</Документ>
<Документ Num="2" Номер="000831" Дата="01.11.2018 19:00:00">
<Запасы Количество="6" ЕдиницаИзмерения="шт" Цена="229" Сумма="1 374"/>
//1 строка - Итератор для значения не определен
</Документ>
</ПриходнаяНакладная>

Обрабатывается кодом



Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(1.xml);
Фабрика = Новый ФабрикаXDTO;
ОбXDTO = Фабрика.ПрочитатьXML(Чтение) ;

Для Каждого Документ из ОбXDTO.Документ Цикл

Для Каждого Запасы из Документ.Запасы Цикл
//Количество = Количество + Запасы.Количество;
Сообщить("");
КонецЦикла;

КонецЦикла;

Чтение.Закрыть();


Нормально работает, только когда строк <Запасы> больше одной в цикле <Документ>. Когда строка одна, то ошибка: Итератор для значения не определен. Как можно победить сей недуг???

avm3110
17.12.2018, 06:35
Нормально работает, только когда строк <Запасы> больше одной в цикле <Документ>. Когда строка одна, то ошибка: Итератор для значения не определен. Как можно победить сей недуг???

ну-у-у.. как вариант - нужно проверять, что Документ.Запасы это коллекция, если да, то обрабатывать как у тебя через обход коллекции. если нет, то тогда обрабатывать Документ.Запасы напрямую

skillful
17.12.2018, 18:46
ну-у-у.. как вариант - нужно проверять, что Документ.Запасы это коллекция, если да, то обрабатывать как у тебя через обход коллекции. если нет, то тогда обрабатывать Документ.Запасы напрямую

Спасибо, что ответили. Вот так помогло.
Если ТипЗнч(Документ.Запасы) = Тип("ОбъектXDTO") Тогда
Количество = Документ.Запасы.Количество ;
Иначе
Для Каждого Запасы из Документ.Запасы Цикл
Количество = Количество + Запасы.Количество;
КонецЦикла;
КонецЕсли;