Текущее время: Ср, авг 15 2018, 11:47

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




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

Зарегистрирован:
Пн, сен 19 2011, 14:29
Сообщения: 382
Пол: Мужской
Добрый день.
Есть веб сервис на стороне 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?


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

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

По опыту, 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
Сообщения: 21
Добрый день.
У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml.


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

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


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

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

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

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


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

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


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

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


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

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


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

Зарегистрирован:
Пн, сен 19 2011, 14:29
Сообщения: 382
Пол: Мужской
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
Сообщения: 21
Зато все работает стабильно уже года три, а 1с-ники так ничего и не исправили.


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

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


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

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


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

Зарегистрирован:
Пн, сен 19 2011, 14:29
Сообщения: 382
Пол: Мужской
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
Сообщения: 382
Пол: Мужской
Андрей Петин написал:
Пришлось вместо 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.
При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида:
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, видимо, такого нету.


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

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


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

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


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

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


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

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


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

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