Как правильно передать таблицу значений через веб-сервис 1С?

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

Передача специфических объектов платформы 1С, таких как ТаблицаЗначений, через веб-сервисы часто вызывает затруднения у разработчиков. Стандартная сериализация не всегда справляется с этой задачей автоматически из-за различий в типах данных 1С и стандартов XML/WSDL. Давайте разберем, как решить эту проблему профессионально и эффективно.

Почему возникает ошибка при передаче ТЗ напрямую?

Когда вы пытаетесь передать объект ТаблицаЗначений через СериализаторXDTO, платформа пытается привести этот сложный объект к схеме данных, которая должна быть описана в WSDL. Если принимающая сторона не ожидает именно такой структуры или схема не настроена, возникает ошибка «кривого XML». Важно помнить, что ТаблицаЗначений — это внутренний тип 1С, и внешние системы не знают, как его интерпретировать без предварительной подготовки данных.

Решение 1: Правильная сериализация через XDTO

Если ваша архитектура требует использования SOAP и строгих XDTO-пакетов, вы можете выполнить сериализацию вручную, подготовив данные перед записью в поток. Это позволит избежать ошибок при передаче данных между двумя базами 1С.

Рассмотрим пошагово, как сериализовать таблицу во внутренний объект XDTO и преобразовать его в XML-строку:


ТЗВXDTO = СериализаторXDTO.ЗаписатьXDTO(ВашаТаблицаЗначений);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ТЗВXDTO);
ПараметрСервиса = ЗаписьXML.Закрыть();

На стороне получателя (в модуле веб-сервиса) вам потребуется провести обратную операцию — десериализацию полученной строки обратно в ТаблицаЗначений с помощью СериализаторXDTO.ПрочитатьXML.

Решение 2: Использование JSON (современный подход)

На сегодняшний день использование JSON стало стандартом де-факто для обмена данными между системами. Этот метод гораздо проще, надежнее и гибче, чем работа с XML. Суть подхода заключается в преобразовании таблицы в массив структур.

  1. Преобразуйте каждую строку таблицы в Структуру, где ключи соответствуют именам колонок.
  2. Соберите все структуры в Массив.
  3. Сериализуйте полученный массив в JSON-строку с помощью метода ЗаписатьJSON.

Такой подход избавляет от необходимости описывать сложные XDTO-пакеты. Данные становятся понятными любой системе — будь то 1С, Python, PHP или мобильное приложение. При этом структура таблицы (имена колонок и типы значений) полностью сохраняется в формате «ключ-значение».

Важные рекомендации при передаче данных

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

Итог

Мы проанализировали основные методы передачи табличных данных. Если вы хотите сделать «красиво» и современно, используйте JSON — это универсальный путь, который сэкономит вам время на отладке WSDL-схем и поддержке XDTO-пакетов. Если же вам необходимо придерживаться строгих стандартов SOAP, используйте ручную сериализацию в XDTO с последующей передачей XML-строки.

Выбор метода зависит от ваших задач: для интеграции с внешним ПО выбирайте JSON, для взаимодействия «1С-1С» с жесткими требованиями безопасности и типизации — XDTO-пакеты.

← На главную