В процессе интеграции с SAP ERP столкнулись с проблемой получения из сервиса, опубликованного на стороне SAP, данных сложных типов.
Данные простых типов ходили между системами, без проблем, но стоило в сервис на стороне SAP добавить сложный тип, как все приводило следующей ошибке:
Проверка дополнительного свойства:
форма: Элемент
имя: NameItem: Ошибка преобразования данных XDTO:
Чтение объекта типа: {urn:sap-com:document:sap:soap:functions:mc-style}NameType
Проверка дополнительного свойства:
форма: Элемент
имя: item: Ошибка проверки данных XDTO:
Собственно проблему решили, причем 2мя способами:
1) Самый простой вместо вызова web-сервиса,воспользовались post запросом. Примеров отправки POST-запроса много, ниже привожу рабочий код.
ПроцедураОтправкаЗапроса()
Сервер = //имя сервера
Ресурс = // имя ресурса
HTTP = Новый HTTPСоединение(Сервер,,,,,, Истина) ;
Логин = //ваш логин
Пароль = //ваш пароль
СтрокаАвторизации = СтрокаВBase64(ВРег(Логин)+»:»+Пароль);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(«Content-Type»,»text/xml»);
ЗаголовокHTTP.Вставить(«Accept-Charset»,»utf-8″);
ЗаголовокHTTP.Вставить(«Content-Charset»,»utf-8″);
ЗаголовокHTTP.Вставить(«Authorization»,»Basic»+СтрокаАвторизации);
СтрокаЗапрос = //текст вашего запроса. Если есть сложностьс составлением рекомендую для этого воспользоваться программой SOAPUI
СтрокаЗапрос = СтрЗаменить(СтрокаЗапрос,Символы.ПС,»»);
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.ВставитьСтроку(1,СтрокаЗапрос);
ИмяФайлаЗапроса =ПолучитьИмяВременногоФайла(«.txt»);
ТекстДок.Записать(ИмяФайлаЗапроса);
ИмяФайлаОтвета =ПолучитьИмяВременногоФайла(«.txt»);
HTTP.ОтправитьДляОбработки(ИмяФайлаЗапроса, Ресурс,ИмяФайлаОтвета, ЗаголовокHTTP);
КонецПроцедуры
Функция СтрокаВBase64(Строка)
СтрокаBase64 = «»;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла);
ЗаписьТекста.Записать(Строка);
ЗаписьТекста.Закрыть();
СтрокаBase64 = Base64Строка(НовыйДвоичныеДанные(ИмяВременногоФайла));
СтрокаBase64 =СтрЗаменить(СтрокаBase64,»77u/»,»»);
Попытка
УдалитьФайлы(ИмяВременногоФайла)
Исключение
Сообщить(«Неудалось удалитьфайл преобразования строки авторизации (Base64) -«»»+ИмяВременногоФайла+»»»»,СтатусСообщения.Внимание);
КонецПопытки;
Возврат СтрокаBase64;
Конецфункции
На выходе получаем xml с данными, разбираем, получаем данные.
2) Воспользоваться форматом JSON– то есть преобразовывать сложные типы на стороне SAP в JSON и как строку отдавать в 1с.
В 1с уже эта строка без проблем переводится в более удобный тип данных.
по вызову см.также
Вызов операций WS-сервисов SAP из 1С (передача в параметрах Объектов XDTO)