Как создать и отправить IDOC из MII в SAP ECC с помощью IDOC_Asynchronous_Inbound

У нас есть специально созданное устаревшее приложение, которое собирает данные из базы данных SQL-сервера, создает IDOC, а затем «отправляет» этот IDOC в ECC. (Это приложение было написано на VB6 и использует для этого SDK SAPGUI 6.)

Я пытаюсь вывести это решение из эксплуатации и заменить его решением, встроенным в MII.

Насколько я могу судить, мне нужно создать IDOC в MII, используя IDOC_Asynchronous_Inbound, но я застрял в том, как заполнить необходимые поля.

IDOC_Asynchronous_Inbound состоит из двух сегментов: IDOC_CONTROL_REC_40 и IDOC_DATA_REC_40.

Я догадался, какие поля заполнять в сегменте IDOC_CONTROL_REC_40/item, посмотрев на исходный код старого VB-приложения. Я думаю, что это должно сделать:

IDOC_INBOUND_ASYNCHRONOUS/TABLES/IDOC_CONTROL_REC_40/item
- IDOCTYP: WMMBID01
- MESTYP: WMMBXY
- SNDPRN: <value>
- SNDPRT: LI
- SNDPOR: <value>
- RCVPRN: <value>
- RCVPRT: LS
- EXPRSS: X

Глядя на исходный код старого приложения VB, теперь я должен добавить сегмент типа E1MBXYH со следующими заполненными полями:

- BLDAT: <date>
- BUDAT: <date>
- TCODE: MB31
- XBLNR: <value>
- BKTXT: <value>

Основываясь на догадках и некоторых сообщениях в блогах, я предполагаю, что мне нужно добавить этот сегмент как сегмент item к сегменту IDOC_DATA_REC_40.

Я предполагаю, что затем мне следует добавить item сегментов типа E1MBXYI для всех «записей», которые я хочу отправить в SAP, со следующими полями:

- MATNR: <value>
- WERKS: <value>
- LGORT: <value>
- CHARG: <value>
- BWART: 261 
- ERFMG: <value>
- SHKZG: H
- ERFME: <value>
- AUFNR: <value>
- SGTXT: <value>

Теперь, глядя на сегмент IDOC_DATA_REC_40 в MII, доступны следующие поля:

- SEGNAM
- MANDT
- DOCNUM
- SEGNUM
- PSGNUM
- HLEVEL
- SDATA

Я предполагаю, что имя сегмента должно быть в SEGNAM, а данные (правильно структурированные/распределенные) должны входить в SDATA. Я не уверен, что я должен указать в других полях (если что-нибудь). (У меня есть файл описания для этого типа IDOC, поэтому я знаю, как «структурировать» данные, которые я должен поместить в сегмент SDATA... считая пробелы, ура!)

Чтобы надеюсь пояснить, как должен быть структурирован IDOC, это (ссылка на) снимок экрана IDOC, опубликованного текущим приложением VB:

скриншот IDOC в SAP, показывающий структуру данных

Я надеюсь, что кто-то здесь может подтвердить, что я на правильном пути при заполнении сегментов и что есть кто-то, кто знает, какие поля я должен заполнить в сегментах данных.

С уважением,

Томас

P.S. Некоторые использованные ресурсы:

  1. Как создавать и отправлять Idoc в SAP с помощью SAP .Net Connector 3
  2. Документация IDOC SAP по движению товаров
  3. Как для отправки IDOC из SAP MII в SAP ERP

P.P.S. Полное раскрытие: я также разместил этот вопрос на доске вопросов и ответов сообщества SAP.


person tmachielse    schedule 14.06.2018    source источник


Ответы (2)


К сожалению, правильно работать с SAP IDocs не так просто, как кажется на первый взгляд. Возможно, было бы неплохо взглянуть на библиотеку классов SAP Java IDoc, как указано здесь:

SAP .Net Connector 3.0. Как отправить IDoc из системы, отличной от SAP?

Даже если вы не хотите переключаться на Java, его можно по крайней мере использовать в качестве справочного примера реализации, чтобы увидеть, как удаленные функциональные модули должны быть заполнены данными IDoc для отправки.

Библиотеку классов SAP Java IDoc можно загрузить вместе с SAP Java Connector с здесь.

person Trixx    schedule 18.06.2018

У меня нет под рукой системы MII, но лучше внимательно изучить документацию IDoc, чем читать на кофейной гуще. Может содержать полезные подсказки, как заполнить то или иное поле сегмента.

Перейдите в WE60 и введите имена сегментов (IDOC_CONTROL_REC_40/IDOC_DATA_REC_40) или имя определения IDoc IDOC_Asynchronous_Inbound.

введите здесь описание изображения

Это может быть не очень полезно, но лучше, чем ничего.

person Suncatcher    schedule 25.07.2018