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.

No comments :