1.需求背景
流程:1.MIGO 541移动类型,输入采购订单号 MIGO过账生成外向交货单(ERP)->2.外向交货单同步给EWM做DN过账(EWM->ERP),由于SAP标准功能并没有记录委外采购订单和交货单的关系。影响报表需求。故通过增强记录采购订单和交货单的对应关系。
2.方案
1.增强点:BADI:MB_MIGO_BADI,METHOD:CHECK_ITEM,收集MIGO 541移动类型填写的委外采购订单
METHOD if_ex_mb_migo_badi~check_item.
DATA ls_bapiret2 TYPE bapiret2.
DATA ls_po TYPE zss_po.
DATA lv_posnr TYPE zmmt0007-posnr.
FIELD-SYMBOLS : <zgodynpro> TYPE godynpro.
ASSIGN ('(SAPLMIGO)GODYNPRO') TO <zgodynpro>.
"通过本地类获取行项目数据
FIELD-SYMBOLS: <fs_kernel_class> TYPE any.
DATA: ref_kernel TYPE REF TO object,
lt_item TYPE goitem_t,
ls_item TYPE goitem.
FIELD-SYMBOLS: <fs_gohead> TYPE gohead.
ASSIGN ('(SAPLMIGO)GOHEAD') TO <fs_gohead>.
ASSIGN ('(SAPLMIGO)LCL_MIGO_GLOBALS=>KERNEL') TO <fs_kernel_class>.
ref_kernel ?= <fs_kernel_class>.
* 获取MIGO中的行项目数据
CALL METHOD ref_kernel->('GET_PT_GOITEM')
IMPORTING
e_pt_goitem = lt_item.
IF <zgodynpro>-action = 'A08'.
CLEAR: lv_posnr.
LOOP AT lt_item INTO ls_item WHERE bwart = '541'
OR bwart = '542'.
lv_posnr = lv_posnr + 10.
MOVE-CORRESPONDING ls_item TO ls_po.
ls_po-posnr = lv_posnr.
COLLECT ls_po INTO gt_po.
CLEAR: ls_item,
ls_po.
ENDLOOP.
ELSEIF <zgodynpro>-action = 'A03'
AND <fs_gohead> IS ASSIGNED
AND <fs_gohead>-mtsnr IS NOT INITIAL.
CLEAR: lv_posnr.
LOOP AT lt_item INTO ls_item WHERE bwart = '542'.
lv_posnr = lv_posnr + 10.
SELECT SINGLE ebeln INTO ls_po-ebeln "542冲销,通过交货单取541的委外采购订单
FROM zmmt0007
WHERE vbeln = <fs_gohead>-mtsnr
AND posnr = lv_posnr.
IF sy-subrc NE 0.
SELECT SINGLE ebeln INTO ls_po-ebeln "542冲销,通过交货单取541的委外采购订单
FROM zmmt0007
WHERE vbeln = <fs_gohead>-mtsnr.
ENDIF.
ls_po-zeile = ls_item-zeile.
ls_po-posnr = lv_posnr.
COLLECT ls_po INTO gt_po.
CLEAR: ls_po,
ls_item.
ENDLOOP.
ENDIF.
ENDMETHOD.
2.增强点:BADI:LE_SHP_DELIVERY_PROC,METHOD:SAVE_AND_PUBLISH_DOCUMENT,保存交货单和采购订单关联关系到自定义表ZMMT0007
METHOD if_ex_le_shp_delivery_proc~save_and_publish_document.
DATA: ls_zmmt0007 TYPE zmmt0007,
lt_zmmt0007 TYPE TABLE OF zmmt0007.
BREAK bakkf.
* EWM 委外采购订单->交货单->交货单过账流程,配合ZMMR024报表需求,增强记录采购订单和交货单的关联关系
* 一共两个增强点:
* 1.增强点:BADI:MB_MIGO_BADI,METHOD:CHECK_ITEM,收集MIGO 541移动类型填写的委外采购订单
* 2.增强点:BADI:LE_SHP_DELIVERY_PROC,METHOD:SAVE_AND_PUBLISH_DOCUMENT,保存交货单和采购订单关联关系到自定义表ZMMT0007
LOOP AT it_xlips INTO DATA(ls_lips).
READ TABLE zcl_im_mb_migo_badi=>gt_po INTO DATA(ls_po) WITH KEY posnr = ls_lips-posnr.
IF sy-subrc = 0 AND ls_po-ebeln IS NOT INITIAL.
ls_zmmt0007-vbeln = ls_lips-vbeln.
ls_zmmt0007-ebeln = ls_po-ebeln.
ls_zmmt0007-posnr = ls_lips-posnr.
ls_zmmt0007-create_user = sy-uname.
ls_zmmt0007-create_date = sy-datum.
ls_zmmt0007-create_time = sy-uzeit.
ls_zmmt0007-tcode = sy-tcode.
APPEND ls_zmmt0007 TO lt_zmmt0007.
ENDIF.
CLEAR: ls_zmmt0007,
ls_po,
ls_lips.
ENDLOOP.
IF lt_zmmt0007 IS NOT INITIAL.
MODIFY zmmt0007 FROM TABLE lt_zmmt0007.
ENDIF.
ENDMETHOD.
表定义