При разработке механизмов интеграции в системе 1С:Предприятие программисты часто сталкиваются с вопросом выбора протокола и форматов передачи данных. Одной из классических технологий являются Web-сервисы, работающие по протоколу SOAP. В этой статье мы подробно разберем, какие типы данных поддерживаются Web-сервисами, в чем заключается принципиальная разница между объектами записи и типами данных, а также выясним, как правильно передавать структурированную информацию в форматах JSON и XML.
Прежде всего, проанализируем распространенную ошибку начинающих разработчиков. Часто возникает вопрос: «Можно ли опубликовать Web-сервис с типом ЗаписьJSON или ЗаписьXML?». Ответ здесь однозначный — нет.
Разберем причину подробнее. Объекты ЗаписьJSON, ЗаписьXML, а также их «напарники» ЧтениеJSON и ЧтениеXML — это программные инструменты (потоковые записи и чтецы), которые существуют исключительно в оперативной памяти сеанса 1С. Они предназначены для формирования или разбора содержимого, но сами по себе не являются данными, которые можно передать по сети.
Для передачи информации через Web-сервис мы должны использовать результат работы этих инструментов. Обычно этим результатом является обычная строка (тип string в терминах XSD) или двоичные данные. Рассмотрим этот процесс как цепочку действий: вы используете ЗаписьJSON для формирования текста в памяти, затем получаете этот текст в виде строки и именно эту строку передаете в качестве параметра Web-сервиса.
В 1С:Предприятии при создании Web-сервиса в дереве конфигурации параметры операций и возвращаемые значения должны быть строго типизированы. Все доступные типы можно разделить на две большие группы:
1. Простые типы XSD (XML Schema Definition)
Это базовые типы, определенные консорциумом W3C, которые понимает любая внешняя система (Java, C#, Python и другие). К ним относятся:
string — любая текстовая информация (именно здесь передается JSON и XML);boolean — логическое значение (истина/ложь);decimal, double, float — различные форматы чисел;date, dateTime — дата и время;base64Binary — двоичные данные (используются для передачи файлов, картинок или сериализованных объектов 1С).2. Объекты XDTO (XML Data Transfer Objects)
Это сложные, иерархические типы данных. Если вам нужно передать не просто строку, а целую структуру (например, «Контрагент» с его ИНН, КПП и списком адресов), вы создаете в конфигурации XDTO-пакет. В нем описываются свойства объекта и их типы. Использование XDTO позволяет внешней системе заранее «знать» структуру ответа, что упрощает разработку на стороне клиента.
Рассмотрим по шагам, как реализовать передачу 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-строка. Ему останется только десериализовать её стандартными средствами своего языка программирования.
Проанализируем некоторые важные технические моменты, которые могут вызвать затруднения:
УникальныйИдентификатор в 1С нельзя напрямую выбрать в Web-сервисе. Его следует передавать как string.ХранилищеЗначения передать невозможно. Если вам нужно передать файл, сначала получите из хранилища ДвоичныеДанные, а затем укажите для параметра тип base64Binary. Платформа 1С сама закодирует байты в текстовый вид для передачи.Возможно пустое (Nillable). Если оно не установлено, а вы попытаетесь передать Неопределено или NULL, сервис выдаст ошибку валидации XML.В современном мире разработки для передачи JSON все чаще рекомендуют использовать HTTP-сервисы вместо Web-сервисов (SOAP). Посмотрим, почему это актуально:
Таким образом, если ваша задача — построение современного API для мобильного приложения или интеграция с веб-сайтом, где основным форматом является JSON, HTTP-сервисы будут более предпочтительным выбором. Однако, если вы работаете в корпоративной среде, где уже развернута инфраструктура на базе SOAP, или требуется строгая типизация контрактов, Web-сервисы 1С прекрасно справятся с задачей передачи JSON через строковые типы данных.