При разработке и тестировании SOAP Web-сервисов в среде 1С:Предприятие разработчики нередко сталкиваются со странным поведением: при вызове метода между XML-тегами или вместо названий реквизитов неожиданно появляется литерал undefined. При этом запуск сеанса в режиме отладки конфигуратора 1С не фиксирует никаких ошибок, внутри платформы все структуры заполнены корректно, а значение Неопределено нигде явно не присваивается. Разберем детально, почему возникает такая ошибка, где кроется источник проблемы и как правильно настроить XDTO-пакеты и веб-сервисы платформы для стабильной интеграции.
Проанализируем ситуацию: платформа 1С:Предприятие оперирует внутренним типом Неопределено, а не JavaScript-литералом undefined. Встроенный сериализатор СериализаторXDTO формирует строго типизированный XML в кодировке UTF-8. Если в отладчике 1С данные передаются без искажений, значит, подмена происходит на стороне клиента тестирования.
Чаще всего для быстрой проверки веб-сервисов используются плагины для браузеров (например, Wizdler) или легковесные расширения на базе JavaScript. Когда такой инструмент запрашивает WSDL-описание сервиса, его внутренний парсер разбирает схему XML Schema Definition (XSD). Если реквизиты, свойства или типы пакета XDTO названы с использованием кириллических символов, регулярные выражения или DOM-парсеры сторонних библиотек не могут сопоставить узел метаданных. В среде выполнения JavaScript переменная, хранящая имя или тип тега, принимает значение undefined. При последующей конкатенации строки XML-ответа или шаблона запроса это значение неявно преобразуется в строку "undefined" и выводится пользователю.
Хотя сама платформа 1С позволяет создавать метаданные на русском языке, а стандарты XML теоретически допускают Unicode-символы в наименованиях элементов, мировая практика веб-сервисов и профиль взаимодействия WS-I Basic Profile требуют строгого соблюдения латиницы (диапазон ASCII / NCName).
Использование кириллицы безопасно работает только в одном сценарии: интеграция формата «1С — 1С», когда с обеих сторон используются платформенные механизмы WSОпределения и WSПрокси. При подключении любых внешних клиентов (веб-браузеры, приложения на C#, Java, Python, PHP) кириллические имена свойств пакетов XDTO приводят к падению парсеров, ошибкам десериализации или появлению мусорных данных.
Разберем по шагам, как исправить схему метаданных и гарантировать правильную работу сервиса:
Откройте в конфигураторе ветку Общие -> XDTO-пакеты. Проверьте ваш пакет. Все свойства (Properties), локальные и глобальные типы данных (ObjectType) должны содержать исключительно латинские символы. Рекомендуется использовать общепринятые стили именования CamelCase или snake_case.
Например, вместо свойства НоменклатураНаименование используйте ItemName или NomenclatureDescription, вместо Количество — Quantity.
Перейдите в ветку Общие -> Web-сервисы. Убедитесь, что имя самого веб-сервиса, имена операций, а также все входящие и исходящие параметры названы на латинице. URI пространства имен сервиса и XDTO-пакета также должны быть заданы в формате латинской строки (например, http://mycompany.ru/integration/catalog).
Помните важное правило: названия тегов должны быть на латинице, а русскоязычный текст — только внутри тегов. Сами строковые значения номенклатуры, контрагентов, адресов и каталогов без проблем передаются на кириллице, так как платформа 1С штатно кодирует их в UTF-8.
После внесения изменений в структуру XDTO-пакетов веб-сервер (IIS или Apache) может продолжать отдавать клиентам старый кэшированный WSDL. Выполните повторную публикацию через конфигуратор (Администрирование -> Публикация на веб-сервере), перезаписав файл default.vrd, или перезапустите службу веб-сервера (пул приложений IIS).
Посмотрим, как исключить влияние браузерных расширений при отладке интеграции:
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С с любыми сторонними платформами и полностью устраняет проблему появления мусорных литералов в формируемых сообщениях.