SOAP и 1С . Выполнение операции
Добрый день, помогите разобраться с WSссылками, есть тестовый веб-сервис, подключаюсь, но как передать информацию до конца не пойму, вроде и перечитал примеры, но что-то не взлетает
Также добавил 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Параметр);
С веб-сервисами так работаю впервые, подскажите пожалуйста где ошибка и куда копать
По теме из базы знаний
- Веб-сервисы в 1С8, обработка тестирования произвольного веб-сервиса
- Использование SoapUi для работы с веб-сервисами. Часть 2
- Разработка приложения под Android для работы с веб-сервисами 1С. Часть 1
- Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами
- Повышение эффективности предприятия через интеграцию 1С с Бизнес-системами: проблемы, решения и преимущества
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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()
(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()
(6)
Тогда аналогичный вызов из 1С должен выглядеть так. WSПараметр не нужен.
Тогда аналогичный вызов из 1С должен выглядеть так. WSПараметр не нужен.
ДанныеПациент = Прокси.getPolicyInfo3("11040", 333, "2018-06-04", Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено, 3, Неопределено, "2312345678901234");
(9)
Да, с пустыми строками сработал, по крайней мере он без ошибочно передал данные, теперь надо понимать как получить ответ)
через данные = ..... ошибка обращения как к функции. В soapUI ответ приходит getPolicyInfo3Response(), я думаю ее прописать в конфигураторе в WSссылке с параметрами из описания сервиса и подсунуть туда пустые переменные и глянуть, что там получится
Да, с пустыми строками сработал, по крайней мере он без ошибочно передал данные, теперь надо понимать как получить ответ)
через данные = ..... ошибка обращения как к функции. В soapUI ответ приходит getPolicyInfo3Response(), я думаю ее прописать в конфигураторе в WSссылке с параметрами из описания сервиса и подсунуть туда пустые переменные и глянуть, что там получится
(10)
getPolicyInfo3Response - не метод, а пространство имен, вызывать его нет смысла. "Ошибка обращения как к функции", предположительно, означает, что веб-сервис ничего не вернул. Возможно, не сумел обработать набор параметров. Можно попробовать вызов с другими параметрами.
getPolicyInfo3Response - не метод, а пространство имен, вызывать его нет смысла. "Ошибка обращения как к функции", предположительно, означает, что веб-сервис ничего не вернул. Возможно, не сумел обработать набор параметров. Можно попробовать вызов с другими параметрами.
(9)
п1 =""; и так далее по пунктам
СервисПроверки.getPolicyInfo3("", 3353, "2018-06-04", п1, п2,п3,п4, п5,п6 ,п7,п8,п9, 3, п10, "2312345678901234",Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено);
после отработки в эти переменные идут значения
Спасибо за помощь!
п1 =""; и так далее по пунктам
СервисПроверки.getPolicyInfo3("", 3353, "2018-06-04", п1, п2,п3,п4, п5,п6 ,п7,п8,п9, 3, п10, "2312345678901234",Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено,Неопределено);
после отработки в эти переменные идут значения
Спасибо за помощь!
Возможно, проблема в некорректно заполненных параметрах, из-за чего обработчик веб-сервиса тупо падает и не возвращает ответ.
Нашелся некий документ с описанием этого веб-сервиса, судя по нему даты нужно передавать как строку вида "yyyy-mm-dd". Кроме того, пропускаемые параметры также нужно передавать как Неопределено.
Нашелся некий документ с описанием этого веб-сервиса, судя по нему даты нужно передавать как строку вида "yyyy-mm-dd". Кроме того, пропускаемые параметры также нужно передавать как Неопределено.
Мне кажется проблема с описанием веб сервиса- там метод getPolicyInfo3 не является функцией, то есть не должен возвращать значение.
соответственно обращение к нему как к функции "Данные = Прокси.getPolicyInfo3(WSПараметр);" - недопустимо из 1С и приводит к ошибке. То есть обращение к процедуре как к функции.
Чтобы это обойти я обычно обращаюсь к веб сервисам не через WSПрокси, а через HTTPЗапрос и HTTPСоединение . Но в этом случае надо формировать xml запрос и передавать его. А потом обрабатывать ответ- либо парсить xml ответ, либо сериализовать в ОбъектXDTO.
Удобно пользоваться процедурой из БСП - ЗагрузитьСодержимоеИзИнтернет, можете посмотреть где нибудь в типовой как она используется.
А про передачу даты как строку - есть функция XMLСтрока.
соответственно обращение к нему как к функции "Данные = Прокси.getPolicyInfo3(WSПараметр);" - недопустимо из 1С и приводит к ошибке. То есть обращение к процедуре как к функции.
Чтобы это обойти я обычно обращаюсь к веб сервисам не через WSПрокси, а через HTTPЗапрос и HTTPСоединение . Но в этом случае надо формировать xml запрос и передавать его. А потом обрабатывать ответ- либо парсить xml ответ, либо сериализовать в ОбъектXDTO.
Удобно пользоваться процедурой из БСП - ЗагрузитьСодержимоеИзИнтернет, можете посмотреть где нибудь в типовой как она используется.
А про передачу даты как строку - есть функция XMLСтрока.
P.S. Я рад, что заработало, но сам не понял почему.
В описании WSDL есть секция portType, в которой описаны входящее и исходящее сообщения. И как это соотносится с фактом, что getPolicyInfo3 не возвращает ответ?
В описании WSDL есть секция portType, в которой описаны входящее и исходящее сообщения. И как это соотносится с фактом, что getPolicyInfo3 не возвращает ответ?
<portType name='wsrzPortType3'>
<operation name='getPolicyInfo3'>
<input message='tns:getPolicyInfoRequest3'/>
<output message='tns:getPolicyInfoResponse3'/>
</operation>
</portType>
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот