Имя: Пароль:
1C
1С v8
Веб-сервис и base64Binary
0 Пчелкин
 
04.05.18
18:48
Всем доброй пятницы!

Есть веб-сервис Сфера.EDI https://edi-ws.esphere.ru/edi.wsdl
Использую методы Relationships и ListMb: создаю прокси, создаю входной параметр нужного типа, дёргаю process - получаю результат.

    ИмяМетода = "Relationships";
    
    Прокси = ПолучитьПрокси(ИмяМетода);
    Фабрика = Прокси.ФабрикаXDTO;

    Запрос = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, "RelationsInput"));
    Запрос.Name = ПрофильНастроекЭДО.Логин;
    Запрос.Password = ПрофильНастроекЭДО.Пароль;

    РезультатRelationships = Прокси.process(Запрос);


Проблема с методом Receive.
Во-первых, вместо входного параметра payload типа ReseiveInput (как в предыдущем методе), сервис требует (смотрю в отладчике) 7 параметров - 5 входных и 2 выходных. Возвращаемого значения при этом нет и обращение вида Результат = Прокси.process(Запрос) выдает ошибку "Обращение к процедуре как к функции".
Во-вторых, чтобы я ни передал в качестве этих семи параметров, всегда получаю ошибку "Неизвестная ошибка. Недостаточно параметров операции". Если попытаться передать другое количество параметров, то ошибка будет иная - "Недостаточно фактических параметров".

Читал, что 1С может так себя вести со структурами и сложными типами. Пытался убрать из xsd свойство Cnt - получил метод с одним параметром payload и возвращаемым значением Res.

А как всё-таки получить искомый Cnt?
1 Fragster
 
гуру
04.05.18
18:53
<xs:element name="Name" type="xs:string"/><xs:element name="Password" type="xs:string"/><xs:element name="RelationId" type="xs:string"/><xs:element name="TrackingId" type="xs:string"/><xs:element name="DocumentStatus" type="edi:DocumentStatus"/>
2 Fragster
 
гуру
04.05.18
18:55
вызови метод как процедуру с 7 параметрами, из которых два последних - неопределено, в них должно прилететь
3 Fragster
 
гуру
04.05.18
18:56
тут же все написано:
<wsdl:message name="RelationshipsRequestMessage"><wsdl:part name="payload" element="tns:RelationsInput">
    </wsdl:part></wsdl:message><wsdl:message name="RelationshipsResponseMessage"><wsdl:part name="payload" element="tns:RelationsResponse">
    </wsdl:part></wsdl:message>

<xs:element name="ReceiveInput"><xs:annotation><xs:documentation>Method receives document from Edi express.</xs:documentation></xs:annotation><xs:complexType><xs:sequence><xs:element name="Name" type="xs:string"/><xs:element name="Password" type="xs:string"/><xs:element name="RelationId" type="xs:string"/><xs:element name="TrackingId" type="xs:string"/><xs:element name="DocumentStatus" type="edi:DocumentStatus"/></xs:sequence></xs:complexType></xs:element><xs:element name="ReceiveResponse"></xs:element><xs:element name="SendResponse"><xs:complexType><xs:sequence><xs:element name="Res" type="xs:int">

                </xs:element><xs:element name="Cnt" type="xs:string">
                </xs:element></xs:sequence></xs:complexType></xs:element>
4 Пчелкин
 
04.05.18
18:56
(2) "Неизвестная ошибка. Недостаточно параметров операции"
5 Fragster
 
гуру
04.05.18
18:56
(4) именно с 7 параметрами?
6 Пчелкин
 
04.05.18
18:58
(5) Именно. Первые пять - Name, Password, RelationId, TrackingId, DocumentStatus.
Два последних - неинициализированные.
7 Пчелкин
 
07.05.18
10:24
Перем КодОшибкиДокументаXML, СтрокаДокументаXML;
    
    ИмяМетода = "Receive";
    Прокси = ПолучитьПрокси(ИмяМетода);
    Фабрика = Прокси.ФабрикаXDTO;
        
    Прокси.process(ПрофильНастроекЭДО.Логин, ПрофильНастроекЭДО.Пароль, СтрокаТЧ.RelationId, СтрокаТЧ.TrackingId, "A", КодОшибкиДокументаXML, СтрокаДокументаXML);


Ошибка вызова операции сервиса:  {http://edi-express.esphere.ru/}:EdiExpressTransportService:process()
по причине:
Неизвестная ошибка. Недостаточно параметров операции
по причине:
Недостаточно параметров операции
8 Пчелкин
 
07.05.18
11:32
Неужели никто со Сферой не работает?
9 Пчелкин
 
08.05.18
06:42
Уважаемые спецы, вы ведь кучу сервисов обработали. Уже и с Ветисом подружились. Помогите, в какую сторону копать-то? Пожа-а-а-а-луйста.
10 Fragster
 
гуру
08.05.18
10:25
(9) пожалуйста и спасибо в карман не положишь
11 Пчелкин
 
08.05.18
11:08
(10) есть дельные мысли?
12 Fragster
 
гуру
08.05.18
11:50
(11) конечно. поставить fiddler, soap ui и сравнить то, что отправляет и получае soaup ui и 1с
13 Пчелкин
 
08.05.18
12:51
1С коряво интерпретирует сервис на этапе создания прокси. Вместо функции с одним параметром (структура из 5 значений) и результатом (структура из 2 значений), 1С воспринимает метод как процедуру с семью параметрами.
Стоит убрать из описания выходной структуры последнее поле - всё становится на круги своя.
14 Пчелкин
 
22.05.18
16:12
Двухнедельное ожидание ответа от техподдержки принесло результат: сервис просто не выдаёт Cnt. Разбираются на своей стороне.
15 Tateossian
 
22.05.18
16:13
Ох уж эта сфера. У них дырень была в dll-ках. Пока сам не залез в нее декомпилятором - пальцем не пошевелили.