Имя: Пароль:
1C
 
Ссылка web сервиса SAP - "Неверный формат"
0 Вася Теркин
 
19.12.18
08:59
Сразу извиняюсь за большие скроллы, но. Создал пустую базу с апачем. Сделал вебсервис. Все ОК.
Создал вторую базу откуда стучаться. Все ОК регится.
Теперь Саперы дали ссылку.

http://saptst.mmm.uk:8000/sap/bc/srt/wsdl/bndg_5C095F2EF7041855E1000000C0A8B823/wsdl11/allinone/ws_policy/document?sap-client=340

Через браузер все ок.
Но при попытке подключить к 1С хоть в конфигураторе, хоть в


&НаКлиенте
Процедура Подключить(Команда)
    ПодключитьНаСервере();
КонецПроцедуры

&НаСервере

Процедура ПодключитьНаСервере()
    // Определяем настройки
    
    URLПространстваИменСервиса = "http://saptst.mmm.uk:8000";;
    ИмяПользователя = "1CRMSRFC";
    Пароль = "123*Qweasd";
    МестоположениеWSDL = "http://saptst.mmm.uk:8000/sap/bc/srt/wsdl/bndg_5C095F2EF7041855E1000000C0A8B823/wsdl11/allinone/ws_policy/document?sap-client=340";;
    ИмяСервиса = "ZWS_SAP_TO_1C";
    ИмяТочкиПодключения = "ZWS_SAP_TO_1C";
    
    // Создаем подключение
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL();
    WSОпределение = Новый WSОпределения(МестоположениеWSDL,ИмяПользователя,Пароль,,,SSL);
    WSПрокси = Новый WSПрокси(WSОпределение, URLПространстваИменСервиса, ИмяСервиса, ИмяТочкиПодключения,,,SSL);
    WSПрокси.Пользователь = ИмяПользователя;
    WSПрокси.Пароль = Пароль;
КонецПроцедуры

На
WSОпределение = Новый WSОпределения(МестоположениеWSDL,ИмяПользователя,Пароль,,,SSL);
пишет

{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(22)}: Ошибка при вызове конструктора (WSОпределения)
    WSОпределение = Новый WSОпределения(МестоположениеWSDL,ИмяПользователя,Пароль,,,SSL);
по причине:
Неверный формат.
1 Вася Теркин
 
19.12.18
09:02
Вот сервис созданный в 1С

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"; xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/"; xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:tns="http://127.0.0.1"; xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsd1="http://127.0.0.1"; name="TestSAP" targetNamespace="http://127.0.0.1">;
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xs1="http://127.0.0.1"; targetNamespace="http://127.0.0.1"; elementFormDefault="qualified">
<xs:element name="MakeRecord">
<xs:complexType>
<xs:sequence>
<xs:element name="FieldString1" type="xs:string"/>
<xs:element name="FieldInt2" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MakeRecordResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="return" type="xs:string"/>
<xs:element name="Response" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="MakeRecordRequestMessage">
<part name="parameters" element="tns:MakeRecord"/>
</message>
<message name="MakeRecordResponseMessage">
<part name="parameters" element="tns:MakeRecordResponse"/>
</message>
<portType name="TestSAPPortType">
<operation name="MakeRecord">
<input message="tns:MakeRecordRequestMessage"/>
<output message="tns:MakeRecordResponseMessage"/>
</operation>
</portType>
<binding name="TestSAPSoapBinding" type="tns:TestSAPPortType">
<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>;
<operation name="MakeRecord">
<soapbind:operation style="document" soapAction="http://127.0.0.1#TestSAP:MakeRecord"/>;
<input>
<soapbind:body use="literal"/>
</input>
<output>
<soapbind:body use="literal"/>
</output>
</operation>
</binding>
<binding name="TestSAPSoap12Binding" type="tns:TestSAPPortType">
<soap12bind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>;
<operation name="MakeRecord">
<soap12bind:operation style="document" soapAction="http://127.0.0.1#TestSAP:MakeRecord"/>;
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>
</binding>
<service name="TestSAP">
<port name="TestSAPSoap" binding="tns:TestSAPSoapBinding">
<documentation>
<wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/"; conformsTo="http://ws-i.org/profiles/basic/1.1"/>;
</documentation>
<soapbind:address location="http://vkc-rms-app1/test4SAP/ws/ws1.1cws"/>;
</port>
<port name="TestSAPSoap12" binding="tns:TestSAPSoap12Binding">
<soap12bind:address location="http://vkc-rms-app1/test4SAP/ws/ws1.1cws"/>;
</port>
</service>
</definitions>
2 Вася Теркин
 
19.12.18
09:05
А вот SAP

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; xmlns:tns="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style">
<wsdl:documentation>
<sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl"/>;
</wsdl:documentation>
<wsp:UsingPolicy wsdl:required="true"/>
<wsp:Policy wsu:Id="BN_ZWS_SAP_TO_1C">
<wsaw:UsingAddressing xmlns:wsaw="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>;
<saptrnbnd:OptimizedXMLTransfer xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/"; uri="http://xml.sap.com/2006/11/esi/esp/binxml"; wsp:Optional="true"/>
<sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled>;
<wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy"; xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"; xmlns:wsa="http://www.w3.org/2005/08/addressing"; xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"/>;
</wsp:Policy>
<wsp:Policy wsu:Id="IF_zws_sap_to_1c">
<sapsession:Session xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/">;
<sapsession:enableSession>false</sapsession:enableSession>
</sapsession:Session>
<sapcentraladmin:CentralAdministration xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/"; wsp:Optional="true">
<sapcentraladmin:BusinessApplicationID>5C097146F704184FE1000000C0A8B823</sapcentraladmin:BusinessApplicationID>
</sapcentraladmin:CentralAdministration>
</wsp:Policy>
<wsp:Policy wsu:Id="OP_ZwsSapTo1c">
<sapcomhnd:enableCommit xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit>;
<sapblock:enableBlocking xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking>;
<saptrhnw05:required xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required>;
<saprmnw05:enableWSRM xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM>;
</wsp:Policy>
<wsdl:types>
<xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style">
<xsd:element name="ZwsSapTo1c">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Val1" type="xsd:unsignedByte" minOccurs="0"/>
<xsd:element name="Val2" type="xsd:short" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ZwsSapTo1cResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="xsd:unsignedByte"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="ZwsSapTo1c">
<wsdl:part name="parameters" element="tns:ZwsSapTo1c"/>
</wsdl:message>
<wsdl:message name="ZwsSapTo1cResponse">
<wsdl:part name="parameter" element="tns:ZwsSapTo1cResponse"/>
</wsdl:message>
<wsdl:portType name="zws_sap_to_1c">
<wsp:Policy>
<wsp:PolicyReference URI="#IF_zws_sap_to_1c"/>
</wsp:Policy>
<wsdl:operation name="ZwsSapTo1c">
<wsp:Policy>
<wsp:PolicyReference URI="#OP_ZwsSapTo1c"/>
</wsp:Policy>
<wsdl:input message="tns:ZwsSapTo1c"/>
<wsdl:output message="tns:ZwsSapTo1cResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ZWS_SAP_TO_1C" type="tns:zws_sap_to_1c">
<wsp:Policy>
<wsp:PolicyReference URI="#BN_ZWS_SAP_TO_1C"/>
</wsp:Policy>
<wsa:EndpointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">;
<wsa:ReferenceParameters/>
</wsa:EndpointReference>
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"; style="document"/>
<wsdl:operation name="ZwsSapTo1c">
<soap:operation soapAction="" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ZWS_SAP_TO_1C">
<wsdl:port name="ZWS_SAP_TO_1C" binding="tns:ZWS_SAP_TO_1C">
<soap:address location="http://saptst.mmm.uk:8000/sap/bc/srt/rfc/sap/zws_sap_to_1c/340/zws_sap_to_1c/zws_sap_to_1c"/>;
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
3 Вася Теркин
 
19.12.18
09:06
Порт открыт saptst.mmm.uk:8000 .
Вопрос:

1С может прочесть ключи типа
wsdl:service
вместо
service
Чем именно формат неверный?

В SOAP UI все открывается и работает.
4 Вася Теркин
 
19.12.18
09:09
Может есть какая библиотека стандартная или методика для web сервисов SAP из 1С? Где-то это описано?
5 niWhale
 
