Интеграции в 1С

Файл описания web-сервиса (WSDL) в 1С: получаем, читаем, подключаем

Коротко

WSDL (Web Services Description Language) — XML-файл, описывающий SOAP-сервис: набор операций, их параметры и типы. В 1С этот файл описания web-сервиса нужен, чтобы построить WSПрокси и вызвать операции внешнего сервера как обычные методы объекта.

Получить WSDL внешнего сервиса — открыть его URL с параметром ?wsdl. Получить WSDL опубликованного web-сервиса 1С — обратиться по адресу <publish>/ws/<ИмяСервиса>?wsdl. Подключить в 1С — либо статической WS-ссылкой в конфигураторе (Общие → WS-ссылки), либо динамически через Новый WSОпределения(URL, Пользователь, Пароль).

Что такое файл описания web-сервиса (WSDL) в 1С

WSDL — это XML-документ по стандарту W3C, который описывает контракт SOAP-сервиса: какие операции он предоставляет, какие параметры они принимают, какие типы данных возвращают и по какому адресу (endpoint) с ним общаться. В терминах 1С этот файл описания web-сервиса — «карта», по которой платформа строит прокси-объект и превращает удалённые операции в вызовы методов языка 1С.

WSDL используется вместе с SOAP (Simple Object Access Protocol) — протоколом обмена XML-сообщениями поверх HTTP. Именно поэтому web-сервисы 1С — это SOAP, а не REST. Для REST в 1С есть отдельный механизм HTTP-сервисов (см. раздел «web-сервис или HTTP-сервис»).

Ключевые сущности внутри WSDL, с которыми работает 1С:

  • types — описание типов данных (XSD-схемы), из них 1С строит ФабрикаXDTO.
  • message — сообщения запроса и ответа операций.
  • portType и operation — набор операций сервиса.
  • binding — привязка операций к транспорту (SOAP 1.1 или 1.2).
  • service и port — адрес точки подключения (endpoint).

Где взять WSDL внешнего SOAP-сервиса

Практически у всех SOAP-сервисов WSDL отдаётся по URL самого сервиса с параметром ?wsdl. Классические примеры:

// Внешний сервис поставщика
https://service.example.com/api/soap?wsdl

// Сервис Банка России (публичный SOAP)
https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL

Проверьте доступность WSDL простым GET-запросом из браузера или curl: должен вернуться XML, начинающийся с <wsdl:definitions> или <definitions>. Если сервис отвечает HTML-страницей входа — WSDL закрыт авторизацией, и понадобится передавать Пользователь/Пароль уже на этапе подключения из 1С.

Сохраните WSDL локально (например, service.wsdl) на этапе разработки — это ускорит анализ структуры и позволит подключать статическую WS-ссылку из файла, если внешний сервер временно недоступен.

Файл описания опубликованного web-сервиса 1С

Когда вы публикуете свой web-сервис из конфигурации 1С через веб-сервер (Apache/IIS), платформа автоматически генерирует его WSDL. Адрес получения файла описания web-сервиса:

// Общий шаблон
http(s)://<хост>/<publish>/ws/<ИмяWebСервиса>?wsdl

// Пример: база опубликована как /demo, сервис называется ObmenDannymi
https://erp.example.com/demo/ws/ObmenDannymi?wsdl

Имя web-сервиса берётся из свойства Имя публикации объекта метаданных WebСервис (не путайте с именем в конфигураторе). Если вместо WSDL приходит ошибка 404 — проверьте, что сервис отмечен в файле публикации default.vrd, а сама база доступна по указанному publish-пути.

Один и тот же файл описания web-сервиса 1С отдаёт и для тонкого, и для толстого клиента: это универсальный контракт. По нему любой SOAP-клиент — другая база 1С, Python, Java, .NET — сможет вызвать опубликованные операции.

WS-ссылки в 1С: статические и динамические

В 1С есть два способа подключить внешний SOAP-сервис по его WSDL.

Статическая WS-ссылка добавляется в конфигураторе: Общие → WS-ссылки → Добавить. В диалоге указывается URL WSDL, платформа скачивает файл описания web-сервиса, разбирает его и сохраняет структуру внутри конфигурации. Дальше сервис доступен как WSСсылки.<ИмяСсылки>. Плюс — типы и операции видны в контекстной подсказке; минус — при изменении контракта нужно обновлять WS-ссылку и выпускать релиз конфигурации.

Динамическое подключение — на лету, без правки конфигурации. Через объект WSОпределения 1С загружает WSDL по URL прямо из кода и строит прокси в оперативной памяти. Удобно для интеграций, где URL и креды хранятся в справочниках.

