Разработка и отладка веб-сервисов (SOAP) в 1С часто вызывает трудности у новичков, особенно на этапе тестирования через сторонние инструменты, такие как Postman. Одной из самых распространенных ошибок является попытка отправить запрос в формате JSON или с пустым телом, в то время как протокол SOAP требует строгого соблюдения структуры XML. Разберем по шагам, как настроить Postman для успешного взаимодействия с 1С, проанализируем причины возникновения ошибок и выясним, какие нюансы конфигурации 1С на это влияют.
Прежде всего, проанализируем ситуацию: почему при тестировании WS (веб-сервиса) мы не можем просто передать {} в теле запроса? В 1С существует два типа сервисов: HTTP-сервисы и Web-сервисы (SOAP).
Если в HTTP-сервисах (HS) мы вольны сами определять формат данных (будь то JSON, XML или обычный текст), то Web-сервисы (WS) работают по строгому стандарту SOAP. Этот стандарт всегда требует передачи данных в виде XML-конверта определенной структуры. Именно поэтому попытка отправить пустой объект приводит к ошибкам формата.
Рассмотрим, как правильно обращаться к нашему сервису. Адрес веб-сервиса 1С в общем виде выглядит так:
http://имя_сервера/имя_базы/ws/ИмяВебСервиса.1cws. Для подготовки публикации без участия веб-сервера можно использовать средство для создания файла default.vrd.
Важно помнить: для получения описания сервиса (схемы) в браузере мы добавляем в конце ?wsdl, но при выполнении реального POST-запроса в Postman этот параметр использовать не нужно. Наш запрос должен уходить строго на адрес, заканчивающийся на .1cws.
Выясним причину, по которой сервер 1С может отвергать наш запрос даже при наличии XML. Все дело в заголовках. Для корректной работы SOAP 1.1 необходимо установить следующие параметры на вкладке Headers:
text/xml;charset=UTF-8. Если используется версия SOAP 1.2, значение должно быть application/soap+xml.УдаленныйДоступЧерезВебСервис.Теперь разберем самый важный этап — формирование тела запроса. Даже если ваша функция в 1С не принимает параметров, вы обязаны передать «конверт». Если вы передадите пустую строку или неверный XML, вы увидите ошибку extra content at the end of document. Это означает, что парсер 1С ожидал закрывающий тег или начало структуры, но получил некорректные данные.
Рассмотрим пример правильной структуры XML для функции, которая называется СоздатьКонтрагента и находится в пространстве имен http://www.sample-package.org:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.sample-package.org">
<soapenv:Header/>
<soapenv:Body>
<sam:СоздатьКонтрагента/>
</soapenv:Body>
</soapenv:Envelope>
Обратите внимание на пространство имен (Namespace). В свойстве вашего веб-сервиса в конфигураторе 1С указано поле «Пространство имен». Если в XML-запросе оно не будет совпадать с тем, что прописано в 1С, система выдаст ошибку «Неверный формат». В примере выше префикс sam связан с адресом пакета http://www.sample-package.org.
Проанализируем ситуацию, когда функция все же имеет параметры. В 1С Web-сервисы неразрывно связаны с XDTO-пакетами. Каждый параметр функции должен соответствовать определенному типу из XDTO. Если вы указали тип string (из стандартного пакета http://www.w3.org/2001/XMLSchema), то внутри тега метода в XML должен появиться тег параметра:
<soapenv:Body>
<sam:СоздатьКонтрагента>
<sam:Наименование>ООО "Новый Клиент"</sam:Наименование>
</sam:СоздатьКонтрагента>
</soapenv:Body>
Если же вы используете свои сложные типы данных, убедитесь, что в конфигурации 1С создан соответствующий XDTO-пакет, и он импортирован в ваш веб-сервис.
Чтобы не составлять XML-структуру вручную (что особенно критично при тестировании сложных запросов к ВетИС) и не гадать с пространствами имен, воспользуемся отличным лайфхаком в Postman:
http://localhost/base/ws/MyService.1cws?wsdl).После импорта у вас появятся готовые шаблоны для каждого метода вашего сервиса со всеми необходимыми заголовками и правильной XML структурой. Вам останется только заполнить значения параметров.
Несмотря на мощь Postman, для работы с SOAP-сервисами часто рекомендуют специализированный инструмент — SoapUI. Проанализируем, почему. SoapUI спроектирован именно под протокол SOAP. При импорте WSDL он гораздо точнее восстанавливает иерархию типов данных 1С и позволяет на лету генерировать тестовые наборы данных. Если в Postman вы продолжаете получать «Неверный формат», попробуйте открыть этот же сервис в SoapUI — если там заработает, значит, проблема в заголовках или лишних пробелах в Postman.
Как было замечено в обсуждении, если у вас нет жесткого требования использовать именно SOAP (например, интеграция со старой системой, которая понимает только WS), то для современных задач лучше выбрать HTTP-сервисы.
В HTTP-сервисах работа с JSON происходит гораздо проще:
ЧтениеJSON и ЗаписьJSON в коде 1С или специализированный модуль для конвертации JSON/XML/CSV.raw -> JSON. По такой схеме легко реализуется, например, импорт задач из Jira в 1С через REST API.XDTO структурам, что ускоряет разработку.Однако, если вы решили продолжать работу с Web-сервисами, помните: 1С ожидает валидный XML, обернутый в SOAP Envelope, с четко указанным пространством имен.