В платформе 1С 7.7 отсутствует нативный механизм работы с веб-сервисами (такой как WSПрокси в 1С 8), поэтому любые взаимодействия с внешними SOAP-сервисами реализуются с помощью внешних COM-объектов. В этом материале разберем, как правильно использовать SoapUI для подготовки и как написать код в 1С 7.7 для отправки SOAP-запросов и разбора ответа.
Важно четко понимать разницу между инструментами. SoapUI — это программа для разработки, отладки и тестирования SOAP/REST сервисов, а не библиотека для встраивания в код 1С. Мы используем SoapUI на подготовительном этапе:
xmlns) и заголовок SOAPAction.Рассмотрим наиболее надежный подход, который работает на любых современных операционных системах. Вместо использования устаревшего компонента SOAP Toolkit мы отправляем прямой POST-запрос через WinHttp.WinHttpRequest.5.1, а полученный ответ обрабатываем через MSXML2.DOMDocument.
Разберем по шагам пример создания и отправки SOAP-запроса из 1С 7.7:
// Создаем объект для отправки HTTP-запросов
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("POST", "https://example.com/soap-service", 0);
// Передаем обязательные заголовки
WinHttp.SetRequestHeader("Content-Type", "text/xml; charset=utf-8");
WinHttp.SetRequestHeader("SOAPAction", "http://example.com/soap-service/GetCustomerData");
// Формируем текст SOAP-конверта (SOAP Envelope)
ТекстЗапроса = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:web=""http://example.com/soap-service"">" +
"<soapenv:Header/>" +
"<soapenv:Body>" +
" <web:GetCustomerData>" +
" <web:CustomerID>12345</web:CustomerID>" +
" </web:GetCustomerData>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
// Отправляем запрос на сервер
WinHttp.Send(ТекстЗапроса);
// Проверяем HTTP-статус ответа
Если WinHttp.Status = 200 Тогда
// Инициализируем XML-документ для разбора ответа
XMLDoc = СоздатьОбъект("MSXML2.DOMDocument");
XMLDoc.async = 0;
XMLDoc.loadXML(WinHttp.ResponseText);
// Получаем нужный узел
УзелРезультата = XMLDoc.selectSingleNode("//GetCustomerDataResult");
Если ПустоеЗначение(УзелРезультата) = 0 Тогда
Сообщить("Ответ от веб-сервиса: " + УзелРезультата.text);
КонецЕсли;
Иначе
Сообщить(" Ошибка при вызове сервиса: " + WinHttp.Status + " " + WinHttp.StatusText);
КонецЕсли;
Обратите внимание: так как 1С 7.7 работает в кодировке Windows-1251, а сторонние веб-сервисы обычно ожидают UTF-8, для перекодирования строк при необходимости можно использовать COM-объект ADODB.Stream.
Ранее для автоматического связывания с WSDL-схемой применялся объект MSSOAP.SoapClient30 (Microsoft SOAP Toolkit):
ВебСервис = СоздатьОбъект("MSSOAP.SoapClient30");
ВебСервис.MSSoapInit("http://example.com/service.wsdl");
Результат = ВебСервис.GetCustomerData(12345);
Ограничение: данный компонент устарел и давно снят с поддержки. На современных ОС (Windows 10/11, Windows Server 2012+) он может вызывать ошибки инициализации WSDL, не поддерживает современные протоколы шифрования TLS 1.2/1.3 и сложные типы данных (массивы, специфические XSD-схемы). Поэтому рекомендуется использовать direct-HTTP отправку через WinHttp.
Проанализируем частые ошибки при работе с SOAP-сервисами в 1С 7.7:
SOAPAction. В большинстве SOAP 1.1 сервисов этот заголовок является обязательным, а его значение должно точно совпадать с описанием в WSDL.WScript.Shell.