|
Читаю XML с помощью ФабрикаXDTO ошибка Итератор для значения не определен | ☑ | ||
---|---|---|---|---|
0
Shur1cIT
16.06.16
✎
14:23
|
вот ХМЛ
http://s018.radikal.ru/i526/1606/74/535e3e83d62b.jpg Если <Расход> несколько то цикл отрабатывает если один как в примере имеем ошибку "Итератор для значения не определен" В крадце код ЧтениеXML.ОткрытьФайл(Стр.ПолноеИмя); АвансовыеОтчеты = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); ИД = АвансовыеОтчеты.АвансовыйОтчет.ИД; ВыданаяСумма = АвансовыеОтчеты.АвансовыйОтчет.ВыданаСумма; НачалоПериода = АвансовыеОтчеты.АвансовыйОтчет.НачалоПериода; ОкончаниеПериода = АвансовыеОтчеты.АвансовыйОтчет.ОкончаниеПериода; ФИОСотрудника = АвансовыеОтчеты.АвансовыйОтчет.ФИОСотрудника; Расход = АвансовыеОтчеты.АвансовыйОтчет.Расходы.Расход; Для каждого СтрРасход Из Расход Цикл СтрДок = ДокОбъект.Прочее.Добавить(); НомерДокумента = СтрРасход.НомерДокумента; ТипРасхода = СтрРасход.ТипРасхода; СуммаРасхода = СтрРасход.СуммаРасхода; ДатаТрат = СтрРасход.ДатаТрат; КонецЦикла |
|||
1
AceVi
16.06.16
✎
14:31
|
(0) Может потому что нет открывающего тега Расходы?
|
|||
2
Shur1cIT
16.06.16
✎
14:33
|
(1) есть он на 11 строчке,где отражаеться не важно весь хмл можно в одной строке писать
|
|||
3
ovrfox
16.06.16
✎
14:33
|
Но нет закрывающего тега "Расход"
|
|||
4
ovrfox
16.06.16
✎
14:35
|
Хотя в теории он не нужен, если внутри только атрибуты.
Но проверить не помешает |
|||
5
Beretta
16.06.16
✎
14:35
|
В крадце - у тибя апьекд нетипизирован. Паэтому она ни панимает чта там паследаваетльность или адин илемент
|
|||
6
Shur1cIT
16.06.16
✎
14:38
|
(5) а как указать принудительно что последовательность? или проще проверку писать? если одна запись тогда без цикла читаем если несколько то цикл, если бы мой код акромя меня не вид я бы так и сделал, но перед людьми не удобно го..но код показывать
|
|||
7
Shur1cIT
16.06.16
✎
14:41
|
(4) я на валидность XML проверял ошибок нет
|
|||
8
ovrfox
16.06.16
✎
14:41
|
У тебя "расходы" - один тег, а "Расход" несколько
Если хотел обойти все теги расход - цикл делай по тегу "Расходы" |
|||
9
Shur1cIT
16.06.16
✎
14:52
|
(8) это как?
Расход = АвансовыеОтчеты.АвансовыйОтчет.Расходы даёт ошибку |
|||
10
Beretta
16.06.16
✎
14:53
|
(6) Описать тип для фабрики XDTO. В типе указать, что элемент встречается один или больше раз. При чтении объекта использовать нужную фабрику с указанием типа того, что читаешь. В результате всегда будешь получишь коллекцию с минимум одним элементом.
|
|||
11
Shur1cIT
16.06.16
✎
15:03
|
(10) вопрос, а как сие сделать? сылки на пример можно? гугл выдаёт очень сложные вещи)))
|
|||
12
Shur1cIT
16.06.16
✎
15:18
|
(10) тоесть необходимо Расход присвоить тип СписокXDTO принудительно, вопрос как это сделать?
|
|||
13
totparen
16.06.16
✎
15:53
|
(10)
До освоения пакета ХДТО, делал так: СтрокиФайлаХДТО = ФайлХДТО.receivingAdvice.lineItems.lineItem; ИндексСтроки = 0; КрутитьЦикл = Истина; Пока КрутитьЦикл Цикл Если ТипЗнч(СтрокиФайлаХДТО) = Тип("ОбъектXDTO")Тогда СтрокаФайла = СтрокиФайлаХДТО; КрутитьЦикл = Ложь; ИначеЕсли ТипЗнч(СтрокиФайлаХДТО) = Тип("СписокXDTO")Тогда Если (ИндексСтроки+1) = СтрокиФайлаХДТО.Количество() Тогда КрутитьЦикл = Ложь; КонецЕсли; СтрокаФайла = СтрокиФайлаХДТО.Получить(ИндексСтроки); ИндексСтроки = ИндексСтроки + 1; КонецЕсли; |
|||
14
Serginio1
16.06.16
✎
15:58
|
Сделай
ЧтениеXML.ОткрытьФайл(Стр.ПолноеИмя); ЧтениеXML.ПерейтиКСодержимому(); |
|||
15
Serginio1
16.06.16
✎
16:01
|
||||
16
Shur1cIT
16.06.16
✎
16:10
|
(13) да уже так и сделал(
|
|||
17
Fragster
гуру
16.06.16
✎
16:15
|
(6) сделать схему, грузить по ней. заодно числа превратятся в числа и даты в даты (если они в правильном формате)
|
|||
18
Serginio1
16.06.16
✎
16:40
|
(16) Значит грузишь не по схеме.
Тогда определяется как AnyType и элемент с одним элементом считается как ОбъектXDTO а не СписокXDTO |
|||
19
Serginio1
16.06.16
✎
16:47
|
Проверяй на
Расходы=АвансовыеОтчеты.АвансовыйОтчет.Расходы.Расход; Если ТипЗнч(Расходы) = Тип("СписокXDTO") Тогда Иначе СтрРасход=Расходы; СтрДок = ДокОбъект.Прочее.Добавить(); НомерДокумента = СтрРасход.НомерДокумента; ТипРасхода = СтрРасход.ТипРасхода; СуммаРасхода = СтрРасход.СуммаРасхода; ДатаТрат = СтрРасход.ДатаТрат; КонецЕсли |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |