Имя: Пароль:
1C
 
Объект XDTO как узнать массив ли это
,
0 sahactys123
 
20.11.24
14:42
Добрый день загружаю XML, преобразую его в объект XDTO и обхожу строки Для каждого Элемент из Данные Цикл, где данные это объект XDTO. Если в XML несколько строк, то все отрабатывает, но если 1, то падает с ошибкой "Итератор для значения не определен". Как узнать несколько ли значений в объекте ?
1 osa1C
 
20.11.24
14:44
(0) Данные.Количество()
2 Garykom
 
гуру
20.11.24
14:45
3 mikecool
 
20.11.24
15:01
(1) у объекта хдто есть такой метод?
4 d4rkmesa
 
20.11.24
15:05
(0) Надо проверять тип для Данные, для коллекции это будет "СписокXDTO", а не "ОбъектXDTO".
5 rozer76
 
20.11.24
15:11
(1) ты весь код в try-except пишешь ? ))
6 Franchiser
 
гуру
20.11.24
16:29
(0) обход цикла с нуля идет
7 АнализДанных
 
20.11.24
16:55
(0) Создай служебную функцию КоллекцияОбъектаXDTO():

Для Каждого ЭлементXDTO Из КоллекцияОбъектаXDTO(ОбъектИлиСписокXDTO) Цикл
    // обработка данных
КонецЦикла

Функция ОбъеткXDTO_Списком(КоллекцияОбъектаXDTO)

    Если ТипЗнч(КоллекцияОбъектаXDTO) = Тип("ОбъектXDTO") Тогда

        Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КоллекцияОбъектаXDTO);

    ИначеЕсли ТипЗнч(КоллекцияОбъектаXDTO) = Тип("СписокXDTO") Тогда
        
        Возврат КоллекцияОбъектаXDTO;

    КонецЕсли;

КонецФункции
8 АнализДанных
 
20.11.24
16:59
(7) Ошибся, функция называется "КоллекцияОбъектаXDTO"

Функция КоллекцияОбъектаXDTO(КоллекцияОбъектаXDTO)
...
КонецФункции
9 Kongo2019
 
20.11.24
18:38
(0)
Если ТипЗнч (ПриходныйбордерXDTO.Состав.СтрокаСостава) <> Тип ("СписокXDTO) Тогда

СписокхXDTOСтрокаСостава = Новый Массив;

СписокXDTOСтрокаСостава .Добавить (ПриходныйОрдерXDTO.Состав.СтрокаСостава);
Иначе

СписокXDTOСтрокаСостава = ПриходныйОрдерXDTO.Состав.СтрокаСостава;
КонецЕсли;
10 Dzenn
 
гуру
20.11.24
19:51
(9) о, я примерно так же делаю.

1) ввожу переменную типа Массив = Новый Массив;
2) Проверяю данные на входе что это — СписокXDTO или ОбъектXDTO
3) если список, то Массив = ДанныеНаВходе
4) если объект, то Массив.Добавить(ДанныеНаВходе)
5) обхожу массив, будучи полностью уверенным, что это именно массив