Текущее время: Вс, июн 25 2017, 00:40

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Вт, июн 23 2015, 13:59 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 14:29
Сообщения: 353
Пол: Мужской
Добрый день.
Есть веб сервис на стороне SAP (сгенерирован на основе ФМ), обращение к нему идет из 1С. На входе таблица и переменная, соответственно от 1С приходит xml подобного вида:
Код:
<?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?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 04:46 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Здравствуйте!

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

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

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

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

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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Последний раз редактировалось Chaser009 Ср, июн 24 2015, 05:36, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 05:19 
Начинающий
Начинающий

Зарегистрирован:
Пт, фев 21 2014, 06:52
Сообщения: 19
Добрый день.
У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 09:50 
Старший специалист
Старший специалист

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 11:20 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Так вы PI-то используете или напрямую веб-сервис вызываете?

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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 11:35 
Начинающий
Начинающий

Зарегистрирован:
Пт, фев 21 2014, 06:52
Сообщения: 19
Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 12:02 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Force1984 писал(а):
Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать.


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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 12:03 
Старший специалист
Старший специалист

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июн 24 2015, 12:48 
Начинающий
Начинающий

Зарегистрирован:
Пт, фев 21 2014, 06:52
Сообщения: 19
Зато все работает стабильно уже года три, а 1с-ники так ничего и не исправили.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Чт, июн 25 2015, 04:55 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Korvax писал(а):
Вызываем напрямую, т.к. в идеале операции должны выполняться под разными пользователями, т.е. Иванов вызвал создание поставки и она создалась именно под Ивановым. Ну и еще пара причин не очень весомых.


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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Чт, июн 25 2015, 09:16 
Старший специалист
Старший специалист

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


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

Зарегистрирован:
Вт, ноя 25 2014, 16:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Тоже были проблемы с использованием нашего сервиса со стороны 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">


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Ср, июл 01 2015, 17:32 
Старший специалист
Старший специалист

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Чт, июл 02 2015, 18:06 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 16:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
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.
При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида:
Код:
<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, вот так:
Код:
<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":
Код:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="(некий нэймспейс)" targetNamespace="(некий нэймспейс)" elementFormDefault="qualified">

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

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы.
СообщениеДобавлено: Пт, июл 03 2015, 04:01 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 09:54
Сообщения: 317
Откуда: Владивосток, Россия
Пол: Мужской
Андрей Петин писал(а):
При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида:


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

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB