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.

No comments :