Как использовать SoapUI и настраивать работу с веб-сервисами SOAP в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В платформе 1С 7.7 отсутствует нативный механизм работы с веб-сервисами (такой как WSПрокси в 1С 8), поэтому любые взаимодействия с внешними SOAP-сервисами реализуются с помощью внешних COM-объектов. В этом материале разберем, как правильно использовать SoapUI для подготовки и как написать код в 1С 7.7 для отправки SOAP-запросов и разбора ответа.

Разделение ролей: SoapUI и 1С 7.7

Важно четко понимать разницу между инструментами. SoapUI — это программа для разработки, отладки и тестирования SOAP/REST сервисов, а не библиотека для встраивания в код 1С. Мы используем SoapUI на подготовительном этапе:

  1. Импортируем WSDL-ссылку стороннего веб-сервиса в SoapUI.
  2. Генерируем готовый XML-шаблон запроса (SOAP Envelope) и тестируем отправку данных.
  3. Выясняем точные имена пространств (xmlns) и заголовок SOAPAction.
  4. Сформированный XML-запрос копируем и подставляем в код 1С 7.7 как текстовый шаблон для заменяемых параметров.

Способ 1. Использование WinHttp.WinHttpRequest.5.1 и MSXML2.DOMDocument (Рекомендуемый)

Рассмотрим наиболее надежный подход, который работает на любых современных операционных системах. Вместо использования устаревшего компонента 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.

Способ 2. Использование компонента MSSOAP.SoapClient30

Ранее для автоматического связывания с 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:

  1. Ошибка 400 Bad Request / 500 Internal Server Error: Выясним, указан ли заголовок SOAPAction. В большинстве SOAP 1.1 сервисов этот заголовок является обязательным, а его значение должно точно совпадать с описанием в WSDL.
  2. Проблемы с защищенным соединением HTTPS (SSL/TLS): Если встроенный клиент Windows не может установить безопасное соединение с новым сервисом, поддерживающим только TLS 1.2+, отправку запроса с XML-файлом можно перегрузить через утилиту cURL и запуск WScript.Shell.
← На главную