This Function module works for Goods Movement, Reversal, GR and GI
FUNCTION zdifm_goods_movement .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IV_DOCNO) TYPE /SCDL/DL_DOCNO_INT
*" VALUE(IV_REVERSAL) TYPE XFELD OPTIONAL
*" EXPORTING
*" VALUE(ET_MESSAGE) TYPE /SCDL/DM_MESSAGE_TAB
*"----------------------------------------------------------------------
DATA: lo_dlv_save TYPE REF TO /scwm/cl_dlv_management_prd,
lo_message TYPE REF TO /scdl/cl_dm_message,
lt_dlv TYPE /scwm/dlv_docid_item_tab,
ls_dlv TYPE /scwm/dlv_docid_item_str,
lv_gmcat TYPE /scdl/dl_doccat.
lo_dlv_save = /scwm/cl_dlv_management_prd=>get_instance( ).
SELECT i~docid, i~itemid, h~docno, h~doccat
FROM /scdl/db_proci_i AS i
INNER JOIN /scdl/db_proch_i AS h
ON h~docid = i~docid
INTO TABLE @DATA(lt_pdi)
WHERE h~docno = @iv_docno.
CHECK sy-subrc IS INITIAL.
LOOP AT lt_pdi INTO DATA(ls_pdi).
IF sy-tabix = 1.
lo_dlv_save->get_warehouse(
EXPORTING iv_doccat = ls_pdi-doccat
iv_docid = ls_pdi-docid
IMPORTING ev_whno = DATA(lv_lgnum) ).
ENDIF.
ls_dlv-docid = ls_pdi-docid.
ls_dlv-itemid = ls_pdi-itemid.
ls_dlv-doccat = ls_pdi-doccat.
APPEND ls_dlv TO lt_dlv.
ENDLOOP.
CHECK lt_dlv[] IS NOT INITIAL.
/scwm/cl_tm=>cleanup( iv_lgnum = lv_lgnum ).
"Reversal GM
IF iv_reversal IS NOT INITIAL.
CASE ls_pdi-doccat.
* Goods receipt
WHEN wmegc_doccat_pdi. "PDI Inbound delivery
"GRR Reverse Goods Receipt/SCDL/IF_DL_DOC_C=>SC_DOCCAT_GRR
lv_gmcat = /scwm/if_docflow_c=>sc_grr.
* Goods issue
WHEN wmegc_doccat_pdo "PDO Outbound del
OR /scdl/if_dl_doc_c=>sc_doccat_out_fd. "FDO Document type delivery
"GI (Goods Issue) /SCDL/IF_DL_DOC_C=>SC_DOCCAT_GI
lv_gmcat = /scwm/if_docflow_c=>sc_gir.
ENDCASE.
ELSE. "Create Goods Movement
CASE ls_pdi-doccat.
* Goods receipt
WHEN wmegc_doccat_pdi. "PDI Inbound delivery
"GR (Goods Receipt) /SCDL/IF_DL_DOC_C=>SC_DOCCAT_GR
lv_gmcat = /scwm/if_docflow_c=>sc_gr.
* Goods issue
WHEN wmegc_doccat_pdo "PDO Outbound del
OR /scdl/if_dl_doc_c=>sc_doccat_out_fd. "FDO Document type delivery
"GI (Goods Issue) /SCDL/IF_DL_DOC_C=>SC_DOCCAT_GI
lv_gmcat = /scwm/if_docflow_c=>sc_gi.
ENDCASE.
ENDIF.
/scwm/cl_goods_movement=>/scwm/if_gm_dlv~post_dlv(
EXPORTING it_dlv = lt_dlv
iv_gmcat = lv_gmcat
IMPORTING eo_message = lo_message ).
"Message handling
IF lo_message IS BOUND.
et_message = lo_message->get_messages( ).
IF et_message[] IS INITIAL.
##NEEDED
lo_dlv_save->save( IMPORTING ev_rejected = DATA(lv_flag_rejected)
et_message = et_message ).
ENDIF.
ENDIF. "lo_message IS BOUND.
LOOP AT et_message INTO DATA(ls_message)
WHERE msgty CA 'AXE'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0 AND
ls_message IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ENDIF.
* /scwm/cl_tm=>cleanup( iv_lgnum = lv_lgnum ).
CALL METHOD /scwm/cl_tm=>cleanup( ).
CALL FUNCTION '/SCWM/HUMAIN_REFRESH'.
ENDFUNCTION.
No comments :
Post a Comment