SAPфорум.RU
https://sapboard.ru/forum/

Web-сервис SAP в 1С. Проблемы с предачей таблицы.
https://sapboard.ru/forum/viewtopic.php?f=70&t=90782
Страница 1 из 2

Автор:  Korvax [ Вт, июн 23 2015, 12:59 ]
Заголовок сообщения:  Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Добрый день.
Есть веб сервис на стороне SAP (сгенерирован на основе ФМ), обращение к нему идет из 1С. На входе таблица и переменная, соответственно от 1С приходит xml подобного вида:
Code:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header />
  <soap:Body>
    <m:Z_CREATE xmlns:m="urn:sap-com:document:sap:rfc:functions">
      <IT_MATNR xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <m:item>10000001</m:item>
        <m:item>10000002</m:item>
      </IT_MATNR>
      <IV_BATCH xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1111111111</IV_BATCH>
    </m:Z_CREATE>
  </soap:Body>
</soap:Envelope>

SAP не может определить строки таблицы по тегу <m:item> и соответственно таблица оказывается пустой. Если руками исправить <m:item> на <item>, все работает нормально.

Вопросов собственно три:
1. Зачем 1С добавляет ссылку на пространство имен к тегу <m:item>?
2. Что можно сделать на стороне SAP для нормального анализа постпупающих данных?
3. Если у кого есть опыт по работе с SAP - 1С, какие еще сюрпризы готовит 1С?

P.s. И еще вопрос, как сообщить веб-сервису SAP что к нему прийдут данные со ссылкой на пространство имен? Т.е. как добавить атрибут elementFormDefault = «qualified» для элемента xsd:schema в WSDL SAP?

