SOAP и 1С . Выполнение операции

1. user690478_ikustow 31.05.18 15:24 Сейчас в теме
Добрый день, помогите разобраться с WSссылками, есть тестовый веб-сервис, подключаюсь, но как передать информацию до конца не пойму, вроде и перечитал примеры, но что-то не взлетает

Данные = Неопределено;
СсылкаНаОпределение = "http://193.242.149.82:7070/wsrz/wsrz3.wsdl";
Определение = Новый WSОпределения(СсылкаНаОпределение);
    
Сервис = Определение.Сервисы[0];
ТочкаПодключения = Сервис.ТочкиПодключения[0];
Прокси = Новый WSПрокси(Определение, Сервис.URIПространстваИмен, Сервис.Имя, ТочкаПодключения.Имя);
    
Фабрика = Определение.ФабрикаXDTO;
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(0);
WSПараметр	   = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.policyNumber	= "2312345678901234";
Данные = Прокси.getPolicyInfo3(WSПараметр);
Показать


Также добавил WSссылку и пробовал напрямую

Прокси = WSСсылки.ПроверкаПолиса.СоздатьWSПрокси("http://193.242.149.82:7070/wsrz","wsrzService3","wsrzPort3");
Ф_ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://193.242.149.82:7070/wsrz");
ТипWSПараметра =  Ф_ТипWSПараметра.Получить("getPolicyInfo3"); 
WSПараметр	   = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.policyNumber	= "2312345678901234";
ДанныеПациент = Прокси.getPolicyInfo3(WSПараметр);


С веб-сервисами так работаю впервые, подскажите пожалуйста где ошибка и куда копать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user690478_ikustow 31.05.18 17:36 Сейчас в теме
В общем выявил обязательные параметры и через утилиту проверки выдает следующую ошибку
Прикрепленные файлы:
3. aidaphill 31.05.18 18:26 Сейчас в теме
(2)Там же написано: обращение к процедуре как к функции. Процедура не возвращает значений. "Результат =" нужно убрать
4. maxmax83 01.06.18 12:50 Сейчас в теме
(3) Я б сделал наоборот: поправил веб-сервис, чтобы getPolicyInfo3 возвращала хоть что-то.
6. user690478_ikustow 06.06.18 12:16 Сейчас в теме
(4) Веб-сервис поставщика, тут править не получиться к сожалению
(5) Через soapui получается такая ситуация

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">
<soapenv:Header/>
<soapenv:Body>
<urn:getPolicyInfo3 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paramSource xsi:type="xsd:string">11040</paramSource>
<paramRID xsi:type="xsd:int">333</paramRID>
<paramForDate xsi:type="xsd:string">2018-06-04</paramForDate>
<personSurname xsi:type="xsd:string"></personSurname>
<personName xsi:type="xsd:string"></personName>
<personPatronymic xsi:type="xsd:string"></personPatronymic>
<personSex xsi:type="xsd:string"></personSex>
<personBirthDate xsi:type="xsd:string"></personBirthDate>
<identityType xsi:type="xsd:unsignedByte"></identityType>
<identitySeries xsi:type="xsd:string"></identitySeries>
<identityNumber xsi:type="xsd:string"></identityNumber>
<Snils xsi:type="xsd:string"></Snils>
<policyType xsi:type="xsd:unsignedByte">3</policyType>
<policySeries xsi:type="xsd:string"></policySeries>
<policyNumber xsi:type="xsd:string">2312345678901234</policyNumber>
</urn:getPolicyInfo3>
</soapenv:Body>
</soapenv:Envelope>



<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getPolicyInfo3Response>
<paramID xsi:type="xsd:int">1645</paramID>
<paramRID xsi:type="xsd:int">333</paramRID>
<personSurname xsi:type="xsd:string">Иванов</personSurname>
<personName xsi:type="xsd:string">Иван</personName>
<personPatronymic xsi:type="xsd:string">Иванович</personPatronymic>
<personSex xsi:type="xsd:string">м</personSex>
<personBirthDate xsi:type="xsd:string">1970.01.01</personBirthDate>
<Snils xsi:type="xsd:string">123-456-789 88</Snils>
<policyType xsi:type="xsd:unsignedByte">3</policyType>
<policySeries xsi:nil="true"/>
<policyNumber xsi:type="xsd:string">2312345678901234</policyNumber>
<policyFromDate xsi:type="xsd:string">1970.01.01</policyFromDate>
<policyTillDate xsi:nil="true"/>
<policyOkato xsi:type="xsd:string">03000</policyOkato>
<policyOgrn xsi:nil="true"/>
<policySmo xsi:type="xsd:string">23207</policySmo>
<policyKsmo xsi:type="xsd:string"></policyKsmo>
<ddVP xsi:nil="true"/>
<ddDATN xsi:nil="true"/>
<ddDATO xsi:nil="true"/>
<ddCODE_MO xsi:nil="true"/>
<resultID xsi:type="xsd:int">4313</resultID>
<resultType xsi:type="xsd:int">0</resultType>
<resultCode xsi:type="xsd:int">1</resultCode>
<resultMessage xsi:type="xsd:string">Информация найдена по критерию 1.</resultMessage>
</ns1:getPolicyInfo3Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

я так понимаю сначала выполнять с параметрами
Прокси.getPolicyInfo3(WSПараметр)

а после с таким же набором параметров и смотреть, что там в них

Прокси.getPolicyInfo3Response()
7. RustRR 06.06.18 13:58 Сейчас в теме
(6)
Тогда аналогичный вызов из 1С должен выглядеть так. WSПараметр не нужен.
ДанныеПациент = Прокси.getPolicyInfo3("11040", 333, "2018-06-04", Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, 3, Неопределено, "2312345678901234");
8. user690478_ikustow 06.06.18 15:13 Сейчас в теме
(7) Странно, но пишет, что недостаточно параметров, меня немного смущает <policyType xsi:type="xsd:unsignedByte">3</policyType> , такой тип 1С не воспринимает что-ли
9. RustRR 06.06.18 15:24 Сейчас в теме
(8) Попробуй заменить Неопределено на пустую строку.
10. user690478_ikustow 06.06.18 16:02 Сейчас в теме
(9)
Да, с пустыми строками сработал, по крайней мере он без ошибочно передал данные, теперь надо понимать как получить ответ)
через данные = ..... ошибка обращения как к функции. В soapUI ответ приходит getPolicyInfo3Response(), я думаю ее прописать в конфигураторе в WSссылке с параметрами из описания сервиса и подсунуть туда пустые переменные и глянуть, что там получится
14. RustRR 06.06.18 16:31 Сейчас в теме
(10)
getPolicyInfo3Response - не метод, а пространство имен, вызывать его нет смысла. "Ошибка обращения как к функции", предположительно, означает, что веб-сервис ничего не вернул. Возможно, не сумел обработать набор параметров. Можно попробовать вызов с другими параметрами.
11. user690478_ikustow 06.06.18 16:29 Сейчас в теме
(9)
п1 =""; и так далее по пунктам
СервисПроверки.getPolicyInfo3("", 3353, "2018-06-04", п1, п2,п3,п4, п5,п6 ,п7,п8,п9, 3, п10, "2312345678901234",Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено);

после отработки в эти переменные идут значения

Спасибо за помощь!
17. user640495_m.blagirev 14.12.23 09:18 Сейчас в теме
(11) Каким образом определены количество и порядок следования переменных ?
12. user690478_ikustow 06.06.18 16:30 Сейчас в теме
(9) Как тут закинуть sm вознаграждения, не работает, он там типа как на балансе висит или по факту должен быть?
15. RustRR 06.06.18 16:38 Сейчас в теме
(12)
Мой баланс пополнен, спс :)
5. RustRR 01.06.18 13:09 Сейчас в теме +1 $m
Возможно, проблема в некорректно заполненных параметрах, из-за чего обработчик веб-сервиса тупо падает и не возвращает ответ.

Нашелся некий документ с описанием этого веб-сервиса, судя по нему даты нужно передавать как строку вида "yyyy-mm-dd". Кроме того, пропускаемые параметры также нужно передавать как Неопределено.
13. ivan811 06.06.18 16:31 Сейчас в теме
Мне кажется проблема с описанием веб сервиса- там метод getPolicyInfo3 не является функцией, то есть не должен возвращать значение.
соответственно обращение к нему как к функции "Данные = Прокси.getPolicyInfo3(WSПараметр);" - недопустимо из 1С и приводит к ошибке. То есть обращение к процедуре как к функции.
Чтобы это обойти я обычно обращаюсь к веб сервисам не через WSПрокси, а через HTTPЗапрос и HTTPСоединение . Но в этом случае надо формировать xml запрос и передавать его. А потом обрабатывать ответ- либо парсить xml ответ, либо сериализовать в ОбъектXDTO.
Удобно пользоваться процедурой из БСП - ЗагрузитьСодержимоеИзИнтернет, можете посмотреть где нибудь в типовой как она используется.
А про передачу даты как строку - есть функция XMLСтрока.
16. RustRR 06.06.18 16:44 Сейчас в теме
P.S. Я рад, что заработало, но сам не понял почему.

В описании WSDL есть секция portType, в которой описаны входящее и исходящее сообщения. И как это соотносится с фактом, что getPolicyInfo3 не возвращает ответ?

<portType name='wsrzPortType3'> 
 <operation name='getPolicyInfo3'> 
  <input message='tns:getPolicyInfoRequest3'/> 
  <output message='tns:getPolicyInfoResponse3'/> 
 </operation> 
</portType> 
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот