Обращение из 1С8 к вебсервисам можно делать разными способами.
Первое, что следует понимать, это то, что 1С посылает запросы (фактически это XML) файлы и получает ответы (обычно это так же XML, но не обязательно, т.к. программа вебпрограммиста отвечает так, как ей вздумается).
Работая с веб сервисом, придется обращаться к документации, которую написал вебразработчик, потому что без этого не получится подготовить адекватный запрос (XML). Примеры таких запросов с разработчика можно требовать без всяких задних мыслей (ответом станет нечто вроде такого). Имея в руках пример, уже можно его опробовать (пощупать):
strЗапрос равен
< ? xml version="1.0" encoding="UTF-8" standalone="no" ? >
< SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"
xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
< SOAP-ENV:Body>
< GetAirportsList xmlns="http://webservices.belavia.by/">
< Language xmlns:SOAPSDK4="http://webservices.belavia.by/">RU< / Language >
< / GetAirportsList>
< / SOAP-ENV:Body >
< / SOAP-ENV:Envelope >
(c текстом XML пришлось повозиться, т.к. не отображался. В кусочках типа < / SOAP-ENV:Envelope > пробелы не нужны)
oXMLHTTP = Новый COMОбъект("MSXML2.XMLHTTP");
стрURL="http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList";
oXMLHTTP.open("POST", стрURL, 0);
oXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
oXMLHTTP.setRequestHeader("SOAPAction", "http://webservices.belavia.by/GetAirportsList");
oXMLHTTP.send(strЗапрос);
Если oXMLHTTP.Status=200 тогда
xmlВыборкаAirport = oXMLHTTP.responseXML.SelectNodes("//Airport");
Для чКК=1 По xmlВыборкаAirport.Length Цикл
xmlВеткаAirport = xmlВыборкаAirport.item(чКК-1);
спВыбора.Добавить(xmlВеткаAirport.getAttribute("IATA"),"["+xmlВеткаAirport.getAttribute("IATA")+"] "+ xmlВеткаAirport.getAttribute("Name"))
КонецЦикла;
КонецЕсли;
Как не трудно заметить, для обращения к сервису используется объект MSXML2.XMLHTTP. И нету совсем упоминания о сепециальных механизмах. Этот способ отличается гибкостью.
Однако самостоятельное составление запроса (XML-файла) крайне лениво, и хочется как то упростить процесс. Для этого понадобится описание сервиса (к примеру, такое). Это описание потребует от нас некоторого осмысления, в результате которого получится следующий фрагмент:
SOAPN = Новый COMОбъект("MSSoap.SoapClient30");
SOAPN.MSSOAPInit("http://86.57.245.235/TimeTable/Service.asmx?WSDL","OnlineTimeTable", "OnlineTimeTableSoap");
comSafeArray=SOAPN.GetAirportsList("RU");
Для чК=comSafeArray.GetLowerBound(0) по comSafeArray.GetUpperBound(0) Цикл
элемент=comSafeArray.GetValue(чК);
Если элемент.Length=2 тогда
спВыбора.Добавить(элемент.item(0).value,"["+элемент.item(0).value+"] "+ элемент.item(1).value);
ИначеЕсли элемент.Length=1 тогда
спВыбора.Добавить(элемент.item(0).value,"["+элемент.item(0).value+"] ");
КонецЕсли;
КонецЦикла;
На этот раз использован объект MSSoap.SoapClient30. И как известно, он совсем сырой (или, по крайней мере, я не умею это варить). Сложные и путанные строки XML превратились в вызов comSafeArray=SOAPN.GetAirportsList("RU").
Однако 1С пошло на встречу своим верным "друзьям" и наделало разные объекты. Код на 1С8.2 похож на это:
WSОпределение = Новый WSОпределения("http://86.57.245.235/TimeTable/Service.asmx?WSDL");
Service = Новый WSПрокси(WSОпределение, "http://webservices.belavia.by/", "OnlineTimeTable", "OnlineTimeTableSoap" ); cписокXDTO=Service.GetAirportsList("RU").ПолучитьСписок("Airport");
ВсегоАэропортов=cписокXDTO.Количество();
Для чК=0 по ВсегоАэропортов-1 Цикл
обАэропорт=cписокXDTO.Получить(чК);
спВыбора.Добавить(обАэропорт.IATA,"["+обАэропорт.IATA+"] "+ обАэропорт.name);
КонецЦикла;
Можно даже положить в конфигурацию описание сервиса, и тогда первые две строки можно заменить на:
Service=WSСсылки.WSСсылка1.СоздатьWSПрокси("http://webservices.belavia.by/", "OnlineTimeTable", "OnlineTimeTableSoap" );
Вот так не хитро и не кривляясь можно работать с вебсервисами.