Как построить и отправить IDOC из MII в SAP ECC с помощью IDOC_Asynchronous_Inbound
У нас есть специализированное приложение, которое собирает данные из базы данных SQL-сервера, создает IDOC и затем "отправляет" этот IDOC в ECC. (Это приложение было написано на VB6 и использует SAPGUI 6 SDK для достижения этой цели.)
Я пытаюсь вывести это решение из эксплуатации и заменить его решением, встроенным в 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, показывающий структуру данных
Я надеюсь, что кто-то здесь может подтвердить, что я нахожусь на правильном пути в заполнении сегментов и что есть кто-то, кто знает, какие поля я должен заполнить в сегментах данных.
С уважением,
Томас
PS С некоторыми из ресурсов обращались:
- Как создавать и отправлять Idoc в SAP с помощью SAP .Net Connector 3
- Документация по движению материала IDOC SAP
- Как отправить IDOC из SAP MII в SAP ERP
PPS Полное раскрытие. Я также разместил этот вопрос на доске вопросов и ответов сообщества SAP.
2 ответа
К сожалению, правильно работать с SAP IDoc не так просто, как кажется на первый взгляд. Может быть, было бы неплохо взглянуть на библиотеку классов SAP Java IDoc, как упомянуто здесь:
SAP.Net Connector 3.0 - Как я могу отправить idoc из системы не-SAP?
Даже если вы не хотите переключаться на Java, его можно использовать по крайней мере в качестве справочного примера, чтобы увидеть, как модули удаленной функции должны заполняться данными IDoc для отправки.
Отсюда можно скачать библиотеку классов SAP Java IDoc вместе с SAP Java Connector.
У меня нет системы MII на моей стороне, но вам лучше тщательно изучить документацию IDoc, а не читать чайные листья. Он может содержать полезные советы, как заполнить то или иное поле сегмента.
Перейдите на WE60 и введите имена своих сегментов (IDOC_CONTROL_REC_40/IDOC_DATA_REC_40) или имя определения IDoc IDOC_Asynchronous_Inbound.
Это может быть не очень полезно, но лучше, чем ничего.