Как подключиться к веб-сервису через HTTP или HTTPS из 1С:Предприятие?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современной разработке на платформе 1С:Предприятие 8 часто возникает необходимость интеграции с внешними информационными системами. Одним из наиболее надежных способов обмена данными является использование веб-сервисов (SOAP). Если у вас есть адрес WSDL, вы уже имеете «карту» взаимодействия с сервисом. Давайте подробно разберем, как превратить эти данные в работающий программный код.

Понимание основ: что такое WSDL и с чего начать?

Прежде чем писать код, проанализируем входные данные. Ссылка формата http://ws.kakoito-service//abrakadabra.asmx?wsdl ведет к XML-файлу, который описывает возможности сервиса: какие методы можно вызывать, какие параметры передавать и что сервис вернет в ответ. 1С умеет «читать» этот файл и автоматически создавать объекты для работы с ним.

Существует два принципиально разных подхода к реализации подключения: статический и динамический. Рассмотрим каждый из них подробнее, чтобы вы могли выбрать наиболее подходящий для вашей задачи.

Способ №1: Статическое подключение через WS-ссылки

Этот метод мы рекомендуем использовать, когда структура веб-сервиса стабильна и не меняется часто. Основное преимущество здесь — простота разработки и поддержка контекстных подсказок в конфигураторе.

  1. Откроем дерево конфигурации и найдем ветку Общие — WS-ссылки.
  2. Добавим новую WS-ссылку, вставив URL к вашему WSDL-описанию в появившееся поле.
  3. Платформа самостоятельно импортирует структуру. В дереве появятся типы объектов и методы сервиса.

Разберем пример кода для обращения к такому сервису. Предположим, мы назвали ссылку НашВнешнийСервис:


// Создаем прокси-объект для вызова методов
Прокси = WSСсылки.НашВнешнийСервис.СоздатьWSПрокси("ИмяПространстваИмен", "ИмяСервиса", "ИмяПорта");

// Теперь можно вызывать метод сервиса напрямую
Результат = Прокси.ПолучитьДанныеПоНомеру(123);

Важно: имена пространства имен, сервиса и порта можно подсмотреть в свойствах созданной WS-ссылки в конфигураторе. Плюс этого метода в том, что 1С сразу «понимает» сложные типы данных (XDTO), которые возвращает сервис.

Способ №2: Динамическое подключение через WSОпределения

Выясним ситуацию, когда адрес сервиса может меняться (например, для тестовой и рабочей базы) или когда мы не хотим вносить изменения в структуру метаданных. В этом случае мы используем объект WSОпределения.

Рассмотрим пошагово процесс программного создания подключения:


// Шаг 1: Получаем описание сервиса "на лету"
URL_WSDL = "http://ws.kakoito-service//abrakadabra.asmx?wsdl";
Определения = Новый WSОпределения(URL_WSDL, "Логин", "Пароль", 60); // 60 секунд таймаут

// Шаг 2: Создаем прокси
// Эти параметры (URI, ИмяСервиса) можно найти в конце WSDL-файла в теге <wsdl:service>
URI_Пространства = "http://tempuri.org/"; 
ИмяСервиса = "AbrakadabraService";
ИмяПорта = "AbrakadabraServiceSoap";

Прокси = Новый WSПрокси(Определения, URI_Пространства, ИмяСервиса, ИмяПорта);

// Шаг 3: Вызываем метод
Ответ = Прокси.ExecuteMethod(Параметр1);

Этот способ более гибкий, так как позволяет хранить настройки подключения в константах или справочниках без переписывания конфигурации.

Особенности работы по протоколу HTTPS

Проанализируем нюанс, упомянутый в вашем вопросе: наличие доступа через HTTPS. При работе с защищенным соединением 1С должна доверять сертификату сервера. Если сертификат выдан доверенным центром, достаточно настроить объект защищенного соединения.

Посмотрим на пример настройки безопасного канала:


// Создаем настройки для OpenSSL, используя сертификаты ОС Windows
Защита = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровWindows());

// Передаем защиту в конструктор определений
Определения = Новый WSОпределения(URL_WSDL, , , , Защита);
Прокси = Новый WSПрокси(Определения, URI_Пространства, ИмяСервиса, ИмяПорта, , , Защита);

Если сервер использует самоподписанный сертификат, его необходимо предварительно установить в хранилище сертификатов на сервере 1С (под пользователем, от имени которого работает служба usr1cv8).

Работа с данными через XDTO

Веб-сервисы часто обмениваются не простыми строками, а сложными структурами XML. В 1С они преобразуются в объекты XDTO. Разберем ситуацию: вам нужно отправить в сервис объект «Контрагент» со списком адресов.

Для создания таких объектов мы используем фабрику XDTO:


// Получаем тип объекта из определений сервиса
ТипКонтрагента = Прокси.ФабрикаXDTO.Тип("http://tempuri.org/", "Counterparty");

// Создаем экземпляр объекта
НовыйКонтрагент = Прокси.ФабрикаXDTO.Создать(ТипКонтрагента);
НовыйКонтрагент.Name = "ООО Ромашка";
НовыйКонтрагент.INN = "7701234567";

// Теперь передаем созданный объект в метод сервиса
Результат = Прокси.SaveCounterparty(НовыйКонтрагент);

Инструменты для отладки: SoapUI и Postman

Прежде чем приступать к кодингу в 1С, крайне полезно проверить работоспособность сервиса внешними средствами. Рассмотрим стандарт индустрии — SoapUI. Вы создаете новый проект, указываете ссылку на WSDL, и программа автоматически генерирует запросы со всеми возможными полями. Если запрос успешно проходит в SoapUI, значит, проблема в коде 1С. Если не проходит и там — ищите ошибку в параметрах или правах доступа на стороне сервиса.

Типичные ошибки и способы их решения

Проанализируем распространенные сложности, с которыми сталкиваются разработчики:

  1. Несоответствие пространства имен: Если вы укажете неверный URI в конструкторе WSПрокси, 1С выдаст ошибку «Сервис не найден». Всегда копируйте эти значения напрямую из WSDL.
  2. Таймауты: При передаче больших объемов данных или выполнении сложных расчетов на стороне сервиса, соединение может обрываться. Всегда указывайте таймаут явно (параметр Таймаут в WSОпределения).
  3. Кэширование: 1С может кэшировать описание WSDL. Если на стороне сервиса добавили новый метод, а вы его не видите — попробуйте перезапустить сеанс или очистить временные файлы.
  4. Аутентификация: Если сервис требует базовую авторизацию, передавайте логин и пароль в конструктор WSОпределения. Для более сложных схем (например, OAuth или передача токена в заголовках) потребуется использовать объект HTTPЗапрос для формирования заголовков вручную.

Таким образом, подключение к веб-сервису в 1С — это структурированный процесс, требующий внимательного отношения к типам данных и настройкам безопасности. Начните с проверки WSDL в браузере, протестируйте методы в SoapUI, и только после этого приступайте к реализации логики в 1С.

← На главную