WSОпределения: загружаем WSDL программно

WSОпределения — объект, который читает файл описания web-сервиса по URL и отдаёт разобранное описание сервисов, операций и типов. Это первый шаг для динамического подключения:

// Динамическое подключение внешнего SOAP-сервиса по WSDL
URL_WSDL = "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";

Определения = Новый WSОпределения(URL_WSDL);

// Если сервис требует Basic Auth — передаём Пользователь/Пароль:
// Определения = Новый WSОпределения(URL_WSDL, "user", "pass");

Для Каждого Сервис Из Определения.Сервисы Цикл
    Сообщить("Сервис: " + Сервис.Имя);
КонецЦикла;
Новый WSОпределения
МестоположениеWSDLURL или путь к файлу описания
ИмяПользователядля Basic Auth при загрузке WSDL
Парольдля Basic Auth
ИнтернетПроксипрокси-сервер
Таймауттаймаут получения WSDL, сек
ЗащищенноеСоединениеOpenSSL-параметры TLS
ИспользоватьАутентификациюОСKerberos/NTLM
WSОпределения

Из полученных Определения берутся имя сервиса, URI пространства имён и имя точки подключения — их нужно передать в WSПрокси. Если сервис публичен — четыре первых параметра конструктора WSОпределения можно опустить.

WSПрокси: вызываем операции сервиса

После загрузки WSDL создаётся прокси, у которого операции сервиса становятся методами объекта. Конструктор принимает объект WSОпределения и координаты сервиса внутри WSDL:

URL_WSDL   = "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";
URI        = "http://web.cbr.ru/";
ИмяСервиса = "DailyInfo";
ИмяПорта   = "DailyInfoSoap";

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

// Basic Auth при вызовах (если сервис требует авторизации)
Прокси.Пользователь = "integration";
Прокси.Пароль       = "***";
Прокси.Таймаут      = 30;

// Вызов операции сервиса — как обычного метода объекта
Курс = Прокси.GetCursOnDate(ТекущаяДата());
Сообщить(Курс);
Новый WSПрокси
Определениеобъект WSОпределения
URIПространстваИменСервисаtargetNamespace из WSDL
ИмяСервисаэлемент service в WSDL
ИмяТочкиПодключенияэлемент port (endpoint)
ИнтернетПроксипрокси-сервер
Таймауттаймаут вызовов, сек
ЗащищенноеСоединениеOpenSSL-параметры TLS
Местоположениепереопределение адреса endpoint
ИспользоватьАутентификациюОСKerberos/NTLM
WSПрокси

Если операция принимает сложные типы, их нужно создавать через фабрику XDTO прокси — Прокси.ФабрикаXDTO.Создать(...). Для этого пригодятся типы, описанные в секции types WSDL: их имена совпадают с XSD-именами.

Статическая WS-ссылка: подключение из конфигуратора

Если контракт стабильный и вы хотите видеть операции в подсказке кода, добавьте статическую WS-ссылку в конфигурации. После этого прокси создаётся одной строкой через менеджер WS-ссылок:

// В конфигураторе создана WS-ссылка "CbrDailyInfo" на WSDL Банка России
Прокси = WSСсылки.CbrDailyInfo.СоздатьWSПрокси(
    "http://web.cbr.ru/", // URI пространства имён
    "DailyInfo",          // Имя сервиса
    "DailyInfoSoap"       // Имя порта (endpoint)
);

Прокси.Пользователь = "";
Прокси.Пароль       = "";
Прокси.Таймаут      = 30;

Курс = Прокси.GetCursOnDate(ТекущаяДата());
Сообщить(Курс);
WSСсылки.<Имя>.СоздатьWSПрокси
URIПространстваИменСервисаtargetNamespace
ИмяСервисаservice из WSDL
ИмяПортаport (endpoint)
ИнтернетПроксипрокси-сервер
Таймауттаймаут вызовов, сек
ЗащищенноеСоединениеOpenSSL-параметры TLS
Местоположениепереопределение адреса endpoint
ИспользоватьАутентификациюОСKerberos/NTLM
WSПрокси

Если у сервиса всего один service и один port, платформа подставит их автоматически — параметры можно передать пустой строкой. Обновление структуры сервиса делается через контекстное меню WS-ссылки → Обновить из WSDL, после чего конфигурация требует повторной публикации.

Свежий актуальный WSDL опубликованного web-сервиса 1С всегда можно посмотреть по URL <publish>/ws/<Имя>?wsdl прямо в браузере — удобно сверять контракт после доработки конфигурации-источника.

Аутентификация SOAP и защищённые соединения

Самый распространённый способ авторизации SOAP-сервисов — HTTP Basic Auth. В 1С логин и пароль задаются двумя путями:

  • для загрузки WSDL — параметрами конструктора WSОпределения(URL, Пользователь, Пароль);
  • для вызовов операций — свойствами Прокси.Пользователь и Прокси.Пароль.

Для HTTPS-сервисов задавайте параметр ЗащищенноеСоединение объектом Новый ЗащищенноеСоединениеOpenSSL(...) — так можно передать клиентский сертификат и настроить проверку серверного. Для Kerberos/NTLM в корпоративной сети используйте ИспользоватьАутентификациюОС = Истина.

Если сервер требует WS-Security (подпись/шифрование SOAP-заголовков), стандартных средств WSПрокси недостаточно: заголовки формируют вручную через HTTPЗапрос или используют посреднический сервис. Для большинства бизнес-задач хватает Basic Auth + TLS.

Web-сервис или HTTP-сервис: что выбрать в 1С

В 1С есть два разных механизма публикации интеграций, и WSDL относится только к одному из них:

  • Web-сервис (SOAP) — контракт описан в WSDL, обмен — XML-конверты SOAP. Подходит для строго типизированных интеграций между корпоративными системами, для обмена «1С ↔ 1С», когда важна согласованная схема XDTO.
  • HTTP-сервис (REST) — произвольные HTTP-методы (GET/POST/PUT/DELETE), тело в JSON или XML, без WSDL. Удобнее для интеграции с современными веб-приложениями и мобильными клиентами, проще отлаживать через curl/Postman.

Если вы потребляете внешний API — выбор определяет поставщик. Если публикуете свой сервис — для интеграций «1С ↔ 1С» и корпоративных потребителей чаще выбирают web-сервис (SOAP + WSDL), для веба и мобильных клиентов — HTTP-сервис.

Частые ошибки при работе с WSDL и WSПрокси в 1С

  • WSDL недоступен или требует авторизации. Проверьте, что URL отдаёт именно XML-контракт, а не HTML логина. При необходимости передайте Пользователь/Пароль в конструктор WSОпределения.
  • Неверные URI, имя сервиса или имя порта. Эти три параметра берутся строго из WSDL: targetNamespace элемента definitions, имя элемента service, имя элемента port. Опечатка — и прокси не соберётся.
  • Кодировка ответа. Если сервер отдаёт данные в 1251, а WSDL заявляет UTF-8, вернутся «крокозябры». Проблема на стороне сервера, но обходится чтением сырого ответа через HTTPСоединение.
  • Разные версии SOAP. Один WSDL может содержать привязки для SOAP 1.1 и SOAP 1.2 (два разных port). Явно указывайте имя нужного порта в конструкторе WSПрокси, иначе вызов может уйти по неподдерживаемой версии.
  • Устаревшая WS-ссылка. После изменения контракта на сервере статическая WS-ссылка в конфигураторе не обновляется автоматически — её нужно обновить из WSDL и перевыпустить релиз.
  • Таймаут по умолчанию. Не оставляйте Таймаут = 0 для внешних вызовов — при недоступности сервиса сеанс 1С «зависнет» надолго. Задавайте разумное значение (15-60 сек) и обрабатывайте исключение при обрыве.
  • Сложные XDTO-параметры собирают руками. Для параметров-объектов используйте только Прокси.ФабрикаXDTO — так соблюдаются пространства имён и обязательные поля из XSD.

Частые вопросы про WSDL и web-сервисы 1С

Как быстро получить WSDL опубликованного web-сервиса 1С?

Откройте в браузере адрес <publish>/ws/<ИмяWebСервиса>?wsdl, где publish — путь публикации базы на веб-сервере, а ИмяWebСервиса — имя публикации, заданное у объекта метаданных «WebСервис». Должен вернуться XML с корневым элементом wsdl:definitions.

Чем WSОпределения отличается от статической WS-ссылки?

WSОпределения загружает файл описания web-сервиса по URL в оперативной памяти прямо во время работы — удобно, когда URL или креды хранятся в справочнике. Статическая WS-ссылка сохраняется в конфигурации на этапе разработки: операции видны в подсказке, но контракт «замораживается» до следующего обновления.

Обязательно ли использовать WSПрокси или можно вызвать SOAP через HTTPСоединение?

Можно и через HTTPСоединение, вручную собирая SOAP-конверт. Но WSПрокси сам разбирает WSDL, строит XDTO-типы и делает вызовы типизированными — это заметно надёжнее, чем формировать XML руками, и покрывает подавляющее большинство сценариев интеграции.