При интеграции информационных систем с использованием Web-сервисов иногда встает задача преобразования XDTO-пакета в текстовый вид, например, для хранения логов обмена. Рассмотрим как это можно реализовать.
При выполнении кода
ТекстОбъектаXDTO = Строка(ДанныеXDTOПакета);
где ДанныеXDTOПакета — объект типа ОбъектXDTO, в переменную ТекстОбъектаXDTO всегда будет возвращаться строка «ОбъектXDTO». Решение задачи «в лоб» не дало результат.
Необходимо пойти более длинным путем:
- Создать объект типа ЗаписьXML;
- Указать, что запись XML должна выводиться в строку;
- Записать объект XDTO в объект записи XML;
- Завершить запись 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-сервису.