Веб-сервисы и WSDL в 1С: описание, подключение, типовые сбои

· 9 мин

Содержание

WSDL в 1С — это XML-файл, в котором веб-сервис описывает себя: какие операции у него есть, какие параметры они принимают и что возвращают. Платформа читает этот файл, строит по нему «прокси» и дальше вы вызываете удалённый сервис как обычную процедуру в коде.

Типичная ситуация: банк или контрагент присылает письмо «наш сервис работает по SOAP, вот адрес, ?wsdl в конце». Что с этим делать в 1С, как не запутаться в пространствах имён и почему подключение падает с ошибкой — разбираем по порядку.

Что даёт WSDL и зачем он платформе

Без описания вы бы вручную собирали SOAP-конверт: теги, пространства имён, типы. С WSDL платформа делает это сама.

В файле лежат четыре вещи:

  • 📌 Типы данных — схема XSD: какие структуры и поля участвуют в обмене.
  • 📌 Сообщения и операции — список методов, например ПолучитьСтатус или ОтправитьДокумент.
  • 📌 Привязка (binding) — как именно вызывать: стиль SOAP и формат кодирования.
  • 📌 Адрес (endpoint) — URL, по которому сервис принимает запросы.

Из этого платформа формирует объект WSПрокси. Его методы повторяют операции сервиса, а типы данных превращаются в объекты XDTO.

Если WSDL недоступен, сервис всё равно можно вызвать — формировать XML придётся вручную через HTTPЗапрос. Но это в разы дольше и ломается при любом изменении схемы.

SOAP, REST и WSDL: как это связано

WSDL относится только к SOAP-сервисам. У REST-интерфейсов нет обязательного машиночитаемого описания такого вида, поэтому «подключить WSDL к REST» нельзя.

SOAP + WSDLREST (HTTP-сервис)
Формат обменаXML-конвертчаще JSON
ОписаниеWSDL, генерируется автоматическидокументация на словах или OpenAPI
Как вызывать в 1СWSПроксиHTTPСоединение + HTTPЗапрос
Типизациястрогая, через XDTOсвоя, разбор JSON вручную
Где встречаетсябанки, госсистемы, старые корпоративные шинысовременные API, маркетплейсы

Правило простое: есть WSDL — берите прокси. Есть только описание методов в PDF и адреса вида /api/v1/orders — это REST, и работать с ним нужно через HTTP-запросы.

В обратную сторону то же самое. 1С умеет публиковать свои веб-сервисы (объект конфигурации «Веб-сервис»), и WSDL для них платформа создаёт сама.

Где взять WSDL для интеграции

Три основных источника.

1. Ссылка у разработчика сервиса

Чаще всего это адрес со стандартным окончанием: https://example.org/service?wsdl или ...?singleWsdl. Откройте его в браузере. Должен показаться XML, начинающийся с тега definitions (иногда с префиксом wsdl:). Если видите страницу входа или HTML с ошибкой, до платформы документ тоже не дойдёт в нужном виде.

2. Файл на диске

Некоторые организации присылают описание вложением. Это допустимо, но проверьте, что файл не ссылается на внешние XSD через относительные пути: платформа не найдёт схему, которой нет рядом.

3. Собственная публикация 1С

Если сервис делает другая база 1С, WSDL доступен по адресу вида http://сервер/имя_базы/ws/ИмяСервиса?wsdl. Для этого веб-сервис должен быть создан в конфигурации и опубликован на веб-сервере через окно публикации в Конфигураторе или администрирование сервера.

Адрес внутри WSDL (тег address) может содержать внутреннее имя сервера, недоступное из вашей сети. Тогда файл скачается, а вызов зависнет. Сверяйте этот адрес с тем, что реально открывается с вашего компьютера.

Как подключить WSDL в 1С: пошаговая инструкция

Рассмотрим способ через WS-ссылку — он нужен, когда сервис постоянный и подключается из конфигурации. Требуется Конфигуратор.

Шаг 1. Создайте WS-ссылку

  1. Откройте Конфигуратор и дерево конфигурации.
  2. В ветке «Общие» найдите «WS-ссылки» и добавьте новую.
  3. Нажмите «Загрузить WSDL» (или аналогичную кнопку) и укажите URL либо файл.
  4. Введите логин и пароль, если сервис закрыт авторизацией.
  5. Сохраните. Платформа загрузит определения и создаст пакеты XDTO.

Имя WS-ссылки задайте осмысленное, без пробелов: в коде оно станет частью выражения.

Шаг 2. Получите прокси в коде

Прокси = WSСсылки.МойСервис.СоздатьWSПрокси(
    "http://namespace.example.org/",  // пространство имён сервиса
    "МойСервис",                      // имя сервиса
    "МойСервисSoap");                 // имя точки подключения
Прокси.Пользователь = "login";
Прокси.Пароль = "password";

Все три строки в СоздатьWSПрокси берутся из самого WSDL: пространство имён — атрибут targetNamespace, имя сервиса — тег service, точка подключения — тег port. Копируйте их из файла, а не набирайте по памяти.

Шаг 3. Вызовите операцию

Результат = Прокси.ПолучитьСтатус("12345");

Если метод принимает структуру, создайте объект нужного типа через фабрику XDTO:

ТипЗапроса = Прокси.ФабрикаXDTO.Тип("http://namespace.example.org/", "StatusRequest");
Запрос = Прокси.ФабрикаXDTO.Создать(ТипЗапроса);
Запрос.Номер = "12345";
Результат = Прокси.ПолучитьСтатус(Запрос);

Шаг 4. Подключение без WS-ссылки

Для разовых задач, обработок и тестов WS-ссылка не нужна. Платформа умеет читать описание «на лету» через объект WSОпределения:

Определения = Новый WSОпределения("https://example.org/service?wsdl", "login", "password");
Прокси = Новый WSПрокси(Определения, "http://namespace.example.org/", "МойСервис", "МойСервисSoap");

Минус: описание скачивается при каждом создании. Если сервис медленный, кэшируйте объект Определения в переменной модуля.

Проверка перед первым вызовом
Выполнено: 0 / 4

Какие ошибки бывают и что с ними делать

Самые частые сбои — не в коде 1С, а в сети и в самом описании.

Диагностика: выберите симптом

Как отладить запрос

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

Где WSDL применяют на практике

Интеграция по SOAP живёт там, где важна строгая схема данных.

  • 🏦 Банки. Часть банков принимает платёжные поручения и отдаёт выписки через SOAP-шлюз. Описание даёт сам банк, обычно после заключения договора.
  • 🏛 Государственные системы. Для обмена с ведомствами многие сервисы построены на SOAP и схемах XSD. Точные адреса и версии формата берите в документации оператора: они меняются.
  • 📄 Обмен документами. Некоторые операторы ЭДО дают программный интерфейс по SOAP. Но чаще сегодня встречается готовый модуль в конфигурации, и вручную ничего подключать не нужно.
  • 🔁 Обмен между базами 1С. Классический пример: одна база публикует веб-сервис, вторая подключает WS-ссылку и забирает данные. Подходит для интеграции при невозможности настроить обычный обмен.
  • 🛒 Склад, логистика, учёт заказов. Внутренние системы предприятия, где ИТ-отдел заранее выпускает WSDL.

Прежде чем писать свой код, проверьте, нет ли в вашей конфигурации готового механизма для нужного оператора. Он обновляется вместе с релизом и поддерживается разработчиком.

Когда 1С сама выступает сервисом

Бывает наоборот: данные нужно отдать наружу. Тогда в конфигурации создают объект «Веб-сервис» и описывают его операции. Алгоритм у такой работы короткий:

  1. В Конфигураторе добавьте веб-сервис и задайте имя и пространство имён. Пространство имён лучше выбрать постоянное, иначе клиенты потеряют связь при переименовании.
  2. Добавьте операции и укажите для каждой тип возвращаемого значения и параметры. Типы берутся из XDTO-пакетов или простых типов.
  3. Напишите обработчики операций в модуле веб-сервиса.
  4. Опубликуйте базу на веб-сервере и включите в публикации нужный веб-сервис.
  5. Откройте адрес ?wsdl и проверьте, что описание показывается без ошибок.

Дальше этот файл вы отдаёте партнёру, и он подключает его так же, как вы подключали чужой.

Опубликованный сервис — это открытая дверь в базу. Не используйте учётную запись с полными правами: заведите отдельного пользователя только с теми ролями, которые нужны для операций сервиса. Доступ по HTTPS обязателен, если данные уходят через интернет.

Что стоит учесть при разработке

  • 🔧 Не меняйте сигнатуру операций на лету. Новое поле у клиента ломает разбор, пока он не загрузит свежий WSDL. Для несовместимых изменений заведите новую операцию либо новую версию сервиса.
  • 🔧 Возвращайте понятные ошибки. Вызовите исключение с текстом, который партнёр сможет прочитать, а не общее сообщение. Подробности пишите в журнал регистрации.
  • 🔧 Не отдавайте огромные выборки одним ответом. XML раздувает объём в несколько раз. Передавайте данные порциями и сделайте параметр «с какой записи».
  • 🔧 Тестируйте вызов сторонней утилитой. SoapUI или аналог покажут, как сервис выглядит для клиента, не знающего про 1С.
Какой способ интеграции выбрать?

Версии WSDL и что умеет платформа

Существуют две версии стандарта: WSDL 1.1 и WSDL 2.0. Подавляющее большинство реальных сервисов до сих пор описано по 1.1, и платформа 1С рассчитана именно на него вместе с профилем WS-I Basic Profile.

Практический вывод:

  • ✅ Сервис отдаёт WSDL 1.1 — подключается штатно.
  • ⚠️ Сервис отдаёт WSDL 2.0 — прямая загрузка может не сработать. Попросите у владельца версию 1.1 либо работайте через HTTPЗапрос.
  • ⚠️ WSDL разбит на много файлов с импортом схем — используйте вариант «в одном файле» (singleWsdl), если такой есть.

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

Частые вопросы

WSDL и XSD — это одно и то же?
Нет. XSD описывает только структуру данных. WSDL использует XSD внутри и добавляет операции, привязки и адрес сервиса.
Можно ли получить WSDL из 1С, если мы сами публикуем сервис?
Да. После публикации веб-сервиса описание доступно по его адресу с окончанием ?wsdl. Ничего вручную создавать не нужно.
Нужен ли Конфигуратор, чтобы вызвать чужой SOAP-сервис?
Нет. Через WSОпределения и WSПрокси вызов можно собрать во внешней обработке, не добавляя WS-ссылку в конфигурацию.
Почему сервис работает в SoapUI, а в 1С выдаёт ошибку?
Часто отличается состав заголовков, способ передачи пароля или пространство имён. Сравните текст запроса, который уходит из 1С, с тем, что отправляет SoapUI.
Нужно ли обновлять WS-ссылку при каждом релизе сервиса?
Только если изменилась схема. Если поменялся адрес или добавились поля, загрузите WSDL заново.