Преобразование объекта XDTO в текст

При интеграции информационных систем с использованием Web-сервисов иногда встает задача преобразования XDTO-пакета в текстовый вид, например, для хранения логов обмена. Рассмотрим как это можно реализовать.

При выполнении кода

ТекстОбъектаXDTO = Строка(ДанныеXDTOПакета);

где ДанныеXDTOПакета — объект типа ОбъектXDTO, в переменную ТекстОбъектаXDTO всегда будет возвращаться строка «ОбъектXDTO». Решение задачи «в лоб» не дало результат.

Необходимо пойти более длинным путем:

  1. Создать объект типа ЗаписьXML;
  2. Указать, что запись XML должна выводиться в строку;
  3. Записать объект XDTO в объект записи XML;
  4. Завершить запись XML с получением результирующей строки.

Вот пример кода для решения задачи:

// Создание объекта ЗаписьXML
ЗаписьXML = Новый ЗаписьXML;
// Указываем, что запись производится в строку, а не в файл
ЗаписьXML.УстановитьСтроку();
// При помощи объекта ФабрикаXDTO записываем данные пакета XDTO в запись XML
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДанныеXDTOПакета);
// Получаем текст записи XML
ТекстОбъектаXDTO = ЗаписьXML.Закрыть();

Задача решена и код будет работать, НО только если переменная ДанныеXDTOПакета содержит данные в формате, который есть в XDTO-пакетах конфигурации. Если из 1С идет обращение к внешнему Web-сервису, описание которого получается динамически, то такой код выдаст ошибку, т.к. в объекте ФабрикаXDTO нет данных о структуре объекта XDTO.

В данном случае строку

ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДанныеXDTOПакета);

необходимо заменить на

Прокси.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДанныеXDTOПакета);

где Прокси — объект типа WSПрокси, при помощи которого осуществляется обращение к Web-сервису.

Оцените статью