利用IDOC迁移采购订单.docx
- 文档编号:26578314
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:26
- 大小:197.73KB
利用IDOC迁移采购订单.docx
《利用IDOC迁移采购订单.docx》由会员分享,可在线阅读,更多相关《利用IDOC迁移采购订单.docx(26页珍藏版)》请在冰豆网上搜索。
利用IDOC迁移采购订单
需求将320系统里面的采购订单迁移到220系统里面来.
方法很多:
1.可以通过写程序将数据download到本地,然后将数据上传到220系统
2.用LSMW
3.ALE/IDOC
现在用第三种方法
首先用BD64配置MODELVIEW,
在各自的系统里面generatepartnerprofile
在220系统里面有如下的partnerprfile
这里的inboundprocesscode是关键,因为我的理解是标准的SAP是一个系统建立采购订单后,另外的系统里面根据这个采购订单来建立一个销售订单,所以在messagetypeorders下面是没有对应的processcode来创建采购订单的.
用T-CODEWE64,可以查看messagetype下面对应INBOUND,OUTBOUNDPROCESSCODE,
没有找到合适的,所以自己创建Inboundprocesscode
注意:
在关联inboundprocesscode和functionmodule之前,要用T-CODEBD51将这个函数添加进去,如下图
然后在Functionmodule里面创建采购订单
代码如下:
FUNCTION zidoc_input_po.
*"----------------------------------------------------------------------
*"*"Global Interface:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" VALUE(EBELN) LIKE EKKO-EBELN
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WF_ERROR_PROCESS
*"----------------------------------------------------------------------
DATA:
poheader LIKE bapimepoheader,
exppurchaseorder LIKE bapimepoheader-po_number,
expheader LIKE bapimepoheader,
exppoexpimpheader LIKE bapieikp,
return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
poitem TYPE STANDARD TABLE OF bapimepoitem WITH HEADER LINE,
poschedule TYPE STANDARD TABLE OF bapimeposchedule WITH HEADER LINE,
w_return LIKE LINE OF return,
poheaderx LIKE bapimepoheaderx,
poitemx TYPE STANDARD TABLE OF bapimepoitemx WITH HEADER LINE,
poschedulex TYPE STANDARD TABLE OF bapimeposchedulx WITH HEADER LINE,
potextheader TYPE STANDARD TABLE OF bapimepotextheader WITH HEADER LINE.
DATA:
l_segnum TYPE edi_number.
DATA:
lw_idoc_data TYPE edidd.
DATA:
lth_header14 TYPE e1edk14.
DATA:
lth_e1edk01 TYPE e1edk01.
DATA:
lw_input_value TYPE /sapdmc/ls_valuefromlow.
DATA:
lw_output_value TYPE /sapdmc/ls_valueto.
DATA:
lth_return TYPE zgimsg.
DATA:
lw_flag TYPE c.
DATA:
lw_sched_line TYPE eeten.
LOOP AT idoc_contrl.
CLEAR lw_sched_line.
LOOP AT idoc_data WHERE docnum EQ idoc_contrl-docnum.
*- Daten aus interner Tabelle in entsprechenden Strukturen merken -----*
CASE idoc_data-segnam .
WHEN 'E1EDK01' .
MOVE idoc_data-sdata TO lth_e1edk01.
* lth_e1edk01-zterm = 'MD30'.
* lth_e1edk01-bsart = 'T1'.
* lth_E1EDK01-BELNR = '1100000081'.
lw_input_value = lth_e1edk01-bsart.
IF sy-mandt = '210'.
poheader-doc_type = 'T1'.
ENDIF.
WHEN 'E1EDK14'.
***---- Header
MOVE idoc_data-sdata TO lth_header14.
CASE lth_header14-qualf.
WHEN '014'."Purch. Org.
CLEAR lw_flag.
* PERFORM frm_trans_field USING 'EKORG'
* CHANGING lth_header14-orgid
* lw_flag.
* IF LW_FLAG = 'X'.
* RETURN.
* ENDIF.
* poheader-purch_org = lth_header14-orgid.
IF sy-mandt = '210'.
poheader-purch_org = '1020'.
ENDIF.
poheader-purch_org = 'EU11'.
WHEN '009'."Purch. Group
* PERFORM frm_trans_field USING 'EKGRP'
* CHANGING lth_header14-orgid
* lw_flag.
* IF LW_FLAG = 'X'.
* RETURN.
* ENDIF.
poheader-pur_group = lth_header14-orgid.
IF sy-mandt = '210'.
poheader-pur_group = '101'.
endif.
poheader-pur_group = 'Z11'.
WHEN '011'.
PERFORM frm_trans_field USING 'BUKRS'
CHANGING lth_header14-orgid
lw_flag.
IF LW_FLAG = 'X'.
RETURN.
ENDIF.
poheader-comp_code = lth_header14-orgid.
IF sy-mandt = '210'..
poheader-comp_code = '1503'.
ENDIF.
WHEN '013'."doc_type no need to transfer
poheader-doc_type = lth_header14-orgid.
* poheader-doc_type = 'T1'.
ENDCASE.
*
MOVE 'X' TO poheaderx-doc_type.
MOVE 'X' TO poheaderx-comp_code.
MOVE 'X' TO poheaderx-creat_date.
MOVE 'X' TO poheaderx-created_by.
MOVE 'X' TO poheaderx-vendor.
MOVE 'X' TO poheaderx-purch_org.
MOVE 'X' TO poheaderx-pur_group.
WHEN 'E1EDK03'.
DATA:
lth_e1edk03 TYPE e1edk03.
CLEAR lth_e1edk03.
MOVE idoc_data-sdata TO lth_e1edk03.
IF lth_e1edk03-iddat = '012'..
poheader-creat_date = lth_e1edk03-datum.
ENDIF.
* IF idoc_data-sdata(3) = '012'.
* poheader-creat_date = idoc_data-sdata+3(8).
** elseif DOC_DATA-sdata(3) = '011'.*
*
* ENDIF.
* poheader-creat_date =
WHEN 'E1EDK04'.
WHEN 'E1EDK05'.
WHEN 'E1EDKA1'.
DATA:
lth_e1edka1 TYPE e1edka1.
CLEAR lth_e1edka1.
MOVE idoc_data-sdata TO lth_e1edka1.
IF lth_e1edka1-parvw = 'LF'. .
poheader-vendor = lth_e1edka1-partn.
IF sy-mandt = '210'.
poheader-vendor = '0000100002'.
ENDIF.
poheader-vendor = 'PV1012'.
ENDIF.
WHEN 'E1EDK02'.
WHEN 'E1EDK17'.
WHEN 'E1EDK18'.
WHEN 'E1EDK35'.
WHEN 'E1EDK36'.
WHEN 'E1EDKT1'.
WHEN 'E1EDP01'.
CLEAR poitem.
DATA:
lth_item01 TYPE e1edp01.
DATA:
lth_item19 TYPE e1edp19.
DATA:
lth_item20 TYPE e1edp20.
***--- Item
MOVE idoc_data-sdata TO lth_item01.
CLEAR l_segnum.
l_segnum = idoc_data-segnum .
poitem-po_item = lth_item01-posex.
poitem-quantity = lth_item01-menge.
poitem-plant = lth_item01-werks.
*---- Transfer plant
* PERFORM frm_trans_field USING 'WERKS'
* CHANGING lth_item01-werks
* lw_flag.
* IF LW_FLAG = 'X'.
* RETURN.
* ENDIF.
IF SY-MANDT = '210'.
poitem-plant = '1021'.
ELSEIF SY-MANDT = '220'.
poitem-plant = 'PL01'.
ENDIF.
poitem-stge_loc = lth_item01-lgort.
IF SY-MANDT = '210'.
poitem-stge_loc = 'T51'.
ELSE.
CLEAR poitem-stge_loc.
ENDIF.
CLEAR lw_idoc_data.
READ TABLE idoc_data INTO lw_idoc_data
WITH KEY segnam = 'E1EDP19'" item
psgnum = l_segnum.
CLEAR lth_item19.
MOVE lw_idoc_data-sdata TO lth_item19.
poitem-material = lth_item19-idtnr.
IF sy-mandt = '210'.
poitem-material = '42-LTT400-TT01'.
ENDIF.
IF SY-MANDT = '210'.
poitem-tax_code = 'J0'." JUST FOR TEST
ENDIF.
poitem-tax_code = 'V0'.
APPEND poitem.
MOVE poitem-po_item TO poitemx-po_item.
MOVE 'X' TO poitemx-po_itemx.
MOVE 'X' TO poitemx-material.
MOVE 'X' TO poitemx-plant.
MOVE 'X' TO poitemx-stge_loc.
MOVE 'X' TO poitemx-quantity.
MOVE 'X' TO poitemx-price_date.
MOVE 'X' TO poitemx-tax_code .
APPEND poitemx.
***---- Schedule line item
CLEAR poschedule.
CLEAR lw_idoc_data.
CLEAR lw_sched_line.
LOOP AT idoc_data WHERE segnam = 'E1EDP20'" schedule
AND psgnum = l_segnum.
CLEAR lth_item20.
lw_sched_line = lw_sched_line + 1.
MOVE idoc_data-sdata TO lth_item20.
poschedule-po_item = lth_item01-posex.
poschedule-sched_line = lw_sched_line.
poschedule-delivery_date = lth_item20-edatu.
poschedule-quantity = lth_item20-wmeng.
APPEND poschedule.
MOVE poschedule-po_item TO poschedulex-po_item.
MOVE poschedule-sched_line TO poschedulex-sched_line.
MOVE 'X' TO poschedulex-po_itemx.
MOVE 'X' TO poschedulex-sched_linex.
MOVE 'X' TO poschedulex-stat_date.
MOVE 'X' TO poschedulex-po_date.
MOVE 'X' TO poschedulex-delivery_date.
MOVE 'X' TO poschedulex-quantity.
APPEND poschedulex.
ENDLOOP.
WHEN 'E1CUCFG'.
WHEN 'E1EDL37'.
WHEN 'E1EDS01'.
ENDCASE.
ENDLOOP.
* potextheader-text_id = 'F01'.
potextheader-text_id = 'F17'.
potextheader-text_form = '*'.
potextheader-text_line = 'TESTVOLCANO'.
APPEND potextheader.
potextheader-text_id = 'F18'.
potextheader-text_form = '*'.
potextheader-text_line = 'TESTVOL2'.
APPEND potextheader.
CLEAR:
exppurchaseorder,expheader,exppoexpimpheader.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = poheader
poheaderx = poheaderx
IMPORTING
exppurchaseorder = exppurchaseorder
expheader = expheader
exppoexpimpheader = exppoexpimpheader
TABLES
return =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 IDOC 迁移 采购 订单