Имя: Пароль:
1C
1С v8
Веб-сервис, получаю ошибку Несоответствие типов (параметр номер '1')
0 Radion
 
08.05.22
21:38
Доброго времени суток, описание тестового веб сервиса (курьерская служба): http://rates.kazpost.kz/api/addrletter/test/
В ней есть wsdl описание тестового веб-сервиса: http://rates.kazpost.kz/postratesws/postratesws.wsdl
В 1с созал WSссылку загрузил в нее описание wsdl, через метод GetAddrLetter, пытаюсь зарегистрировать заказ
и получаю ошибку "Несоответствие типов (параметр номер '1')".

Сам код (данные взял тестовые из примера):
    ПараметрыЗапроса = СокрЛП("
    |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:pos=""http://webservices.kazpost.kz/postratesws"">
    |<soapenv:Header/>
    |<soapenv:Body>
    |    <pos:GetParcelBarcodeRequest>
    |        <pos:Key>EMKWG7x5dSrCowxnKd1adBItLi0lcwkR</pos:Key>
    |        <pos:AddrInfo>
    |            <pos:RcpnIIN>123456789012</pos:RcpnIIN>
    |            <pos:RcpnName>ФИОполучателя</pos:RcpnName>
    |            <pos:RcpnPhone>77010000000</pos:RcpnPhone>
    |            <pos:RcpnEmail>test@test.com</pos:RcpnEmail>
    |            <pos:RcpnCountry> Казахстан </pos:RcpnCountry>
    |            <pos:RcpnIndex>010000</pos:RcpnIndex>
    |            <pos:RcpnCity>Город</pos:RcpnCity>
    |            <pos:RcpnDistrict>Район</pos:RcpnDistrict>
    |            <pos:RcpnStreet>Улица</pos:RcpnStreet>
    |            <pos:RcpnHouse>12</pos:RcpnHouse>
    |            <pos:SndrBIN>098765432121</pos:SndrBIN>
    |            <pos:SndrName>Компания</pos:SndrName>
    |            <pos:SndrPhone>77010000000</pos:SndrPhone>
    |            <pos:SndrEmail>company@company.com</pos:SndrEmail>
    |            <pos:SndrCountry>Казахстан</pos:SndrCountry>
    |            <pos:SndrIndex>050000</pos:SndrIndex>
    |            <pos:SndrCity>Город</pos:SndrCity>
    |            <pos:SndrDistrict>Район</pos:SndrDistrict>
    |            <pos:SndrStreet>Улица</pos:SndrStreet>
    |            <pos:SndrHouse>25</pos:SndrHouse>
    |            <pos:Weight>1.55</pos:Weight>
    |            <pos:DeclaredValue>15000</pos:DeclaredValue>
    |            <pos:CashOnDelivery>15000</pos:CashOnDelivery>
    |            <pos:ProductCode>P104</pos:ProductCode>
    |            <pos:Marks>
    |                <pos:Mark>returnAfter</pos:Mark>
    |            </pos:Marks>
    |            <pos:SendMethod>2</pos:SendMethod>
    |            <pos:MailCtg>4</pos:MailCtg>
    |                        <pos:OrderNum>123456789</pos:OrderNum>
    |                        <pos:MailCount>1</pos:MailCount>
    |                        <pos:DEA_NUMBER>537868654454000542</pos:DEA_NUMBER>
    |                       <pos:DEA_DEPCODE>279900</pos:DEA_DEPCODE>
    |        </pos:AddrInfo>
    |    </pos:GetParcelBarcodeRequest>
    |</soapenv:Body>
    |</soapenv:Envelope>    
    |");
ВебСервис      = WSСсылки.WSСсылка_TEST.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11");
ОтветВебСервиса= ВебСервис.GetAddrLetter(ПараметрыЗапроса); - здесь получаю ошибку: "Несоответствие типов (параметр номер '1')"
Может кто по опыту подскажет в чем может быть проблема? И еще вопрос как все это метод "GetAddrLetter" из описания протестировать в Postman ?
1 timurhv
 
08.05.22
22:19
ОтветВебСервиса= ВебСервис.GetAddrLetter(ПараметрыЗапроса);

ПараметрыЗапроса = СокрЛП("
...
    |    <pos:GetParcelBarcodeRequest>
2 youalex
 
08.05.22
23:16
(0)
Если используешь объектную модель, в параметры метода нужно отдавать то что в схеме.
В твоей схеме это GetAddrLetterRequest (соответствующий ОбъектXDTO в терминах 1С)

Очень приблизительно, как-то так:
ПространствоИмен =     "http://webservices.kazpost.kz/postratesws";
ВебСервис  = WSСсылки.WSСсылка1.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11");
Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "GetAddrLetterRequest");
GetAddrLetterRequest = ВебСервис.ФабрикаXDTO.Создать(Тип);
Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "AddrInfo");
AddrInfo =  ВебСервис.ФабрикаXDTO.Создать(Тип); //заполняешь дальше этот объект.     
GetAddrLetterRequest.Key        = "EMKWG7x5dSrCowxnKd1adBItLi0lcwkR";
GetAddrLetterRequest.AddrInfo    = AddrInfo;
//дальше заполняешь что там.

Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest);

