|   |   | 
| 
 | Веб-сервисы, передача массива сложных структур | ☑ | ||
|---|---|---|---|---|
| 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) а, там у вложенного описания типа имя есть. тогда проще, да :)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |