Jan 14, 2026

Sample Program of Function Module to Cancel Warehouse Task (SAP EWM)

 Function used:

  • /SCWM/TO_READ_HU - Get Handling Unit Information
  • /SCWM/TO_INIT_NEW - Initialize WT Processing
  • /SCWM/TO_CANCEL - Cancel Warehouse Task
  • /SCWM/HUMAIN_REFRESH - Refresh

FUNCTION ZFM_EWM_WT_CANCEL .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_LGNUM) TYPE  /SCWM/LGNUM
*"     REFERENCE(IV_HUIDENT) TYPE  /SCWM/HUIDENT
*"     REFERENCE(IV_TANUM) TYPE  /SCWM/TANUM
*"  CHANGING
*"     REFERENCE(CT_RETURN) TYPE  BAPIRET2_T
*"----------------------------------------------------------------------

    DATAlt_ordim_o TYPE /scwm/tt_ordim_o,
          lt_bapiret TYPE bapirettab,
          lt_cancl   TYPE /scwm/tt_cancl,
          ls_data    TYPE /scwm/ordim_l,
          ls_cancl   TYPE /scwm/cancl.

    IF iv_huident IS NOT INITIAL.
      "Get open TOs
      "This codes is for multiple TOs/WTs
      "Collect all WTs in Handling Unit
      CALL FUNCTION '/SCWM/TO_READ_HU'
        EXPORTING
          iv_lgnum       iv_lgnum
          iv_huident     iv_huident
        IMPORTING
          et_ordim_o_src lt_ordim_o
        EXCEPTIONS
          error          1
          OTHERS         2.

      IF sy-subrc IS INITIAL.
        LOOP AT lt_ordim_o INTO DATA(ls_ordim_o).
          ##ENH_OK MOVE-CORRESPONDING ls_ordim_o TO ls_data.
          MOVE ls_data-tanum TO ls_cancl-tanum.
          APPEND ls_cancl TO lt_cancl.
          CLEAR ls_cancl.
        ENDLOOP.
      ENDIF.

    ELSE.
      "This codes is for a single TO/WT
      IF iv_tanum IS NOT INITIAL.
        ls_cancl-tanum iv_tanum.
        APPEND ls_cancl TO lt_cancl.
        CLEAR ls_cancl.
      ENDIF.
    ENDIF.

    CHECK lt_cancl[] IS NOT INITIAL.

    SORT lt_cancl.
    DELETE ADJACENT DUPLICATES FROM lt_cancl COMPARING tanum.

    "Initialize WT Processing
    CALL FUNCTION '/SCWM/TO_INIT_NEW'
      EXPORTING
        iv_lgnum iv_lgnum.

    "Cancel WT/TO
    CALL FUNCTION '/SCWM/TO_CANCEL'
      EXPORTING
        iv_lgnum       iv_lgnum
*       IV_SUBST       = ' '
        iv_qname       sy-uname
        iv_update_task 'X'
        iv_commit_work abap_false
        it_cancl       lt_cancl
      IMPORTING
        et_bapiret     lt_bapiret.

    "Check for possibility of Error (E), Abort (A), or an abnormal termination (X)
    LOOP AT lt_bapiret TRANSPORTING NO FIELDS
                       WHERE type CA 'AXE'.
    ENDLOOP.

    IF sy-subrc IS INITIAL.
      "If true, roll back
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    ELSE.
      "commit work and wait to display new data after auto-refresh
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait abap_true.
      "Refresh
      CALL METHOD /scwm/cl_tm=>cleanup).
      CALL FUNCTION '/SCWM/HUMAIN_REFRESH'.
    ENDIF.

    IF lt_bapiret IS NOT INITIAL.
      LOOP AT lt_bapiret INTO DATA(ls_ret).
        IF ls_ret-row 0.
          DELETE lt_bapiret INDEX sy-tabix.
        ENDIF.
      ENDLOOP.
    ENDIF.

    ct_return[] lt_bapiret[].

ENDFUNCTION.

Jan 2, 2026

Create Warehouse Task by Outbound Delivery using Function Module /SCWM/TO_CREATE

Requirement:

Create Warehouse Task/TO number using Function Modules /SCWM/TO_CREATE


Solution:

Custom data types:

Structure: LTY_TR





Steps:

  1. Read Outbound DO table /SCDL/DB_PROCI_O with keys Document Number (DOCNO) and Item Number (ITEMNO)
  2. Populate structure LT_CREATE
  3. Call function /SCWM/TO_INIT_NEW to initiate WH process. Allocating memory by Warehouse
  4. Call function /SCWM/TO_CREATE to create WT/TO
  5. If creation process is successful, Call statement COMMIT WORK AND WAIT or Call function BAPI_TRANSACTION_COMMIT
  6. If Fails, Call statement ROLLBACK or Call function BAPI_TRANSACTION_ROLLBACK
  7. Flush/clean up memory using FM /SCWM/GM_CLEANUP.


Codes:

FUNCTION zfm_ewm_wt_create_obd.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_LGNUM) TYPE  /SCWM/LGNUM OPTIONAL
*"  CHANGING
*"     VALUE(CV_TANUM) TYPE  /SCWM/TANUM OPTIONAL
*"     VALUE(CT_TR) TYPE  ANY TABLE OPTIONAL
*"     VALUE(CT_LTAP_VB) TYPE  /SCWM/TT_LTAP_VB OPTIONAL
*"     VALUE(CT_RETURN) TYPE  BAPIRET2_T OPTIONAL
*"----------------------------------------------------------------------


  DATABEGIN OF lty_tr,
          docno  TYPE /scdl/dl_docno_int,
          itemno TYPE /scdl/dl_itemno,
          matnr  TYPE matnr,
          charg  TYPE charg_d,
          nsolm  TYPE /scwm/ltap_nsolm,
        END OF lty_tr.


  ##NEEDED
  DATAlt_create      TYPE /scwm/tt_to_create_int,
        ls_create      TYPE /scwm/s_to_create_int,
        lv_docno       TYPE /scdl/dl_docno_int,
        li_tr          LIKE STANDARD TABLE OF lty_tr"ty_ms2,
        li_tr_grp      LIKE STANDARD TABLE OF lty_tr"ty_ms2,
        ls_tr          LIKE ty_ms2,
        ls_matid_charg TYPE /scwm/s_matid_charg.

  li_tr[]     ct_tr[].
  li_tr_grp[] li_tr[].
  CHECK li_tr[] IS NOT INITIAL.
  SORT li_tr_grp BY docno.
  DELETE ADJACENT DUPLICATES FROM li_tr_grp COMPARING docno.

  "get delivery
  SELECT FROM /scdl/db_proci_o
    INTO TABLE @DATA(lt_proci)
    FOR ALL ENTRIES IN @li_tr
    WHERE docno  EQ @li_tr-docno
      AND itemno EQ @li_tr-itemno
    ORDER BY PRIMARY KEY.

  CHECK lt_proci[] IS NOT INITIAL.

  "Create warehouse task
  REFRESH lt_create.

  LOOP AT li_tr_grp INTO DATA(ls_tr_grp).

    CLEAR ls_create.

    LOOP AT li_tr ASSIGNING FIELD-SYMBOL(<ls_tr>)
                  WHERE docno ls_tr_grp-docno.

      READ TABLE lt_proci INTO DATA(ls_proci)
                          WITH KEY docno  <ls_tr>-docno
                                   itemno <ls_tr>-itemno.
      CHECK sy-subrc IS INITIAL.

      ls_create-procty        ls_proci-/scwm/procty.         "Process type
      ls_create-rdoccat       ls_proci-doccat.               "Doc Category
      ls_create-rdocid        ls_proci-docid.                "Ref doc
      ls_create-ritmid        ls_proci-itemid.               "Ref doc item
      ls_create-altme         ls_proci-uom.                  "Alternative UoM for Stockkeeping Unit
      ls_create-owner         ls_proci-stock_owner.          "Owner
      ls_create-owner_role    ls_proci-stock_owner_role.     "Owner_role
      ls_create-entitled      ls_proci-entitled.             "Entitled
      ls_create-entitled_role ls_proci-entitled_role.        "Entitled_role
      ls_create-single_to     abap_true.                     "Create Single WTs
      ls_create-cat           ls_proci-stock_category.       "Stock Type
      ls_create-anfme         <ls_tr>-nsolm.

      "Material ID
      CALL FUNCTION 'CONVERSION_EXIT_MDLPD_INPUT'
        EXPORTING
          input  <ls_tr>-matnr
        IMPORTING
          output ls_create-matid.

      "Batch ID
      TRY.
          ls_matid_charg-matid ls_create-matid.
          ls_matid_charg-charg <ls_tr>-charg.
          CALL METHOD /scwm/cl_batch_appl=>get_batchid_by_no
            EXPORTING
              iv_lgnum       iv_lgnum
              is_matid_charg ls_matid_charg
            IMPORTING
              ev_batchid     ls_create-batchid.
        CATCH /scwm/cx_batch_precheck.
          "Continue
      ENDTRY.

      APPEND ls_create TO lt_create.

    ENDLOOP.

    CALL FUNCTION '/SCWM/TO_INIT_NEW'
      EXPORTING
        iv_lgnum iv_lgnum.


    CALL FUNCTION '/SCWM/TO_CREATE'
      EXPORTING
        iv_lgnum   iv_lgnum
        it_create  lt_create
      IMPORTING
        ev_tanum   cv_tanum
        et_ltap_vb ct_ltap_vb
        et_bapiret ct_return.


    LOOP AT ct_return INTO DATA(ls_return)
                      WHERE type CA 'AXE'.
      EXIT.
    ENDLOOP.

    IF ls_return IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

    CALL FUNCTION '/SCWM/GM_CLEANUP'
      EXPORTING
        iv_save abap_true.

  ENDLOOP.

ENDFUNCTION.