Jun 21, 2026

Convert Warehouse from WM to EWM Vice Versa.

Function Modules to Convert EWM to WM Vice Versa


Data Delaration: Include LZDIFG_EWMTOP

FUNCTION-POOL zdifg_ewm.                    "MESSAGE-ID ..

DATAgt_whmap TYPE /scwm/tt_tmapwhnum.


Function: ZDIFM_EWM_TO_WM

FUNCTION zdifm_ewm_to_wm.
*"--------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_WHEWM) TYPE  /SCWM/LGNUM
*"  CHANGING
*"     VALUE(CV_WHWM) TYPE  HUM_LGNUM
*"--------------------------------------------------------------------

  IF gt_whmap[] IS INITIAL.
    SELECT * FROM /scwm/tmapwhnum INTO TABLE gt_whmap.
  ENDIF.

  cv_whwm = VALUE #( gt_whmap[ whnumwme = iv_whewm ]-whnumerp OPTIONAL ).

ENDFUNCTION.


Function: ZDIFM_WM_TO_EWM

FUNCTION zdifm_wm_to_ewm.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_WHWM) TYPE  HUM_LGNUM
*"  CHANGING
*"     VALUE(CV_WHEWM) TYPE  /SCWM/LGNUM
*"----------------------------------------------------------------------

  IF gt_whmap[] IS INITIAL.
    SELECT FROM /scwm/tmapwhnum INTO TABLE gt_whmap.
  ENDIF.

  cv_whewm VALUE #gt_whmap[ whnumerp iv_whwm ]-whnumerp OPTIONAL ).

ENDFUNCTION.



SAP EWM Sample Code for Goods Movement, Reversal, GR and GI

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
*"----------------------------------------------------------------------

  DATAlo_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~docidi~itemidh~docnoh~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=>cleanupiv_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->saveIMPORTING 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 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.