Почему в ответе Web-сервиса 1С появляется текст undefined и как это исправить?

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

При разработке и тестировании SOAP Web-сервисов в среде 1С:Предприятие разработчики нередко сталкиваются со странным поведением: при вызове метода между XML-тегами или вместо названий реквизитов неожиданно появляется литерал undefined. При этом запуск сеанса в режиме отладки конфигуратора 1С не фиксирует никаких ошибок, внутри платформы все структуры заполнены корректно, а значение Неопределено нигде явно не присваивается. Разберем детально, почему возникает такая ошибка, где кроется источник проблемы и как правильно настроить XDTO-пакеты и веб-сервисы платформы для стабильной интеграции.

Выясним причину появления литерала undefined

Проанализируем ситуацию: платформа 1С:Предприятие оперирует внутренним типом Неопределено, а не JavaScript-литералом undefined. Встроенный сериализатор СериализаторXDTO формирует строго типизированный XML в кодировке UTF-8. Если в отладчике 1С данные передаются без искажений, значит, подмена происходит на стороне клиента тестирования.

Чаще всего для быстрой проверки веб-сервисов используются плагины для браузеров (например, Wizdler) или легковесные расширения на базе JavaScript. Когда такой инструмент запрашивает WSDL-описание сервиса, его внутренний парсер разбирает схему XML Schema Definition (XSD). Если реквизиты, свойства или типы пакета XDTO названы с использованием кириллических символов, регулярные выражения или DOM-парсеры сторонних библиотек не могут сопоставить узел метаданных. В среде выполнения JavaScript переменная, хранящая имя или тип тега, принимает значение undefined. При последующей конкатенации строки XML-ответа или шаблона запроса это значение неявно преобразуется в строку "undefined" и выводится пользователю.

Главное правило: отказ от кириллицы в схемах XDTO и сервисах

Хотя сама платформа 1С позволяет создавать метаданные на русском языке, а стандарты XML теоретически допускают Unicode-символы в наименованиях элементов, мировая практика веб-сервисов и профиль взаимодействия WS-I Basic Profile требуют строгого соблюдения латиницы (диапазон ASCII / NCName).

Использование кириллицы безопасно работает только в одном сценарии: интеграция формата «1С — 1С», когда с обеих сторон используются платформенные механизмы WSОпределения и WSПрокси. При подключении любых внешних клиентов (веб-браузеры, приложения на C#, Java, Python, PHP) кириллические имена свойств пакетов XDTO приводят к падению парсеров, ошибкам десериализации или появлению мусорных данных.

Пошаговое устранение проблемы

Разберем по шагам, как исправить схему метаданных и гарантировать правильную работу сервиса:

  1. Переименуйте элементы в пакете XDTO на латиницу:

    Откройте в конфигураторе ветку Общие -> XDTO-пакеты. Проверьте ваш пакет. Все свойства (Properties), локальные и глобальные типы данных (ObjectType) должны содержать исключительно латинские символы. Рекомендуется использовать общепринятые стили именования CamelCase или snake_case.

    Например, вместо свойства НоменклатураНаименование используйте ItemName или NomenclatureDescription, вместо Количество — Quantity.

  2. Скорректируйте описание Web-сервиса:

    Перейдите в ветку Общие -> Web-сервисы. Убедитесь, что имя самого веб-сервиса, имена операций, а также все входящие и исходящие параметры названы на латинице. URI пространства имен сервиса и XDTO-пакета также должны быть заданы в формате латинской строки (например, http://mycompany.ru/integration/catalog).

  3. Разделяйте структуру и полезную нагрузку (Payload):

    Помните важное правило: названия тегов должны быть на латинице, а русскоязычный текст — только внутри тегов. Сами строковые значения номенклатуры, контрагентов, адресов и каталогов без проблем передаются на кириллице, так как платформа 1С штатно кодирует их в UTF-8.

  4. Очистите кэш веб-сервера и переопубликуйте сервис:

    После внесения изменений в структуру XDTO-пакетов веб-сервер (IIS или Apache) может продолжать отдавать клиентам старый кэшированный WSDL. Выполните повторную публикацию через конфигуратор (Администрирование -> Публикация на веб-сервере), перезаписав файл default.vrd, или перезапустите службу веб-сервера (пул приложений IIS).

Использование инструментов для достоверного тестирования

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

  1. Используйте специализированное программное обеспечение для SOAP-тестирования, такое как SoapUI или Postman, которые корректно обрабатывают расширенные схемы WSDL.
  2. Для анализа «сырого» трафика используйте сетевые снифферы или выполняйте вызов через консольную утилиту curl. Это позволяет увидеть исходный байтовый поток XML-ответа сервера без искажений со стороны клиентских парсеров:

    curl -X POST -H "Content-Type: text/xml; charset=utf-8" -d @request.xml http://localhost/base/ws/CatalogService.1cws

Соблюдение латинской номенклатуры в схемах XDTO гарантирует совместимость Web-сервиса 1С с любыми сторонними платформами и полностью устраняет проблему появления мусорных литералов в формируемых сообщениях.

← На главную