![]() |
![]() |
![]() |
|
Веб-сервисы, передача массива сложных структур | ☑ | ||
---|---|---|---|---|
0
nesergey
26.05.15
✎
10:27
|
1C83 Есть сторонний веб-сервис с функции doUpdate(). В качестве параметра этой функции передается переменная, которая определена так: https://www.dropbox.com/s/cc455pqh6auxdx1/1.PNG?dl=0
Соответственно я создаю объект типа doUpdate, после создания: items = Неопределено initiator = Строка token = Строка Вот с items и возникает проблема, это должен быть массив, каждый элемент которого имеет тип Shipping. Как мне правильно его определить? |
|||
1
Широкий
26.05.15
✎
10:31
|
Создать объект твоего типа
|
|||
2
nesergey
26.05.15
✎
10:44
|
Так в том то и проблема, что у items в определении 1С нет типа. И чтобы я не пытался присваивать (массив, списокXDTO и пр.), появляется ошибка.
|
|||
3
Широкий
26.05.15
✎
10:52
|
Тип у items - какой?
|
|||
4
nesergey
26.05.15
✎
10:54
|
||||
5
Широкий
26.05.15
✎
10:55
|
Определение типа - что там?
|
|||
6
Мигрень
26.05.15
✎
10:57
|
(0)
1. Получаешь фабрику с сервака. 2. Получаешь через полученную фабрику тип. 3. Создаешь с помощью полученной фабрики объект по полученному типу. Все операции только через фабрику с сервера, а не через свою. |
|||
7
nesergey
26.05.15
✎
10:58
|
В определении типа указан тип значения (Shipping) см. первую картинку.
|
|||
8
Широкий
26.05.15
✎
11:00
|
(7) Ну и ? Создать объект типа Shipping - никак?
|
|||
9
Serginio1
26.05.15
✎
11:00
|
||||
10
Широкий
26.05.15
✎
11:04
|
ОбъектXDTO (XDTODataObject)
Добавить (Add) Вариант синтаксиса: Установка значения нового произвольного свойства Описание: Добавляет значение произвольного свойства. Имя свойства будет создано автоматически, на основе локального имени XML представления свойства. В случае, если произвольное свойство с полученным именем уже существует и, если предыдущая установка значения произвольного свойства выполнялась для данного произвольного свойства, либо другого свойства в случае наличия последовательности, - свойство становится списковым с неограниченной верхней границей. |
|||
11
Fragster
гуру
26.05.15
✎
11:05
|
(10) не угадал
|
|||
12
Fragster
гуру
26.05.15
✎
11:05
|
(0) выложи XSD схему куда-нибудь
|
|||
13
nesergey
26.05.15
✎
11:21
|
||||
14
Serginio1
26.05.15
✎
11:28
|
(13) 9 Смотрел? Пройдись отладчиком по типам
ТипShiping= ТипItems.Свойства.Получить("Shiping").Тип; |
|||
15
Широкий
26.05.15
✎
11:40
|
У "items" МаксимальноеЗначений= 1 - где список то?
|
|||
16
nesergey
26.05.15
✎
11:41
|
(14) Пробую
|
|||
17
nesergey
26.05.15
✎
11:43
|
(15) items объект, в котором лежит список shiping максимальное значение = -1
|
|||
18
Fragster
гуру
26.05.15
✎
11:54
|
Фабрика = СоздатьФабрикуXDTO("x:\shipping.ws.xsd");
ПространствоИмен = "http://192.168.1.145:8081/"; Тип = Фабрика.Тип(ПространствоИмен, "doUpdate"); Объект = Фабрика.Создать(Тип); Объект.Items = Фабрика.Создать(Тип.Свойства.Получить("Items").Тип); ТипShipping = Объект.Items.Shipping.ВладеющееСвойство.Тип; Для Сч = 1 по 10 Цикл Shipping = Фабрика.Создать(ТипShipping); Shipping.id = Сч; ////// Объект.Items.Shipping.Добавить(Shipping); КонецЦикла; |
|||
19
nesergey
26.05.15
✎
12:00
|
(9), (18) Спасибо! Это то что надо, разобрался.
|
|||
20
Широкий
26.05.15
✎
12:05
|
Фабрика=СоздатьФабрикуXDTO("C:\Фабрика.xml");
ПространстваИмен=Фабрика.Пакеты[1].URIПространстваИмен; Тип_doUpdate=Фабрика.Тип(ПространстваИмен,"doUpdate"); Тип_Shipping=Фабрика.Тип(ПространстваИмен,"Shipping"); Тип_Items=Тип_doUpdate.Свойства.Получить("items").Тип; Объект_Item=Фабрика.Создать(Тип_doUpdate.Свойства.Получить("items").Тип); Объект_Shipping=Фабрика.Создать(Тип_Shipping); Объект_Shipping.id=1; Объект_Item.Shipping.Добавить(Объект_Shipping); Объект_Shipping=Фабрика.Создать(Тип_Shipping); Объект_Shipping.id=2; Объект_Item.Shipping.Добавить(Объект_Shipping); Объект_doUpdate=Фабрика.Создать(Тип_doUpdate); Объект_doUpdate.initiator="222"; Объект_doUpdate.token="уц"; Объект_doUpdate.items=Объект_Item; |
|||
21
Широкий
26.05.15
✎
12:06
|
Тип явно не был указан
|
|||
22
Serginio1
26.05.15
✎
12:17
|
(19) Есть в модуле Поиск ОбщийМодуль.ЭлектронныеДокументыВнутренний.Модуль
Функция Функция ПолучитьТипОбъектаCML(Тип, ВерсияСхемы) МассивПути = СтрРазделить(Тип, "."); ПервыйЭлемент = МассивПути[0]; Если Лев(ПервыйЭлемент,1) = "{" И Прав(ПервыйЭлемент,1) = "}" Тогда ИмяПакета = Сред(ПервыйЭлемент, 2, СтрДлина(ПервыйЭлемент) - 2); Коллекция = ФабрикаXDTO.Пакеты.Получить(ИмяПакета).КорневыеСвойства; ИначеЕсли ВерсияСхемы <> "4.02" Тогда ТипОбъекта = ФабрикаXDTO.Тип(ВерсияСхемы, ПервыйЭлемент); Коллекция = ТипОбъекта.Свойства; Иначе ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd", ПервыйЭлемент); Коллекция = ТипОбъекта.Свойства; КонецЕсли; МассивПути.Удалить(0); Пока МассивПути.Количество() > 0 Цикл Если Коллекция = Неопределено Тогда Возврат Неопределено; КонецЕсли; Свойство = Коллекция.Получить(МассивПути[0]); Если Свойство = Неопределено Тогда Возврат Неопределено; КонецЕсли; ТипОбъекта = Свойство.Тип; МассивПути.Удалить(0); Попытка Коллекция = ТипОбъекта.Свойства; Исключение Коллекция = Неопределено; КонецПопытки; КонецЦикла; Возврат ТипОбъекта; КонецФункции |
|||
23
Serginio1
26.05.15
✎
12:21
|
ПолучитьТипОбъектаCML("{"+ПростанствоИмен+"}.doUpdate.items, "")
|
|||
24
Fragster
гуру
26.05.15
✎
12:36
|
(20) а, там у вложенного описания типа имя есть. тогда проще, да :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |