Веб-сервисы и WSDL в 1С: описание, подключение, типовые сбои
Содержание
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 + WSDL | REST (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-ссылку
- Откройте Конфигуратор и дерево конфигурации.
- В ветке «Общие» найдите «WS-ссылки» и добавьте новую.
- Нажмите «Загрузить WSDL» (или аналогичную кнопку) и укажите URL либо файл.
- Введите логин и пароль, если сервис закрыт авторизацией.
- Сохраните. Платформа загрузит определения и создаст пакеты 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");
Минус: описание скачивается при каждом создании. Если сервис медленный, кэшируйте объект Определения в переменной модуля.
Какие ошибки бывают и что с ними делать
Самые частые сбои — не в коде 1С, а в сети и в самом описании.
Пользователь и Пароль до первого вызова. Если сервис требует NTLM или сертификат клиента, простого логина не хватит.targetNamespace и имя элемента. Регистр в XML имеет значение.faultstring: чаще всего это неверный параметр или отказ по бизнес-правилу.Как отладить запрос
Когда причина неясна, смотрите, что реально уходит по сети. Включите технологический журнал платформы либо используйте сетевой анализатор между 1С и сервисом. В теле запроса видно, какие значения и в каких тегах ушли, а в ответе — настоящий текст ошибки.
Где WSDL применяют на практике
Интеграция по SOAP живёт там, где важна строгая схема данных.
- 🏦 Банки. Часть банков принимает платёжные поручения и отдаёт выписки через SOAP-шлюз. Описание даёт сам банк, обычно после заключения договора.
- 🏛 Государственные системы. Для обмена с ведомствами многие сервисы построены на SOAP и схемах XSD. Точные адреса и версии формата берите в документации оператора: они меняются.
- 📄 Обмен документами. Некоторые операторы ЭДО дают программный интерфейс по SOAP. Но чаще сегодня встречается готовый модуль в конфигурации, и вручную ничего подключать не нужно.
- 🔁 Обмен между базами 1С. Классический пример: одна база публикует веб-сервис, вторая подключает WS-ссылку и забирает данные. Подходит для интеграции при невозможности настроить обычный обмен.
- 🛒 Склад, логистика, учёт заказов. Внутренние системы предприятия, где ИТ-отдел заранее выпускает WSDL.
Прежде чем писать свой код, проверьте, нет ли в вашей конфигурации готового механизма для нужного оператора. Он обновляется вместе с релизом и поддерживается разработчиком.
Когда 1С сама выступает сервисом
Бывает наоборот: данные нужно отдать наружу. Тогда в конфигурации создают объект «Веб-сервис» и описывают его операции. Алгоритм у такой работы короткий:
- В Конфигураторе добавьте веб-сервис и задайте имя и пространство имён. Пространство имён лучше выбрать постоянное, иначе клиенты потеряют связь при переименовании.
- Добавьте операции и укажите для каждой тип возвращаемого значения и параметры. Типы берутся из XDTO-пакетов или простых типов.
- Напишите обработчики операций в модуле веб-сервиса.
- Опубликуйте базу на веб-сервере и включите в публикации нужный веб-сервис.
- Откройте адрес
?wsdlи проверьте, что описание показывается без ошибок.
Дальше этот файл вы отдаёте партнёру, и он подключает его так же, как вы подключали чужой.
Опубликованный сервис — это открытая дверь в базу. Не используйте учётную запись с полными правами: заведите отдельного пользователя только с теми ролями, которые нужны для операций сервиса. Доступ по HTTPS обязателен, если данные уходят через интернет.
Что стоит учесть при разработке
- 🔧 Не меняйте сигнатуру операций на лету. Новое поле у клиента ломает разбор, пока он не загрузит свежий WSDL. Для несовместимых изменений заведите новую операцию либо новую версию сервиса.
- 🔧 Возвращайте понятные ошибки. Вызовите исключение с текстом, который партнёр сможет прочитать, а не общее сообщение. Подробности пишите в журнал регистрации.
- 🔧 Не отдавайте огромные выборки одним ответом. XML раздувает объём в несколько раз. Передавайте данные порциями и сделайте параметр «с какой записи».
- 🔧 Тестируйте вызов сторонней утилитой. SoapUI или аналог покажут, как сервис выглядит для клиента, не знающего про 1С.
WSОпределения для разовой обработки.HTTPСоединение и HTTPЗапрос, WSDL не потребуется.Версии 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 — это одно и то же?
Можно ли получить WSDL из 1С, если мы сами публикуем сервис?
?wsdl. Ничего вручную создавать не нужно.Нужен ли Конфигуратор, чтобы вызвать чужой SOAP-сервис?
WSОпределения и WSПрокси вызов можно собрать во внешней обработке, не добавляя WS-ссылку в конфигурацию.