|
Одна или несколько строк в выборке XDTO: Итератор для значения не определен |
☑ |
0
romix
30.10.14
✎
00:43
|
При выборке данных из XDTO получение значений сбоит на ситуации, когда, например, в табличной части загружаемого документа есть только одна строка. Приходится анализировать тип (список там или объект) и дублировать код загрузки этой строки. Отдельный случай - когда в табличной части совсем нет строк.
Если Данные.Свойства().Получить("Контрагенты")=Неопределено Тогда
//Нет контрагентов
ИначеЕсли Данные.Контрагенты.Свойства().Получить("Строка")=Неопределено Тогда
//Нет строк
ИначеЕсли ТипЗнч(Данные.Контрагенты.Строка)=Тип("СписокXDTO") Тогда
Для Каждого зн из Данные.Контрагенты.Строка Цикл
сКонтрагенты.Вставить(ч(зн.Код), зн.Наименование);
КонецЦикла;
ИначеЕсли ТипЗнч(Данные.Контрагенты.Строка)=Тип("ОбъектXDTO") Тогда
зн=Данные.Контрагенты.Строка;
сКонтрагенты.Вставить(ч(зн.Код), зн.Наименование);
КонецЕсли;
Вопрос: есть ли более аккуратный способ обработать все три варианта загрузки, чтобы не дублировать код?
|
|
1
FlashC
30.10.14
✎
00:46
|
(9) можно
|
|
2
FlashC
30.10.14
✎
00:46
|
+(1) можно, конечно...
|
|
3
FlashC
30.10.14
✎
00:48
|
(0) для начала проанализируй условия... потом вопросы
|
|
4
Armando
30.10.14
✎
03:08
|
Тож сталкивался с этим. С первого раза не понял как решить. В итоге оставил проверку на СписокXDTO и на ОбъектXDTO.
|
|
5
romix
30.10.14
✎
19:28
|
Сделал функцию, которая возвращает массив структур.
Функция ПолучитьИзXDTO(Данные)
мРезультат=Новый Массив;
Если ТипЗнч(Данные)=Тип("СписокXDTO") Тогда
Для Каждого зн из Данные Цикл
пСвойства=зн.Свойства();
ст=Новый Структура;
Для Каждого св из пСвойства Цикл
ст.Вставить(св.Имя, зн[св.Имя]);
КонецЦикла;
мРезультат.Добавить(ст);
КонецЦикла;
Иначе //Если ТипЗнч(Данные)=Тип("ОбъектXDTO") Тогда
зн=Данные.Контрагенты.Строка;
пСвойства=зн.Свойства();
ст=Новый Структура;
Для Каждого св из пСвойства Цикл
ст.Вставить(св.Имя, зн[св.Имя]);
КонецЦикла;
мРезультат.Добавить(ст);
КонецЕсли;
Возврат мРезультат;
КонецФункции
|
|
6
Armando
30.10.14
✎
21:34
|
Прошелся поиском в партнерском форуме:
Вот например:
"Платформа определяет наличие списка значений свойства по максимальному количеству, указанному в определении типа (в XSD-схеме это соответствует атрибуту maxOccurs)." И если AnyType тож такое поведение будет
|
|
7
Fragster
гуру
30.10.14
✎
22:49
|
в схеме надо прописать минимальное количество = 0, максимальное количество = -1
|
|