Имя: Пароль:
1C
1С v8
ФабрикаXDTO, как правильно описать вложенные типы?
0 grenadier
 
29.01.20
07:59
Доброго времени суток! прошу помощи в разрешении вопроса.
Существует сервис поставщика, по которому можно получить цену номенклатуры.Пишу запрос в SOAP UI, выглядит запрос как на картинке, обязательные параметры это токен, код клиента, имя клиента и код номенлатуры.
https://ibb.co/GcCVWGT
Типы:
https://ibb.co/LvkT5MV
Функция:
https://ibb.co/zR6FX4T
В программе SOAP UI всё отправляется и всё получается как надо. Далее создаю обработку для провекри работы непосредственно в 1С. Код такой:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
Прокси = WSСсылки.TVH.СоздатьWSПрокси("http://service.webservices.tvh.com";, "TvhwsService", "TvhwsServiceHttpSoap12Endpoint" );
ID = Прокси.login("Тут логин","тут пароль");

ТипwsInqHeadRow                    = Прокси.ФабрикаXDTO.Тип("http://struct.webservices.tvh.com/xsd","Inquiry_WSInqHeadRow";);  
wsInqHeadRow                       = Прокси.ФабрикаXDTO.создать(ТипwsInqHeadRow);                            
wsInqHeadRow.customerCode          = "тут код клиента";
wsInqHeadRow.customerContactName   = "тут имя клиента";

ТипwsInqLineRow                    = Прокси.ФабрикаXDTO.Тип("http://struct.webservices.tvh.com/xsd","Inquiry_WSInqLineRow";);
wsInqLineRow                       = Прокси.ФабрикаXDTO.Создать(ТипwsInqLineRow);
wsInqLineRow.partNumber            = "тут код номенлатуры";
wsInqLineRow.lineNumber            = 0;
wsInqLineRow.makeCode              = "";
wsInqLineRow.quantity              = 0;
wsInqLineRow.customerPartNumber    = "";

ТипwsInqTextRow                    = Прокси.ФабрикаXDTO.Тип("http://struct.webservices.tvh.com/xsd","Inquiry_WSInqTextRow";);
wsInqTextRow                       = Прокси.ФабрикаXDTO.Создать(ТипwsInqTextRow);

    
Загрузить = Прокси.inquiry(ID.sessionId,wsInqHeadRow ,wsInqLineRow,wsInqTextRow);

КонецПроцедуры

в итоге ошибка:
Ошибка вызова операции сервиса:  {http://service.webservices.tvh.com}:TvhwsService:inquiry()
по причине:
Неверный формат.
Подозреваю, что ошибка возникает по причине что тип wsInqHeadRow вложен в wsInqHead. Вопрос собственно как правильно описать вложенные типы?
1 PaulBC
 
29.01.20
08:12
Так параметр функции - это wsInqHead - список, элементы которого wsInqHeadRow. Т. е. нужно создать wsInqHead, добавить в него wsInqHeadRow, а wsInqHead уже передавать в функцию. Тоже самое с остальными параметрами, как я понял.
2 бегинер
 
29.01.20
08:24
Загрузить = Прокси.inquiry(ID.sessionId,wsInqHeadRow ,wsInqLineRow,wsInqTextRow);

не видно в коде где устанавливаешь ID.sessionId - может из-за него ругается....
3 grenadier
 
29.01.20
08:39
(1) будем пробовать, спасибо
4 grenadier
 
29.01.20
08:40
(2)ID.sessionId есть, не весь код просто привёл
5 VikKup
 
29.01.20
09:42
ТипwsInqHeadRow                    = Прокси.ФабрикаXDTO.Тип("http://struct.webservices.tvh.com/xsd","Inquiry_WSInqHeadRow";;);  
wsInqHeadRow                       = Прокси.ФабрикаXDTO.создать(ТипwsInqHeadRow);                            
wsInqHeadRow.customerCode          = "тут код клиента";
wsInqHeadRow.customerContactName   = "тут имя клиента";

добавляешь
ТипwsInqHead                    = Прокси.ФабрикаXDTO.Тип("http://struct.webservices.tvh.com/xsd","Inquiry_WSInqHead";;);  
wsInqHead                       = Прокси.ФабрикаXDTO.создать(ТипwsInqHead);                            
wsInqHead.wsInqHeadRow=wsInqHeadRow;

Ну и так далее
6 VikKup
 
29.01.20
09:47
(5) Если тип Array, то wsInqHead.wsInqHeadRow=wsInqHeadRow меняешь на wsInqHead.wsInqHeadRow.Добавить(wsInqHeadRow);
7 grenadier
 
29.01.20
10:38
(6) разобрался вроде,получается взять цену,  всем спасибо!