Автор:  Chaser009 [ Ср, июн 24 2015, 03:46 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Здравствуйте!

По опыту, 1С вообще очень своеобразно работает с XDTO и веб-сервисами.
На моей памяти был, например, случай, когда 1С почему-то воспринимала структуру с параметром и таблицей внутри просто как два отдельных параметра.

Элементы у меня 1С тоже нэймспэйсами любила метить. Лечил с помощью указания "Qualify schema - Elements" при определении типа данных в ESR. По поводу RFC-сообщения - не скажу, не сталкивался.

Типы данных для вызова из 1С как получаете, создаете ws-ссылку по wsdl c описанием сервиса? Или как-то еще?

Мы, намучившись с подобными вещами, пришли к решению:
создаем описания типов данных и сообщений на стороне 1С, загружаем их в ESR как External Definition и берем как типы сообщений для интерфейса 1С. Потом генерируем wsdl и создаем по нему ws-ссылку в 1С. Ну а в PI мэппинг из структуры 1С в структуру RFC и обратно.

В таком виде проблем пока не было.

Автор:  Force1984 [ Ср, июн 24 2015, 04:19 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Добрый день.
У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml.

Автор:  Korvax [ Ср, июн 24 2015, 08:50 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Здравствуйте!
Chaser009 написал:
Типы данных для вызова из 1С как получаете, создаете ws-ссылку по wsdl c описанием сервиса? Или как-то еще?
Да, пытаемся работать по "нормальному" варианту.
Chaser009 написал:
Мы, намучившись с подобными вещами, пришли к решению:
Мы видимо еще не намучались, и в поисках своего решения :D
Просто интересно очень стало, ведь явно проблема работы на стороне 1С, неужели им никто не собщил и они не предпринимают никаких попыток решить проблему?
Force1984 написал(а):
Добрый день.
У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml.
Не совсем понятно в какой момент вызывать преобразование? У меня веб сервис на базе ФМ, на входе данные и на выходе данные, доступа к xml нету.

Автор:  Chaser009 [ Ср, июн 24 2015, 10:20 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Так вы PI-то используете или напрямую веб-сервис вызываете?

Насчет сообщить 1С: народ на форумах воет по поводу ругани 1С на теги "wsp:Policy" при импорте wsdl, начиная с 8.1. На дворе уже 8.3 - воз и ныне там.

Автор:  Force1984 [ Ср, июн 24 2015, 10:35 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать.

Автор:  Chaser009 [ Ср, июн 24 2015, 11:02 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Force1984 написал(а):
Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать.


Я поэтому и спрашиваю, используется ли PI. Тогда и внедряться никуда не надо.

Автор:  Korvax [ Ср, июн 24 2015, 11:03 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Chaser009 написал:
Так вы PI-то используете или напрямую веб-сервис вызываете?
Вызываем напрямую, т.к. в идеале операции должны выполняться под разными пользователями, т.е. Иванов вызвал создание поставки и она создалась именно под Ивановым. Ну и еще пара причин не очень весомых.
Chaser009 написал:
Насчет сообщить 1С: народ на форумах воет по поводу ругани 1С на теги "wsp:Policy" при импорте wsdl, начиная с 8.1. На дворе уже 8.3 - воз и ныне там.
Всё лишнее в т.ч. и policy обрезали при генерации wsdl в soamanager, пока работаем без них.
Force1984 написал(а):
Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать.
Как то вы.. жестоко )))

Автор:  Force1984 [ Ср, июн 24 2015, 11:48 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Зато все работает стабильно уже года три, а 1с-ники так ничего и не исправили.

Автор:  Chaser009 [ Чт, июн 25 2015, 03:55 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Korvax написал:
Вызываем напрямую, т.к. в идеале операции должны выполняться под разными пользователями, т.е. Иванов вызвал создание поставки и она создалась именно под Ивановым. Ну и еще пара причин не очень весомых.


А что мешает из 1С пользователя передавать? :-)
Просто, если у вас PI есть, логичнее его такими вещами нагрузить, там и способов побольше всякие камушки подводные обходить.

Автор:  Korvax [ Чт, июн 25 2015, 08:16 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Chaser009 написал:
А что мешает из 1С пользователя передавать? :-)
Просто, если у вас PI есть, логичнее его такими вещами нагрузить, там и способов побольше всякие камушки подводные обходить.
У нас есть SAP BC. Уже пробовали, все работает. Только у SAP не во всех модулях можно на входе подать имя пользователя, создавшего документ. А вызов метода в SAP в этом случае будет в любом случае по одним техническим пользователем.

Автор:  Андрей Петин [ Вт, июн 30 2015, 11:33 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Тоже были проблемы с использованием нашего сервиса со стороны 1С, когда тип сообщения для стороны 1С (т.е. используемый в WSDL) был задан как Message Type.
Дело было тоже в нэймспейсах. Пришлось вместо Message Type делать External Definition и прописывать там Qualified.

Например: <xsd:element name="year" type="xsd:string" minOccurs="0" form="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Автор:  Korvax [ Ср, июл 01 2015, 16:32 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Андрей Петин написал:
Пришлось вместо Message Type делать External Definition и прописывать там Qualified.
А можно чуть подробнее где изменяли (SAP, wsdl, 1C?) и как это повлияло на структуру запроса?

Автор:  Андрей Петин [ Чт, июл 02 2015, 17:06 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Korvax написал:
Андрей Петин написал:
Пришлось вместо Message Type делать External Definition и прописывать там Qualified.
А можно чуть подробнее где изменяли (SAP, wsdl, 1C?) и как это повлияло на структуру запроса?


Изменения были в SAP PI.
В 1С ничего не изменилось. В wsdl изменилось автоматически.

В SAP PI был канал типа SOAP Sender - то есть мы предоставили веб-сервис, чтоб его вызывали из 1C. Отдали им wsdl-файл для вызова сервиса.
То есть был синхронный вызов: SOAP (вызов веб-сервиса из 1C) -> SAP PI -> SAP ERP и обратно ответ.
Вроде бы ситуация такая же, как у вас.

Внутри SAP PI типы сообщений для интерфейсов, участвующих в обмене, были сформированы с помощью объекта Message Type.
При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида:
Code:
<mt_PlanExportRequestBody xmlns='(некий нэймспейс)' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
                <year>2014</year>

то этот узел не преобразуется в мэппинге, то есть полностью игнорируется.

Причем нормально всё работало, если узел приходил с префиксом, например, ns0, вот так:
Code:
<ns0:mt_PlanExportRequestBody xmlns:ns0='(некий нэймспейс)' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>

Но разработчики со стороны 1С сообщили, что повлиять на это не могут.

Пришлось в определении интерфейса, обслуживающего SOAP-вызов, тип сообщения задавать не с помощью Message Type, а с помощью External Definition, чтобы самостоятельно можно было создать xsd-файл и вписать туда дополнительные атрибуты.
Нужно было вписать elementFormDefault="qualified":
Code:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="(некий нэймспейс)" targetNamespace="(некий нэймспейс)" elementFormDefault="qualified">

И для входящего интерфейса, и для исходящего.
После этого мэппинги работали корректно.

Вот выше вам пишут, что вроде бы можно установить свойство Qualify schema в типах данных, но у меня в SAP PI 7.0, видимо, такого нету.

Автор:  Chaser009 [ Пт, июл 03 2015, 03:01 ]
Заголовок сообщения:  Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.

Андрей Петин написал:
При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида:


Один-в-один и у нас такое же было. 1С напрочь отказывалась ставить префикс.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/