19.12.18
12:18
(4) Есть 2 варианта:
1. Заставить саперов реализовать генерацию правильной wsdl, которую может "съесть" 1С.

2. Сделать все самому. И тут тоже есть 2 варианта:
2.1 Получить wsdl, сделать xlt преобразование и "скормить" 1С
2.2 Сохранить wsdl в файл, удалить/закомментить все строки со словом policy. Прочитать 1С-кой файл, и подключиться к сервису.
6 Вася Теркин
 
19.12.18
12:55
(5) Огромное спасибо. А кроме policy нет препятствий?
7 Вася Теркин
 
19.12.18
13:00
8 Вася Теркин
 
19.12.18
13:08
Пишут:
"Работает нормально.
Не получилось передать массив структур с клиента, но с простыми данными работает (передает и получает оч. хорошо)."
но если xdto не будет работать это не очень хорошо...
9 niWhale
 
19.12.18
13:11
(6) А дальше зависит от полета мысли разработчика сервиса с точки зрения создания схемы xsd.

Были проблемы когда SAP не понимал что сгенерила 1С, и было наоборот.

Чем проще схема, тем лучше.
10 Вася Теркин
 
19.12.18
14:24
В
https://forum.infostart.ru/forum9/topic141326/
особенно впечатлило
укажите локальную ссылку: file://c:/MyFolder/MyFile.xsd

Ловкие, шельмы.
Будем пробовать
11 Вася Теркин
 
19.12.18
14:26
И
укажите локальную ссылку: file://c:/MyFolder/MyFile.wsdl
12 Вася Теркин
 
27.12.18
13:23
Можно ли объект XDTO или текстовый ДанныеXML упаковать в cdata стандартно? Притом какого типа должен быть параметр выходного вебсервиса? В http://www.w3.org/2001/XMLSchema я такого типа не видел, просто string задать?
13 palsergeich
 
27.12.18
13:26
Иногда можно побороть, а иногда приходилось собирать руками.
14 palsergeich
 
27.12.18
13:26
Наш любимый вендор не полностью реализовал возможности SOAP
15 Вася Теркин
 
27.12.18
13:34
Пока придумал так
    ОтветXDTO = НашАлгоритмПолученияОтветаВебсервиса();
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку(); // запись в строку
    ФабрикаXDTO.ЗаписатьXML(Запись, ОтветXDTO);
    ДанныеXML = Запись.Закрыть();
    ОтветCDATA  = «<![CDATA[<?xml version="1.0" encoding="UTF-8"?> » + ДанныеXML + «]]»;
    Возврат ОтветCDATA ;
16 Вася Теркин
 
27.12.18
13:39
Но тут не будет никакого контроля типов данных. Они ведь в меня будут тоже cdata кидать, моя ws ссылка будет безропотно принимать это как string, я от него буду отпиливать
пакетCDATA  = ПолучитьОтВебсервиса()
ДанныеXML = СтрЗаменить(пакетCDATA  , «<![CDATA[<?xml version="1.0" encoding="UTF-8"?> »,"");
ДанныеXML =  СтрЗаменить(ДанныеXML,«]]»,"");

Но тут ведь потом не факт что они правильно скинут данные. Когда у меня параметр типа XDTO мне их конвертировать не надо. Но тут весь контроль вручную
17 Вася Теркин
 
03.01.19
14:23
Несоответствие типов XDTO:
Тип '{http://www.w3.org/2001/XMLSchema}string' не найден

Сделал пакет XDTO, Директиву импорта добавил http://www.w3.org/2001/XMLSchema и несколько Типов значений.
Потом эти типы значений использовал в Типах объектов.
Потом сделал вебсервис. в Пакетах XDTO добавил свой пакет, но пакета http://www.w3.org/2001/XMLSchema в списке нет.
Как заставить его там появиться?
Во входных-выходных параметрах указал созданные типы данных. Пока на другой стороне со своего пакета фабрикой создаю все ок, но примитивные типы данных не дает. почему http://www.w3.org/2001/XMLSchema не выходит? Ее явно в списке пакетов XDTO конфигурации нет, может нужно откуда-то загрузить?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший