Hello,

Sign up to join our community!

Welcome Back,

Please sign in to your account!

Forgot Password,

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

You must login to ask a question.

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

SAP EWM Help Latest Questions

  • 0
  • 0
admin

Update Route in EWM Delivery – ABAP Sample code using Monitor

Create a Function module with following code, use following parameter in FM

Use Node WHRO (Outbound delivery Header Node

IV_LGNUM    TYPE     /SCWM/LGNUM
IT_DATA     TYPE     STANDARD TABLE
*Decleartion of variable
  DATA: lv_route          TYPE /scmb/de_route_id,
        lv_output         TYPE vbeln_vl,
        ls_proch_o        TYPE /scdl/dl_proch_o_upd_str,
        ls_transs         TYPE /scdl/dl_trans_upd_str,
        ls_header_control TYPE bapiobdlvhdrctrlchg,
        ls_heder_data     TYPE bapiobdlvhdrchg,
        lt_proch_o        TYPE /scdl/dl_proch_o_upd_tab,
        lt_transs         TYPE /scdl/dl_trans_upd_tab,
        lt_prochh         TYPE TABLE OF /scdl/dl_proch_o_upd_str,
        lt_trans          TYPE TABLE OF /scdl/dl_trans_upd_str,
        lt_return         TYPE TABLE OF bapiret2,
        ls_flds           TYPE sval,
        lt_flds           TYPE TABLE OF sval,
        lv_status         TYPE char30,
        lv_docno          TYPE /scwm/sp_docno_int.

*Decleartion of constant
  CONSTANTS: lc_rflag  TYPE kzroute  VALUE 'X',
             lc_title  TYPE sy-title VALUE 'Update Route',
             lc_update TYPE char1 VALUE 'U',
             lc_staus  TYPE char30 VALUE 'Not Started',
             lc_rno    TYPE char10 VALUE 'ROUTE',
             lc_msg    TYPE char1 VALUE 'I',
             lc_msge   TYPE char1 VALUE 'E',
             lc_tab    TYPE char20 VALUE 'LIKP',
             lc_msgs   TYPE char1 VALUE 'S',
             lc_gistat TYPE char30 VALUE 'Completed',
	     lc_not_started  TYPE char30 VALUE '@08\QGoods',
             lc_not_started1 TYPE char30 VALUE '@0A\QGoods Issue Not Posted@'.

*To update route at ODO on TU level
  TYPES : BEGIN OF lty_data_del,
            status_gi TYPE char30,
            docno_h   TYPE /scwm/sp_docno_int,
            docid     TYPE /scdl/dl_docid,
          END OF lty_data_del.

  TYPES : BEGIN OF lty_data_tu,
            status_gm TYPE char30,
            docno     TYPE /scwm/sp_docno_int,
            docid     TYPE /scdl/dl_docid,
          END OF lty_data_tu.

  DATA : lt_data1 TYPE TABLE OF lty_data_tu,
         lt_data  TYPE TABLE OF lty_data_del.

  lt_data = CORRESPONDING #( it_data ).


  DATA(ls_data) = VALUE #( lt_data[ 1 ] ).
  IF ls_data-docno_h IS INITIAL.
    lt_data1 = CORRESPONDING #( it_data ).
  ENDIF.

  CLEAR lt_flds.
  APPEND INITIAL LINE TO lt_flds ASSIGNING FIELD-SYMBOL(<lf_fldst>).
  <lf_fldst>-tabname = lc_tab.
  <lf_fldst>-fieldname = lc_rno.

*FM to trigger pop-up and capture value
  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
      popup_title     = lc_title
    TABLES
      fields          = lt_flds[]
    EXCEPTIONS
      error_in_fields = 1
      OTHERS          = 2.

  IF sy-subrc EQ 0.
    LOOP AT lt_flds ASSIGNING FIELD-SYMBOL(<lf_flds>).
      lv_route = <lf_flds>-value.
    ENDLOOP.
  ENDIF.


*Validate the Route
  IF lv_route IS NOT INITIAL.
    SELECT SINGLE route
      FROM tvro
      INTO lv_route
    WHERE route = lv_route.
    IF sy-subrc NE 0.
      MESSAGE s305(zlg001) WITH lv_route DISPLAY LIKE wmegc_severity_err.
      RETURN.
    ENDIF.
  ELSE.
    MESSAGE s306(zlg001) DISPLAY LIKE wmegc_severity_err.
    RETURN.
  ENDIF.

  IF lt_data IS NOT INITIAL.

    LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<lf_data>).
      IF <lf_data>-status_gi IS NOT INITIAL.
        lv_status = <lf_data>-status_gi.
        lv_docno = <lf_data>-docno_h.
      ELSE.
        DATA(ls_data_tu) = VALUE #( lt_data1[ docid = <lf_data>-docid ] OPTIONAL ).
        lv_docno = ls_data_tu-docno.
        IF ( ls_data_tu-status_gm = icon_red_light ) OR ( ls_data_tu-status_gm = lc_not_started )
            OR ( ls_data_tu-status_gm = lc_not_started1 ).
          lv_status = lc_staus.
        ENDIF.
      ENDIF.

*Check if delivery GI status is not completed

      IF lv_status NE lc_gistat.

*FM to reomve leading zero
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = lv_docno
          IMPORTING
            output = lv_output.

        IF lv_output IS NOT INITIAL.
          ls_heder_data-deliv_numb = lv_output.
          ls_heder_data-route = lv_route.
          ls_header_control-deliv_numb = lv_output.
          ls_header_control-route_flg = lc_rflag.
        ENDIF.

*FM to update route on delivery VL03N
        CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
          EXPORTING
            header_data    = ls_heder_data
            header_control = ls_header_control
            delivery       = ls_heder_data-deliv_numb
          TABLES
            return         = lt_return.

        IF sy-subrc = 0.
          SELECT a~*,
                 b~*
            INTO @DATA(ls_std) FROM /scdl/db_proch_o AS a
            INNER JOIN /scdl/db_trans AS b ON
            a~docid = b~docid WHERE a~docid = @<lf_data>-docid.
          ENDSELECT.

          ls_std-a-route_id = lv_route.
          ls_std-b-route_id = lv_route.

        ENDIF.

        ls_proch_o = ls_std-a.
        ls_transs = ls_std-b.
        CLEAR:ls_std-b,ls_std-a.

        ls_proch_o-objchg = lc_update.
        APPEND INITIAL LINE TO lt_prochh ASSIGNING FIELD-SYMBOL(<lf_proch>).
        <lf_proch> = ls_proch_o.
        CLEAR ls_proch_o.

        ls_transs-objchg = lc_update.
        APPEND INITIAL LINE TO lt_trans ASSIGNING FIELD-SYMBOL(<lf_trans>).
        <lf_trans> = ls_transs.
        CLEAR ls_transs.

        lt_proch_o = lt_prochh.
        lt_transs = lt_trans.

*FM to update route against ODO
        CALL FUNCTION '/SCDL/DBAL_DB_UPDATE'
          EXPORTING
            it_proch_o          = lt_proch_o
            it_trans            = lt_transs
          EXCEPTIONS
            /scdl/cx_dl_dbal_db = 1
            OTHERS              = 2.

        IF sy-subrc = 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
          MESSAGE TEXT-004 TYPE lc_msgs.
        ENDIF.

      ELSE.
        MESSAGE TEXT-002 TYPE lc_msg.
      ENDIF.
      CLEAR: lv_output,ls_heder_data,ls_header_control,lt_proch_o.
    ENDLOOP.
  ELSE.
    MESSAGE TEXT-003 TYPE lc_msge.
  ENDIF.

Related Questions

Leave an answer

Leave an answer