Для тестов можно использовать прогу SOAP UI  (и метод ФабрикаXDTO.ЗаписатьXML())
3 Radion
 
09.05.22
17:55
(2)     Спасибо, сделал по вашему совету, в итоге получаю ошибку -
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(211)}: Ошибка при вызове метода контекста (GetAddrLetter)
    Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest);    
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:  {http://webservices.kazpost.kz/postratesws}:postratesws:GetAddrLetter()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Extra content at the end of the document

по причине:
Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Extra content at the end of the document

Что может быть в данном случае?
Спасибо.

Код:
    ПространствоИмен = "http://webservices.kazpost.kz/postratesws";
    ВебСервис  = WSСсылки.WSСсылка_TEST.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11");
    Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "GetAddrLetterRequest");
    GetAddrLetterRequest = ВебСервис.ФабрикаXDTO.Создать(Тип);
    Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "AddrInfo");
    AddrInfo =  ВебСервис.ФабрикаXDTO.Создать(Тип);//заполняешь дальше этот объект.    
    
    AddrInfo.Key = "EMKWG7x5dSrCowxnKd1adBItLi0lcwkR";     
    AddrInfo.RcpnIIN = "123456789012";     
    AddrInfo.RcpnName = "ФИОполучателя";     
    AddrInfo.RcpnPhone = "77010000000";     
    AddrInfo.RcpnEmail = "test@test.com";
    AddrInfo.RcpnCountry = "Казахстан";
    AddrInfo.RcpnIndex = 010000;
    AddrInfo.RcpnCity = "Город";
    AddrInfo.RcpnDistrict = "Район";
    AddrInfo.RcpnStreet = "Улица";
    AddrInfo.RcpnHouse = "12";
    AddrInfo.SndrBIN = 098765432121;
    AddrInfo.SndrName = "Компания";
    AddrInfo.SndrPhone = "77010000000";
    AddrInfo.SndrEmail = "company@company.com";
    AddrInfo.SndrCountry = "Казахстан";
    AddrInfo.SndrIndex = "050000";
    AddrInfo.SndrCity = "Город";
    AddrInfo.SndrDistrict = "Район";
    AddrInfo.SndrStreet = "Улица";
    AddrInfo.SndrHouse = "25";
    AddrInfo.Weight = 15000;
    AddrInfo.DeclaredValue = 15000;
    AddrInfo.ProductCode = "P104";
    AddrInfo.ProductCode = "P104";
    AddrInfo.SendMethod = "2";
    AddrInfo.MailCtg = "4";
    AddrInfo.OrderNum= "123456789";
    AddrInfo.MailCount = "1";
    AddrInfo.DEA_NUMBER = "537868654454000542";
    AddrInfo.DEA_DEPCODE = "279900";
    
    GetAddrLetterRequest.Key        = "test";    
    GetAddrLetterRequest.AddrInfo    = AddrInfo;     
    GetAddrLetterRequest.License       = "test";
    GetAddrLetterRequest.Certif        = "test";
    GetAddrLetterRequest.Invoice    = "test";
    GetAddrLetterRequest.Account    = "test";
    GetAddrLetterRequest.WeightAll    = 0;
    GetAddrLetterRequest.CostAll    = 0;
    
    Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest);
4 youalex
 
09.05.22
23:23
(3) У тебя похоже пустой ответ возвращается, отсюда ошибка про xml

Как минимум, у тебя не заполнен объект Marks, если исходить из тестового примера:

Marks = ВебСервис.ФабрикаXDTO.Создать(ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "Marks"));
Marks.Mark.Добавить("returnAfter");
AddrInfo.Marks = Marks;

У меня после добавления этого фрагмента вернуло вот что (смотрю через Сервис.ФабрикаXDTO.ЗаписатьXML())

<GetAddrLetterResponse xmlns="http://webservices.kazpost.kz/postratesws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ResponseInfo>
        <ResponseGenTime>2022-05-09T23:20:29</ResponseGenTime>
        <ResponseCode>ERROR</ResponseCode>
        <ResponseText>ORA-01033: сейчас идет либо запуск, либо останов ORACLE
</ResponseText>
    </ResponseInfo>
</GetAddrLetterResponse>
5 Radion
 
12.05.22
15:12
(4) Еще раз внимательно просмотрел типы данных и все получилось. Спасибо, большое!!!