Какие типы данных можно использовать в Web-сервисах 1С и как правильно передавать JSON или XML?

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

При разработке механизмов интеграции в системе 1С:Предприятие программисты часто сталкиваются с вопросом выбора протокола и форматов передачи данных. Одной из классических технологий являются Web-сервисы, работающие по протоколу SOAP. В этой статье мы подробно разберем, какие типы данных поддерживаются Web-сервисами, в чем заключается принципиальная разница между объектами записи и типами данных, а также выясним, как правильно передавать структурированную информацию в форматах JSON и XML.

Различие между программными объектами и типами данных

Прежде всего, проанализируем распространенную ошибку начинающих разработчиков. Часто возникает вопрос: «Можно ли опубликовать Web-сервис с типом ЗаписьJSON или ЗаписьXML?». Ответ здесь однозначный — нет.

Разберем причину подробнее. Объекты ЗаписьJSON, ЗаписьXML, а также их «напарники» ЧтениеJSON и ЧтениеXML — это программные инструменты (потоковые записи и чтецы), которые существуют исключительно в оперативной памяти сеанса 1С. Они предназначены для формирования или разбора содержимого, но сами по себе не являются данными, которые можно передать по сети.

Для передачи информации через Web-сервис мы должны использовать результат работы этих инструментов. Обычно этим результатом является обычная строка (тип string в терминах XSD) или двоичные данные. Рассмотрим этот процесс как цепочку действий: вы используете ЗаписьJSON для формирования текста в памяти, затем получаете этот текст в виде строки и именно эту строку передаете в качестве параметра Web-сервиса.

Поддерживаемые типы данных в Web-сервисах (SOAP)

В 1С:Предприятии при создании Web-сервиса в дереве конфигурации параметры операций и возвращаемые значения должны быть строго типизированы. Все доступные типы можно разделить на две большие группы:

1. Простые типы XSD (XML Schema Definition)

Это базовые типы, определенные консорциумом W3C, которые понимает любая внешняя система (Java, C#, Python и другие). К ним относятся:

2. Объекты XDTO (XML Data Transfer Objects)

Это сложные, иерархические типы данных. Если вам нужно передать не просто строку, а целую структуру (например, «Контрагент» с его ИНН, КПП и списком адресов), вы создаете в конфигурации XDTO-пакет. В нем описываются свойства объекта и их типы. Использование XDTO позволяет внешней системе заранее «знать» структуру ответа, что упрощает разработку на стороне клиента.

Как передать JSON или XML через Web-сервис

Рассмотрим по шагам, как реализовать передачу JSON-данных через стандартный Web-сервис 1С. Поскольку SOAP сам по себе основан на XML, передача JSON внутри него — это, по сути, упаковка одной строки в другую.

Выясним, как это выглядит в коде на стороне сервера 1С при создании метода Web-сервиса:


Функция ПолучитьДанныеВФорматеJSON(КодКлиента)
    
    // Создаем структуру, которую хотим передать
    Данные = Новый Структура;
    Данные.Вставить("Код", КодКлиента);
    Данные.Вставить("Статус", "Активен");
    Данные.Вставить("Баланс", 1500.50);
    
    // Используем объект ЗаписьJSON для формирования строки
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Данные);
    
    РезультатСтрокой = Запись.Закрыть();
    
    // Возвращаем обычную строку (тип string в настройках Web-сервиса)
    Возврат РезультатСтрокой;
    
КонецФункции

В настройках операции Web-сервиса в поле «Тип возвращаемого значения» мы указываем string (http://www.w3.org/2001/XMLSchema). Получатель на своей стороне примет XML-конверт SOAP, внутри которого в одном из тегов будет находиться ваша JSON-строка. Ему останется только десериализовать её стандартными средствами своего языка программирования.

Ограничения и нюансы работы с типами

Проанализируем некоторые важные технические моменты, которые могут вызвать затруднения:

Когда стоит перейти на HTTP-сервисы?

В современном мире разработки для передачи JSON все чаще рекомендуют использовать HTTP-сервисы вместо Web-сервисов (SOAP). Посмотрим, почему это актуально:

  1. Отсутствие лишних оберток: SOAP добавляет к вашим данным «тяжелый» XML-конверт с заголовками. HTTP-сервис позволяет передать «чистый» JSON в теле ответа.
  2. Гибкость: В HTTP-сервисах нет жесткой привязки к XDTO. Вы можете динамически формировать любой ответ в зависимости от логики приложения.
  3. Производительность: За счет меньшего объема передаваемых данных и отсутствия необходимости парсить сложную структуру SOAP, HTTP-сервисы работают быстрее и создают меньшую нагрузку на сеть.
  4. Простота отладки: HTTP-запросы легко тестировать через браузер или специальные инструменты (например, Postman), в то время как для SOAP требуются специализированные клиенты.

Таким образом, если ваша задача — построение современного API для мобильного приложения или интеграция с веб-сайтом, где основным форматом является JSON, HTTP-сервисы будут более предпочтительным выбором. Однако, если вы работаете в корпоративной среде, где уже развернута инфраструктура на базе SOAP, или требуется строгая типизация контрактов, Web-сервисы 1С прекрасно справятся с задачей передачи JSON через строковые типы данных.

← На главную