Добрый день, помогите разобраться:
Через внешнюю обработку читаю файл *.xml, результат записываю в табличную часть
Если файл содержит одно значение ГлавыXDTO.Chapters.Chapter, то выдает ошибку:
Если значений несколько, то все хорошо.
Через внешнюю обработку читаю файл *.xml, результат записываю в табличную часть
Процедура ПрочитатьФайлНаСервере()
Объект.ДанныеФайла.Очистить();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Объект.ПутьКФайлу);
ГлавыXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Для каждого ГлаваXDTO Из ГлавыXDTO.Chapters.Chapter Цикл
Для каждого ПозицияXDTO Из ГлаваXDTO.Position Цикл
НоваяСтрока = Объект.ДанныеФайла.Добавить();
НоваяСтрока.НаименованиеРаздела = ГлаваXDTO.Caption;
НоваяСтрока.НаименованиеПозиции = ПозицияXDTO.Caption;
НоваяСтрока.КодПозиции = ПозицияXDTO.Code;
Если Не ПозицияXDTO.Свойства().Получить("PriceCurr") = Неопределено Тогда
НоваяСтрока.СтоимостьЕдиницы = ПозицияXDTO.PriceCurr.MT;
Иначе
НоваяСтрока.СтоимостьЕдиницы = ПозицияXDTO.PriceBase.PZ;
КонецЕсли;
НоваяСтрока.ЕдиницаИзмерения = ПозицияXDTO.Units;
Если СтрНачинаетсяС(ПозицияXDTO.Quantity1.Result, "-") Тогда
Объект.ДанныеФайла.Удалить(НоваяСтрока);
Продолжить;
Иначе
НоваяСтрока.Объем = Число(ПозицияXDTO.Quantity1.Result);
КонецЕсли;
Если СтрНачинаетсяС(ПозицияXDTO.Code, "ФЕР") Тогда
НоваяСтрока.Работа = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
ПоказатьЕсли файл содержит одно значение ГлавыXDTO.Chapters.Chapter, то выдает ошибку:
Итератор для значения не определен
{Обработка.ЗагрузкаДанныхИзФайла.Форма.Форма.Форма(41)}: Для каждого ГлаваXDTO Из ГлавыXDTO.Chapters.Chapter Цикл
{Обработка.ЗагрузкаДанныхИзФайла.Форма.Форма.Форма(71)}: ПрочитатьФайлНаСервере();
Если значений несколько, то все хорошо.
По теме из базы знаний
- Сохранение (чтение) настроек внешней обработки в файл (управляемые формы)
- XDTO на службе у лентяев. Самый простой способ чтения xml
- Устранение ошибки "Итератор для значения не определен" в релизах БП 3.0.43.194 и ЗУП 3.0.25.101
- Выгрузка УПД из документа "Счет-фактура выданный" в формате xml для загрузки в Диадок
- Исправление ошибок в регламентированном отчете "Расчет по страховым взносам" (РСВ) за 2023 год в УПП, релиз 1.3.202.1. Доработка напильником
Найденные решения
(1)
Для каждого ГлаваXDTO Из XDTO_Массив(ГлавыXDTO.Chapters.Chapter) Цикл
&НаСервереБезКонтекста
Функция XDTO_Массив(XDTO_Объект)
Если ТипЗнч(XDTO_Объект) = Тип("ОбъектXDTO") ИЛИ
ТипЗнч(XDTO_Объект) = Тип("Строка") Тогда
ОтветXDTO_Массив = Новый Массив;
ОтветXDTO_Массив.Добавить(XDTO_Объект);
Возврат ОтветXDTO_Массив;
Иначе
Возврат XDTO_Объект;
КонецЕсли;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Для каждого ГлаваXDTO Из XDTO_Массив(ГлавыXDTO.Chapters.Chapter) Цикл
&НаСервереБезКонтекста
Функция XDTO_Массив(XDTO_Объект)
Если ТипЗнч(XDTO_Объект) = Тип("ОбъектXDTO") ИЛИ
ТипЗнч(XDTO_Объект) = Тип("Строка") Тогда
ОтветXDTO_Массив = Новый Массив;
ОтветXDTO_Массив.Добавить(XDTO_Объект);
Возврат ОтветXDTO_Массив;
Иначе
Возврат XDTO_Объект;
КонецЕсли;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот