EXIDV2 from VEKP ?

Hi,
We have a requirement to pick EXIDV2 from VEKP.This is an enhancement to the existing report.The query is in Infoset.Tables used in join are KNVV,KNA1,VBBE,ZNCUSTHRCHRCY. Other table like vbap,vbfa,likp,vbbe were used as select single with individual query in record processing area.
Business the existing report to be modified to accomadate VEKP EXIDV2 as this contains the tracking number.
It would be multiple under a delivery implies if in a delivery their are 5 items and are packed in seperate boxes all five items will have different tracking number which would be avaliable in exidv2.
Can you please help me out in writing query ?
Code in record proessing
CLEAR: ORDER, ORDERLINE, DELIVERY.
fill in base order/delivery info (determined by VBBE line type)
IF VBBE-VBTYP = 'J'.   " DELIVERY LINE TYPE
  DELIVERY = VBBE-VBELN.
get corresponding order and order line from document flow
  SELECT SINGLE VBELV POSNV INTO (ORDER, ORDERLINE) FROM VBFA
    WHERE VBELN = VBBE-VBELN
      AND POSNN = VBBE-POSNR
      AND VBTYP_N = 'J'.
  VBBE-VBELN = ORDER.  " OVERLAY ORDER INTO DOCUMENT FIELD FOR RPT CALL
*SELECT EXIDV UP TO 1 ROWS INTO (TRKNUM) FROM VEKP
  WHERE VPOBJKEY = LIKP-VBELN.
*ENDSELECT.
ELSE.                  " ORDER LINE TYPE
  ORDER     = VBBE-VBELN.
  ORDERLINE = VBBE-POSNR.
if this order line has a conf qty of zero, check the pre-built VBBE
summary table to see if it has any unconf qty. Only keep the record
if it does and build a dummy record to reflect the unconf qty.
  IF VBBE-VMENG = 0.
    READ TABLE T_VBBE_SUM WITH KEY VBELN = VBBE-VBELN
                                   POSNR = VBBE-POSNR BINARY SEARCH.
    CHECK SY-SUBRC = 0. " ONLY KEEP IF ITS FOUND IN TABLE
    VBBE-VMENG = T_VBBE_SUM-UCQTY.
    VBBE-MBDAT = '99991231'.      " SET DUMMY DATE FOR UC QTY
  ENDIF.
ENDIF.
get order header,  credit info
CLEAR: OCDATE, CUSTPO, CRFLAG, CDFLAG,
       SALESORG, VBAK-AUTLF, OENTRYID, HDRBLOCK.
SELECT SINGLE AERDAT AERNAM ALIFSK AVKORG A~VTWEG
              AAUTLF ABSTNK C~CMGST
  INTO (OCDATE, OENTRYID, HDRBLOCK, SALESORG, VBAK-VTWEG,
        VBAK-AUTLF, CUSTPO, CRFLAG)
  FROM VBAK AS A
  INNER JOIN VBUK AS C ON AVBELN = CVBELN
  WHERE A~VBELN = ORDER.
IF CRFLAG = 'B'.
  CRFLAG = 'F'. " ONLY FILL WITH F IF DOCUMENT CREDIT STATUS NOT OK
ELSE.
  CRFLAG = ' '.
ENDIF.
IF VBAK-AUTLF = 'X'.
  CDFLAG = 'CD'.
ENDIF.
get order line info (route for points calculation), VBKD info
CLEAR: OCFLAG, VBAP-ROUTE, VBKD-KZAZU, BRAND, PRODH,UPCNUM.  "
SELECT SINGLE PRODH ROUTE MVGR1 EAN11
  INTO (PRODH,VBAP-ROUTE,BRAND,UPCNUM)
  FROM VBAP
WHERE VBELN = ORDER
   AND POSNR = ORDERLINE.
SELECT SINGLE KZAZU
INTO (VBKD-KZAZU)
FROM VBKD
WHERE VBELN = ORDER.
IF VBKD-KZAZU = 'X'.
  OCFLAG = 'OC'.
ENDIF.
get material status and ABC indicator
CLEAR: MSTAT, MABC.
SELECT SINGLE AVMSTA BMAABC INTO (MSTAT,MABC)
  FROM MVKE AS A
  INNER JOIN MARC AS B ON AMATNR = BMATNR
  WHERE A~MATNR = VBBE-MATNR
    AND A~VKORG = SALESORG
    AND A~VTWEG = VBAK-VTWEG
    AND B~WERKS = VBBE-WERKS.
get deployment indicator
CLEAR: DEPLOYIND.
SELECT ZNINVDPLIR
  FROM ZNDSBNW
  INTO DEPLOYIND
  UP TO 1 ROWS
  WHERE MATNR = VBBE-MATNR
    AND WERKS = VBBE-WERKS
    AND ZNDSBAPLCD = 'DP'.
ENDSELECT.
get points
CLEAR: POINTS.
CALL FUNCTION 'Z_NLB_CALCULATE_POINTS'
      EXPORTING  PLANT  = VBBE-WERKS
                 MATNR  = VBBE-MATNR
                 KWMENG = VBBE-VMENG
                 ROUTE  = VBAP-ROUTE
     IMPORTING   POINTS = POINTS
     EXCEPTIONS  SHIPTYPE_NOT_FOUND   = 1
                 POINTS_NOT_AVAILABLE = 2
                 PCC_NOT_FOUND        = 3
                 OTHERS               = 4.
for deliveries, check for a shipment to get appointment info
CLEAR: APPTDT, APPTTM.
IF VBBE-VBTYP = 'J'.   " DELIVERY LINE TYPE
  SELECT SINGLE BDPTEN BUPTEN INTO (APPTDT, APPTTM)
    FROM VTTP AS A
    INNER JOIN VTTK AS B ON ATKNUM = BTKNUM
    WHERE A~VBELN = DELIVERY
      AND B~TNDRST IN ('AC','CF','AW','NW').
ENDIF.
get requested delivery date, line block off first VBEP schedule line
CLEAR: RQDATE, LNBLOCK.
SELECT SINGLE EDATU LIFSP INTO (RQDATE,LNBLOCK) FROM VBEP
  WHERE VBELN = ORDER
    AND POSNR = ORDERLINE
    AND ETENR = 1.
for orders, get scheduled delivery date from VBEP
CLEAR: SCHDATE.
IF VBBE-VBTYP = 'C'.   " ORDER LINE TYPE
  IF VBBE-ETENR = 1.
    SCHDATE = RQDATE. "USE REQ DLVY DATE ALREADY COMPUTED
  ELSE.
    SELECT SINGLE EDATU INTO (SCHDATE) FROM VBEP
      WHERE VBELN = ORDER
        AND POSNR = ORDERLINE
        AND ETENR = VBBE-ETENR.
  ENDIF.
ELSE.               " DELIVERY LINE TYPE
for deliveries, get date from LIKP
  SELECT SINGLE LFDAT INTO (SCHDATE) FROM LIKP
    WHERE VBELN = DELIVERY.
ENDIF.
compute days late using scheduled and requested delivery dates
DAYSLATE = SCHDATE - RQDATE.
if this is a dummy unconf line, set days late to 999 and schdate to
dummy date
IF VBBE-MBDAT = '99991231'.
  DAYSLATE = 999.
  SCHDATE = '99991231'.
ENDIF.
get Delivery note comment (first 30 bytes) from order header
CLEAR: ORDCOMMENT.
TEXTNAME = ORDER. " SET NAME PARAMETER WITH ORDER NUMBER
CALL FUNCTION 'READ_TEXT'
       EXPORTING  ID       = 'Z006'
                  LANGUAGE = 'E'
                  NAME     = TEXTNAME
                  OBJECT   = 'VBBK'
       TABLES     LINES    = TXTLNS
       EXCEPTIONS ID                      = 1
                  LANGUAGE                = 2
                  NAME                    = 3
                  NOT_FOUND               = 4
                  OBJECT                  = 5
                  REFERENCE_CHECK         = 6
                  WRONG_ACCESS_TO_ARCHIVE = 7
                  OTHERS                  = 8.
check for successful return and then grab 1st comment line
IF SY-SUBRC = 0.
  LOOP AT TXTLNS.
    CASE SY-TABIX.
      WHEN 1. ORDCOMMENT = TXTLNS-TDLINE. " WILL BE TRUNCED TO 30 BYTES
      WHEN OTHERS. EXIT.
    ENDCASE.
  ENDLOOP.
ENDIF.
service level logic
CLEAR SERVICELEVEL.
IF MABC = 'A' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'B' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'C' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'A' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ELSEIF MABC = 'B' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ELSEIF MABC = 'C' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ENDIF.
Regards,
Rama
Message was edited by:
        Sai Rama

Hi Ankur,
I am not going into HU creation screen in VL02N. There is some setting on functional side to create the automatic TO and HU during outbound delivery creation.
When I save the delivery, an entry in HU header table (VEKP) gets created automatically. I want to populate the field VEKP-EXIDV2. But, the EXIT or BADI as mentioned in my previous post is not helping in this case.
I would appreciate if you can throw some light in resolving this problem.
Thanks.
Devendra

Similar Messages

  • Aims to allow user to input a PO (or a range of PO) and in turn present a tree structure output screen to user. By clicking on each level of the tree, the lower level data can be seen.

    START-OF-SELECTION.
      PERFORM get_ekes.
      PERFORM get_vepo.
      PERFORM get_vekp.
      PERFORM build_tree.
    END-OF-SELECTION.
      PERFORM display_tree.
    *&      Form  get_vepo
    *       text
    FORM get_vepo.
      SELECT venum
             vbeln
        FROM vepo INTO TABLE i_vepo
        FOR ALL ENTRIES IN i_ekes
        WHERE vbeln EQ i_ekes-vbeln.
    ENDFORM.                    "get_vepo
    *&      Form  get_vekp
    *       text
    FORM get_vekp.
      SELECT venum
             exidv2
        FROM vekp INTO TABLE i_vekp
        FOR ALL ENTRIES IN i_vepo
        WHERE venum EQ i_vepo-venum.
    ENDFORM.                    "get_vekp
    *&      Form  get_ekes
    *       text
    FORM get_ekes.
      SELECT ebeln
             vbeln
             vbelp
             xblnr
        FROM ekes INTO TABLE i_ekes
        WHERE ebeln IN s_ebeln.
    ENDFORM.                    "get_ekes
    *&      Form
    *       text
    *&      Form  build_tree
    *       text
    FORM build_tree.
      CLEAR : i_node, f_node.
      f_node-type = 'T'.
      f_node-name = 'Purchase Order'(002).
      f_node-tlevel = '01'.
      f_node-nlength = '25'.
      f_node-color = '5'.
      f_node-text1 = 'Purchase Document'.
      f_node-tlength1 = '20'.
      f_node-tcolor1 = '5'.
      f_node-text2 = 'Item Number'.
      f_node-tlength2 = '20'.
      f_node-tcolor2 = '5'.
      f_node-text3 = 'External Document'.
      f_node-tlength3 = '25'.
      f_node-tcolor3 = '5'.
      APPEND f_node TO i_node.
      CLEAR f_node.
      LOOP AT i_ekes INTO f_ekes.
        f_node-type = 'P'.
        f_node-tlevel = '02'.
        f_node-text1 = f_ekes-ebeln.
        f_node-tlength1 = '20'.
        f_node-tcolor1 = '3'.
        f_node-text2 = f_ekes-vbeln.
        f_node-tlength2 = '20'.
        f_node-tcolor2 = '3'.
        f_node-text3 = f_ekes-vbelp.
        f_node-tlength3 = '20'.
        f_node-tcolor3 = '3'.
        f_node-text4 = f_ekes-xblnr.
        f_node-tlength4 = '20'.
        f_node-tcolor4 = '3'.
        APPEND f_node TO i_node.
        CLEAR f_node.
        LOOP AT i_vepo INTO f_vepo WHERE vbeln EQ f_ekes-vbeln.
          f_node-type = 'P'.
          f_node-tlevel = '03'.
          f_node-text = f_vepo-vbeln.
          f_node-tlength = '20'.
          f_node-tcolor = '4'.
          f_node-text6 = f_vepo-venum.
          f_node-tlength6 = '20'.
          f_node-tcolor6 = '4'.
          APPEND f_node TO i_node.
          CLEAR f_node.
        ENDLOOP.
        LOOP AT i_vekp INTO f_vekp WHERE venum EQ f_vekp-venum.
          f_node-type = 'P'.
          f_node-tlevel = '04'.
          f_node-text = f_vekp-venum.
          f_node-tlength = '20'.
          f_node-tcolor = '5'.
          f_node-text6 = f_vekp-exidv2.
          f_node-tlength6 = '20'.
          f_node-tcolor6 = '5'.
          APPEND f_node TO i_node.
          CLEAR f_node.
        ENDLOOP.
      ENDLOOP.
    ENDFORM.                    "build_tree
    *&      Form  display_tree
    *       text
    FORM display_tree.
      CALL FUNCTION 'RS_TREE_CONSTRUCT'
        TABLES
          nodetab            = i_node
        EXCEPTIONS
          tree_failure       = 1
          id_not_found       = 2
          wrong_relationship = 3
          OTHERS             = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
        EXPORTING
          callback_program = sy-repid.
    ENDFORM.                    "display_tree
                        this is the code i developed but there is a problem in drop down.

    hi vineesh ,
    this is the full code
    TABLES : ekes, vepo, vekp.
    TYPES : BEGIN OF ivekp,
            venum TYPE vekp-venum,
            exidv2 TYPE vekp-exidv2,
      END OF ivekp,
      BEGIN OF ivepo,
        vbeln TYPE vepo-vbeln,
        venum TYPE vepo-venum,
        END OF ivepo,
        BEGIN OF iekes,
          ebeln TYPE ekes-ebeln,
          vbeln TYPE ekes-vbeln,
          vbelp TYPE ekes-vbelp,
          xblnr TYPE ekes-xblnr,
          END OF iekes.
    DATA : i_node TYPE TABLE OF snodetext,
           i_vekp TYPE TABLE OF ivekp,
           i_vepo TYPE TABLE OF ivepo,
           i_ekes TYPE TABLE OF iekes.
    DATA : f_node TYPE snodetext,
           f_vekp TYPE ivekp,
           f_vepo TYPE ivepo,
           f_ekes TYPE iekes.
    SELECT-OPTIONS :s_ebeln FOR ekes-ebeln.
    START-OF-SELECTION.
      PERFORM get_ekes.
      PERFORM get_vepo.
      PERFORM get_vekp.
      PERFORM build_tree.
    END-OF-SELECTION.
      PERFORM display_tree.
    *&      Form  get_vepo
    *       text
    FORM get_vepo.
      SELECT venum
             vbeln
        FROM vepo INTO TABLE i_vepo
        FOR ALL ENTRIES IN i_ekes
        WHERE vbeln EQ i_ekes-vbeln.
    ENDFORM.                    "get_vepo
    *&      Form  get_vekp
    *       text
    FORM get_vekp.
      SELECT venum
             exidv2
        FROM vekp INTO TABLE i_vekp
        FOR ALL ENTRIES IN i_vepo
        WHERE venum EQ i_vepo-venum.
    ENDFORM.                    "get_vekp
    *&      Form  get_ekes
    *       text
    FORM get_ekes.
      SELECT ebeln
             vbeln
             vbelp
             xblnr
        FROM ekes INTO TABLE i_ekes
        WHERE ebeln IN s_ebeln.
    ENDFORM.                    "get_ekes
    *&      Form
    *       text
    *&      Form  build_tree
    *       text
    FORM build_tree.
      CLEAR : i_node, f_node.
      f_node-type = 'T'.
      f_node-name = 'Purchase Order'(002).
      f_node-tlevel = '01'.
      f_node-nlength = '25'.
      f_node-color = '5'.
      f_node-text1 = 'Purchase Document'.
      f_node-tlength1 = '20'.
      f_node-tcolor1 = '5'.
      f_node-text2 = 'Item Number'.
      f_node-tlength2 = '20'.
      f_node-tcolor2 = '5'.
      f_node-text3 = 'External Document'.
      f_node-tlength3 = '25'.
      f_node-tcolor3 = '5'.
      APPEND f_node TO i_node.
      CLEAR f_node.
      LOOP AT i_ekes INTO f_ekes.
        f_node-type = 'P'.
        f_node-tlevel = '02'.
        f_node-text1 = f_ekes-ebeln.
        f_node-tlength1 = '20'.
        f_node-tcolor1 = '3'.
        f_node-text2 = f_ekes-vbeln.
        f_node-tlength2 = '20'.
        f_node-tcolor2 = '3'.
        f_node-text3 = f_ekes-vbelp.
        f_node-tlength3 = '20'.
        f_node-tcolor3 = '3'.
        f_node-text4 = f_ekes-xblnr.
        f_node-tlength4 = '20'.
        f_node-tcolor4 = '3'.
        APPEND f_node TO i_node.
        CLEAR f_node.
        LOOP AT i_vepo INTO f_vepo WHERE vbeln EQ f_ekes-vbeln.
          f_node-type = 'P'.
          f_node-tlevel = '03'.
          f_node-text = f_vepo-vbeln.
          f_node-tlength = '20'.
          f_node-tcolor = '4'.
          f_node-text6 = f_vepo-venum.
          f_node-tlength6 = '20'.
          f_node-tcolor6 = '4'.
          APPEND f_node TO i_node.
          CLEAR f_node.
        ENDLOOP.
        LOOP AT i_vekp INTO f_vekp WHERE venum EQ f_vekp-venum.
          f_node-type = 'P'.
          f_node-tlevel = '04'.
          f_node-text = f_vekp-venum.
          f_node-tlength = '20'.
          f_node-tcolor = '5'.
          f_node-text6 = f_vekp-exidv2.
          f_node-tlength6 = '20'.
          f_node-tcolor6 = '5'.
          APPEND f_node TO i_node.
          CLEAR f_node.
        ENDLOOP.
      ENDLOOP.
    ENDFORM.                    "build_tree
    *&      Form  display_tree
    *       text
    FORM display_tree.
      CALL FUNCTION 'RS_TREE_CONSTRUCT'
        TABLES
          nodetab            = i_node
        EXCEPTIONS
          tree_failure       = 1
          id_not_found       = 2
          wrong_relationship = 3
          OTHERS             = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
        EXPORTING
          callback_program = sy-repid.
    ENDFORM.                    "display_tree

  • Inbound Idoc Status

    Hi Gurus,
    I have Inbound Idoc which is working fine ,
    but it's status is showing
    51 Error: Application document not posted.
    What does this mean, My Idoc FM is doing all it's part which required.
    Can any please suggest me .
    Thanks ,
    Raj

    Hello,
             What you've coded looks good. Another way of error Handling can be found as below. In the below Example, I am validating the Handling Unit Number got from the IDoc.
    Validation for Handling Unit ID (EXIDV2 From IDOC) - Begin
      CLEAR: i_vekp.
      SELECT venum
             exidv
             exidv2
             FROM vekp INTO CORRESPONDING FIELDS OF
             TABLE i_vekp
             WHERE venum NE space AND
                   exidv NE space AND
                   exidv2 = wa_z1ctrlmm-exidv2.
      IF sy-subrc EQ 0.
        DESCRIBE TABLE i_vekp.
        IF sy-tfill GT 1.
          CLEAR: wa_idoc_status.
          CLEAR: wa_vendor.
          READ TABLE i_vendor INTO wa_vendor INDEX 1.
          ws_c_flag             = c_x.
          wa_idoc_status-docnum = wa_idoc_control-docnum.
          wa_idoc_status-status = c_51.
          wa_idoc_status-msgty  = c_e.
          wa_idoc_status-msgid  = c_msgclas.
          wa_idoc_status-msgno  = '004'.
          wa_idoc_status-msgv1  = wa_vendor-v_batch.
          APPEND wa_idoc_status TO i_idoc_status.
          CLEAR: wa_idoc_status.
          Here, I am not updating the IDOC_STATUS directly. Instead, I've taken one Temporary Table I_IDOC_STATUS and finally, after all the Validations are done & all the Statuses are updated in the I_IDOC_STATUS, I am updating the IDOC_STATUS Table at the end of the Function module as below.
    IF Err_Flag = space.
        wa_idoc_status-docnum = wa_idoc_control-docnum.
         wa_idoc_status-status = c_53.
         wa_idoc_status-msgty  = c_s.
         wa_idoc_status-msgid  = c_msgclas.
         wa_idoc_status-msgno  = '007'.
         append wa_idoc_status to I_IDoc_status.
    else.
         wa_idoc_status-docnum = wa_idoc_control-docnum.
         wa_idoc_status-status = c_51.
         wa_idoc_status-msgty  = c_e.
         wa_idoc_status-msgid  = c_msgclas.
         wa_idoc_status-msgno  = '004'.
         append wa_idoc_status to I_IDoc_status.
    endif.
    IDOC_STATUS[] = I_IDOC_STATUS[].
    ENDFUNCTION.
    This is how a typical Error Handling technique should be while processing a Custom Inbound Function Module. At any point in time during the Function Module, catching the Message, either Success or Failure is important otherwise, you may end up posting the IDoc with Status 51 or 62 or 64 Status which doesn't make any sense.
    Thanks and Regards,
    Venkat Phani Prasad Konduri

  • To fetch VEKP-EXIDV2

    Hello Experts ,
    I want to fetch VEKP-EXIDV2. I have Sales Order No (VBAK-VBELN).Please suggest any Function Module or Logic.
    Thanks.

    Hi,
    Do like this....
      SELECT vbeln
                    vbelv
             FROM vbfa
             INTO CORRESPONDING FIELDS OF TABLE it_vbfa
             WHERE vbtyp_n = 'J'
             AND   vbtyp_v = 'C'
             AND   vbelv  = vbak-vbeln.
      SELECT vpobjkey
               venum
               exidv2
              brgew
              gewei
             FROM vekp
             INTO CORRESPONDING FIELDS OF TABLE <your internl table>
             for all entries in it_vbfa
             WHERE vpobjkey = it_vbfa-vbeln.  ..
    Regards
    Debarshi

  • How to update the field VEKP-EXIDV2 in HU

    Hi,
    I need to update the field EXIDV2 in VEKP table. Do you know what function module to use? And please indicate the necessary fields to be used. Thanks.
    Lalyn

    Hi Prajith,
    I looked at the FM you suggested. But I think, that FM gives me the value of the EXIDV2. I should be changing the value EXIDV2 in VEKP.THanks anyway.
    Lalyn

  • Getting data back from ALV grid

    This looks like a topic discussed before but i still need some clearifications. I display an internal table in ALV grid, in editable format. user changes the data and presses A BUTTON. On doing that I need to re-capture the changes made in a internal table.
    I have used method "check_changed_data' but it doesnt seem to work. It keeps appending data in the internal table if the user changes it multiple times. please suggest me some ideas on how to go about it.
    Thanks.
    shiv

    Hi then i will give another code with OO that fits your requirement check...
    REPORT ZTEST  NO STANDARD PAGE HEADING
                            LINE-SIZE  200
                            LINE-COUNT 58
                            MESSAGE-ID ZZ.
    *                Include for Data Declarations
    INCLUDE ZSDR0057_DEL_HOLD_TOP.
    INCLUDE <ICON>.
    **Tables to Compare Before after the Data Change
    DATA: IT_VEKP_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
          IT_VEKP1 LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
          IT_VEKP1_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
          IT_FINAL_TMP LIKE IT_FINAL OCCURS 0 WITH HEADER LINE,
          IT_OCRC TYPE TABLE OF ZSD_OC_HOLD.
    DATA: L_VALID TYPE C,
          L_VALID1 TYPE C,
          V_FLAG,
          V_DATA_CHANGE.
    DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
    *       CLASS lcl_event_handler DEFINITION
    CLASS LCL_EVENT_HANDLER DEFINITION .
      PUBLIC SECTION .
        METHODS:
    **Hot spot Handler
        HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
                          IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,
    **User Command Handler
        HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
                                     IMPORTING E_UCOMM,
    **Double Click Handler
        HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
                                         IMPORTING E_ROW E_COLUMN,
    **Handler to Check the Data Change
        HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED
                             OF CL_GUI_ALV_GRID
                             IMPORTING ER_DATA_CHANGED
                                       E_ONF4
                                       E_ONF4_BEFORE
                                       E_ONF4_AFTER,
        HANDLE_TOOLBAR
            FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
                IMPORTING E_OBJECT E_INTERACTIVE.
    ENDCLASS.                    "lcl_event_handler DEFINITION
    *       CLASS lcl_event_handler DEFINITION for second screen
    CLASS LCL_EVENT_HANDLER1 DEFINITION .
      PUBLIC SECTION .
        METHODS:
    **User Command Handler
        HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
                                     IMPORTING E_UCOMM,
        HANDLE_TOOLBAR
            FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
                IMPORTING E_OBJECT E_INTERACTIVE.
    ENDCLASS.                    "lcl_event_handler1 DEFINITION
    *       CLASS lcl_event_handler IMPLEMENTATION
    CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
    *Handle Hotspot Click
      METHOD HANDLE_HOTSPOT_CLICK .
        PERFORM HANDLE_HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID ES_ROW_NO .
      ENDMETHOD.                    "lcl_event_handler
    *Handle User Command
      METHOD HANDLE_USER_COMMAND.
        PERFORM EVENT_UCOMM USING E_UCOMM.
      ENDMETHOD.                    "user_command
    *Handle Double Click
      METHOD  HANDLE_DOUBLE_CLICK.
        DATA X_FINAL TYPE T_FINAL.
        IF V_DATA_CHANGE IS INITIAL.
          IF E_COLUMN = 'ZZPROMDT' OR E_COLUMN = 'ZZOCHOLDRC'.
            READ TABLE IT_FINAL INDEX E_ROW INTO X_FINAL
                                             TRANSPORTING
                                             VBELN
                                             VGBEL
                                             VGPOS
                                             ZZPROMDT
                                             ZZOCHOLDRC.
            IF SY-SUBRC = 0.
              PERFORM GET_HU_DATA USING X_FINAL.
              PERFORM POPULATE_FIELDCAT2.
            ENDIF.
            CALL SCREEN 200.
          ENDIF.
        ELSE.
       MESSAGE I002 WITH 'Please save the data first and then double click'.
        ENDIF.
      ENDMETHOD.                    "handle_double_click
    **Handle Data Change
      METHOD HANDLE_DATA_CHANGED.
        DATA: X_CHANGE TYPE LVC_S_MODI,
              X_FINAL TYPE T_FINAL,
              X_OCRC TYPE ZSD_OC_HOLD,
              L_FLAG.
        LOOP AT ER_DATA_CHANGED->MT_GOOD_CELLS INTO X_CHANGE.
          IF X_CHANGE-FIELDNAME = 'ZZOCHOLDRC'.
            READ TABLE IT_FINAL INTO X_FINAL INDEX X_CHANGE-ROW_ID.
            IF SY-SUBRC = 0.
              READ TABLE IT_OCRC INTO X_OCRC WITH KEY
                                             ZZOCHOLDRC = X_CHANGE-VALUE
                                            TRANSPORTING ZZRCDESC.
              IF SY-SUBRC = 0.
                X_FINAL-ZZRCDESC = X_OCRC-ZZRCDESC.
                MODIFY IT_FINAL FROM X_FINAL INDEX X_CHANGE-ROW_ID
                                             TRANSPORTING ZZRCDESC.
                L_FLAG = 'X'.
              ENDIF.
            ENDIF.
          ENDIF.
          IF X_CHANGE-FIELDNAME = 'ZZPROMDT'.
            READ TABLE IT_FINAL INTO X_FINAL INDEX X_CHANGE-ROW_ID.
            IF SY-SUBRC = 0.
              X_FINAL-ZZPROMDT = X_CHANGE-VALUE.
              MODIFY IT_FINAL FROM X_FINAL INDEX X_CHANGE-ROW_ID
                                           TRANSPORTING ZZPROMDT.
              L_FLAG = 'X'.
            ENDIF.
          ENDIF.
        ENDLOOP.
        IF L_FLAG = 'X'.
          CLEAR V_DATA_CHANGE.
          V_DATA_CHANGE = 'X'.
        ENDIF.
      ENDMETHOD.                    "data_changed
      METHOD HANDLE_TOOLBAR.
        DATA: LS_TOOLBAR  TYPE STB_BUTTON.
    * append a separator to normal toolbar
        CLEAR LS_TOOLBAR.
        MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
    * append SAVE icon
        CLEAR LS_TOOLBAR.
        MOVE 'SAVE' TO LS_TOOLBAR-FUNCTION.
        MOVE ICON_SYSTEM_SAVE TO LS_TOOLBAR-ICON.
        MOVE 'Save' TO LS_TOOLBAR-QUICKINFO.
        MOVE '  Save  '  TO LS_TOOLBAR-TEXT.
        MOVE ' '  TO LS_TOOLBAR-DISABLED.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
        CLEAR LS_TOOLBAR.
    * append a separator to normal toolbar
        CLEAR LS_TOOLBAR.
        MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
    * append BACK icon
        CLEAR LS_TOOLBAR.
        MOVE 'BACK' TO LS_TOOLBAR-FUNCTION.
        MOVE ICON_SYSTEM_BACK TO LS_TOOLBAR-ICON.
        MOVE 'Back' TO LS_TOOLBAR-QUICKINFO.
        MOVE ' Back '  TO LS_TOOLBAR-TEXT.
        MOVE ' '  TO LS_TOOLBAR-DISABLED.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
        CLEAR LS_TOOLBAR.
      ENDMETHOD.                    "handle_toolbar
    ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
    *       CLASS lcl_event_handler1 IMPLEMENTATION
    CLASS LCL_EVENT_HANDLER1 IMPLEMENTATION.
    *Handle User Command
      METHOD HANDLE_USER_COMMAND.
        PERFORM EVENT_UCOMM1 USING E_UCOMM.
      ENDMETHOD.                    "user_command
      METHOD HANDLE_TOOLBAR.
        DATA: LS_TOOLBAR  TYPE STB_BUTTON.
    * append a separator to normal toolbar
        CLEAR LS_TOOLBAR.
        MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
    * append SAVE icon
        CLEAR LS_TOOLBAR.
        MOVE 'SAVE' TO LS_TOOLBAR-FUNCTION.
        MOVE ICON_SYSTEM_SAVE TO LS_TOOLBAR-ICON.
        MOVE 'Save' TO LS_TOOLBAR-QUICKINFO.
        MOVE ' Save  '  TO LS_TOOLBAR-TEXT.
        MOVE ' '  TO LS_TOOLBAR-DISABLED.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
        CLEAR LS_TOOLBAR.
    * append a separator to normal toolbar
        CLEAR LS_TOOLBAR.
        MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
    * append an Back icon
        CLEAR LS_TOOLBAR.
        MOVE 'BACK' TO LS_TOOLBAR-FUNCTION.
        MOVE ICON_SYSTEM_BACK TO LS_TOOLBAR-ICON.
        MOVE 'Back' TO LS_TOOLBAR-QUICKINFO.
        MOVE ' Back  '  TO LS_TOOLBAR-TEXT.
        MOVE ' '  TO LS_TOOLBAR-DISABLED.
        APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
        CLEAR LS_TOOLBAR.
      ENDMETHOD.                    "handle_toolbar
    ENDCLASS.                    "lcl_event_handler1 IMPLEMENTATION
    *&             Global Definitions
    DATA: "G_GRID TYPE REF TO CL_GUI_ALV_GRID,   "Grid for first report
          G_GRID1 TYPE REF TO CL_GUI_ALV_GRID,  "grid for second report
          G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"Container1
          G_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"container
          G_HANDLER TYPE REF TO LCL_EVENT_HANDLER, "handler
          G_HANDLER1 TYPE REF TO LCL_EVENT_HANDLER1. "handler
    DATA: OK_CODE LIKE SY-UCOMM,
          SAVE_OK LIKE SY-UCOMM,
          G_CONTAINER1 TYPE SCRFNAME VALUE 'ZSDR0057_DEL_HOLD_CONT1',
          G_CONTAINER2 TYPE SCRFNAME VALUE 'ZSDR0057_DEL_HOLD_CONT2',
          GS_LAYOUT TYPE LVC_S_LAYO,
          GS_LAYOUT1 TYPE LVC_S_LAYO.
    *- Fieldcatalog for First and second Report
    DATA: IT_FIELDCAT  TYPE  LVC_T_FCAT,
          X_FIELDCAT TYPE LVC_S_FCAT,
          IT_FIELDCAT1  TYPE  LVC_T_FCAT,
          X_FIELDCAT1 TYPE LVC_S_FCAT,
          LS_VARI  TYPE DISVARIANT.
    *                Selection screen
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_VBELN FOR V_LIKP-VBELN, "Delivery
                    S_VSTEL FOR V_LIKP-VSTEL, "Shipping Point
                    S_WERKS FOR V_LIPS-WERKS, "Plant
                    S_WADAT FOR V_VBEP-WADAT, "Pgi Date
                    S_TRSPG FOR V_LIKP-TRSPG OBLIGATORY,"Shp bolck Reason
                    S_OCHRC FOR V_VEKP-ZZOCHOLDRC MATCHCODE OBJECT
                                       ZZOCHOLDRC, "OC Reason Code
                    S_USERID FOR V_VBAK-ZZREP_USERID1."Rep User ID
    SELECTION-SCREEN END OF BLOCK B1.
    *                START-OF_SELECTION
    START-OF-SELECTION.
      CLEAR IT_LIKP.
      REFRESH IT_LIKP.
      SELECT VBELN
             VSTEL
             LFDAT
             KUNNR
             FROM LIKP
             INTO TABLE IT_LIKP
             WHERE VBELN IN S_VBELN
              AND  VSTEL IN S_VSTEL
              AND  WADAT IN S_WADAT
              AND  WADAT_IST = '00000000'
              AND TRSPG IN S_TRSPG.
      IF SY-SUBRC <> 0.
        CLEAR V_FLAG.
        V_FLAG = 'X'.
      ENDIF.
      IF V_FLAG = ' '.
    **Populating the Delivery Item Data
        PERFORM GET_DEL_ITEM_DATA.
    **Getting the PGI DATE & USERID
        PERFORM GET_USERID.
    **Getting the Promise DATE & OC HOLD RC
        PERFORM GET_VEKP_DATA.
    **get the Reason codes
        PERFORM SELECT_OCHOLDRC.
        IF NOT IT_LIPS[] IS INITIAL
         AND  NOT IT_VBAK[] IS INITIAL
         AND  NOT IT_VEKP_TMP[] IS INITIAL.
    ** Populating the Final Internaltable
          PERFORM POPULATE_FINAL_TABLE.
        ENDIF.
      ENDIF.
    *                END-OF-SELECTION.
    END-OF-SELECTION.
      IF NOT IT_FINAL[] IS INITIAL.
        CALL SCREEN 100. "Calling the First Screen
      ELSE.
        MESSAGE I002 WITH 'NO DATA FOR THE SELECTION'(004).
      ENDIF.
    *       MODULE PBO OUTPUT                                             *
    MODULE PBO OUTPUT.
      DATA: LS_EDIT TYPE LVC_S_STYL, "to find the edit in output
            LT_EDIT TYPE LVC_T_STYL, "to find the edit in output
            V_INDEX LIKE SY-TABIX,
            LS_OUTTAB TYPE T_FINAL.
      SET PF-STATUS 'MAIN100'.
      SET TITLEBAR 'MAIN100'.
      IF G_CUSTOM_CONTAINER IS INITIAL.
    **Initializing the grid and calling the fm to Display the O/P
        PERFORM CREATE_AND_INIT_ALV.
      ENDIF.
    ENDMODULE.                    "PBO OUTPUT
    *       MODULE PAI INPUT                                              *
    MODULE PAI INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'EXIT'.
          LEAVE TO SCREEN 0.
        WHEN 'CANC'.
          LEAVE TO SCREEN 0.
        WHEN OTHERS.
    *     do nothing
      ENDCASE.
    ENDMODULE.                    "pai INPUT
    *&      Form  GET_DEL_ITEM_DATA
    *       Populating the Delivery Item Data
    FORM GET_DEL_ITEM_DATA .
      IF NOT IT_LIKP[] IS INITIAL.
    **-Getting the name of Ship-to-party
        SELECT KUNNR
              NAME1
              INTO TABLE IT_KNA1
              FROM KNA1
              FOR ALL ENTRIES IN IT_LIKP[]
              WHERE KUNNR = IT_LIKP-KUNNR.
    **-Getting Delivery Item Data
        SELECT VBELN
               POSNR
               MATNR
               WERKS
               ARKTX
               VGBEL
               VGPOS
               ZZCONPATH
               INTO TABLE IT_LIPS
               FROM LIPS
               FOR ALL ENTRIES IN IT_LIKP[]
               WHERE VBELN = IT_LIKP-VBELN
                   AND WERKS IN S_WERKS.
      ENDIF.
    ENDFORM.                    " GET_DEL_ITEM_DATA
    *&      Form  get_userid
    *       Getting the  USERID
    FORM GET_USERID .
      IF NOT IT_LIPS[]  IS INITIAL.
    **-Getting the USERID
        SELECT VBELN
               ZZREP_USERID1
               INTO TABLE IT_VBAK
               FROM VBAK
               FOR ALL ENTRIES IN IT_LIPS[]
               WHERE VBELN = IT_LIPS-VGBEL
                  AND ZZREP_USERID1 IN S_USERID.
      ENDIF.
    ENDFORM.                    " get_userid
    *&      Form  populate_final_table
    *       Populating the Final Internaltable
    FORM POPULATE_FINAL_TABLE .
      DATA: L_TABIX LIKE SY-TABIX.
      CLEAR IT_FINAL.
      REFRESH IT_FINAL.
      SORT IT_VEKP_TMP BY ZZPROMDT ZZSONUM ZZOCHOLDRC.
      DATA IT_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE.
      DATA IT_VEKP_TMP1 LIKE IT_VEKP OCCURS 0 WITH HEADER LINE.
      CLEAR IT_VEKP_TMP1[].
      IT_VEKP_TMP1[] = IT_VEKP_TMP[].
      LOOP AT IT_VEKP_TMP.
        MOVE IT_VEKP_TMP TO IT_TMP.
        CLEAR IT_TMP-EXIDV.
        COLLECT IT_TMP.
      ENDLOOP.
      CLEAR IT_VEKP_TMP[].
      IT_VEKP_TMP[] =  IT_TMP[] .
    LOOP AT IT_VEKP_TMP.
        L_TABIX = SY-TABIX.
        READ TABLE IT_VEKP_TMP1 WITH KEY INHALT = IT_VEKP_TMP-INHALT
                                    ZZSONUM = IT_VEKP_TMP-ZZSONUM
                                    ZZPROMDT = IT_VEKP_TMP-ZZPROMDT
                                    ZZOCHOLDRC = IT_VEKP_TMP-ZZOCHOLDRC
                                    VEMNG = IT_VEKP_TMP-VEMNG.
        IF SY-SUBRC = 0.
          IT_VEKP_TMP-EXIDV = IT_VEKP_TMP1-EXIDV.
          MODIFY IT_VEKP_TMP INDEX L_TABIX.
        ENDIF.
      ENDLOOP.
      LOOP AT IT_LIPS.
        MOVE-CORRESPONDING IT_LIPS TO IT_FINAL.
        READ TABLE IT_LIKP WITH KEY VBELN = IT_LIPS-VBELN.
        IF SY-SUBRC = 0.
          IT_FINAL-VSTEL = IT_LIKP-VSTEL.
          IT_FINAL-LFDAT = IT_LIKP-LFDAT.
        ENDIF.
        READ TABLE IT_KNA1 WITH KEY KUNNR = IT_LIKP-KUNNR.
        IF SY-SUBRC = 0.
          IT_FINAL-NAME1 = IT_KNA1-NAME1.
        ENDIF.
        READ TABLE IT_VBAK WITH KEY VBELN = IT_LIPS-VGBEL.
        IF SY-SUBRC = 0.
          IT_FINAL-ZZREP_USERID1 = IT_VBAK-ZZREP_USERID1.
        ENDIF.
        READ TABLE IT_SONUM WITH KEY VGBEL = IT_LIPS-VGBEL
                                     VGPOS = IT_LIPS-VGPOS.
        IF SY-SUBRC = 0.
          LOOP AT IT_VEKP_TMP WHERE ZZSONUM = IT_SONUM-ZZSONUM
                                 AND INHALT = IT_LIPS-VBELN.
            IF NOT IT_VEKP_TMP-ZZPROMDT+0(4) = '0000'.
              IT_FINAL-ZZPROMDT = IT_VEKP_TMP-ZZPROMDT.
            ELSE.
              IT_FINAL-ZZPROMDT = '00000000'.
            ENDIF.
            IT_FINAL-ZZOCHOLDRC = IT_VEKP_TMP-ZZOCHOLDRC.
            IT_FINAL-VEMNG = IT_VEKP_TMP-VEMNG.
            IT_FINAL-ZZSONUM = IT_VEKP_TMP-ZZSONUM.
            IT_FINAL-EXIDV = IT_VEKP_TMP-EXIDV.
            APPEND IT_FINAL.
          ENDLOOP.
          IF SY-SUBRC <> 0.
            IT_FINAL-ZZPROMDT = '00000000'.
            IT_FINAL-ZZOCHOLDRC = ' '.
            IT_FINAL-VEMNG = '  '.
            IT_FINAL-FLAG = 'X'.
            APPEND IT_FINAL.
            CLEAR IT_FINAL.
          ENDIF.
        ENDIF.
      ENDLOOP.
      DELETE IT_FINAL WHERE ZZOCHOLDRC NOT IN S_OCHRC[].
      DELETE IT_FINAL WHERE ZZREP_USERID1 NOT IN S_USERID[].
      DELETE IT_FINAL WHERE WERKS NOT IN S_WERKS[].
      IF NOT IT_ZSDOCHOLD[] IS INITIAL.
        LOOP AT IT_FINAL.
          READ TABLE IT_ZSDOCHOLD WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
          IF SY-SUBRC = 0.
            IT_FINAL-ZZRCDESC = IT_ZSDOCHOLD-ZZRCDESC.
            MODIFY IT_FINAL.
          ENDIF.
        ENDLOOP.
      ENDIF.
      IT_FINAL_TMP[] = IT_FINAL[].
      CLEAR IT_FINAL.
    ENDFORM.                    " populate_final_table
    *&      Form  get_vekp_data
    *       Populating Promise Date and Order Control Hold Reason Code
    FORM GET_VEKP_DATA .
      CLEAR: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
      REFRESH: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
      LOOP AT IT_LIPS.
        MOVE-CORRESPONDING IT_LIPS TO IT_SONUM.
        CONCATENATE IT_LIPS-VGBEL IT_LIPS-VGPOS INTO IT_SONUM-ZZSONUM.
        APPEND IT_SONUM.
        CLEAR IT_SONUM.
      ENDLOOP.
      IF NOT IT_SONUM[] IS INITIAL.
        SELECT EXIDV
               INHALT
               ZZSONUM
               ZZPROMDT
               ZZOCHOLDRC
              INTO TABLE IT_VEKP
              FROM VEKP
              FOR ALL ENTRIES IN IT_SONUM[]
              WHERE ZZSONUM = IT_SONUM-ZZSONUM
                 AND ZZOCHOLDRC IN S_OCHRC.
        SELECT  EXIDV INHALT VEMNG
                ZZSONUM
                INTO TABLE IT_QUANT
                FROM ZVEKPO
                FOR ALL ENTRIES IN IT_SONUM[]
                WHERE ZZSONUM = IT_SONUM-ZZSONUM.
        IF SY-SUBRC = 0.
          LOOP AT IT_VEKP.
            READ TABLE IT_QUANT WITH KEY EXIDV = IT_VEKP-EXIDV
                                         INHALT = IT_VEKP-INHALT
                                         ZZSONUM = IT_VEKP-ZZSONUM.
            IF SY-SUBRC = 0.
              IT_VEKP-VEMNG = IT_QUANT-VEMNG.
              MODIFY IT_VEKP.
            ENDIF.
          ENDLOOP.
          IT_VEKP_TMP[] = IT_VEKP[].
          SELECT ZZOCHOLDRC
                 ZZRCDESC
                 INTO TABLE IT_ZSDOCHOLD
                 FROM ZSD_OC_HOLD
                 FOR ALL ENTRIES IN IT_VEKP[]
                 WHERE ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
        ENDIF.
      ENDIF.
    ENDFORM.                    " get_vekp_data
    *&      Form  SELECT_OCHOLDRC
    *       Selecting the Reason Codes and Descriptions
    FORM SELECT_OCHOLDRC .
      SELECT *
             FROM ZSD_OC_HOLD
             INTO TABLE IT_OCRC.
    ENDFORM.                    " select_OCHOLDRC
    *&      Form  CREATE_AND_INIT_ALV
    *       Creating the ALV grid and initializing
    FORM CREATE_AND_INIT_ALV .
      DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
      CREATE OBJECT G_CUSTOM_CONTAINER
             EXPORTING CONTAINER_NAME = G_CONTAINER1.
      CREATE OBJECT G_GRID
             EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
    * Set a titlebar for the grid control
      GS_LAYOUT-STYLEFNAME = 'HANDLE_STYLE'.
      GS_LAYOUT-GRID_TITLE = TEXT-003.
      GS_LAYOUT-CWIDTH_OPT = 'X'.
      GS_LAYOUT-NO_ROWMARK = 'X'.
      GS_LAYOUT-ZEBRA = SPACE."'X'.
      GS_LAYOUT-INFO_FNAME  = SPACE.
      GS_LAYOUT-CTAB_FNAME  = SPACE.
      CALL METHOD G_GRID->REGISTER_EDIT_EVENT
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
      CREATE OBJECT G_HANDLER.
      SET HANDLER G_HANDLER->HANDLE_USER_COMMAND FOR G_GRID.
      SET HANDLER G_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID.
      SET HANDLER G_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID.
      SET HANDLER G_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID.
      SET HANDLER G_HANDLER->HANDLE_TOOLBAR FOR G_GRID.
    * setting focus for created grid control
      CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
        EXPORTING
          CONTROL = G_GRID.
    * Build fieldcat and set editable for date and reason code
    * edit enabled. Assign a handle for the dropdown listbox.
      PERFORM BUILD_FIELDCAT.
    * Optionally restrict generic functions to 'change only'.
    *   (The user shall not be able to add new lines).
      PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
      PERFORM DISABLE_EDIT_FIELDS.
    **Vaiant to save the layout
      LS_VARI-REPORT      = SY-REPID.
      LS_VARI-HANDLE      = SPACE.
      LS_VARI-LOG_GROUP   = SPACE.
      LS_VARI-USERNAME    = SPACE.
      LS_VARI-VARIANT     = SPACE.
      LS_VARI-TEXT        = SPACE.
      LS_VARI-DEPENDVARS  = SPACE.
    * Define a drop down table.
      PERFORM SET_DRDN_TABLE.
    **Calling the Method for ALV output
      CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
          IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
          IS_VARIANT           = LS_VARI
          IS_LAYOUT            = GS_LAYOUT
          I_SAVE               = 'A'
        CHANGING
          IT_FIELDCATALOG      = IT_FIELDCAT
          IT_OUTTAB            = IT_FINAL[].
    * Set editable cells to ready for input initially
      CALL METHOD G_GRID->SET_READY_FOR_INPUT
        EXPORTING
          I_READY_FOR_INPUT = 1.
      CALL METHOD G_GRID->SET_TOOLBAR_INTERACTIVE.
    ENDFORM.                               "CREATE_AND_INIT_ALV
    *&      Form  EXCLUDE_TB_FUNCTIONS
    *       Excluding the ALV functions
    FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
    * Only allow to change data not to create new entries (exclude
    * generic functions).
      DATA LS_EXCLUDE TYPE UI_FUNC.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
    ENDFORM.                               " EXCLUDE_TB_FUNCTIONS
    *&      Form  build_fieldcat
    *       Fieldcatalog
    FORM BUILD_FIELDCAT .
      DATA:L_POS TYPE I VALUE 1.
      CLEAR: L_POS.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Shpt'(012).
      X_FIELDCAT-FIELDNAME = 'VSTEL'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '4'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Con Path'(013).
      X_FIELDCAT-FIELDNAME = 'ZZCONPATH'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '8'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Plant'(014).
      X_FIELDCAT-FIELDNAME = 'WERKS'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '5'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Del Date'(015).
      X_FIELDCAT-FIELDNAME = 'LFDAT'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '10'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-COLTEXT = 'Prom Date'(016).
    *  X_FIELDCAT-SCRTEXT_M = 'Prom Date'(016).
      X_FIELDCAT-FIELDNAME = 'ZZPROMDT'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '10'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-EDIT = 'X'.
    *  X_FIELDCAT-HOTSPOT = 'X'.
      X_FIELDCAT-DATATYPE = 'DATS'.
      X_FIELDCAT-INTTYPE = 'D'.
      X_FIELDCAT-REF_TABLE = 'VEKP'.
      X_FIELDCAT-REF_FIELD = 'ZZPROMDT'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR  X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Ship-To-Name'(017).
      X_FIELDCAT-FIELDNAME = 'NAME1'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '40'.
      X_FIELDCAT-EMPHASIZE = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'SalesOrder#'(018).
      X_FIELDCAT-FIELDNAME = 'VGBEL'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '10'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = 'X'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Item'(019).
      X_FIELDCAT-FIELDNAME = 'VGPOS'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-OUTPUTLEN = '5'.
      X_FIELDCAT-HOTSPOT = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Material'(020).
      X_FIELDCAT-FIELDNAME = 'MATNR'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '18'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Materal Desc'(021).
      X_FIELDCAT-FIELDNAME = 'ARKTX'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '40'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'D.O.Item Qty'(022).
      X_FIELDCAT-FIELDNAME = 'VEMNG'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '13'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'RC'(023).
      X_FIELDCAT-FIELDNAME = 'ZZOCHOLDRC'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '3'.
      X_FIELDCAT-EDIT = 'X'.
      X_FIELDCAT-DRDN_HNDL = '1'.
      X_FIELDCAT-DRDN_ALIAS = 'X'.
    *  X_FIELDCAT-DRDN_FIELD = 'DROP_DOWN_HANDLE'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
    *  X_FIELDCAT-SCRTEXT_M = 'OC HOLD RC Desc'.
    *  X_FIELDCAT-FIELDNAME = 'ZZRCDESC'.
    *  X_FIELDCAT-TABNAME = 'IT_FINAL'.
    *  X_FIELDCAT-COL_POS    = L_POS.
    *  X_FIELDCAT-OUTPUTLEN = '20'.
    *  X_FIELDCAT-EDIT = 'X'.
    *  X_FIELDCAT-HOTSPOT = ' '.
    *  APPEND X_FIELDCAT TO IT_FIELDCAT.
    *  CLEAR X_FIELDCAT.
    *  L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Delivery'(024).
      X_FIELDCAT-FIELDNAME = 'VBELN'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '10'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = 'X'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Item'(025).
      X_FIELDCAT-FIELDNAME = 'POSNR'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '5'.
      X_FIELDCAT-EMPHASIZE = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
      X_FIELDCAT-SCRTEXT_M = 'Rep User Id'(026).
      X_FIELDCAT-FIELDNAME = 'ZZREP_USERID1'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '11'.
      X_FIELDCAT-EMPHASIZE = ' '.
      X_FIELDCAT-HOTSPOT = ' '.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
    ENDFORM.                    " build_fieldcat
    *&      Form  set_drdn_table
    *       Setting the Drop down for the Reason code
    FORM SET_DRDN_TABLE.
      DATA: X_OCRC LIKE LINE OF IT_OCRC.
      DATA:LT_DRAL TYPE LVC_T_DRAL,
            LS_DRAL TYPE LVC_S_DRAL,
            L_DRDN(25) TYPE C.
      LOOP AT IT_OCRC INTO X_OCRC.
      CONCATENATE X_OCRC-ZZOCHOLDRC ' ' ' ' ' ' X_OCRC-ZZRCDESC INTO L_DRDN
    SEPARATED BY SPACE.
    * First listbox (handle '1').
        LS_DRAL-HANDLE = '1'.
        LS_DRAL-VALUE =  L_DRDN.
        LS_DRAL-INT_VALUE = X_OCRC-ZZOCHOLDRC.
        APPEND LS_DRAL TO LT_DRAL.
      ENDLOOP.
    **Setting the Drop down table for Reason Code
      CALL METHOD G_GRID->SET_DROP_DOWN_TABLE
        EXPORTING
          IT_DROP_DOWN_ALIAS = LT_DRAL.
    ENDFORM.                               " set_drdn_table
    *&      Form  handle_hotspot_click
    *      Handling the Hotspot
    FORM HANDLE_HOTSPOT_CLICK USING I_ROW_ID TYPE LVC_S_ROW
                                    I_COLUMN_ID TYPE LVC_S_COL
                                    IS_ROW_NO TYPE LVC_S_ROID.
      READ TABLE IT_FINAL INDEX I_ROW_ID  .
      IF SY-SUBRC = 0.
        IF I_COLUMN_ID-FIELDNAME = 'VGBEL'.
          PERFORM FORM_REFRESH.
          SET PARAMETER ID 'AUN' FIELD IT_FINAL-VGBEL.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
        ENDIF.
    **if user clicks on Delivery
        IF I_COLUMN_ID-FIELDNAME = 'VBELN'.
          PERFORM FORM_REFRESH.
          SET PARAMETER ID 'VL' FIELD IT_FINAL-VBELN.
          CALL TRANSACTION 'VL02N' AND SKIP FIRST SCREEN.
        ENDIF.
      ENDIF.
    ENDFORM .                    "handle_hotspot_click
    *&      Form  FORM_REFRESH for first list
    FORM FORM_REFRESH .
      CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
        EXCEPTIONS
          FINISHED = 1
          OTHERS   = 2.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM .                    "FORM_REFRESH
    *&      Form  event_ucomm
    *       Handling User Commands
    FORM EVENT_UCOMM  USING    E_UCOMM TYPE SY-UCOMM.
      SORT IT_FINAL.
      SORT IT_FINAL_TMP.
      CASE E_UCOMM.
        WHEN 'BACK'.
          CALL METHOD G_GRID->CHECK_CHANGED_DATA
            IMPORTING
              E_VALID = L_VALID.
          CALL METHOD CL_GUI_CFW=>FLUSH.
          PERFORM BACK_OPERATION.
        WHEN 'SAVE'.
          CALL METHOD G_GRID->CHECK_CHANGED_DATA
            IMPORTING
              E_VALID = L_VALID.
          CALL METHOD CL_GUI_CFW=>FLUSH.
          PERFORM SAVE_OPERATION.
      ENDCASE.
    ENDFORM.                    " event_ucomm
    *&      Form  back_operation
    *       When User do Back operation
    FORM BACK_OPERATION .
    **When User Press back Button
    *    WHEN 'BACK'.
      DATA: L_ANS TYPE C,
            L_TABIX TYPE SY-TABIX,
            L_SONUM TYPE VEKP-ZZSONUM,
            X_OCRC LIKE LINE OF IT_OCRC.
    **Checking for the Data Change
      IF IT_FINAL_TMP[] <> IT_FINAL[].
        PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
        IF L_ANS = '1' .
          LOOP AT IT_FINAL.
            L_TABIX = SY-TABIX.
            READ TABLE IT_FINAL_TMP INDEX L_TABIX.
            IF SY-SUBRC  = 0.
              IF IT_FINAL <> IT_FINAL_TMP.
    *-Validate Date Field.
                PERFORM VALIDATE_AND_CONVERT_DATE.
    **Modifying the VEKP table based on changes
                IF NOT IT_FINAL_TMP-EXIDV IS INITIAL.
                  UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                  ZZPROMDT =  IT_FINAL-ZZPROMDT
                                WHERE EXIDV   = IT_FINAL_TMP-EXIDV
                             AND INHALT = IT_FINAL-VBELN.
                  IF SY-SUBRC = 0.
                    COMMIT WORK AND WAIT.
                  ENDIF.
                ELSE.
                  UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                    ZZPROMDT =  IT_FINAL-ZZPROMDT
                                  WHERE INHALT = IT_FINAL-VBELN
                               AND ZZSONUM = IT_FINAL_TMP-ZZSONUM
                               AND ZZPROMDT = IT_FINAL_TMP-ZZPROMDT
                               AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                  IF SY-SUBRC = 0.
                    COMMIT WORK AND WAIT.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
          LEAVE TO SCREEN 0.
        ELSEIF L_ANS = '2'.
          LEAVE TO SCREEN 0.
        ENDIF.
      ELSE.
        LEAVE TO SCREEN 0.
      ENDIF.
    ENDFORM.                    " back_operation
    *&      Form  CONFIRM_BEFORE_LEAVE
    *       Popup for Confirm
    FORM CONFIRM_BEFORE_LEAVE  CHANGING P_ANS TYPE C.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
             EXPORTING
                 TITLEBAR              = 'Confirm'(007)
                 TEXT_QUESTION = 'Do you wish to save your data first?'(006)
                 TEXT_BUTTON_1         = 'Yes'(008)
                 ICON_BUTTON_1         = 'ICON_OKAY'
                 TEXT_BUTTON_2         = 'No'(010)
                 ICON_BUTTON_2         = 'ICON_CANCEL'
                 DEFAULT_BUTTON        = '1'
                 DISPLAY_CANCEL_BUTTON = 'X'
                 START_COLUMN          = 25
                 START_ROW             = 6
            IMPORTING
                 ANSWER                = P_ANS
            EXCEPTIONS
                 TEXT_NOT_FOUND        = 1
                 OTHERS                = 2.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " CONFIRM_BEFORE_LEAVE
    *&      Form  VALIDATE_AND_CONVERT_DATE
    *       Validating and Converting the date
    FORM VALIDATE_AND_CONVERT_DATE .
      DATA : L_DATE LIKE SY-DATUM.
      CALL FUNCTION 'CONVERT_DATE_INPUT'
        EXPORTING
          INPUT                     = IT_FINAL-ZZPROMDT
        IMPORTING
          OUTPUT                    = L_DATE
        EXCEPTIONS
          PLAUSIBILITY_CHECK_FAILED = 1
          WRONG_FORMAT_IN_INPUT     = 2
          OTHERS                    = 3.
      IF SY-SUBRC = 0.
        WRITE L_DATE TO IT_FINAL-ZZPROMDT.
        MODIFY IT_FINAL.
      ENDIF.
    ENDFORM.                    " VALIDATE_AND_CONVERT_DATE
    *&      Module  STATUS_0200  OUTPUT
    *      PBO of Second List
    MODULE STATUS_0200 OUTPUT.
      SET PF-STATUS 'MAIN100'.
      SET TITLEBAR 'MAIN100'.
      IF G_CUSTOM_CONTAINER1 IS INITIAL.
    **Initializing the second Grid
        PERFORM CREATE_AND_INIT_ALV1.
      ENDIF.
    ENDMODULE.                 " STATUS_0200  OUTPUT
    *&      Module  USER_COMMAND_0200  INPUT
    *      PAI of Second list
    MODULE USER_COMMAND_0200 INPUT.
      DATA: L_ANS.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'EXIT'.
          LEAVE TO SCREEN 0.
        WHEN 'CANC'.
          LEAVE TO SCREEN 0.
        WHEN OTHERS.
    *     do nothing
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0200  INPUT
    *&      Form  CREATE_AND_INIT_ALV1
    *       Creating the Grid for Second List
    FORM CREATE_AND_INIT_ALV1 .
      DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
      CREATE OBJECT G_CUSTOM_CONTAINER1
             EXPORTING CONTAINER_NAME = G_CONTAINER2.
      CREATE OBJECT G_GRID1
             EXPORTING I_PARENT = G_CUSTOM_CONTAINER1.
      CALL METHOD G_GRID1->REGISTER_EDIT_EVENT
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
      CREATE OBJECT G_HANDLER1.
      SET HANDLER G_HANDLER1->HANDLE_USER_COMMAND FOR G_GRID1.
      SET HANDLER G_HANDLER1->HANDLE_TOOLBAR FOR G_GRID1.
      GS_LAYOUT1-GRID_TITLE = TEXT-003.
      GS_LAYOUT1-CWIDTH_OPT = 'X'.
      GS_LAYOUT1-NO_ROWMARK = 'X'.
      GS_LAYOUT1-ZEBRA = SPACE."'X'.
      GS_LAYOUT1-INFO_FNAME  = SPACE.
      GS_LAYOUT1-CTAB_FNAME  = SPACE.
    **Vaiant to save the layout
      LS_VARI-REPORT      = SY-REPID.
      LS_VARI-HANDLE      = SPACE.
      LS_VARI-LOG_GROUP   = SPACE.
      LS_VARI-USERNAME    = SPACE.
      LS_VARI-VARIANT     = SPACE.
      LS_VARI-TEXT        = SPACE.
      LS_VARI-DEPENDVARS  = SPACE.
    * setting focus for created grid control
      CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
        EXPORTING
          CONTROL = G_GRID1.
      PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
    * Define a drop down table.
      PERFORM SET_DRDN_TABLE1.
      PERFORM FORM_REFRESH.
      CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
          IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
          IS_VARIANT           = LS_VARI
          I_SAVE               = 'A'
          IS_LAYOUT            = GS_LAYOUT1
        CHANGING
          IT_FIELDCATALOG      = IT_FIELDCAT1
          IT_OUTTAB            = IT_VEKP1[].
    ** Set editable cells to ready for input initially
      CALL METHOD G_GRID1->SET_READY_FOR_INPUT
        EXPORTING
          I_READY_FOR_INPUT = 1.
      CALL METHOD G_GRID1->SET_TOOLBAR_INTERACTIVE.
    ENDFORM.                               "CREATE_AND_INIT_ALV1
    *&      Form  GET_HU_DATA
    * Get Handling Units Data
    FORM GET_HU_DATA USING X_FINAL TYPE T_FINAL.
      CLEAR IT_VEKP1.
      REFRESH IT_VEKP1.
      READ TABLE IT_SONUM WITH KEY VGBEL = X_FINAL-VGBEL
                                   VGPOS = X_FINAL-VGPOS.
      IF SY-SUBRC = 0.
        LOOP AT IT_VEKP WHERE  INHALT = X_FINAL-VBELN
                         AND     ZZSONUM = IT_SONUM-ZZSONUM
                         AND  ZZPROMDT  = X_FINAL-ZZPROMDT
                         AND  ZZOCHOLDRC = X_FINAL-ZZOCHOLDRC.
          IT_VEKP1-EXIDV  = IT_VEKP-EXIDV.
          IT_VEKP1-ZZSONUM = IT_VEKP-ZZSONUM.
          IF NOT IT_VEKP-ZZPROMDT+0(4) = '0000'.
            IT_VEKP1-ZZPROMDT = IT_VEKP-ZZPROMDT.
          ELSE.
            IT_VEKP1-ZZPROMDT = '00000000'.
          ENDIF.
          IT_VEKP1-ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
          APPEND IT_VEKP1.
        ENDLOOP.
      ENDIF.
      IT_VEKP1_TMP[] = IT_VEKP1[].
    ENDFORM.                    " GET_HU_DATA
    *&      Form  POPULATE_FIELDCAT2
    *       Populating the Field Catalog for Second list
    FORM POPULATE_FIELDCAT2 .
      CLEAR: IT_FIELDCAT1,X_FIELDCAT1.
      REFRESH IT_FIELDCAT1.
      DATA:L_POS TYPE I VALUE 1.
      CLEAR: L_POS.
      L_POS = L_POS + 1.
      X_FIELDCAT1-SCRTEXT_M = 'External Handling Unit Identification'(027).
      X_FIELDCAT1-FIELDNAME = 'EXIDV'.
      X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
      X_FIELDCAT1-COL_POS    = L_POS.
      X_FIELDCAT1-EDIT = ' '.
      APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
      CLEAR X_FIELDCAT1.
      L_POS = L_POS + 1.
    *  X_FIELDCAT1-SCRTEXT_M = 'Prom Date'(016).
      X_FIELDCAT1-COLTEXT = 'Promise Date'(033).
      X_FIELDCAT1-FIELDNAME = 'ZZPROMDT'.
      X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
      X_FIELDCAT1-COL_POS    = L_POS.
      X_FIELDCAT1-OUTPUTLEN = '12'.
      X_FIELDCAT1-EMPHASIZE = ' '.
      X_FIELDCAT1-EDIT = 'X'.
      X_FIELDCAT1-DATATYPE = 'DATS'.
      X_FIELDCAT1-INTTYPE = 'D'.
      X_FIELDCAT1-REF_TABLE = 'VEKP'.
      X_FIELDCAT1-REF_FIELD = 'ZZPROMDT'.
      APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
      CLEAR  X_FIELDCAT1.
      L_POS = L_POS + 1.
      X_FIELDCAT1-SCRTEXT_M = 'Order Control Hold Reason Code'(029).
      X_FIELDCAT1-FIELDNAME = 'ZZOCHOLDRC'.
      X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
      X_FIELDCAT1-COL_POS    = L_POS.
      X_FIELDCAT1-DRDN_HNDL = '1'.
      X_FIELDCAT1-DRDN_ALIAS = 'X'.
      X_FIELDCAT1-EDIT = 'X'.
      APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
      CLEAR X_FIELDCAT1.
    ENDFORM.                    " POPULATE_FIELDCAT2
    *&      Form  set_drdn_table
    *      Drop Down for second report
    FORM SET_DRDN_TABLE1.
      DATA:X_OCRC LIKE LINE OF IT_OCRC.
      DATA:LT_DRAL TYPE LVC_T_DRAL,
            LS_DRAL TYPE LVC_S_DRAL,
            L_DRDN(25) TYPE C.
      LOOP AT IT_OCRC INTO X_OCRC.
        CONCATENATE X_OCRC-ZZOCHOLDRC '  ' ' ' '  '  X_OCRC-ZZRCDESC INTO
      L_DRDN
      SEPARATED BY SPACE.
    * First listbox (handle '1').
        LS_DRAL-HANDLE = '1'.
        LS_DRAL-VALUE =  L_DRDN.
        LS_DRAL-INT_VALUE = X_OCRC-ZZOCHOLDRC.
        APPEND LS_DRAL TO LT_DRAL.
      ENDLOOP.
      CALL METHOD G_GRID1->SET_DROP_DOWN_TABLE
        EXPORTING
          IT_DROP_DOWN_ALIAS = LT_DRAL.
    ENDFORM.                               " set_drdn_table
    *&      Form  save_operation
    *       Saving the changes
    FORM SAVE_OPERATION .
      DATA: L_TABIX LIKE SY-TABIX.
    **CHECKING FOR THE DATA CHANGE
      IF IT_FINAL_TMP[] <> IT_FINAL[].
        LOOP AT IT_FINAL.
          L_TABIX = SY-TABIX.
          READ TABLE IT_FINAL_TMP INDEX L_TABIX.
          IF SY-SUBRC  = 0.
            IF IT_FINAL <> IT_FINAL_TMP.
    *-Validate Date Field.
              PERFORM VALIDATE_AND_CONVERT_DATE.
    **Modifying the VEKP table based on changes
              IF NOT IT_FINAL_TMP-EXIDV IS INITIAL.
                UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                ZZPROMDT =  IT_FINAL-ZZPROMDT
                              WHERE EXIDV   = IT_FINAL_TMP-EXIDV
                           AND INHALT = IT_FINAL-VBELN.
                IF SY-SUBRC = 0.
                  V_DATA_CHANGE = ' '.
                  COMMIT WORK AND WAIT.
                ENDIF.
              ELSE.
                UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                    ZZPROMDT =  IT_FINAL-ZZPROMDT
                                  WHERE INHALT = IT_FINAL-VBELN
                               AND ZZSONUM = IT_FINAL_TMP-ZZSONUM
                               AND ZZPROMDT = IT_FINAL_TMP-ZZPROMDT
                               AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                IF SY-SUBRC = 0.
                  V_DATA_CHANGE = ' '.
                  COMMIT WORK AND WAIT.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDLOOP.
        PERFORM GET_VEKP_DATA .
        PERFORM POPULATE_FINAL_TABLE.
        PERFORM DISABLE_EDIT_FIELDS.
        PERFORM FORM_REFRESH.
        MESSAGE S002 WITH 'Data Saved'(011).
      ENDIF.
    ENDFORM.                    " save_operation
    *&      Form  BACK_SECOND_LIST
    *       When User Press Back in Second list
    FORM BACK_SECOND_LIST .
      DATA:X_OCRC LIKE LINE OF IT_OCRC.
    **Checking for the Change in the data
      IF IT_VEKP1_TMP[] <> IT_VEKP1[].
        PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
        IF L_ANS = '1'.
          LOOP AT IT_VEKP1.
            READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
            IF SY-SUBRC = 0.
              IF IT_VEKP1_TMP <> IT_VEKP1.
                UPDATE VEKP SET ZZPROMDT = IT_VEKP1-ZZPROMDT
                                ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
                              WHERE EXIDV = IT_VEKP1-EXIDV.
                IF SY-SUBRC = 0.
                  COMMIT WORK.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
          PERFORM GET_VEKP_DATA .
          CLEAR IT_VEKP1_TMP.
          REFRESH IT_VEKP1_TMP.
          IT_VEKP1_TMP[] = IT_VEKP1[].
          PERFORM POPULATE_FINAL_TABLE.
          PERFORM DISABLE_EDIT_FIELDS.
          PERFORM FORM_REFRESH.
          MESSAGE S002 WITH 'Data Saved'(011).
          PERFORM CLEAR_GRID_CONTAINER.
        ELSEIF L_ANS = '2'.
          PERFORM CLEAR_GRID_CONTAINER.
        ENDIF.
      ELSE.
        PERFORM CLEAR_GRID_CONTAINER.
      ENDIF.
    ENDFORM.                    " BACK_SECOND_LIST
    *&      Form  clear_grid_container
    *       Clearing the Grid
    FORM CLEAR_GRID_CONTAINER .
      CALL METHOD G_GRID1->FREE.
      CALL METHOD G_CUSTOM_CONTAINER1->FREE.
      CALL METHOD CL_GUI_CFW=>FLUSH.
      CLEAR G_CUSTOM_CONTAINER1.
      CLEAR G_GRID1.
      CLEAR G_HANDLER1.
      LEAVE TO SCREEN 0.
    ENDFORM.                    " clear_grid_container
    *&      Form  disable_edit_fields
    *       Disable edit fields
    FORM DISABLE_EDIT_FIELDS .
    **Changing the Edit option for the records which they don't have
    **Entries in HU level
      LOOP AT IT_FINAL INTO LS_OUTTAB WHERE FLAG = 'X'.
        V_INDEX = SY-TABIX.
        LS_EDIT-FIELDNAME = 'ZZOCHOLDRC'.
        LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
        LS_EDIT-STYLE2 = SPACE.
        LS_EDIT-STYLE3 = SPACE.
        LS_EDIT-STYLE4 = SPACE.
        LS_EDIT-MAXLEN = 8.
        INSERT LS_EDIT INTO TABLE LT_EDIT.
        LS_EDIT-FIELDNAME = 'ZZRCDESC'.
        LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
        LS_EDIT-STYLE2 = SPACE.
        LS_EDIT-STYLE3 = SPACE.
        LS_EDIT-STYLE4 = SPACE.
        LS_EDIT-MAXLEN = 8.
        INSERT LS_EDIT INTO TABLE LT_EDIT.
        LS_EDIT-FIELDNAME = 'ZZPROMDT'.
        LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
        LS_EDIT-STYLE2 = SPACE.
        LS_EDIT-STYLE3 = SPACE.
        LS_EDIT-STYLE4 = SPACE.
        LS_EDIT-MAXLEN = 8.
        INSERT LS_EDIT INTO TABLE LT_EDIT.
        INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-HANDLE_STYLE.
        MODIFY IT_FINAL INDEX V_INDEX FROM LS_OUTTAB  TRANSPORTING
                                          HANDLE_STYLE DROP_DOWN_HANDLE.
        MODIFY IT_FINAL_TMP INDEX V_INDEX FROM LS_OUTTAB  TRANSPORTING
                                         HANDLE_STYLE DROP_DOWN_HANDLE.
      ENDLOOP.
    ENDFORM.                    " disable_edit_fields
    *&      Form  event_ucomm
    *       Handling User Commands
    FORM EVENT_UCOMM1  USING    E_UCOMM TYPE SY-UCOMM.
      SORT IT_VEKP1.
      SORT IT_VEKP1_TMP.
      CASE E_UCOMM.
          WHEN'BACK'.
    **Checking for the change in the data of the output
          CALL METHOD G_GRID1->CHECK_CHANGED_DATA
            IMPORTING
              E_VALID = L_VALID1.
          CALL METHOD CL_GUI_CFW=>FLUSH.
          PERFORM BACK_SECOND_LIST.
        WHEN 'SAVE'.
          CALL METHOD G_GRID1->CHECK_CHANGED_DATA
            IMPORTING
              E_VALID = L_VALID1.
          CALL METHOD CL_GUI_CFW=>FLUSH.
    **Checking for the Change in the data
          IF IT_VEKP1_TMP[] <> IT_VEKP1[].
            LOOP AT IT_VEKP1.
              READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
              IF SY-SUBRC = 0.
                IF IT_VEKP1_TMP <> IT_VEKP1.
                  UPDATE VEKP SET ZZPROMDT = IT_VEKP1-ZZPROMDT
                                  ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
                                WHERE EXIDV = IT_VEKP1-EXIDV.
                  IF SY-SUBRC = 0.
                    COMMIT WORK.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
            PERFORM GET_VEKP_DATA .
            CLEAR IT_VEKP1_TMP.
            REFRESH IT_VEKP1_TMP.
            IT_VEKP1_TMP[] = IT_VEKP1[].
            PERFORM POPULATE_FINAL_TABLE.
            PERFORM DISABLE_EDIT_FIELDS.
            PERFORM FORM_REFRESH.
            MESSAGE S002 WITH 'Data Saved'(011).
          ENDIF.
        WHEN OTHERS.
    *     do nothing
      ENDCASE.
    ENDFORM.                    " event_ucomm1
    check this code , in that i have used and implemented..using classes

  • Deleting HU's from delivery

    Hi,
    I have to delete HU's from a delivery. I need to delete all of them except a couple. I found this link in SDN
    Re: Delete handling unit
    have been trying to implement this but everytime I get a short dump saying 'Runtime error CSSQL_ARRAY_INSERT_DUPREC'. Its urgent so can someone help me out. I am attaching my code here as per the link above
    *& Report  Z_DELV_DEL_HU
    *& This progam will delete all the HU's assigned to a delivery
    REPORT  Z_DELV_DEL_HU NO STANDARD PAGE HEADING
                       LINE-COUNT 60
                       LINE-SIZE 132.
    TABLES: ltak,
    vekp,
    vepo.
    DATA: l_vbkok LIKE vbkok,
    lt_verko LIKE verko OCCURS 0 WITH HEADER LINE,
    lt_verpo LIKE verpo OCCURS 0 WITH HEADER LINE,
    l_venum type VEKP-VENUM,
    lv_venum type vekp-venum,
    lt_et_created_hus LIKE vekpvb OCCURS 0 WITH HEADER LINE,
    it_venum TYPE TABLE OF HUM_VENUM,
    wA_venum TYPE HUM_VENUM,
    lt_vekp type table of vekp,
    wa_vekp type vekp,
    it_verpo_tab LIKE VERPO OCCURS 0 WITH HEADER LINE,
    it_vbpok LIKE VBPOK OCCURS 0 WITH HEADER LINE,
    it_hu_rem LIKE HUM_REHANG_HU OCCURS 0 WITH HEADER LINE.
    PARAMETERS: p_vbeln LIKE likp-vbeln MEMORY ID vl.
      DATA:  w_vbkok  TYPE  vbkok,
             v_err    TYPE  c.
      CLEAR : w_vbkok.
      DATA: c_x(1) value 'X'.
    *unlock the delivery.
      CALL FUNCTION 'LEINT_DELIVERY_UNLOCK'
        EXPORTING
          iv_docnr = p_vbeln.
      CALL FUNCTION 'STATUS_BUFFER_REFRESH'.
      CALL FUNCTION 'HU_PACKING_REFRESH'.
      CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
        EXPORTING
          objects_status_refresh = 'C'.
    **Preparing data for the delivery update BAPI
    l_vbkok-vbtyp_vl = 'J'.
    l_vbkok-vbeln = l_vbkok-vbeln_vl = p_vbeln.
    SELECT * FROM vepo
    WHERE
    vbeln EQ p_vbeln.
    Move-corresponding vepo to: it_verpo_tab.
    Append it_verpo_tab.
    Endselect.
    SELECT * FROM vekp into table lt_vekp
    WHERE vpobj EQ '01'
    AND vpobjkey EQ p_vbeln.
    Loop at lt_vekp into wa_vekp.
    IF wa_vekp-VHILM EQ 'PALLET'.
    MOVE-CORRESPONDING wa_vekp TO: lt_verko,
    lt_et_created_hus.
    *MOVE-CORRESPONDING wa_vekp TO it_hu_rem.
    *it_hu_rem-top_hu_external = wa_vekp-exidv.
    *it_hu_rem-top_hu_internal = wa_vekp-venum.
    *lt_verko-status = lt_et_created_hus-status = '0060'.
    APPEND: lt_verko,
    lt_et_created_hus.
    *Append it_hu_rem.
    ELSE.
    CONTINUE.
    Endif.
    Endloop.
    *ENDIF.
    *ENDSELECT.
    CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
    EXPORTING
    vbkok_wa = l_vbkok
    synchron = 'X'
    NO_MESSAGES_UPDATE_1 = ' '
    COMMIT = 'X'
    delivery = p_vbeln
    UPDATE_PICKING = ' '
    NICHT_SPERREN_1 = 'X'
    IF_CONFIRM_CENTRAL = 'X'
    IF_WMPP = ' '
    IF_GET_DELIVERY_BUFFERED = ' '
    IF_NO_GENERIC_SYSTEM_SERVICE = ' '
    IF_DATABASE_UPDATE_1 = '1'
    IF_NO_INIT_1 = ' '
    IF_NO_READ_1 = ' '
    IF_ERROR_MESSAGES_SEND = v_err
    IF_NO_BUFFER_REFRESH = ' '
    IT_PARTNER_UPDATE =
    IT_SERNR_UPDATE =
    IF_NO_REMOTE_CHG_1 = ' '
    IF_NO_MES_UPD_PACK = ' '
    IMPORTING
    EF_ERROR_ANY =
    EF_ERROR_IN_ITEM_DELETION =
    EF_ERROR_IN_POD_UPDATE =
    EF_ERROR_IN_INTERFACE =
    EF_ERROR_IN_GOODS_ISSUE =
    EF_ERROR_IN_FINAL_CHECK =
    EF_ERROR_PARTNER_UPDATE =
    EF_ERROR_SERNR_UPDATE =
    TABLES
    VBPOK_TAB = it_vbpok
    PROT =
    verko_tab = lt_verko
    verpo_tab = it_verpo_tab
    VBSUPCON_TAB_1 =
    IT_VERPO_SERNR =
    IT_PACKING =
    IT_PACKING_SERNR =
    IT_REPACK =
    IT_HANDLING_UNITS_1 = it_hu_rem
    IT_OBJECTS =
    et_created_hus = lt_et_created_hus
    TVPOD_TAB =
    If NOT v_err is INITIAL and sy-subrc NE 0.
    Write:/'Error in deleting HUS'.
    ELSE.
    Write:/'All the HUs were deleted successfully for delivery:', P_vbeln.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
       WAIT          = 'X'
    Endif.
    Thanks,
    -David.

    Hi Ramesh,
    Our issue is that we have de-assigned the HU's from the inbound delivery and cancelled the inbound delivery but cannot VL09 the outbound delivery as the HU is assigned toa n object and we now believe that this is the inspection lot that gets generated when the inbound delivery is created as the HU's are packed at that point.
    At the moment the only solution we have found is to pack teh Hu's in to a virtual HU in VL02n before PGI, this then allows reversal as the HU's with the material content are not directly linked to the delivery.
    Thanks
    Stuart

  • Need help in logic change to avoid select statement inside loop .

    Hello all ,
    Please see the below code . Here i got the shipment number in internal table  IT_VTTK . So For this shipment number i want to get the details from Vekp table in to internal table  IT_VEKP  . There is no need for me to use For all entries . I have passed the value of it_vekp into work area wa_vekp and getting the details in to IT_vekp using loop.
    But since we should not use the select statement inside the loop , Can anybody please tell me how to achieve this functionality .
    Instead of passing into work area wa_vttk if i directly use the internal table I'm getting the following error .
    "IT_VTTK" is a table without a header line and therefore has no component called "TKNUM".
    Hence i have used select statement inside a loop . Please tell me is there any other way to avoid this ?
    types:begin of ty_likp,
            vbeln type likp-vbeln,
           end of ty_likp,
           begin of ty_vttk,
            tknum type vttk-tknum,
            end of ty_vttk.
    DATA: IT_VEKP TYPE STANDARD TABLE OF TY_VEKP,
          WA_VEKP TYPE TY_VEKP.
      data:it_likp type standard table of ty_likp,
           wa_likp type ty_likp,
           it_likp1 type standard table of ty_likp,
           it_vttk type standard table of ty_vttk,
           wa_vttk type ty_vttk.
      data:w_tknum type vttk-tknum.
    if not it_likp is initial .
        select vbeln
                from
                 vbfa
          into table it_vttk
           for all entries in it_likp where vbelv = it_likp-vbeln and vbtyp_n = '8'.
      endif .
    IF IT_VTTK[] IS NOT INiTIAL.
        loop at it_vttk into wa_vttk.
        SELECT venum
               EXIDV
               EXIDV2
               BRGEW
               NTGEW
               GEWEI
               TARAG
               GEWEI
               VHART
               INHALT
             FROM VEKP INTO TABLE IT_VEKP where VPOBJKEY = wa_vttk-tknum  and vpobj = '4'.
          endloop.
          endif.

    Hello,
    Why would you not like to use FOR ALL ENTRIES in the second select? Is it becasue of the length or type mismatch error between the fields VPOBJKEY and wa_vttk-tknum ?
    Vikranth

  • Secondary Index Select Statement Problem

    Hi friends.
    I have a issue with a select statement using secondary index,
    SELECT SINGLE * FROM VEKP WHERE VEGR4 EQ STAGE_DOCK
                                      AND VEGR5 NE SPACE
                                      AND WERKS EQ PLANT
            %_HINTS ORACLE
            'INDEX("&TABLE&" "VEKP~Z3" "VEKP^Z3" "VEKP_____Z3")'.
    given above statement is taking long time for processing.
    when i check for the same secondary index in vekp table i couldn't see any DB index name with vekp~z3 or vekp^z3 or vekp____z3.
    And the sy-subrc value after select statement is 4. (even though values avaliable in VEKP with given where condition values)
    My question is why my select statement is taking long time and sy-subrc is 4?
    what happens if a secnodary index given in select statement, which is not avaliable in that DB Table?

    Hi,
    > ONe more question: is it possible to give more than one index name in select statement.
    yes you can:
    read the documentation:
    http://download.oracle.com/docs/cd/A97630_01/server.920/a96533/hintsref.htm#5156
    index_hint:
    This hint can optionally specify one or more indexes:
    - If this hint specifies a single available index, then the optimizer performs
    a scan on this index.  The optimizer does not consider a full table scan or
    a scan on another index on the table.
    - If this hint specifies a list of available indexes, then the optimizer
    considers the cost of a scan on each index in the list and then performs
    the index scan with the lowest cost. The optimizer can also choose to
    scan multiple indexes from this list and merge the results, if such an
    access path has the lowest cost. The optimizer does not consider a full
    table scan or a scan on an index not listed in the hint.
    - If this hint specifies no indexes, then the optimizer considers the
    cost of a scan on each available index on the table and then performs
    the index scan with the lowest cost. The optimizer can also choose to
    scan multiple indexes and merge the results, if such an access path
    has the lowest cost. The optimizer does not consider a full table scan.
    Kind regards,
    Hermann

  • Error in select query

    hi experts,
    for my smartform this is the driver program i have written.
    when  exucuted i  am getting a error message in teh third select quirey i have written which is in  bold here.
    the actuall error is coming here <b>WHERE objek = gt_resb-charg</b>
    the error is like 'both should be same lenghth and type'.
    could u plz suggest me how to correct this.
                     Tables
    TABLES:vekp,      "Handling Unit - Header Table
           vevw,      "Where-Used List for Handling Units
           afvc,      "Operation within an order
           resb,      "Reservation/dependent requirements
           makt,      "Material Descriptions
           ausp.      "Characteristic Values
    TYPES:BEGIN OF ty_vekp,
          exidv    TYPE vekp-exidv,
          handle   TYPE vekp-handle,
          vpobjkey TYPE vekp-vpobjkey,
          END OF ty_vekp.
    TYPES:BEGIN OF ty_vevw,
          objkey   TYPE vevw-objkey,
          handle   TYPE vevw-handle,
          END OF ty_vevw.
    TYPES:BEGIN OF ty_afvc,
          objnr    TYPE afvc-objnr,
          ltxa1    TYPE afvc-ltxa1,
          aufpl    TYPE afvc-aufpl,
          aplzl    TYPE afvc-aplzl,
          END OF ty_afvc.
                     Internal tables Declaration
    DATA: gt_resb TYPE STANDARD TABLE OF resb ,
           gt_makt TYPE STANDARD TABLE OF makt ,
           gt_ausp TYPE STANDARD TABLE OF ausp .
                     Work area Declaration
    DATA:wa_vekp      TYPE ty_vekp,
         wa_vevw      TYPE ty_vevw,
         wa_afvc      TYPE ty_afvc.
                            Variables                                   *
    DATA : lf_fmname          TYPE rs38l_fnam.
    CONSTANTS: c_fmname(25) TYPE c VALUE  'ZWM_HANDLING_UNIT_LABEL'.
                        S e l e c t – O p t i o n s                     *
                            P a r a m e t e r s                         *
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: p_exidv  LIKE vekp-exidv,         "Handling Unit Number
                p_objkey LIKE vevw-objkey,        "Process Order Number
                p_ltxa1  LIKE afvc-ltxa1,         "Phase Description
                p_copies(3) TYPE N.               "NO of Copies to be print
    SELECTION-SCREEN END OF BLOCK block1.
                     AT SELECTION-SCREEN
    AT SELECTION-SCREEN.
    IF p_exidv IS NOT INITIAL.
    SELECT single exidv
                  handle
                  vpobjkey
                  FROM vekp
                  INTO wa_vekp
                  WHERE exidv = p_exidv.
    ENDIF.
    IF p_objkey IS NOT INITIAL.
    SELECT single objkey
                  FROM vevw
                  INTO wa_vevw
                  WHERE handle = wa_vekp-handle
                  AND objkey   = wa_vekp-vpobjkey
                  AND objkey   = p_objkey.
    ENDIF.
    IF p_ltxa1   IS NOT INITIAL.
    SELECT single objnr
                  ltxa1
                  aufpl
                  aplzl
                  FROM afvc
                  INTO wa_afvc
                  WHERE objnr = wa_vevw-objkey
                  AND ltxa1   = p_ltxa1  .
    ENDIF.
                     START-OF-SELECTION
    START-OF-SELECTION.
    SELECT * FROM resb
             INTO TABLE gt_resb
             WHERE objnr = wa_afvc-objnr
             AND   aufpl = wa_afvc-aufpl
             AND   aplzl = wa_afvc-aplzl.
    IF NOT gt_resb[] IS INITIAL.
    SELECT * FROM makt
                  INTO TABLE gt_makt
                  FOR ALL ENTRIES IN gt_resb
                  WHERE matnr = gt_resb-matnr.
    ENDIF.
    <b>IF NOT gt_resb[] IS INITIAL.
    SELECT * FROM ausp
             INTO TABLE gt_ausp
             FOR ALL ENTRIES IN gt_resb
             WHERE objek = gt_resb-charg
             AND atinn IN ('LOBM_VFDAT','LOBM_QNDAT').
          </b> ENDIF.
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          FORMNAME                = c_fmname
        IMPORTING
         FM_NAME                  = lf_fmname
       EXCEPTIONS
         NO_FORM                  = 1
         NO_FUNCTION_MODULE       = 2
         OTHERS                   = 3.
    regards,
    siri.

    IF NOT gt_resb[] IS INITIAL.
    SELECT * FROM ausp
    INTO TABLE gt_ausp
    FOR ALL ENTRIES IN gt_resb
    WHERE <b>objek = gt_resb-charg</b>
    AND atinn IN ('LOBM_VFDAT','LOBM_QNDAT').
    OBJEK length is 50 and charg length is 10. So thats why your query is giving error.
    declare the gt_resb table by using.
    data: begin of gt_resb occurs 0,
    <b> charg like ausp-OBJEK,</b>
    all other fields  
         end of gt_resb.
    Regards,

  • ERROR WHILE TRANSPORTING SMARTFORM

    hi friend,
    when i try to transport my smartform it shows the error message like this
    1.   Object CUAD ZINVOICE_11 is inactiv
    2.   Object REPT ZINVOICE_11 is inactiv
    what are CUAD and REPT .
    My Code is.
    REPORT  ZINVOICE_11.
    *& Report  Z_INVOICE_PRINT                                             *
    *&  changes done by : Bhupinder Singh                                                                               
    *REPORT  Z_INVOICE_PRINT_FINAL                         .
    constants : sf_name(30) type c value 'ZINVOICE_11'.
    parameters : vbeln like vbrk-vbeln .
    data : perf type c.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
       PARAMETERS: pre RADIOBUTTON GROUP RAD1 DEFAULT 'X',
                   post RADIOBUTTON GROUP RAD1.
    SELECTION-SCREEN END OF BLOCK B1.
    data : form_name type RS38L_FNAM.
    data : ivbrk like vbrk occurs 0 with header line.
    data : ivbrp1 like vbrp occurs 0 with header line.
    data : ivbrpf like vbrp occurs 0 with header line.
    data : ivbrp like vbrp occurs 0 with header line.
    data : ivbap like vbap occurs 0 with header line.
    data : ivbkd like vbkd occurs 0 with header line.
    data : ikna1 like kna1 occurs 0 with header line.
    data : ikonv like konv occurs 0 with header line.
    data : ilips like lips occurs 0 with header line.
    data : ivepo like vepo occurs 0 with header line.
    data : ivekp like vekp occurs 0 with header line.
    data : ikonv1 like konv occurs 0 with header line.
    data : ikonv2 like konv occurs 0 with header line.
    data : netwt like vekp-ntgew.
    data : grwt like vekp-brgew.
    select * from vbrp into table ivbrp where vbeln = vbeln.
    select * from vbrk into table ivbrk where vbeln = vbeln.
    data : vknumv like konv-knumv.
    loop at ivbrk.
    move ivbrk-knumv to vknumv.
    endloop.
    loop at ivbrp.
    select * from konv into table ikonv1 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZFOB'.
    select * from konv into table ikonv2 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZDS3'.
    endloop.
    data : ins like konv-kbetr.
    data : dis like konv-kbetr.
    data : fght like KONV-KBETR.
    loop at ikonv1.
    ins = ins + ikonv1-kbetr.
    endloop.
    loop at ikonv2.
    dis = dis + ikonv2-kbetr.
    endloop.
    if pre = 'X'.
          select * from vbrp into table ivbrp where vbeln = vbeln order by matkl.
          loop at ivbrp.
          on change of ivbrp-matkl.
          clear ivbrp1.
          refresh ivbrp1.
          move ivbrp-matkl to ivbrp1-arktx.
          insert  ivbrp1 into ivbrp.
          modify ivbrp.
          endon.
          endloop.
    endif.
    ivbrpf[] = ivbrp[].
    select * from vbrp into table ivbrp where vbeln = vbeln.
    select * from vbrk into table ivbrk where vbeln = vbeln.
    select * from lips into table ilips for all entries in ivbrp where vbeln = ivbrp-vgbel and posnr = ivbrp-vgpos.
    select * from vepo into table ivepo for all entries in ilips where vbeln = ilips-vbeln and posnr = ilips-posnr.
    select * from vekp into table ivekp for all entries in ivepo where venum = ivepo-venum.
    loop at ivekp.
      if ivekp-gewei = 'G'.
        ivekp-ntgew = ivekp-ntgew / 1000.
        ivekp-brgew = ivekp-brgew / 1000.
      endif.
    netwt = netwt + ivekp-ntgew.
    grwt = grwt + ivekp-brgew.
    endloop.
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        FORMNAME                 = sf_name
      VARIANT                  = ' '
      DIRECT_CALL              = ' '
    IMPORTING
       FM_NAME                  = form_name
    EXCEPTIONS
      NO_FORM                  = 1
      NO_FUNCTION_MODULE       = 2
      OTHERS                   = 3
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION form_name
      EXPORTING
                              vbeln = vbeln
                              perf  = perf
                              pre   = pre
                              post  = post
                              dis = dis
                              ins = ins
                              vknumv = vknumv
                              netwt = netwt
                              grwt = grwt
                              fght = fght
                             VECS  = VECS
      TABLES
        IVBRK                      = IVBRK
        IVBRP                     = IVBRP
        IVBRPf                     = IVBRPf
        IVBaP                     = IVBaP
        IKna1                      = IKna1
        Ivbkd                     = Ivbkd
        ivbrp1                    = ivbrp1
        ikonv                  =  ikonv
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    INCLUDE ZINVOICE_STATUS_0001O01.
    INCLUDE ZINVOICE_USER_COMMAND_0001I01.
    whaT SHOULD i do to active it and transport it.

    dear bhupi,
    When u transporting u r any object , please magke sure u r whole object is in active mode ,otherwise its shows erroe like object in  in active mode.
    Regards ,
    Nikhil Narkhede

  • Problem while unpacking an handling unit using FM HU_PACKING_AND_UNPACKING

    Hi ,
    I want to unpack an HU from an outbound delivery and transfer to other storage location using FM 'HU_PACKING_AND_UNPACKING'.I could find out that only quantities are transferred but unpacking HU is not done.
    Below is the code  i am using for unpacking.
    CALL FUNCTION 'HU_GET_HUS'
            EXPORTING
              if_lock_hus = 'X'
              it_venum    = it_hu1
            IMPORTING
              et_header   = it_hdr1
              et_items    = it_item1
            EXCEPTIONS
              hus_locked  = 1
              no_hu_found = 2
              fatal_error = 3
              OTHERS      = 4.
          IF sy-subrc <> 0.
            l_error = 'X'.
            CLEAR: g_msgid, g_msgno, g_msgv1,g_msgv2, g_msgv3, g_msgv4.
            g_msgid = sy-msgid.
            g_msgno = sy-msgno.
            g_msgv1 = sy-msgv1.
            g_msgv2 = sy-msgv2.
            g_msgv3 = sy-msgv3.
            g_msgv4 = sy-msgv4.
            PERFORM message_scr USING g_msgid g_msgno g_msgv1 g_msgv2 g_msgv3 g_msgv4.
            EXIT.
          ENDIF.
          LOOP AT it_hu1 INTO wa_hu.
            CLEAR: wa_item1,l_error,l_post.
            READ TABLE it_hdr1  INTO wa_hdr1  WITH KEY venum = wa_hu-venum.
            CLEAR : g_venum, g_plant, g_sloc, g_whno, g_stype, g_sbin.
    *       get the warehouse details
              SELECT SINGLE lgnum lgtyp lgpla FROM lein INTO (g_whno,g_stype,g_sbin)
                WHERE lenum = wa_hdr1-exidv.
              IF sy-subrc EQ 0.
    * Get the plant and storage location for WM managed
                SELECT SINGLE werks lgort FROM lqua INTO (g_plant, g_sloc)
                                     WHERE lgnum = g_whno
                                       AND lgtyp = g_stype
                                       AND lgpla = g_sbin
                                       AND lenum = wa_hdr1-exidv.
              ELSE.
    * Get the Venum (Internal HU Number)
                SELECT SINGLE venum FROM vekp INTO g_venum
                WHERE exidv = wa_hdr1-exidv.
                IF sy-subrc EQ 0.
    * Get the plant and storage location for Non-WM managed
                  SELECT SINGLE werks lgort FROM vepo INTO (g_plant, g_sloc)
                    WHERE venum = wa_hu-venum.
                ENDIF.
              ENDIF.
              READ TABLE it_item1 INTO wa_item1 WITH KEY venum = wa_hu-venum.
              IF sy-subrc = 0.
                CLEAR :wa_pack_unpack.
                MOVE-CORRESPONDING wa_item1 TO wa_pack_unpack.
                wa_pack_unpack-venum = wa_item1-venum.
                wa_pack_unpack-vepos = wa_item1-vepos.
                wa_pack_unpack-velin = wa_item1-velin.
                wa_pack_unpack-belnr = wa_item1-vbeln.
                wa_pack_unpack-posnr = wa_item1-posnr.
                MOVE wa_item1-vemng TO l_vemng.
                CONCATENATE l_vemng '-' INTO l_vemng.
                CONDENSE l_vemng NO-GAPS.
                MOVE l_vemng TO wa_pack_unpack-quantity.
                wa_pack_unpack-altme = wa_item1-altme.
                wa_pack_unpack-matnr = wa_item1-matnr.
                wa_pack_unpack-charg = wa_item1-charg.
                wa_pack_unpack-werks = g_plant.
                wa_pack_unpack-lgort = g_sloc.
                wa_pack_unpack-wdatu = wa_item1-wdatu.
                wa_pack_unpack-vfdat = wa_item1-vfdat.
              ENDIF.
    *          *Find the partner location
              CLEAR: g_hu_managed, g_partner_sloc.
              CALL FUNCTION 'V51S_HU_LGORT'
                EXPORTING
                  if_lgort         = g_sloc
                  if_werks         = g_plant
                IMPORTING
                  ef_hu_managed    = g_hu_managed
                  ef_partner_lgort = g_partner_sloc
                EXCEPTIONS
                  lgort_not_exist  = 1
                  OTHERS           = 2.
              IF sy-subrc <> 0.
              ENDIF.
              IF g_hu_managed = 'X'.
                wa_pack_unpack-umlgo = g_partner_sloc.
              ENDIF.
              CALL FUNCTION 'HU_PACKING_AND_UNPACKING'
                EXPORTING
                  is_packing_request = wa_pack_unpack
                IMPORTING
                  es_p_request       = wa_pack_unpack
                EXCEPTIONS
                  missing_data       = 1
                  hu_not_changeable  = 2
                  not_possible       = 3
                  customizing        = 4
                  weight             = 5
                  volume             = 6
                  serial_nr          = 7
                  fatal_error        = 8
                  OTHERS             = 9.
              IF sy-subrc <> 0.
                l_error = 'X'.
              ELSE.
                l_post = 'X'.
              ENDIF.
              IF l_error IS INITIAL AND l_post EQ 'X'.
                CALL FUNCTION 'HU_POST'
                  EXPORTING
                    if_synchron = 'X'
                    if_commit   = 'X'
                  IMPORTING
                    et_messages = it_messages.
            ENDLOOP.
    Please help if any parameter need to be set for unpacking of HU.
    Please suggest.
    Thanks in advance.

    Hi Sailaja,
    I have similar requirements like this before with HU_PACKING_AND_UNPACKING FM. It was a tough debugging before I came up with the right solution. Unfortunately, I was not able to document that code..
    But here is what I have been doing.
    Youre on track with the solution below, never use BDC as it will only limit the Handling units that you wish to put into.
    The function modules that starts with V5_ plays important role as you need to initialize the global variables and table of this function group with values before calling HU_PACKING_AND_UNPACKING FM
    Debug inside the Function module, and look for the FM that returns SY-SUBRC <> 0 then set a breakpoint.
    Restart the program then debug inside that FM again (and I do not want to go further on the details, I give you the presumption of literacy)
    You will find some items that has no value, try to initialize everything by utilizing the FM for this function group V51S.
    Happy Debugging.

  • ALV  display for  row  s   and columns in this format.have ur full points..

    Hi ALL
      I have to dispalay data in the ALV format as :
    Basic
    DA
    HRA
    PF
    VPF
    20000
    500
    5000
    | 1500     | 600  |          |
    Details :  Basic   HRA in one Row and   PF , VPF in  second Row.
    The Amount  regarding htese fields are also displayed in the next rows for all  emp. numbers.
    its urgent for me and need helpful answers...
    Regards
    Lakhan

    see the attached code it will display the hierarchial display as per your need
    change the internal tables with dat of your own orgn structure and pass it to the fun module.
    Description : Pick Status Report
    This is an ALV report using the heirarchical ALV list display. The
    report selects all deliveries that fulfil the selection criteria
    and displays a summary of all items in that delivery with reference
    to certain statuses: overall status, goods issue status, transfer
    order status, load to pallet status, pallet count status, loaded to
    van status, van manifest printed status and end of day manifest
    printed status. These statuses have been defined by the business.
    There is extra functionality required to trigger printing of the van
    and end of day manifests from this report, and to set the loading
    end status of a shipment if the last handling unit of a particular
    shipment has been loaded onto a van for which the van manifest has
    been triggered.
    REPORT zwmr_pick_status_report NO STANDARD PAGE HEADING
    MESSAGE-ID zw.
    Type Pools
    TYPE-POOLS: icon, slis.
    Tables
    TABLES: tvst,
    likp,
    t30b,
    vekp,
    *{ INSERT UKMK900355 4
    zhu_to_link, "AS03
    *} INSERT
    zpallettr,
    vttk, "MB01
    zvantr.
    Types
    TYPES:
    BEGIN OF ty_data,
    lgtor LIKE likp-lgtor, " door
    vbeln LIKE likp-vbeln, " delivery
    wbstk LIKE vbuk-wbstk, " Goods movement status
    kostk LIKE vbuk-kostk, " Picking status
    posnr LIKE lips-posnr, " item
    route LIKE likp-route, " route
    wadat LIKE likp-wadat, " goods issue date
    lvsta LIKE vbup-lvsta, " warehouse status
    packvorschr LIKE vekp-packvorschr, " pack mnemonic
    exidv LIKE vekp-exidv, " handling unit
    zpallet_no(10), "like zpallettr-zpallet_no, " pallet no
    zdep_point LIKE zpallettr-zdep_point, "Departur Point "Jvdm01
    zcount_check LIKE zpallettr-zcount_check," count check flag
    zvan_no(10), "like zvantr-zvan_no, " van no
    zvan_print LIKE zvantr-zvan_print, " van manifest print
    tknum LIKE vttk-tknum, " Shipment No "ANV 11523
    zeod_print LIKE zvantr-zeod_print, " eod manifest print
    zzpackclass LIKE vekp-zzpackclass, " package class
    zzti LIKE vekp-zzti, " T.I. value
    vstel LIKE likp-vstel, "Shipping point RM050906
    anzpk TYPE znopack, "No of packages in dlv MB01+
    END OF ty_data.
    TYPES:BEGIN OF x_likp ,
    vbeln LIKE likp-vbeln,
    vstel LIKE likp-vstel, "RM050906
    lgtor LIKE likp-lgtor,
    zzroute2lgtor LIKE likp-zzroute2lgtor, "MB01
    route LIKE likp-route,
    wadat LIKE likp-wadat,
    zz2route LIKE likp-zz2route, "MB01+
    zzexproute LIKE likp-zzexproute, "MB01+
    zzroute2 LIKE likp-zzroute2, "MB01+
    anzpk LIKE likp-anzpk,
    END OF x_likp.
    TYPES: BEGIN OF x_vbuk,
    vbeln TYPE vbuk-vbeln,
    wbstk TYPE vbuk-wbstk, " Goods movement status
    kostk TYPE vbuk-kostk, " Picking status
    END OF x_vbuk.
    TYPES: BEGIN OF x_lips,
    vbeln TYPE lips-vbeln, " delivery
    posnr TYPE lips-posnr, " item
    pstyv TYPE lips-pstyv,
    matnr TYPE lips-matnr,
    charg TYPE lips-charg,
    END OF x_lips.
    TYPES: BEGIN OF x_vbup,
    vbeln TYPE vbup-vbeln, " delivery
    posnr TYPE vbup-posnr, " item
    lvsta TYPE vbup-lvsta, " warehouse status
    END OF x_vbup.
    TYPES: BEGIN OF x_vepo,
    venum TYPE vepo-venum, "Internal Handling Unit
    Number
    vepos TYPE vepo-vepos, "Handling Unit Item
    vbeln TYPE vepo-vbeln, " delivery
    posnr TYPE vepo-posnr, " item
    exidv TYPE vekp-exidv,
    END OF x_vepo.
    TYPES: BEGIN OF x_vepo1,
    venum TYPE vekp-venum, "Internal Handling Unit
    Number
    exidv TYPE vekp-exidv,
    END OF x_vepo1.
    Start of changes by ANV SR#11523
    TYPES: BEGIN OF x_vttp,
    tknum TYPE tknum, " Shipment No
    tpnum TYPE tpnum, " Item No
    vbeln TYPE vbup-vbeln, " delivery
    laufk LIKE vttk-laufk, " leg indicator MB01+
    END OF x_vttp.
    End of changes by ANV SR#11523
    Data
    RANGES: r_del FOR likp-vbeln,
    r_lgtor FOR likp-lgtor.
    RANGES: r_vanno FOR zvantr-zvan_no,
    r_palno FOR zpallettr-zpallet_no.
    DATA: BEGIN OF number_range OCCURS 0,
    mark(1),
    id(3),
    num(10) TYPE n,
    desc LIKE zpalletmd-zdesc,
    END OF number_range.
    DATA: t_disp_tab TYPE STANDARD TABLE OF zpickdisp,
    t_data_tab TYPE ty_data OCCURS 0 WITH HEADER LINE,
    it_likp TYPE x_likp OCCURS 0 WITH HEADER LINE, "SUM
    it_vbuk TYPE x_vbuk OCCURS 0 WITH HEADER LINE, "SUM
    it_lips TYPE x_lips OCCURS 0 WITH HEADER LINE, "SUM
    it_vbup TYPE x_vbup OCCURS 0 WITH HEADER LINE, "SUM
    it_vepo TYPE x_vepo OCCURS 0 WITH HEADER LINE, "SUM
    it_vepo2 TYPE x_vepo OCCURS 0 WITH HEADER LINE, "SUM
    *{ INSERT UKMK900355 3
    t_vepo_low TYPE x_vepo OCCURS 0 WITH HEADER LINE, " AS01
    *} INSERT
    it_vepo1 TYPE x_vepo1 OCCURS 0 WITH HEADER LINE, "SUM
    it_vttp TYPE x_vttp OCCURS 0 WITH HEADER LINE, "ANV SR#11523
    t_disp_head TYPE STANDARD TABLE OF zpickhead.
    DATA wa_item_tab TYPE zpickdisp OCCURS 0 WITH HEADER LINE.
    "ANV SR#11113
    DATA: w_numrnge LIKE number_range,
    w_number(10) TYPE n.
    DATA: t_likp LIKE likp OCCURS 0 WITH HEADER LINE,
    t_lips LIKE lips OCCURS 0 WITH HEADER LINE,
    t_vbuk LIKE vbuk OCCURS 0 WITH HEADER LINE,
    t_vbup LIKE vbup OCCURS 0 WITH HEADER LINE,
    t_vepo LIKE vepo OCCURS 0 WITH HEADER LINE,
    t_vekp LIKE vekp OCCURS 0 WITH HEADER LINE,
    t_vantr LIKE zvantr OCCURS 0 WITH HEADER LINE,
    t_pallettr LIKE zpallettr OCCURS 0 WITH HEADER LINE,
    w_likp like likp,
    w_lips LIKE lips,
    w_vbuk LIKE vbuk,
    w_vbup LIKE vbup,
    w_vepo LIKE vepo,
    w_vekp LIKE vekp,
    w_vepo TYPE x_vepo1,
    w_vbup TYPE x_vbup,
    w_vttp TYPE x_vttp, " ANV SR#11523
    w_lips TYPE x_lips,
    w_vbuk TYPE x_vbuk,
    w_likp TYPE x_likp, "MB01-+
    w_tplst LIKE vttk-tplst. "MB01+
    DATA: s_variant LIKE disvariant, "MB01+
    def_variant LIKE disvariant.
    ALV DATA *****
    DATA:
    g_grid TYPE REF TO cl_gui_alv_grid,
    g_sort TYPE slis_t_sortinfo_alv,
    g_custom_container TYPE REF TO cl_gui_custom_container,
    g_layout TYPE slis_layout_alv,
    gt_fieldcat TYPE slis_t_fieldcat_alv,
    t_fldcat LIKE LINE OF gt_fieldcat,
    g_keyinfo TYPE slis_keyinfo_alv,
    gt_events TYPE slis_t_event,
    gs_event TYPE slis_alv_event,
    w_sy_repid LIKE sy-repid.
    DATA: BEGIN OF seltab OCCURS 0.
    INCLUDE STRUCTURE rsparams.
    DATA: END OF seltab.
    SYSTEM GENERATED TABLE CONTROL DATA ********
    DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
    CONTROLS: tc_tabcon TYPE TABLEVIEW USING SCREEN 0100.
    LINES OF TABLECONTROL 'TC_TABCON'
    DATA: g_tc_tabcon_lines LIKE sy-loopc.
    DATA: ok_code LIKE sy-ucomm.
    Constants
    CONSTANTS: c_data_class LIKE klah-class VALUE 'DG_DATA',
    c_mat_class LIKE rmclf-klart VALUE '001',
    c_pack LIKE lips-mtart VALUE 'VERP',
    c_a(1) VALUE 'A',
    c_b(1) VALUE 'B',
    c_c(1) VALUE 'C',
    c_yes(1) VALUE 'X',
    c_no(1) VALUE ' '.
    Selection screen
    standard report select options block
    SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-002.
    SELECT-OPTIONS:
    s_wadat FOR likp-wadat NO-EXTENSION OBLIGATORY. " Goods Issue Date
    *parameters: "TR01-
    p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
    SELECT-OPTIONS: "TR01+
    p_vstel FOR tvst-vstel. " Shipping Point "TR01+
    SELECT-OPTIONS:
    s_lfart FOR likp-lfart, " Delivery type
    s_lgtor FOR t30b-lgtor, " Door selection
    s_exidv FOR vekp-exidv, " Handling Unit
    s_vbeln FOR likp-vbeln, " Delivery "MB01-+
    s_lfdat FOR likp-lfdat. " Delivery date
    PARAMETERS:
    p_exdata AS CHECKBOX. " Show extra columns flag
    SELECTION-SCREEN END OF BLOCK a.
    van/pallet specific select options block
    SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.
    SELECT-OPTIONS:
    s_palno FOR zpallettr-zpallet_no, " no-extension,
    s_vanno FOR zvantr-zvan_no. " no-extension.
    SELECT-OPTIONS:
    s_deppnt FOR zpallettr-zdep_point, "Jvdm01
    s_tplst FOR vttk-tplst. "MB01
    SELECTION-SCREEN END OF BLOCK b.
    MB01 - START - Display variant
    SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-019.
    PARAMETERS: p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK c.
    MB01 - END
    Value Request Events
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-low.
    CLEAR: number_range, w_number .
    REFRESH number_range.
    select numbers and display pop up screen for selection
    PERFORM select_pal_nos.
    s_palno-low = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-high.
    CLEAR: number_range, w_number .
    REFRESH number_range.
    select numbers and display pop up screen for selection
    PERFORM select_pal_nos.
    s_palno-high = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-low.
    CLEAR: number_range, w_number .
    REFRESH number_range.
    select numbers and display pop up screen for selection
    PERFORM select_van_nos.
    s_vanno-low = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-high.
    CLEAR: number_range, w_number .
    REFRESH number_range.
    select numbers and display pop up screen for selection
    PERFORM select_van_nos.
    s_vanno-high = w_number.
    MB01 - START - display variant
    F4-Help for variant
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM f4_for_variant.
    MB01 - END
    At Selection Screen
    AT SELECTION-SCREEN.
    PERFORM validate_selections.
    Initialization
    INITIALIZATION.
    MB01 - START INSERT
    1. Transportation planning point
    Import transportation planning point from user parameters and
    populate
    select option.
    GET PARAMETER ID 'TDP' FIELD w_tplst.
    MOVE: 'I' TO s_tplst-sign,
    'EQ' TO s_tplst-option,
    w_tplst TO s_tplst-low.
    APPEND s_tplst.
    2. Display variant
    CLEAR s_variant.
    s_variant-report = sy-repid.
    Get default variant
    s_def_variante = s_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
    i_save = 'A'
    CHANGING
    cs_variant = s_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 0.
    p_vari = s_variant-variant.
    ENDIF.
    MB01 - END INSERT
    Start of selection
    START-OF-SELECTION.
    clear all data tables
    CLEAR: t_likp,
    it_likp,
    t_lips,
    t_vbuk,
    t_vbup,
    t_vepo,
    t_vantr,
    t_pallettr,
    w_likp,
    w_lips,
    w_vbuk,
    w_vbup,
    w_vepo,
    w_vekp.
    REFRESH: t_likp,
    it_likp,
    t_lips,
    t_vbuk,
    t_vbup,
    t_vepo,
    t_vantr,
    t_pallettr.
    select data for ALV
    due to different input parameters being used, to streamline the data
    selection process, different selection methods are required
    IF NOT s_vanno IS INITIAL
    OR NOT s_palno IS INITIAL
    OR NOT s_deppnt IS INITIAL. "Jvdm01
    if selecting by van/pallet number, need to select the data from the
    handling unit upwards to delivery
    PERFORM select_data_up.
    ELSE.
    otherwise the data can be selected from the delivery downwards
    PERFORM select_data_down.
    ENDIF.
    End of selection
    END-OF-SELECTION.
    call hierarchical ALV display function module
    CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
    i_callback_program = 'ZWMR_PICK_STATUS_REPORT'
    i_callback_pf_status_set = 'SET_STATUS'
    i_callback_user_command =
    'USER_COMMAND' "custom gui status form
    is_layout = g_layout "user command form
    it_fieldcat = gt_fieldcat
    it_sort = g_sort
    i_save = 'X' "MB01+
    is_variant = s_variant
    it_events = gt_events
    i_tabname_header = 't_disp_head'
    i_tabname_item = 't_disp_tab'
    i_structure_name_header = 'ZPICKHEAD'
    i_structure_name_item = 'ZPICKDISP'
    is_keyinfo = g_keyinfo
    TABLES
    t_outtab_header = t_disp_head
    t_outtab_item = t_disp_tab.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    FORMS
    Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
    INCLUDE zwmr_pick_o01.
    INCLUDE zwmr_pick_status_reporto01 .
    INCLUDE zwmr_pick_i01.
    INCLUDE zwmr_pick_status_reporti01 .
    INCLUDE zwmr_pick_f01.
    INCLUDE zwmr_pick_status_reportf01 .
    *& Form select_pal_nos
    select pallet numbers for search help
    FORM select_pal_nos.
    DATA: BEGIN OF t_palno OCCURS 0,
    zpallet_no LIKE zpallettr-zpallet_no,
    END OF t_palno.
    select all available pallet numbers
    SELECT DISTINCT zpallet_no FROM zpallettr
    INTO CORRESPONDING FIELDS OF TABLE t_palno.
    LOOP AT t_palno.
    get pallet id
    SELECT SINGLE zpallet_id FROM zpallettr
    INTO number_range-id
    WHERE zpallet_no = t_palno-zpallet_no.
    get pallet description
    SELECT SINGLE zdesc FROM zpalletmd
    INTO number_range-desc
    WHERE zpallet_id = number_range-id.
    number_range-num = t_palno-zpallet_no.
    append to search help table
    APPEND number_range.
    ENDLOOP.
    call pop up dialog box
    CALL SCREEN 0100 STARTING AT 5 5.
    ENDFORM. " select_pal_nos
    *& Form select_van_nos
    select van numbers for search help
    FORM select_van_nos.
    DATA: BEGIN OF t_vanno OCCURS 0,
    zvan_no LIKE zvantr-zvan_no,
    END OF t_vanno.
    select available van numbers
    SELECT DISTINCT zvan_no FROM zvantr
    INTO CORRESPONDING FIELDS OF TABLE t_vanno.
    LOOP AT t_vanno.
    select van id
    SELECT SINGLE zvan_id FROM zvantr
    INTO number_range-id
    WHERE zvan_no = t_vanno-zvan_no.
    select van description (maintained in pallet tables)
    SELECT SINGLE zdesc FROM zpalletmd
    INTO number_range-desc
    WHERE zpallet_id = number_range-id.
    number_range-num = t_vanno-zvan_no.
    append to search help table
    APPEND number_range.
    ENDLOOP.
    call pop up dialog box
    CALL SCREEN 0100 STARTING AT 5 5.
    ENDFORM. " select_van_nos
    *& Form select_data_down
    select data if selecting from delivery down
    FORM select_data_down.
    select all deliveries from LIKP that fulfill selection criteria
    Start SU01 optmization changes
    SELECT vbeln vstel lgtor route wadat "RM050906
    SELECT vbeln vstel lgtor route wadat
    zzroute2lgtor zz2route zzexproute zzroute2 anzpk "MB01-+
    FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp"MB01-+
    WHERE vbeln IN s_vbeln
    AND vstel IN p_vstel
    AND lfart IN s_lfart
    AND wadat IN s_wadat
    AND lfdat IN s_lfdat "MB01+
    AND
    ( lgtor IN s_lgtor OR zzroute2lgtor IN s_lgtor ) ."MB01+
    IF sy-subrc NE 0.
    no data found
    MESSAGE i007.
    EXIT.
    ENDIF.
    IF NOT t_likp[] IS INITIAL. "SUM
    IF NOT it_likp[] IS INITIAL.
    SORT it_likp BY vbeln. "SUM
    select sales document headers from VBUK
    SELECT vbeln wbstk kostk
    FROM vbuk INTO TABLE it_vbuk
    FOR ALL ENTRIES IN it_likp "SUM
    WHERE vbeln EQ it_likp-vbeln. "SUM
    SORT it_vbuk BY vbeln.
    select all relevant delivery items from LIPS
    SELECT vbeln posnr pstyv matnr charg
    FROM lips INTO TABLE it_lips
    FOR ALL ENTRIES IN it_likp
    WHERE vbeln EQ it_likp-vbeln
    AND pckpf NE 'B' "cannot be packed "AS05
    AND pstyv NE 'ZPAC' "AS05
    AND pstyv NE 'ZGDP' "TR02+ "AS05
    AND lfimg GT 0. "TR01+
    ENDIF.
    IF NOT it_lips[] IS INITIAL.
    select all sales document line items from VBUP
    SORT it_lips BY vbeln posnr. "SUM
    SELECT vbeln posnr lvsta
    FROM vbup INTO TABLE it_vbup
    FOR ALL ENTRIES IN it_lips
    WHERE vbeln EQ it_lips-vbeln
    AND posnr = it_lips-posnr.
    SORT it_vbup BY vbeln posnr.
    select corresponding handling unit ID's (venum)
    TR03 Replace
    start
    select * from vepo appending corresponding fields of table t_vepo
    for all entries in t_lips
    where vbeln = t_lips-vbeln
    and posnr = t_lips-posnr
    and matnr = t_lips-matnr
    and charg = t_lips-charg.
    SELECT vepoVENUM vepoVEPOS vepovbeln vepoposnr
    FROM vepo as vepo
    INNER JOIN vekp as vekp ON vepovenum = vekpvenum
    APPENDING corresponding fields of table it_vepo
    FOR ALL ENTRIES IN it_lips
    WHERE vepo~vbeln = it_lips-vbeln
    AND vepo~posnr = it_lips-posnr
    AND vepo~matnr = it_lips-matnr
    AND vepo~charg = it_lips-charg
    AND vekp~exidv IN s_exidv.
    SELECT venum vepos vbeln posnr
    FROM vepo INTO TABLE it_vepo2
    FOR ALL ENTRIES IN it_lips
    WHERE vbeln = it_lips-vbeln
    AND posnr = it_lips-posnr
    AND matnr = it_lips-matnr
    AND charg = it_lips-charg.
    SORT it_vepo2 BY venum vepos.
    *{ INSERT UKMK900355 1
    Ice-multis: replace lower-level HUs with highest level " AS01
    PERFORM replace_highest_hu. " AS01
    *} INSERT
    Start of changes by ANV SR#11523
    MB01 - extract shipment header as well to populate leg indicator
    Therefore, join vttp with vttk
    Limit as well by transportation planning point
    SELECT vttptknum vttptpnum vttpvbeln vttklaufk
    FROM vttp INNER JOIN vttk
    ON vttptknum = vttktknum
    INTO TABLE it_vttp
    FOR ALL ENTRIES IN it_lips
    WHERE vttp~vbeln = it_lips-vbeln
    AND vttk~tplst IN s_tplst.
    MB01 - END
    End of changes by ANV SR#11523
    IF NOT it_vepo2[] IS INITIAL.
    SELECT venum exidv
    FROM vekp INTO TABLE it_vepo1
    FOR ALL ENTRIES IN it_vepo2
    WHERE venum = it_vepo2-venum
    AND exidv IN s_exidv.
    ENDIF.
    SORT it_vepo1 BY venum.
    CLEAR: w_vepo, it_vepo.
    LOOP AT it_vepo1.
    READ TABLE it_vepo2 WITH KEY venum = it_vepo1-venum.
    IF sy-subrc = 0.
    it_vepo2-exidv = it_vepo1-exidv.
    MODIFY it_vepo2 TRANSPORTING exidv
    WHERE venum = it_vepo1-venum .
    ENDIF.
    ENDLOOP.
    DELETE it_vepo2 WHERE exidv IS initial.
    it_vepo[] = it_vepo2[].
    TR03 Replace end
    ENDIF.
    build process table
    PERFORM move_to_table.
    ENDFORM. "select_data_down
    *& Form select_data_up
    select data if selecting from van/pallet up
    FORM select_data_up.
    IF NOT s_vanno IS INITIAL.
    if van then select van numbers and hence pallet numbers
    SELECT * FROM zvantr INTO TABLE t_vantr
    WHERE zvan_no IN s_vanno.
    and vstel eq p_vstel."TR01-
    IF NOT t_vantr[] IS INITIAL.
    SORT t_vantr BY zvan_id zvan_no vstel zpallet_no. "SUM
    SELECT * FROM zpallettr INTO TABLE t_pallettr
    FOR ALL ENTRIES IN t_vantr
    WHERE zpallet_no EQ t_vantr-zpallet_no
    AND zdep_point IN s_deppnt. "Jvdm01
    and vstel eq p_vstel."TR01-
    ENDIF.
    ELSE.
    otherwise can get pallet numbers directly
    SELECT * FROM zpallettr INTO TABLE t_pallettr
    WHERE zpallet_no IN s_palno
    AND zdep_point IN s_deppnt. "Jvdm01
    and vstel eq p_vstel."TR01-
    ENDIF.
    IF NOT t_pallettr[] IS INITIAL.
    from the pallet nos. we can select the handling units
    SORT t_pallettr BY zpallet_id zpallet_no vstel exidv. "SUM
    SELECT * FROM vekp INTO TABLE t_vekp
    FOR ALL ENTRIES IN t_pallettr
    WHERE exidv EQ t_pallettr-exidv
    AND exidv NE space
    AND exidv IN s_exidv "TR03+
    AND ( exida = 'E' "TR01+
    OR exida = 'F' ). "TR01+
    ENDIF.
    SORT t_vekp BY venum. "SUM
    IF NOT t_vekp[] IS INITIAL.
    build vbeln range from t_vekp.
    LOOP AT t_vekp.
    r_del-sign = 'I'.
    r_del-option = 'EQ'.
    r_del-low = t_vekp-vpobjkey.
    APPEND r_del.
    ENDLOOP.
    select all deliveries from LIKP that correspond to HU's
    SELECT * FROM likp INTO TABLE t_likp
    WHERE vbeln IN r_del
    AND wadat IN s_wadat
    AND lfart IN s_lfart.
    ENDIF.
    MB01- START
    SELECT vbeln lgtor route wadat
    FROM likp INTO TABLE it_likp
    WHERE vbeln IN r_del
    AND wadat IN s_wadat
    AND lfart IN s_lfart.
    SELECT vbeln vstel lgtor route wadat
    zzroute2lgtor zz2route zzexproute zzroute2 anzpk "MB01-+
    FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp
    WHERE vbeln IN r_del
    AND lfart IN s_lfart
    AND wadat IN s_wadat "MB01-+
    AND lfdat IN s_lfdat. "MB01+
    MB01- END
    ENDIF.
    IF NOT it_likp[] IS INITIAL.
    SORT it_likp BY vbeln . "SUM
    select sales document headers from VBUK
    SELECT * FROM vbuk INTO TABLE t_vbuk
    FOR ALL ENTRIES IN t_likp
    WHERE vbeln EQ t_likp-vbeln.
    SELECT vbeln wbstk kostk
    FROM vbuk INTO TABLE it_vbuk
    FOR ALL ENTRIES IN it_likp
    WHERE vbeln EQ it_likp-vbeln.
    SORT it_vbuk BY vbeln. "SUM
    select all relevant delivery items from LIPS
    SELECT * FROM lips INTO TABLE t_lips
    FOR ALL ENTRIES IN t_likp
    WHERE vbeln EQ t_likp-vbeln
    AND pstyv NE 'ZPAC'
    AND pstyv NE 'ZGDP' "TR02+
    AND lfimg GT 0. "TR01+
    SELECT vbeln posnr pstyv matnr charg
    FROM lips INTO TABLE it_lips
    FOR ALL ENTRIES IN it_likp
    WHERE vbeln EQ it_likp-vbeln
    AND pckpf NE 'B' "cannot be packed "AS05
    AND pstyv NE 'ZPAC' "AS05
    AND pstyv NE 'ZGDP' "TR02+ "AS05
    AND lfimg GT 0. "TR01+
    ENDIF.
    IF NOT it_lips[] IS INITIAL.
    SORT it_lips BY vbeln posnr. "SUM
    select all sales document line items from VBUP
    SELECT * FROM vbup INTO TABLE t_vbup
    FOR ALL ENTRIES IN t_lips
    WHERE vbeln EQ t_lips-vbeln
    AND posnr = t_lips-posnr.
    Start of changes by ANV SR#11523
    MB01 - START
    join vttp with vttk to obtain leg indicator
    SELECT tknum tpnum vbeln
    FROM vttp INTO TABLE it_vttp
    FOR ALL ENTRIES IN it_lips
    WHERE vbeln = it_lips-vbeln.
    SELECT vttptknum vttptpnum vttpvbeln vttklaufk
    FROM vttp INNER JOIN vttk
    ON vttptknum = vttktknum
    INTO TABLE it_vttp
    FOR ALL ENTRIES IN it_lips
    WHERE vttp~vbeln = it_lips-vbeln
    AND vttk~tplst IN s_tplst.
    MB01 - END
    End of changes by ANV SR#11523
    SELECT vbeln posnr lvsta
    FROM vbup INTO TABLE it_vbup
    FOR ALL ENTRIES IN it_lips
    WHERE vbeln EQ it_lips-vbeln
    AND posnr = it_lips-posnr.
    SORT t_vbup BY vbeln posnr. "SUM
    select corresponding handling unit ID's (venum)
    SELECT * FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE t_vepo
    FOR ALL ENTRIES IN t_lips
    WHERE vbeln = t_lips-vbeln
    AND posnr = t_lips-posnr
    AND matnr = t_lips-matnr
    AND charg = t_lips-charg.
    SELECT venum vepos vbeln posnr
    FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE it_vepo
    FOR ALL ENTRIES IN it_lips
    WHERE vbeln = it_lips-vbeln
    AND posnr = it_lips-posnr
    AND matnr = it_lips-matnr
    AND charg = it_lips-charg.
    *{ INSERT UKMK900355 1
    it_vepo2[] = it_vepo[]. " DS01
    PERFORM replace_highest_hu. " DS01
    it_vepo[] = it_vepo2[]. " DS01
    *} INSERT
    ENDIF.
    build process table
    PERFORM move_to_table.
    ENDFORM. "select_data_up
    *& Form move_to_table
    move data to processing table
    FORM move_to_table.
    LOOP AT it_vepo.
    CLEAR t_data_tab.
    delivery lines.
    CLEAR w_lips.
    READ TABLE it_lips WITH KEY vbeln = it_vepo-vbeln
    posnr = it_vepo-posnr
    INTO w_lips BINARY SEARCH. "SUM
    MOVE-CORRESPONDING w_lips TO t_data_tab.
    sales document line items
    CLEAR w_vbup.
    READ TABLE it_vbup WITH KEY vbeln = it_vepo-vbeln
    posnr = it_vepo-posnr
    INTO w_vbup BINARY SEARCH. "SUM
    if w_vbup-kosta = space. "TR01-
    not relevant for picking
    delete t_vepo. "TR01-
    continue. "TR01-
    else. "TR01-
    MOVE-CORRESPONDING w_vbup TO t_data_tab.
    endif. "TR01-
    sales doc header
    CLEAR w_vbuk.
    READ TABLE it_vbuk WITH KEY vbeln = it_vepo-vbeln
    INTO w_vbuk BINARY SEARCH. "SUM
    MOVE-CORRESPONDING w_vbuk TO t_data_tab.
    delivery header
    CLEAR w_likp.
    READ TABLE it_likp WITH KEY vbeln = it_vepo-vbeln
    INTO w_likp BINARY SEARCH. "SUM
    MOVE-CORRESPONDING w_likp TO t_data_tab.
    MB01 - START
    DATA: w_routetype TYPE i. "0=non-global,1=1st route,2=2nd
    route,3=both
    At this point move DOOR2 if it falls within the global route scenario
    and the door2 is satisfies the selection criteria for door
    1. Does delivery fall within global route scenario
    CLEAR w_routetype.
    IF w_likp-zz2route = 'Y' .
    1.a. First route - does door1 satisfy the selection criteria
    IF w_likp-lgtor IN s_lgtor.
    w_routetype = 1.
    MOVE w_likp-zzexproute TO t_data_tab-route.
    1.b. Second route - does door2 satisfy the selection criteria
    ELSEIF w_likp-zzroute2lgtor IN s_lgtor.
    here we need to move door2 to lgtor
    w_routetype = 2.
    MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
    MOVE w_likp-zzroute2 TO t_data_tab-route.
    ENDIF.
    If both routes satsify the criteria, append for 2nd leg ***REVISIT!
    IF w_likp-lgtor IN s_lgtor AND w_likp-zzroute2lgtor IN s_lgtor.
    w_routetype = 3.
    ENDIF.
    ENDIF.
    MB01 - END
    Start of changes by ANV SR#11523
    MB01 - If the delivery falls within the global route scenario... need
    to select either preliminary shipment leg OR subsequent leg
    when laufk= 1 (prelim) and linked to route1, if laufk = 2 (subseq) &
    linked to route2
    Shipment Number
    SORT it_vttp BY vbeln laufk.
    CLEAR w_vttp.
    CASE w_routetype.
    WHEN 0.
    READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
    INTO w_vttp BINARY SEARCH.
    WHEN 1.
    READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
    laufk = '1'
    INTO w_vttp BINARY SEARCH.
    WHEN 2.
    READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
    laufk = '3'
    INTO w_vttp BINARY SEARCH.
    WHEN 3. "REVISIT
    ENDCASE.
    MOVE w_vttp-tknum TO t_data_tab-tknum.
    MB01 - END
    End of changes by ANV SR#11523
    select handling unit info using vepo entry
    CLEAR w_vekp.
    IF t_vekp[] IS INITIAL.
    SELECT SINGLE * FROM vekp INTO w_vekp
    WHERE venum = it_vepo-venum.
    ELSE.
    READ TABLE t_vekp WITH KEY venum = it_vepo-venum
    INTO w_vekp BINARY SEARCH. "SUM
    IF sy-subrc NE 0.
    SELECT SINGLE * FROM vekp INTO w_vekp
    WHERE venum = t_vepo-venum.
    ENDIF.
    ENDIF.
    MOVE-CORRESPONDING w_vekp TO t_data_tab.
    *{ INSERT UKMK900355 2
    WM status for HU "AS03
    SELECT SINGLE * FROM zhu_to_link WHERE lgnum EQ w_vekp-lgnum"AS03
    AND exidv EQ w_vekp-exidv."AS03
    IF sy-subrc EQ 0. "AS03
    IF zhu_to_link-zpick_comp EQ space. "AS03
    t_data_tab-lvsta = 'B'. "AS03
    ELSE. "AS03
    t_data_tab-lvsta = 'C'. "AS03
    ENDIF. "AS03
    ENDIF. "AS03
    *} INSERT
    select pallet / van load information "Jvdm01-
    SELECT SINGLE zpallet_no zcount_check FROM zpallettr "Jvdm01-
    INTO (t_data_tab-zpallet_no, "Jvdm01-
    t_data_tab-zcount_check) "Jvdm01-
    WHERE exidv EQ w_vekp-exidv. "Jvdm01-
    PERFORM read_pallet. "MB01+
    SELECT SINGLE zpallet_no zcount_check zdep_point "Jvdm01+
    FROM zpallettr "Jvdm01+
    INTO (t_data_tab-zpallet_no, "Jvdm01+
    t_data_tab-zcount_check, "Jvdm01+
    t_data_tab-zdep_point) "Jvdm01+
    WHERE exidv EQ w_vekp-exidv. "Jvdm01+
    WHERE exidv EQ w_vekp-exidv "MB01-+
    AND zpallet_id = t_data_tab-lgtor."MB01+
    MB01 - INSERT START
    If pallet number specified and
    we are in the global route scenario & both doors fall within the
    selection criteria, we need to copy the one that is currently in a
    specified pallet
    IF NOT s_palno IS INITIAL AND not t_data_tab-zpallet_no in s_palno
    AND w_routetype = '3' .
    Switch doors & get 2nd shipment
    MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
    MOVE w_likp-zzroute2 TO t_data_tab-route.
    Read subsequent leg shipment
    READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
    laufk = '3'
    INTO w_vttp BINARY SEARCH.
    IF sy-subrc = 0.
    MOVE w_vttp-tknum TO t_data_tab-tknum.
    ENDIF.
    PERFORM read_pallet. "MB01+
    ENDIF.
    MB01 - INSERT END
    IF NOT t_data_tab-zpallet_no IN s_palno. "TR01+
    CONTINUE. "TR01+
    ENDIF. "TR01+
    IF sy-subrc = 0. "mb01+
    perform read_van. "MB01+
    SELECT SINGLE zvan_no zvan_print zeod_print FROM zvantr
    INTO (t_data_tab-zvan_no,
    t_data_tab-zvan_print,
    t_data_tab-zeod_print)
    WHERE zpallet_no EQ t_data_tab-zpallet_no.
    MB01 - INSERT START
    If van number specified and
    we are in the global route scenario & both doors fall within the
    selection criteria, we need to copy the one that is currently on a
    specified van
    IF NOT s_vanno IS INITIAL AND not t_data_tab-zvan_no in s_vanno AND
    w_routetype = '3' .
    Switch doors & get 2nd shipment
    MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
    MOVE w_likp-zzroute2 TO t_data_tab-route.
    Read subsequent leg shipment
    READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
    laufk = '3'
    INTO w_vttp BINARY SEARCH.
    IF sy-subrc = 0.
    MOVE w_vttp-tknum TO t_data_tab-tknum.
    ENDIF.
    PERFORM read_pallet. "MB01+
    perform read_van.
    ENDIF. "mb01-
    MB01 - INSERT END
    IF NOT t_data_tab-zvan_no IN s_vanno. "TR01+
    CONTINUE. "TR01+
    ENDIF. "TR01+
    ENDIF.
    APPEND t_data_tab.
    ENDLOOP.
    *-----> TR01+ start
    If the delivery has yet to be packed, then need to include in report
    Thus delete t_lips here and if any entries left after looping through
    t_vepo, these will also need to be added to t_data_tab
    if the selection is by handling unit though we do not want
    these"TR03+
    IF s_exidv IS INITIAL. "TR03+
    *{ REPLACE UKMK900355 1
    *\ LOOP AT it_vepo.
    *\ READ TABLE it_lips WITH KEY vbeln = it_vepo-vbeln
    *\ posnr = it_vepo-posnr
    *\ BINARY SEARCH. "SUM
    *\ IF sy-subrc = 0.
    *\ DELETE it_lips INDEX sy-tabix.
    *\ ENDIF.
    *\ ENDLOOP.
    Higher-level HUs can contain more than one delivery item " AS01
    LOOP AT it_lips. " AS01
    READ TABLE t_vepo_low WITH KEY vbeln = it_lips-vbeln " AS01
    posnr = it_lips-posnr. " AS01
    CHECK sy-subrc EQ 0. " AS01
    DELETE it_lips. " AS01
    ENDLOOP. " AS01
    *} REPLACE
    IF NOT it_lips[] IS INITIAL.
    move any unpacked items to the data table
    PERFORM move_lips_to_table.
    ENDIF.
    ENDIF. "TR03+
    *<---- TR01+ End
    get relevant status icons
    PERFORM select_icons.
    prepare ALV data
    PERFORM prepare_alv.
    ENDFORM. " select_data
    *& Form select_icons
    select icons for display and move data to display table
    FORM select_icons.
    DATA: w_disp_tab LIKE zpickdisp,
    w_disp_head LIKE zpickhead,
    w_color LIKE zpickdisp-color,
    ov_icon LIKE zpickdisp-ov_icon,
    gi_icon LIKE zpickdisp-gi_icon,
    to_icon LIKE zpickdisp-to_icon,
    lp_icon LIKE zpickdisp-lp_icon,
    pc_icon LIKE zpickdisp-pc_icon,
    lv_icon LIKE zpickdisp-lv_icon,
    vm_icon LIKE zpickdisp-vm_icon,
    em_icon LIKE zpickdisp-em_icon,
    sp_icon LIKE zpickdisp-sp_icon, " ANV SR#11523
    t_ovst_tab LIKE t_disp_tab WITH HEADER LINE.
    CONSTANTS: c_col1(3) VALUE 'C10',
    c_col2(3) VALUE 'C20'.
    SORT t_data_tab BY lgtor vbeln.
    w_color = c_col2.
    LOOP AT t_data_tab.
    AT NEW lgtor.
    fill ALV header table
    CLEAR w_disp_head.
    w_disp_head-lgtor = t_data_tab-lgtor.
    APPEND w_disp_head TO t_disp_head.
    ENDAT.
    goods issue status & overall amber/green only
    CASE t_data_tab-wbstk.
    WHEN c_c.
    MOVE icon_green_light TO gi_icon.
    MOVE icon_green_light TO ov_icon.
    WHEN OTHERS.
    MOVE icon_red_light TO gi_icon.
    MOVE icon_yellow_light TO ov_icon.
    ENDCASE.
    transfer order status
    CASE t_data_tab-lvsta.
    WHEN c_a.
    MOVE icon_red_light TO to_icon.
    WHEN c_b.
    MOVE icon_yellow_light TO to_icon.
    WHEN c_c.
    MOVE icon_green_light TO to_icon.
    WHEN space.
    write N/A
    to_icon = 'N/A'.
    ENDCASE.
    loaded to pallet status
    IF NOT t_data_tab-zpallet_no IS INITIAL.
    MOVE icon_green_light TO lp_icon.
    ELSE.
    MOVE icon_red_light TO lp_icon.
    ENDIF.
    pallet count status
    IF NOT t_data_tab-zcount_check IS INITIAL.
    MOVE icon_green_light TO pc_icon.
    ELSE.
    MOVE icon_red_light TO pc_icon.
    ENDIF.
    loaded to van status
    IF NOT t_data_tab-zvan_no IS INITIAL.
    MOVE icon_green_light TO lv_icon.
    ELSE.
    MOVE icon_red_light TO lv_icon.
    ENDIF.
    van manifest status
    IF NOT t_data_tab-zvan_print IS INITIAL.
    MOVE icon_green_light TO vm_icon.
    ELSE.
    MOVE icon_red_light TO vm_icon.
    ENDIF.
    Start of changes by ANV SR#11523
    Shipment status
    IF NOT t_data_tab-tknum IS INITIAL.
    MOVE icon_green_light TO sp_icon.
    ELSE.
    MOVE icon_red_light TO sp_icon.
    ENDIF.
    End of changes by ANV SR#11523
    end of day manifest status
    IF NOT t_data_tab-zeod_print IS INITIAL.
    MOVE icon_green_light TO em_icon.
    ELSE.
    MOVE icon_red_light TO em_icon.
    ENDIF.
    move working data table to display table
    MOVE-CORRESPONDING t_data_tab TO w_disp_tab.
    w_disp_tab-ov_icon = ov_icon.
    w_disp_tab-gi_icon = gi_icon.
    w_disp_tab-to_icon = to_icon.
    w_disp_tab-lp_icon = lp_icon.
    w_disp_tab-pc_icon = pc_icon.
    w_disp_tab-lv_icon = lv_icon.
    w_disp_tab-vm_icon = vm_icon.
    w_disp_tab-em_icon = em_icon.
    w_disp_tab-sp_icon = sp_icon. "ANV SR#11523
    w_disp_tab-color = w_color.
    fill N/A values for initial fields for display
    IF w_disp_tab-packvorschr IS INITIAL.
    w_disp_tab-packvorschr = 'N/A'.
    ENDIF.
    IF w_disp_tab-exidv IS INITIAL.
    w_disp_tab-exidv = 'N/A'.
    ENDIF.
    IF w_disp_tab-zpallet_no IS INITIAL.
    WRITE 'N/A' TO w_disp_tab-zpallet_no.
    ENDIF.
    IF w_disp_tab-zvan_no IS INITIAL.
    WRITE 'N/A' TO w_disp_tab-zvan_no.
    ENDIF.
    display different color for new doc number
    AT END OF vbeln.
    IF w_color = c_col1.
    w_color = c_col2.
    ELSEIF w_color = c_col2.
    w_color = c_col1.
    ENDIF.
    ENDAT.
    APPEND w_disp_tab TO t_disp_tab.
    CLEAR w_disp_tab.
    ENDLOOP.
    we have all the icons in display but need to check the overall status
    as this refers to the line items
    green and amber statuses already set and use the same criteria as the
    goods issue status unless detected as red here
    DATA: ov_stat_red(1).
    CLEAR w_disp_tab.
    SORT t_disp_tab BY vbeln.
    LOOP AT t_disp_tab INTO w_disp_tab.
    AT NEW vbeln.
    check all line items for delivery
    LOOP AT t_data_tab WHERE vbeln = w_disp_tab-vbeln.
    IF t_data_tab-lvsta = c_a.
    set overall status to red
    ov_stat_red = c_yes.
    EXIT.
    ELSE.
    leave green/amber status icon as previosly determined
    ENDIF.
    ENDLOOP.
    IF ov_stat_red = c_yes.
    set overall status to red for all items in that delivery
    CLEAR ov_stat_red.
    MOVE icon_red_light TO w_disp_tab-ov_icon.
    MODIFY t_disp_tab FROM w_disp_tab TRANSPORTING ov_icon
    WHERE vbeln = w_disp_tab-vbeln.
    ENDIF.
    ENDAT.
    ENDLOOP.
    ENDFORM. " select_icons
    *& Form fill_layout
    fill ALV layout parameters
    FORM fill_layout.
    CLEAR g_layout.
    g_layout-colwidth_optimize = c_yes. " column width optimisation
    g_layout-zebra = space. " alternate line colors
    g_layout-box_fieldname = 'MARK'. " checkbox fieldname
    g_layout-info_fieldname = 'COLOR'. " highlight row indicator
    g_layout-no_vline = space. " vertical line
    g_layout-key_hotspot = space. " hotspot field
    g_layout-f2code = 'PICK'. " F2 ok_code
    g_layout-numc_sum = c_yes. " sum numc fields
    g_layout-box_tabname = 't_disp_head'. " checkbox table name
    g_layout-expand_fieldname = 'EXPAND'. " expand field name
    ENDFORM. " fill_layout
    *& Form fill_sort
    fill ALV sort table
    FORM fill_sort.
    DATA: w_g_sort TYPE slis_sortinfo_alv.
    w_g_sort-spos = 1.
    w_g_sort-fieldname = 'LGTOR'.
    w_g_sort-tabname = 't_disp_tab'.
    w_g_sort-up = c_yes.
    APPEND w_g_sort TO g_sort.
    w_g_sort-spos = 2.
    w_g_sort-fieldname = 'VBELN'.
    w_g_sort-tabname = 't_disp_tab'.
    w_g_sort-up = c_yes.
    APPEND w_g_sort TO g_sort.
    w_g_sort-spos = 3.
    w_g_sort-fieldname = 'POSNR'.
    w_g_sort-tabname = 't_disp_tab'.
    w_g_sort-up = c_yes.
    APPEND w_g_sort TO g_sort.

  • Regarding ALV ( To be displayed in Tree Format)

    Hi all,
    I am working on a ALV report which is to be displayed in Tree Structure . I found some demo programs within SAP .. but do we have an Alternative .. all those Demos use  OOPS concept .. Can this Report be done without using OOPS in ALV.
    Please Suggest.
    Thanks & Regards
    Srinivas

    Hi,
    This is a ALV Report with tree structure.
    report  zwmr_pick_status_report no standard page heading
                                    message-id zw.
    Type Pools                                                           *
    type-pools: icon, slis.
    Tables                                                               *
    tables: tvst,
            likp,
            t30b,
            vekp,
            zpallettr,
            zvantr.
    Types                                                                *
    types:
      begin of ty_data,
         lgtor       like likp-lgtor,             " door
         vbeln       like likp-vbeln,             " delivery
         wbstk       like vbuk-wbstk,             " Goods movement status
         kostk       like vbuk-kostk,             " Picking status
         posnr       like lips-posnr,             " item
         route       like likp-route,             " route
         wadat       like likp-wadat,             " goods issue date
         lvsta       like vbup-lvsta,             " warehouse status
         packvorschr like vekp-packvorschr,       " pack mnemonic
         exidv       like vekp-exidv,             " handling unit
         zpallet_no(10),  "like zpallettr-zpallet_no,   " pallet no
         zcount_check like zpallettr-zcount_check," count check flag
         zvan_no(10),     "like zvantr-zvan_no,         " van no
         zvan_print  like zvantr-zvan_print,      " van manifest print
         zeod_print  like zvantr-zeod_print,      " eod manifest print
         zzpackclass like vekp-zzpackclass,       " package class
         zzti        like vekp-zzti,              " T.I. value
      end of ty_data.
    Data                                                                 *
    ranges: r_del   for likp-vbeln,
            r_lgtor for likp-lgtor.
    ranges: r_vanno for zvantr-zvan_no,
            r_palno for zpallettr-zpallet_no.
    data: begin of number_range occurs 0,
             mark(1),
             id(3),
             num(10) type n,
             desc like zpalletmd-zdesc,
          end of number_range.
    data: t_disp_tab  type standard table of zpickdisp,
          t_data_tab  type ty_data  occurs 0 with header line,
          t_disp_head type standard table of zpickhead.
    data: w_numrnge like number_range,
          w_number(10) type n.
    data: t_likp     like likp      occurs 0 with header line,
          t_lips     like lips      occurs 0 with header line,
          t_vbuk     like vbuk      occurs 0 with header line,
          t_vbup     like vbup      occurs 0 with header line,
          t_vepo     like vepo      occurs 0 with header line,
          t_vekp     like vekp      occurs 0 with header line,
          t_vantr    like zvantr    occurs 0 with header line,
          t_pallettr like zpallettr occurs 0 with header line,
          w_likp     like likp,
          w_lips     like lips,
          w_vbuk     like vbuk,
          w_vbup     like vbup,
          w_vepo     like vepo,
          w_vekp     like vekp.
    ALV DATA *****
    data:
         g_grid             type ref to cl_gui_alv_grid,
         g_sort             type slis_t_sortinfo_alv,
         g_custom_container type ref to cl_gui_custom_container,
         g_layout           type slis_layout_alv,
         gt_fieldcat        type slis_t_fieldcat_alv,
         t_fldcat           like line of gt_fieldcat,
         g_keyinfo          type slis_keyinfo_alv,
         gt_events          type slis_t_event,
         gs_event           type slis_alv_event,
         w_sy_repid         like sy-repid.
    data: begin of seltab occurs 0.
            include structure rsparams.
    data: end of seltab.
    SYSTEM GENERATED TABLE CONTROL DATA ********
    DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
    controls: tc_tabcon type tableview using screen 0100.
    LINES OF TABLECONTROL 'TC_TABCON'
    data:     g_tc_tabcon_lines  like sy-loopc.
    data:     ok_code like sy-ucomm.
    Constants                                                            *
    constants: c_data_class like klah-class value 'DG_DATA',
               c_mat_class  like rmclf-klart value '001',
               c_pack       like lips-mtart value 'VERP',
               c_a(1)            value 'A',
               c_b(1)            value 'B',
               c_c(1)            value 'C',
               c_yes(1)          value 'X',
               c_no(1)           value ' '.
    Selection screen                                                     *
    standard report select options block
    selection-screen begin of block a with frame title text-002.
    select-options:
      s_wadat for likp-wadat no-extension obligatory.  " Goods Issue Date
    *parameters:                                           "TR01-
    p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
    select-options:                                             "TR01+
      p_vstel for tvst-vstel.            " Shipping Point  "TR01+
    select-options:
      s_lfart for likp-lfart,            " Delivery type
      s_lgtor for t30b-lgtor,            " Door selection
      s_exidv for vekp-exidv,            " Handling Unit
      s_vbeln for likp-vbeln.            " Delivery
    parameters:
      p_exdata as checkbox.              " Show extra columns flag
    selection-screen end of block a.
    van/pallet specific select options block
    selection-screen begin of block b with frame title text-001.
    select-options:
      s_palno for zpallettr-zpallet_no, " no-extension,
      s_vanno for zvantr-zvan_no.       " no-extension.
    selection-screen end of block b.
    Value Request Events                                                 *
    at selection-screen on value-request for s_palno-low.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_pal_nos.
      s_palno-low = w_number.
    at selection-screen on value-request for s_palno-high.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_pal_nos.
      s_palno-high = w_number.
    at selection-screen on value-request for s_vanno-low.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_van_nos.
      s_vanno-low = w_number.
    at selection-screen on value-request for s_vanno-high.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_van_nos.
      s_vanno-high = w_number.
    At Selection Screen                                                  *
    at selection-screen.
      perform validate_selections.
    Initialization                                                       *
    initialization.
    Start of selection                                                   *
    start-of-selection.
    clear all data tables
      clear: t_likp,
             t_lips,
             t_vbuk,
             t_vbup,
             t_vepo,
             t_vantr,
             t_pallettr,
             w_likp,
             w_lips,
             w_vbuk,
             w_vbup,
             w_vepo,
             w_vekp.
      refresh: t_likp,
               t_lips,
               t_vbuk,
               t_vbup,
               t_vepo,
               t_vantr,
               t_pallettr.
    select data for ALV
    due to different input parameters being used, to streamline the data
    selection process, different selection methods are required
      if not s_vanno is initial
      or not s_palno is initial.
      if selecting by van/pallet number, need to select the data from the
      handling unit upwards to delivery
        perform select_data_up.
      else.
      otherwise the data can be selected from the delivery downwards
        perform select_data_down.
      endif.
    End of selection                                                     *
    end-of-selection.
    call hierarchical ALV display function module
      call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
           exporting
                i_callback_program       = 'ZWMR_PICK_STATUS_REPORT'
                i_callback_pf_status_set = 'SET_STATUS'
                i_callback_user_command =
                   'USER_COMMAND' "custom gui status form
                is_layout                = g_layout  "user command form
                it_fieldcat              = gt_fieldcat
                it_sort                  = g_sort
                it_events                = gt_events
                i_tabname_header         = 't_disp_head'
                i_tabname_item           = 't_disp_tab'
                i_structure_name_header  = 'ZPICKHEAD'
                i_structure_name_item    = 'ZPICKDISP'
                is_keyinfo               = g_keyinfo
           tables
                t_outtab_header          = t_disp_head
                t_outtab_item            = t_disp_tab.
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
                                FORMS                                    *
    Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
      include zwmr_pick_status_reporto01 .
      include zwmr_pick_status_reporti01 .
      include zwmr_pick_status_reportf01 .
    *&      Form  select_pal_nos
          select pallet numbers for search help
    form select_pal_nos.
      data: begin of t_palno occurs 0,
              zpallet_no like zpallettr-zpallet_no,
            end of t_palno.
    select all available pallet numbers
      select distinct zpallet_no from zpallettr
                      into corresponding fields of table t_palno.
      loop at t_palno.
      get pallet id
        select single zpallet_id from zpallettr
                      into number_range-id
                      where zpallet_no = t_palno-zpallet_no.
      get pallet description
        select single zdesc from zpalletmd
                      into number_range-desc
                      where zpallet_id = number_range-id.
        number_range-num = t_palno-zpallet_no.
      append to search help table
        append number_range.
      endloop.
    call pop up dialog box
      call screen 0100 starting at 5 5.
    endform.                    " select_pal_nos
    *&      Form  select_van_nos
          select van numbers for search help
    form select_van_nos.
      data: begin of t_vanno occurs 0,
              zvan_no like zvantr-zvan_no,
            end of t_vanno.
    select available van numbers
      select distinct zvan_no from zvantr
                      into corresponding fields of table t_vanno.
      loop at t_vanno.
      select van id
        select single zvan_id from zvantr
                      into number_range-id
                      where zvan_no = t_vanno-zvan_no.
      select van description (maintained in pallet tables)
        select single zdesc from zpalletmd
                      into number_range-desc
                      where zpallet_id = number_range-id.
        number_range-num = t_vanno-zvan_no.
      append to search help table
        append number_range.
      endloop.
    call pop up dialog box
      call screen 0100 starting at 5 5.
    endform.                    " select_van_nos
    *&      Form  select_data_down
          select data if selecting from delivery down
    form select_data_down.
    select all deliveries from LIKP that fulfill selection criteria
      select * from likp into table t_likp
                         where vbeln in s_vbeln
                       and   vstel eq p_vstel                 "TR01-
                         and   vstel in p_vstel
                         and   lgtor in s_lgtor
                         and   wadat in s_wadat
                         and   lfart in s_lfart.
      if sy-subrc ne 0.
      no data found
        message i007.
        exit.
      endif.
      if not t_likp[] is initial.
      select sales document headers from VBUK
        select * from vbuk into table t_vbuk
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln.
      select all relevant delivery items from LIPS
        select * from lips into table t_lips
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln
                      and   pstyv ne 'ZPAC'
                      and   pstyv ne 'ZGDP'                     "TR02+
                      and   lfimg gt 0.                         "TR01+
      endif.
      if not t_lips[] is initial.
      select all sales document line items from VBUP
        select * from vbup into table t_vbup
                      for all entries in t_lips
                      where vbeln eq t_lips-vbeln
                      and   posnr = t_lips-posnr.
      select corresponding handling unit ID's (venum)
    TR03 Replace start
       select * from vepo appending corresponding fields of table t_vepo
                     for all entries in t_lips
                     where vbeln = t_lips-vbeln
                     and   posnr = t_lips-posnr
                     and   matnr = t_lips-matnr
                     and   charg = t_lips-charg.
        select * from vepo
                      inner join vekp on vepovenum = vekpvenum
                      appending corresponding fields of table t_vepo
                      for all entries in t_lips
                      where vepo~vbeln = t_lips-vbeln
                      and   vepo~posnr = t_lips-posnr
                      and   vepo~matnr = t_lips-matnr
                      and   vepo~charg = t_lips-charg
                      and   vekp~exidv in s_exidv.
    TR03 Replace end
      endif.
    build process table
      perform move_to_table.
    endform.   "select_data_down
    *&      Form  select_data_up
          select data if selecting from van/pallet up
    form select_data_up.
      if not s_vanno is initial.
      if van then select van numbers and hence pallet numbers
        select * from zvantr into table t_vantr
                              where zvan_no in s_vanno.
                            and   vstel   eq p_vstel."TR01-
        if not t_vantr[] is initial.
          select * from zpallettr into table t_pallettr
                                  for all entries in t_vantr
                                  where zpallet_no eq t_vantr-zpallet_no.
                                and   vstel      eq p_vstel."TR01-
        endif.
      else.
      otherwise can get pallet numbers directly
        select * from zpallettr into table t_pallettr
                                where zpallet_no in s_palno.
                              and   vstel      eq p_vstel."TR01-
      endif.
      if not t_pallettr[] is initial.
      from the pallet nos. we can select the handling units
        select * from vekp into table t_vekp
                           for all entries in t_pallettr
                           where exidv eq t_pallettr-exidv
                           and   exidv ne space
                           and   exidv in s_exidv               "TR03+
                           and ( exida = 'E'                    "TR01+
                           or    exida = 'F' ).                 "TR01+
      endif.
      if not t_vekp[] is initial.
      build vbeln range from t_vekp.
        loop at t_vekp.
          r_del-sign = 'I'.
          r_del-option = 'EQ'.
          r_del-low = t_vekp-vpobjkey.
          append r_del.
        endloop.
      select all deliveries from LIKP that correspond to HU's
        select * from likp into table t_likp
                           where vbeln in r_del
                           and   wadat in s_wadat
                           and   lfart in s_lfart.
      endif.
      if not t_likp[] is initial.
      select sales document headers from VBUK
        select * from vbuk into table t_vbuk
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln.
      select all relevant delivery items from LIPS
        select * from lips into table t_lips
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln
                      and   pstyv ne 'ZPAC'
                      and   pstyv ne 'ZGDP'                     "TR02+
                      and   lfimg gt 0.                         "TR01+
      endif.
      if not t_lips[] is initial.
      select all sales document line items from VBUP
        select * from vbup into table t_vbup
                      for all entries in t_lips
                      where vbeln eq t_lips-vbeln
                      and   posnr = t_lips-posnr.
      select corresponding handling unit ID's (venum)
        select * from vepo appending corresponding fields of table t_vepo
                      for all entries in t_lips
                      where vbeln = t_lips-vbeln
                      and   posnr = t_lips-posnr
                      and   matnr = t_lips-matnr
                      and   charg = t_lips-charg.
      endif.
    build process table
      perform move_to_table.
    endform.   "select_data_up
    *&      Form  move_to_table
          move data to processing table
    form move_to_table.
      loop at t_vepo.
        clear t_data_tab.
      delivery lines.
        clear w_lips.
        read table t_lips with key vbeln = t_vepo-vbeln
                                   posnr = t_vepo-posnr
                                   into w_lips.
        move-corresponding w_lips to t_data_tab.
      sales document line items
        clear w_vbup.
        read table t_vbup with key vbeln = t_vepo-vbeln
                                   posnr = t_vepo-posnr
                                   into w_vbup.
      if w_vbup-kosta = space.                   "TR01-
        not relevant for picking
        delete t_vepo.                           "TR01-
        continue.                                "TR01-
      else.                                      "TR01-
        move-corresponding w_vbup to t_data_tab.
      endif.                                     "TR01-
      sales doc header
        clear w_vbuk.
        read table t_vbuk with key vbeln = t_vepo-vbeln
                               into w_vbuk.
        move-corresponding w_vbuk to t_data_tab.
      delivery header
        clear w_likp.
        read table t_likp with key vbeln = t_vepo-vbeln
                               into w_likp.
        move-corresponding w_likp to t_data_tab.
      select handling unit info using vepo entry
        clear w_vekp.
        if t_vekp[] is initial.
          select single * from vekp into w_vekp
                                    where venum = t_vepo-venum.
        else.
          read table t_vekp with key venum = t_vepo-venum
                                     into w_vekp.
          if sy-subrc ne 0.
            select single * from vekp into w_vekp
                            where venum = t_vepo-venum.
          endif.
        endif.
        move-corresponding w_vekp to t_data_tab.
      select pallet / van load information
        select single zpallet_no zcount_check from zpallettr
                                 into (t_data_tab-zpallet_no,
                                       t_data_tab-zcount_check)
                                 where exidv eq w_vekp-exidv.
        if not t_data_tab-zpallet_no in s_palno.                "TR01+
          continue.                                             "TR01+
        endif.                                                  "TR01+
        if sy-subrc = 0.
          select single zvan_no zvan_print zeod_print from zvantr
                        into (t_data_tab-zvan_no,
                              t_data_tab-zvan_print,
                              t_data_tab-zeod_print)
                        where zpallet_no eq t_data_tab-zpallet_no.
          if not t_data_tab-zvan_no in s_vanno.                 "TR01+
            continue.                                           "TR01+
          endif.                                                "TR01+
        endif.
        append t_data_tab.
      endloop.
    *-----> TR01+ start
    If the delivery has yet to be packed, then need to include in report
    Thus delete t_lips here and if any entries left after looping through
    t_vepo, these will also need to be added to t_data_tab
    if the selection is by handling unit though we do not want these"TR03+
      if s_exidv is initial.                                          "TR03+
        loop at t_vepo.
          read table t_lips with key vbeln = t_vepo-vbeln
                                     posnr = t_vepo-posnr.
          if sy-subrc = 0.
            delete t_lips index sy-tabix.
          endif.
        endloop.
        if not t_lips[] is initial.
      move any unpacked items to the data table
          perform move_lips_to_table.
        endif.
      endif.                                                          "TR03+
    *<---- TR01+ End
    get relevant status icons
      perform select_icons.
    prepare ALV data
      perform prepare_alv.
    endform.                    " select_data
    *&      Form  select_icons
          select icons for display and move data to display table
    form select_icons.
      data: w_disp_tab like zpickdisp,
            w_disp_head like zpickhead,
            w_color like zpickdisp-color,
            ov_icon like zpickdisp-ov_icon,
            gi_icon like zpickdisp-gi_icon,
            to_icon like zpickdisp-to_icon,
            lp_icon like zpickdisp-lp_icon,
            pc_icon like zpickdisp-pc_icon,
            lv_icon like zpickdisp-lv_icon,
            vm_icon like zpickdisp-vm_icon,
            em_icon like zpickdisp-em_icon,
            t_ovst_tab like t_disp_tab with header line.
      constants: c_col1(3) value 'C10',
                 c_col2(3) value 'C20'.
      sort t_data_tab by lgtor vbeln.
      w_color = c_col2.
      loop at t_data_tab.
        at new lgtor.
        fill ALV header table
          clear w_disp_head.
          w_disp_head-lgtor = t_data_tab-lgtor.
          append w_disp_head to t_disp_head.
        endat.
      goods issue status & overall amber/green only
        case t_data_tab-wbstk.
          when c_c.
            move icon_green_light to gi_icon.
            move icon_green_light to ov_icon.
          when others.
            move icon_red_light to gi_icon.
            move icon_yellow_light to ov_icon.
        endcase.
      transfer order status
        case t_data_tab-lvsta.
          when c_a.
            move icon_red_light to to_icon.
          when c_b.
            move icon_yellow_light to to_icon.
          when c_c.
            move icon_green_light to to_icon.
          when space.
          write N/A
            to_icon = 'N/A'.
        endcase.
      loaded to pallet status
        if not t_data_tab-zpallet_no is initial.
          move icon_green_light to lp_icon.
        else.
          move icon_red_light to lp_icon.
        endif.
      pallet count status
        if not t_data_tab-zcount_check is initial.
          move icon_green_light to pc_icon.
        else.
          move icon_red_light to pc_icon.
        endif.
      loaded to van status
        if not t_data_tab-zvan_no is initial.
          move icon_green_light to lv_icon.
        else.
          move icon_red_light to lv_icon.
        endif.
      van manifest status
        if not t_data_tab-zvan_print is initial.
          move icon_green_light to vm_icon.
        else.
          move icon_red_light to vm_icon.
        endif.
      end of day manifest status
        if not t_data_tab-zeod_print is initial.
          move icon_green_light to em_icon.
        else.
          move icon_red_light to em_icon.
        endif.
      move working data table to display table
        move-corresponding t_data_tab to w_disp_tab.
        w_disp_tab-ov_icon = ov_icon.
        w_disp_tab-gi_icon = gi_icon.
        w_disp_tab-to_icon = to_icon.
        w_disp_tab-lp_icon = lp_icon.
        w_disp_tab-pc_icon = pc_icon.
        w_disp_tab-lv_icon = lv_icon.
        w_disp_tab-vm_icon = vm_icon.
        w_disp_tab-em_icon = em_icon.
        w_disp_tab-color = w_color.
      fill N/A values for initial fields for display
        if w_disp_tab-packvorschr is initial.
          w_disp_tab-packvorschr = 'N/A'.
        endif.
        if w_disp_tab-exidv is initial.
          w_disp_tab-exidv = 'N/A'.
        endif.
        if w_disp_tab-zpallet_no is initial.
          write 'N/A' to w_disp_tab-zpallet_no.
        endif.
        if w_disp_tab-zvan_no is initial.
          write 'N/A' to w_disp_tab-zvan_no.
        endif.
      display different color for new doc number
        at end of vbeln.
          if w_color = c_col1.
            w_color = c_col2.
          elseif w_color = c_col2.
            w_color = c_col1.
          endif.
        endat.
        append w_disp_tab to t_disp_tab.
        clear w_disp_tab.
      endloop.
    we have all the icons in display but need to check the overall status
    as this refers to the line items
    green and amber statuses already set and use the same criteria as the
    goods issue status unless detected as red here
      data: ov_stat_red(1).
      clear w_disp_tab.
      sort t_disp_tab by vbeln.
      loop at t_disp_tab into w_disp_tab.
        at new vbeln.
        check all line items for delivery
          loop at t_data_tab where vbeln = w_disp_tab-vbeln.
            if t_data_tab-lvsta = c_a.
            set overall status to red
              ov_stat_red = c_yes.
              exit.
            else.
            leave green/amber status icon as previosly determined
            endif.
          endloop.
          if ov_stat_red = c_yes.
          set overall status to red for all items in that delivery
            clear ov_stat_red.
            move icon_red_light to w_disp_tab-ov_icon.
            modify t_disp_tab from w_disp_tab transporting ov_icon
                              where vbeln = w_disp_tab-vbeln.
          endif.
        endat.
      endloop.
    endform.                    " select_icons
    *&      Form  fill_layout
          fill ALV layout parameters
    form fill_layout.
      clear g_layout.
      g_layout-colwidth_optimize = c_yes.   " column width optimisation
      g_layout-zebra = space.               " alternate line colors
      g_layout-box_fieldname = 'MARK'.      " checkbox fieldname
      g_layout-info_fieldname = 'COLOR'.    " highlight row indicator
      g_layout-no_vline = space.            " vertical line
      g_layout-key_hotspot = space.         " hotspot field
      g_layout-f2code = 'PICK'.             " F2 ok_code
      g_layout-numc_sum = c_yes.            " sum numc fields
      g_layout-box_tabname = 't_disp_head'. " checkbox table name
      g_layout-expand_fieldname = 'EXPAND'. " expand field name
    endform.                    " fill_layout
    *&      Form  fill_sort
          fill ALV sort table
    form fill_sort.
      data: w_g_sort type slis_sortinfo_alv.
      w_g_sort-spos      = 1.
      w_g_sort-fieldname = 'LGTOR'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 2.
      w_g_sort-fieldname = 'VBELN'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 3.
      w_g_sort-fieldname = 'POSNR'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 4.
      w_g_sort-fieldname = 'WADAT'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
    endform.                    " fill_sort
    *&      Form  fill_fieldcat
          Fill field category structure for ALV
    form fill_fieldcat.
      clear t_fldcat.
    create field catalogue for header table
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
           exporting
                i_program_name         = 'ZWMR_PICK_STATUS_REPORT'
                i_internal_tabname     = 't_disp_head'
                i_structure_name       = 'ZPICKHEAD'
                i_client_never_display = c_yes
           changing
                ct_fieldcat            = gt_fieldcat[].
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    ceate field catalogue for items table
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
           exporting
                i_program_name         = 'ZWMR_PICK_STATUS_REPORT'
                i_internal_tabname     = 't_disp_tab'
                i_structure_name       = 'ZPICKDISP'
                i_client_never_display = c_yes
           changing
                ct_fieldcat            = gt_fieldcat[].
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    modify field catalogue for this report
    set no display flag if not requested on selection screen
      if p_exdata ne c_yes.
        t_fldcat-no_out    =  c_yes.
        modify gt_fieldcat from t_fldcat transporting no_out
                           where fieldname eq 'PACKVORSCHR'
                           or    fieldname eq 'EXIDV'
                           or    fieldname eq 'ZPALLET_NO'
                           or    fieldname eq 'ZVAN_NO'
                           or    fieldname eq 'ZZPACKCLASS'
                           or    fieldname eq 'ZZTI'.
      endif.
    set no display flag for item level LGTOR field
      t_fldcat-no_out    =  c_yes.
      modify gt_fieldcat from t_fldcat transporting no_out
                         where fieldname eq 'LGTOR'
                         and   tabname   eq 't_disp_tab'.
    prevent display of technical fields
      t_fldcat-tech = c_yes.
      modify gt_fieldcat from t_fldcat transporting tech
                         where fieldname eq 'EXPAND'
                         or    fieldname eq 'SELKZ'.
    set vbeln as key
      t_fldcat-key = c_yes.
      modify gt_fieldcat from t_fldcat transporting key
                         where fieldname eq 'VBELN'.
    prevent scrolling for info fields
      t_fldcat-fix_column = c_yes.
      modify gt_fieldcat from t_fldcat transporting fix_column
                         where fieldname eq 'VBELN'.
    endform.                    " fill_fieldcat
    *&      Form  prepare_ALV
          Fill ALV parameters
    form prepare_alv.
    fill ALV key info
      g_keyinfo-header01 = 'LGTOR'.
      g_keyinfo-item01   = 'LGTOR'.
    fill ALV events
      gs_event-name = 'TOP_OF_PAGE'.
      gs_event-form = 'TOP_OF_PAGE'.
      append gs_event to gt_events.
    fill ALV sort table
      perform fill_sort.
    fill ALV layout structure
      perform fill_layout.
    fill ALV field category
      perform fill_fieldcat.
    endform.                    " prepare_ALV
    *&      Form  user_command
          form called on user command from ALV list
    form user_command using r_ucomm     like sy-ucomm
                            rs_selfield type slis_selfield.
      data: index type i,
            w_disp_head like line of t_disp_head,
            w_door like likp-lgtor.
      clear r_lgtor. refresh r_lgtor.
      case r_ucomm.
        when 'PICK'. " Double click line
        when 'VANM'. " Van Manifest button
        read the header table where has been selected
          loop at t_disp_head into w_disp_head where mark = c_yes.
            r_lgtor-sign   = 'I'.
            r_lgtor-option = 'EQ'.
            r_lgtor-low    = w_disp_head-lgtor.
            append r_lgtor.
          endloop.
        print the van manifest
          perform print_van_manifest tables r_lgtor.
        when 'EODM'. " EOD Manifest button
        read the header table where has been selected
          loop at t_disp_head into w_disp_head where mark = c_yes.
            r_lgtor-sign   = 'I'.
            r_lgtor-option = 'EQ'.
            r_lgtor-low    = w_disp_head-lgtor.
            append r_lgtor.
          endloop.
        print the end of day manifest
          perform print_eod_manifest tables r_lgtor.
        when 'REFR'. "Refresh
        refresh display
          w_sy_repid = sy-repid.
          call function 'RS_REFRESH_FROM_SELECTOPTIONS'
               exporting
                    curr_report     = w_sy_repid
               tables
                    selection_table = seltab.
              exceptions
                  not_found       = 1
                  no_report       = 2
                  others          = 3.
          if sy-

  • Script Print Program Logic.......

    Hi All
    This is the print program of my script, i am not getting the logic..can any body help me with this..
    INCLUDE rvadtabl.
    TABLES: vbuk,                          "Vertriebsbeleg (Kopf)-Status
            vbco3,                         "Schlüsselfelder Vertriebsbeleg
            vbpla,                         "Allgemeine Transportdaten
            vbplk,                         "Versandelement Kopfdaten
            vbplp,                         "Versandelement Positionsdaten
            vbpls,                         "Verpackung Summendaten
            vekp,
            adrc,
            vbfa.                                               "DEVK937590
    TABLES: vbkd.                                               "DEVK942078
    *DEVK9A0EB4 - Add define
    TYPES:
      ty_itcsy TYPE STANDARD TABLE OF itcsy.
    start of change for DEVK937590
    DATA:   BEGIN OF t_deliveryflow OCCURS 0, "VBFA delivery flow
              vbeln LIKE vbfa-vbeln,          "Subsequent sales and distribu
            END OF t_deliveryflow.
    DATA:  v_lin      TYPE i.
    CONSTANTS: c_x(1) TYPE c VALUE 'X'.
    end of change for DEVK937590
    DATA: BEGIN OF xvbplk OCCURS 10.
            INCLUDE STRUCTURE vbplk.
    DATA: END OF xvbplk.
    DATA : BEGIN OF vbdkl OCCURS 10.
            INCLUDE STRUCTURE vbdkl.
    DATA : END OF vbdkl.
    DATA: BEGIN OF tvbdpl OCCURS 0.        "Internal table for items
            INCLUDE STRUCTURE vbdpl.
    DATA: END OF tvbdpl.
    DATA: BEGIN OF xvbplp OCCURS 50.
            INCLUDE STRUCTURE vbplp.
    DATA: END OF xvbplp.
    DATA: BEGIN OF xvbpls OCCURS 10.
            INCLUDE STRUCTURE vbpls.
    DATA: END OF xvbpls.
    DATA: retcode LIKE sy-subrc.
    DATA: xscreen(1) TYPE c.         "Ausgabe auf Drucker oder Bildschirm
    DATA: t_vepo LIKE vepo OCCURS 0 WITH HEADER LINE, "VEPO internal table
    BEGIN OF t_cartons OCCURS 0,     "Internal table for cartons
      venum LIKE vepo-venum,         "Shipping unit # for carton
    END OF t_cartons,
    BEGIN OF t_boxes OCCURS 0,       "Internal table for BOXES
      venum LIKE vepo-venum,         "Shipping unit # for BOXES
      laeng LIKE vekp-laeng,
      breit LIKE vekp-breit,
      hoehe LIKE vekp-hoehe,
      meabm LIKE vekp-meabm,
    END OF t_boxes,
    BEGIN OF t_pack_dim OCCURS 0,
      laeng LIKE vekp-laeng,
      breit LIKE vekp-breit,
      hoehe LIKE vekp-hoehe,
      meabm LIKE vekp-meabm,
      box_qty TYPE i,
    END OF t_pack_dim,
    v_venum LIKE vepo-venum,         "Shipping unit number
    i_cartons TYPE i,                "# of cartons (Integer type)
    i_boxes TYPE i,                  "# of boxes (Integer type)
    i_box_count TYPE i,              "# of boxes/carton   "DEVK926768
    c_cartons(4) TYPE c,             "# of cartons (Character type)
    c_boxes(4) TYPE c,               "# of boxes (Character type)
    c_bolnr(35) TYPE c,
    v_tel_number LIKE adrc-tel_number,
    v_adrnr LIKE adrc-addrnumber,
    v_kdmat LIKE lips-kdmat,
    v_btgew LIKE likp-btgew,
    v_gewei LIKE likp-gewei,
    v_arktx LIKE lips-arktx.
    ******DEVK9A0IK7 Addition by RAMARAJG Starts here
    types : BEGIN OF t_item ,
             posnr1 type vbplp-posnr,
             material1 TYPE mara-matnr,
             brgew1 type vbplp-brgew,
             vemeh1 type vbplp-vemeh,
             item_weight1 TYPE n,
             arktx1 type vbplp-arktx,
             vboxcnt type n,
           end of t_item.
    *types : BEGIN OF t_item1 ,
            posnr1 type vbplp-posnr,
            material1 TYPE mara-matnr,
            vemng1 type vbplp-brgew,
            vemeh1 type vbplp-vemeh,
            item_weight1 TYPE n,
            arktx1 type vbplp-arktx,
            v_boxcnt type n,
          end of t_item1.
    DATA: it_item TYPE TABLE OF t_item,
          wa_item TYPE t_item.
    data: it_item1 type table of t_item,
          wa_item1 type t_item.
    *data: wa_itab1 like itab1.
    data: v_grwt type lips-brgew,     "Gross Weight in KG
          v_gunit type likp-gewei,     "Gross Weight Unit
          v_netwt type lips-ntgew,    "Net Weight
          v_unit type likp-gewei.     "Net Weight Unit
         v_tboxes type i,
    ******DEVK9A0IK7 Addition by RAMARAJG ends here
    A. Nachricht (allgemein)                                             *
    FORM entry USING return_code us_screen.
      CLEAR retcode.
      xscreen = us_screen.
      PERFORM processing USING us_screen.
      IF retcode NE 0.
        return_code = 1.
      ELSE.
        return_code = 0.
      ENDIF.
    ENDFORM.                    "entry
          FORM PROCESSING                                               *
    -->  PROC_SCREEN                                                   *
    FORM processing USING proc_screen.
      PERFORM get_data.                    " <-- speziell
      PERFORM form_open USING proc_screen vbpla-land1.
      CHECK retcode = 0.
      PERFORM shipping_point_tel_no.
      PERFORM boxes_and_cartons.
      PERFORM gross_weight.
    ***********DEVK9A0IK7 starts here
    *******Perform to get the Net weight
    *******Perform to get Total weight for each line item
      Perform net_weight.                                   "DEVK9A0IK7
    Perform Total_weight.                                 "DEVK9A0IK7
    ***********DEVK9A0IK7 ends here
      PERFORM bill_of_lading.
      CHECK retcode = 0.
      PERFORM check_repeat.
      PERFORM text_print.                  " <-- speziell
    begin shb
      PERFORM get_end_customer_po.
    *end shb
      PERFORM packing_dimensions.
      PERFORM remarks.
      CHECK retcode = 0.
      PERFORM form_close.
      CHECK retcode = 0.
    ENDFORM.                    "processing
          FORM FORM_OPEN                                                *
    -->  US_SCREEN                                                     *
    -->  US_COUNTRY                                                    *
    FORM form_open USING us_screen us_country.
      INCLUDE rvadopfo.
    ENDFORM.                    "form_open
          FORM FORM_CLOSE                                               *
    FORM form_close.
      CALL FUNCTION 'CLOSE_FORM'           "...Ende Formulardruck
           EXCEPTIONS OTHERS = 1.
      IF sy-subrc NE 0.
        retcode = 1.
        PERFORM protocol_update.
      ENDIF.
      SET COUNTRY space.
    ENDFORM.                    "form_close
          FORM CHECK_REPEAT                                             *
    FORM check_repeat.
      SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
                                    AND   objky = nast-objky
                                    AND   kschl = nast-kschl
                                    AND   spras = nast-spras
                                    AND   parnr = nast-parnr
                                    AND   parvw = nast-parvw
                                    AND   nacha BETWEEN '1' AND '4'.
        CHECK *nast-vstat = '1'.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'REPEAT'
            window  = 'REPEAT'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
        EXIT.
      ENDSELECT.
    ENDFORM.                    "check_repeat
          FORM PROTOCOL_UPDATE                                          *
    FORM protocol_update.
      CHECK xscreen = space.
      CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
        EXPORTING
          msg_arbgb = syst-msgid
          msg_nr    = syst-msgno
          msg_ty    = syst-msgty
          msg_v1    = syst-msgv1
          msg_v2    = syst-msgv2
          msg_v3    = syst-msgv3
          msg_v4    = syst-msgv4
        EXCEPTIONS
          OTHERS    = 1.
    ENDFORM.                    "protocol_update
    B. Packliste (speziell)                                              *
    Die Verpackung von Lieferungen wird durch Versandelemente (VSE)
    realisiert. Technisch ist ein Versandelement ein Beleg mit Kopf-
    und Positionsdaten (Strukturen VBPLK/XVBPLK und VBPLP/XVBPLP).
    Eine Position in einem VSE ist entweder wieder ein VSE oder Teil
    eine Lieferposition (also mit den zum VSE gehörenden Materialen/
    Versandhilftsmitteln verpackt). Der Zusammenhang zur Lieferung
    wird durch die beiden Felder VBELN (Lieferung) und POSNR (Position)
    in der Struktur VBPLP realisiert. Es ist zu beachten, daß ein VSE
    keine Positionsdaten enthalten muß: Die Lieferung wurde dann nicht
    vollständig verpackt.
    Mathematisch gesehen stellen die VSE einen Wald (aus Bäumen) dar.
    An den Knoten können noch Lieferpositionsdaten hängen. Um zu
    erkennen ob ein Knoten eine Wurzel oder (und) ein Blatt ist, gibt
    es im VSE-Kopf Kennzeichen. Ist KZOBE gesetzt, so ist das VSE ein
    oberes Element, also eine Wurzel. Ist KZUNT gesetzt, stellt das VSE
    ein unteres Element dar, also ein Blatt. Ist keines der beiden
    Kennzeichen gesetzt dann ist das VSE ein innerer Knoten. Es ist
    zu beachten, daß beiden Kennzeichen gesetzt sein können: Der Baum
    besteht aus einem Knoten. Die Tiefe eines Knotens durch das Feld
    TIVEL gegeben.
    Weiterhin ist der Baum doppelt verkettet. Es ist also möglich,
    nicht nur einen Weg von der Wurzel (eines Teilbaums) zu einem
    Blatt zu finden, sondern auch umgekehrt von einem Blatt zur Wurzel
    zu gelangen. Dazu existiert (im VSE-Kopf) das Feld UEVEL, also
    das übergeordnete VSE.
    Um schließlich zu entscheiden, ob ein VSE-Position ein VSE oder
    eine Lieferposition ist, wird das Feld POSNR ausgewertet. Ist
    das Feld initial, stellt die Position ein VSE dar, im anderen Fall
    enthält es die Lieferposition. Ist die Position ein VSE, steht im
    Feld UNVEL das zugehörige untergeordnete VSE.
    FORM get_data.
      vbco3-vbeln = nast-objky.
      vbco3-spras = nast-spras.
      vbco3-kunde = nast-parnr.
      vbco3-parvw = nast-parvw.
    *mod+
      CALL FUNCTION 'RV_DELIVERY_PRINT_VIEW'
        EXPORTING
          comwa = vbco3
        IMPORTING
          kopf  = vbdkl
        TABLES
          pos   = tvbdpl.
      CALL FUNCTION 'SD_PACKING_PRINT_VIEW'
        EXPORTING
          comwa     = vbco3
        IMPORTING
          vbpla_wa  = vbpla
        TABLES
          vbplk_tab = xvbplk
          vbplp_tab = xvbplp
          vbpls_tab = xvbpls
        EXCEPTIONS
          OTHERS    = 01.
      LOOP AT xvbplk WHERE kzobe = 'X'.
        EXIT.
      ENDLOOP.
      IF sy-subrc > 0.
        syst-msgid = 'VL'.
        syst-msgno = '490'.
        syst-msgty = 'E'.
        PERFORM protocol_update.
        retcode = 1.
      ENDIF.
    ENDFORM.                    "get_data
          FORM TEXT_PRINT                                               *
    FORM text_print.
    Die Kopfdaten werden implizit ausgegeben, ...
    ... dann die Überschriften der Positionen ...
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'HEADER'
          type    = 'TOP'.
    ... und schließlich die Positionen ausgeben ...
      LOOP AT xvbplk WHERE kzobe = 'X'.
        PERFORM packing_tree USING xvbplk-venum.
      ENDLOOP.
    ENDFORM.                    "text_print
    Rekursive Prozedur
    FORM packing_tree USING value(shenr).
    Daten des Versandelements shenr ausgeben, also Wurzel des Teilbaums
      MOVE space TO xvbplk.
      xvbplk-venum = shenr.
      READ TABLE xvbplk.
      vbplk = xvbplk.
      READ TABLE t_cartons WITH KEY venum = vbplk-venum.
      IF sy-subrc = 0.
        IF vbplk-brgew <> 0.
          PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
                                       vbplk-brgew.
        ELSE.
          PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
        ENDIF.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'SHELEM'.
      ENDIF.
    Nun die Positionen abarbeiten (Teilbäume durchlaufen).
    Hier wäre eventuell ein Sortierung zwischen Lieferpositionen
    und weiteren Versandelementen sinnvoll. Alle nachgeordneten
    Positionen liegen eine Stufe tiefer.
      LOOP AT xvbplp WHERE venum = shenr.
        IF xvbplp-posnr IS INITIAL.
        Versandelement
          PERFORM packing_tree USING xvbplp-unvel.
        ELSE.
        Lieferposition (Anteil)
          vbplp = xvbplp.
          PERFORM customer_material.
    ***ramarajg starts.
          perform item_list.
    ***ramarajg end.
          IF vbplp-brgew <> 0.
            PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
                                         vbplp-brgew.
          ELSE.
            PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
          ENDIF.
             CALL FUNCTION 'WRITE_FORM'
              EXPORTING
              element = 'DELPOS'.
        ENDIF.
      ENDLOOP.
    ***ramarajg starts.
    perform TOTAL_WEIGHT.
    loop at it_item into wa_item.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEMPOS'.
    endloop.
    break ramarajg.
    ***ramarajg end.
    ENDFORM.                    "packing_tree
          FORM SET_TEXTSYMBOL                                           *
    FORM set_textsymbol USING text_symbol
                              text_value.
      CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
        EXPORTING
          name  = text_symbol
          value = text_value.
    ENDFORM.                    "set_textsymbol
    *&      Form  BOXES_AND_CARTONS
          text
    -->  p1        text
    <--  p2        text
    FORM boxes_and_cartons.
      CLEAR: t_cartons,
             t_boxes,
             i_cartons,
             i_boxes.
      REFRESH: t_cartons,
               t_boxes.
    start of change for DEVK937590
      CLEAR t_deliveryflow[].
      SELECT vbeln
      FROM vbfa
      INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
      WHERE vbelv = vbpla-vbeln AND vbtyp_n = c_x.
    Select data
      DESCRIBE TABLE t_deliveryflow LINES v_lin.
      CHECK v_lin GT 0.
      SELECT venum vbeln
      FROM vepo
      INTO CORRESPONDING FIELDS OF TABLE t_vepo
      FOR ALL ENTRIES IN t_deliveryflow
      WHERE venum = t_deliveryflow-vbeln.
    SELECT VENUM
           VBELN
      FROM VEPO
      INTO CORRESPONDING FIELDS OF TABLE T_VEPO
      WHERE VBELN = VBPLA-VBELN.
    end of change for DEVK937590
      SORT t_vepo BY venum.
      DELETE ADJACENT DUPLICATES FROM t_vepo COMPARING venum.
    Determine the number of cartons and boxes to be shipped.
    To determine the number of cartons, shipping unit number (VENUM) is
    checked if it a lower-level shipping unit. This is done by reading
    table VEPO and checking if VENUM exist in UNVEL (Lower-level shipping
    unit). If it does, this means that VENUM is contained within
    another container. If it does not exist, it is considered the highest
    level of packing for that specific delivery.
      LOOP AT t_vepo.
    check if VENUM is a lower level shipping unit.
        SELECT SINGLE venum INTO v_venum
        FROM vepo
        WHERE unvel =  t_vepo-venum.
    If shipping unit number is found, count as carton.
        IF sy-subrc = 0.
        check if carton already exist for the carton.
          READ TABLE t_cartons WITH KEY venum = v_venum.
        if carton does not exist, append table
          IF sy-subrc <> 0.
            t_cartons-venum = v_venum.
            APPEND t_cartons.
          ENDIF.
        ENDIF.
      ENDLOOP.
    count boxes and cartons
      DESCRIBE TABLE t_vepo LINES i_boxes.
      DESCRIBE TABLE t_cartons LINES i_cartons.
    Convert cartons and boxes field values to CHARACTER type FORMAT.
    In order to save the output values to the output fields, the
    fields are converted to CHARACTER type formats.
      MOVE: i_cartons TO c_cartons,
            i_boxes TO c_boxes.
      PERFORM set_textsymbol USING '&BOXES&'
                                   c_boxes.
      PERFORM set_textsymbol USING '&CARTONS&'
                                   c_cartons.
    ENDFORM.                               " BOXES_AND_CARTONS
    *&      Form  BILL_OF_LADING
          text
    -->  p1        text
    <--  p2        text
    FORM bill_of_lading.
      SELECT SINGLE bolnr
          FROM likp
          INTO c_bolnr
          WHERE vbeln = vbpla-vbeln.
      PERFORM set_textsymbol USING '&BILL_OF_LADING&'
                                   c_bolnr.
    ENDFORM.                               " BILL_OF_LADING
    *&      Form  PACKING_DIMENSIONS
          text
    -->  p1        text
    <--  p2        text
    FORM packing_dimensions.
    CLEAR: T_BOXES,
            T_PACK_DIM.
    REFRESH: T_BOXES,
              T_PACK_DIM.
    SELECT VENUM
            LAENG
            BREIT
            HOEHE
            MEABM
    FROM VEKP
    INTO CORRESPONDING FIELDS OF TABLE T_BOXES
    FOR ALL ENTRIES IN T_VEPO
    WHERE VENUM = T_VEPO-VENUM.
    LOOP AT T_BOXES.
       READ TABLE T_PACK_DIM WITH KEY LAENG = T_BOXES-LAENG
                                      BREIT = T_BOXES-BREIT
                                      HOEHE = T_BOXES-HOEHE
                                      MEABM = T_BOXES-MEABM.
       IF SY-SUBRC = 0.
         T_PACK_DIM-BOX_QTY = T_PACK_DIM-BOX_QTY + 1.
         MODIFY T_PACK_DIM INDEX SY-TABIX.
       ELSE.
         T_PACK_DIM-LAENG = T_BOXES-LAENG.
         T_PACK_DIM-BREIT = T_BOXES-BREIT.
         T_PACK_DIM-HOEHE = T_BOXES-HOEHE.
         T_PACK_DIM-MEABM = T_BOXES-MEABM.
         T_PACK_DIM-BOX_QTY = 1.
         APPEND T_PACK_DIM.
       ENDIF.
    ENDLOOP.
    LOOP AT T_PACK_DIM.
       AT FIRST.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'PACKING_DIMENSIONS_HEADER'.
       ENDAT.
       CLEAR: VEKP,
              C_BOXES.
       VEKP-LAENG = T_PACK_DIM-LAENG.
       VEKP-BREIT = T_PACK_DIM-BREIT.
       VEKP-HOEHE = T_PACK_DIM-HOEHE.
       VEKP-MEABM = T_PACK_DIM-MEABM.
       MOVE: T_PACK_DIM-BOX_QTY TO C_BOXES.
       PERFORM SET_TEXTSYMBOL USING '&BOX_QTY&'
                                    C_BOXES.
       IF VEKP-LAENG <> 0 AND
          VEKP-BREIT <> 0 AND
          VEKP-HOEHE <> 0.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'PACKING_DIMENSIONS'.
       ENDIF.
    ENDLOOP.
    ENDFORM.                               " PACKING_DIMENSIONS
    *&      Form  REMARKS
          text
    -->  p1        text
    <--  p2        text
    FORM remarks.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'REMARKS'.
    ENDFORM.                               " REMARKS
    *&      Form  SHIPPING_POINT_TEL_NO
          text
    -->  p1        text
    <--  p2        text
    FORM shipping_point_tel_no.
      SELECT SINGLE adrnr
      FROM tvst
      INTO v_adrnr
      WHERE vstel = vbpla-vstel.
      SELECT SINGLE tel_number
      FROM adrc
      INTO adrc-tel_number
      WHERE addrnumber = v_adrnr.
    ENDFORM.                               " SHIPPING_POINT_TEL_NO
    *&      Form  CUSTOMER_MATERIAL
          text
    -->  p1        text
    <--  p2        text
    FORM customer_material.
      CLEAR: v_kdmat.
    begin of mod*
      IF vbdkl-lfart = 'LO'.
        SELECT SINGLE kdmat postx
          INTO (v_kdmat , v_arktx)
            FROM knmt
            WHERE vkorg = vbdkl-vkorg
            AND   vtweg = '01'
            AND   kunnr = vbdkl-kunag
            AND   matnr = vbplp-matnr.
        IF NOT v_kdmat IS INITIAL.
          vbplp-matnr = v_kdmat.
          vbplp-arktx = v_arktx.
        ENDIF.
      ELSE.
        SELECT SINGLE kdmat
          FROM lips
          INTO v_kdmat
          WHERE vbeln = vbplp-vbeln AND
                posnr = vbplp-posnr AND
                matnr = vbplp-matnr.
      ENDIF.
    **ramarajg
    IF v_kdmat <> ' '.
       PERFORM set_textsymbol USING '&MATERIAL&'
                                   v_kdmat.
    ELSE.
       PERFORM set_textsymbol USING '&MATERIAL&'
                                   vbplp-matnr.
    ENDIF.
    ENDFORM.                               " CUSTOMER_MATERIAL
          FORM ITEM_WEIGHTS                                             *
    -->  IN_TAB4                                                       *
    -->  OUT_TAB4                                                      *
    FORM item_weights TABLES in_tab4 STRUCTURE itcsy
    out_tab4 STRUCTURE itcsy.
      DATA: n_vbeln(10) TYPE n,
           v_btgew LIKE likp-btgew,
            v_ntgew1 LIKE vekp-ntgew,
            v_btgew1 LIKE likp-btgew,
            v_ntgew2 LIKE likp-ntgew,
            v_btgew2 LIKE likp-btgew,
            BEGIN OF t_venum OCCURS 0,
              venum LIKE vepo-venum,
            END OF t_venum.
      READ TABLE in_tab4 INDEX 1.
      CHECK sy-subrc = 0.
      MOVE in_tab4-value TO n_vbeln.       "convert to numeric type.
    start of change for DEVK937590
    *break ramarajg.
      CLEAR t_deliveryflow[].
      SELECT vbeln
      FROM vbfa
      INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
      WHERE vbelv = n_vbeln AND vbtyp_n = c_x.
    Select data
      DESCRIBE TABLE t_deliveryflow LINES v_lin.
      CHECK v_lin GT 0.
      SELECT venum
      FROM vepo
      INTO CORRESPONDING FIELDS OF TABLE t_venum
      FOR ALL ENTRIES IN t_deliveryflow
      WHERE venum = t_deliveryflow-vbeln.
    SELECT VENUM
    FROM VEPO
    INTO CORRESPONDING FIELDS OF TABLE T_VENUM
    WHERE VBELN = N_VBELN.
    end of change for DEVK937590
      CLEAR v_btgew.
      DESCRIBE TABLE t_venum LINES v_lin.                       "DEVK937590
      CHECK v_lin GT 0.                                         "DEVK937590
      SELECT ntgew
      FROM vekp
      INTO v_btgew
      FOR ALL ENTRIES IN t_venum
      WHERE venum = t_venum-venum.
        v_btgew1 = v_btgew1 + v_btgew.
      ENDSELECT.
      SELECT SUM( ntgew )
      FROM lips
      INTO v_ntgew1
      WHERE vbeln = n_vbeln.
      SELECT SINGLE ntgew
                    btgew
      FROM likp
      INTO (v_ntgew2, v_btgew2)
      WHERE vbeln = n_vbeln.
      IF v_ntgew1 = v_ntgew2 AND
         v_btgew1 = v_btgew2.
        READ TABLE out_tab4 WITH KEY name = 'PRINT_WEIGHT'.
        IF sy-subrc = 0 .
          out_tab4-value = 'X'.
        ELSE.
          out_tab4-value = ' '.
        ENDIF.
        MODIFY out_tab4 INDEX sy-tabix.
      ENDIF.
    ENDFORM.                    "item_weights
    *&      Form  GROSS_WEIGHT
          text
    -->  p1        text
    <--  p2        text
    FORM gross_weight.
      CLEAR: v_btgew.
      SELECT SINGLE btgew
                    gewei
      FROM  likp
      INTO (v_btgew, v_gewei)
      WHERE vbeln = vbpla-vbeln.
      PERFORM set_textsymbol USING '&GROSS_WEIGHT&'
                                   v_btgew.
      PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT&'
                                   v_gewei.
    changes added by RAMARAJG starts here
      clear v_grwt.
      clear v_gunit.
      v_grwt = v_btgew.
      v_gunit = v_gewei.
      if v_gunit = 'G'.
         v_grwt = v_grwt / 1000.
         v_gunit = 'KG'.
      endif.
      PERFORM set_textsymbol USING '&GROSS_WEIGHT1&'
                                   v_grwt.
      PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT1&'
                                   v_gunit.
    changes added by RAMARAJG ends here
    ENDFORM.                               " GROSS_WEIGHT
    *&      Form  GET_END_CUSTOMER_PO
          Retrieve End Customer PO#
    -->  p1        text
    <--  p2        text
    FORM get_end_customer_po.
      DATA: v_zvgbel LIKE lips-vgbel.
      DATA v_bstkd_e TYPE bstkd_e.
      CLEAR: v_bstkd_e, v_zvgbel.
      SELECT SINGLE vgbel INTO v_zvgbel
        FROM lips
          WHERE vbeln = vbpla-vbeln.
      SELECT SINGLE bstkd_e INTO v_bstkd_e
      FROM vbkd
      WHERE vbeln = v_zvgbel
      AND bstkd_e > ''.
      PERFORM set_textsymbol USING '&V_BSTKD_E&'
                                v_bstkd_e.
    ENDFORM.                    " GET_END_CUSTOMER_PO
    *DEVK9A0EB4 - Add a form
    *&      Form  shipper_acct
          Get shipper account at customer
    FORM shipper_acct TABLES in_tab1 TYPE ty_itcsy
                            out_tab1 TYPE ty_itcsy.
      DATA: v_kunag TYPE likp-kunag,  " Sold to party
            v_eikto TYPE knvv-eikto.  "Shipper account number at customer
    DATA v_strlen(10) TYPE c.
      DATA wa_tab1 TYPE itcsy.
      DATA n_vbeln(10) TYPE n.
    Get kunnr  from likp
      CLEAR wa_tab1.
      READ TABLE in_tab1 INTO wa_tab1 WITH KEY name = 'VBPLA-VBELN'.
      IF sy-subrc = 0.
        n_vbeln = vbpla-vbeln.
      ENDIF.
      CHECK sy-subrc = 0.
      SELECT kunag
      FROM likp
      INTO v_kunag
      WHERE vbeln = n_vbeln.
      ENDSELECT.
      IF sy-subrc = 0.
    Get shipper account
        SELECT eikto INTO v_eikto
        FROM knvv
        WHERE kunnr = v_kunag.
        ENDSELECT.
        IF sy-subrc = 0.
    *append  the field  to the out_tab1 printing output
          wa_tab1-name = 'VKNN-EIKTO'.
          wa_tab1-value = v_eikto.
          APPEND wa_tab1 TO out_tab1.
        ENDIF.
      ENDIF.
    ENDFORM.                    "shipper_acct
    ***********DEVK9A0IK7 starts here
    *&      Form  net_weight
          text
    -->  p1        text
    <--  p2        text
    form net_weight .
      CLEAR: v_btgew.
      SELECT SINGLE ntgew
                    gewei
      FROM  likp
      INTO (v_netwt, v_unit)
      WHERE vbeln = vbpla-vbeln.
      if v_unit = 'G'.
        v_netwt = v_netwt / 1000.
        v_unit = 'KG'.
      endif.
      PERFORM set_textsymbol USING '&NET_WEIGHT&'
                                   v_netwt.
      PERFORM set_textsymbol USING '&NET_WEIGHT_UNIT&'
                                   v_unit.
    endform.                    " net_weight
    ***********DEVK9A0IK7 ends here
    *&      Form  item_list
          text
    -->  p1        text
    <--  p2        text
    form item_list.
    move vbplp-posnr to wa_item-posnr1.
    *move material to wa_itab1-material1.
    move vbplp-brgew to wa_item-brgew1.
    move vbplp-vemeh to  wa_item-vemeh1.
    *move item_weight to wa_itab1-item_weight1.
    *move gross_weight_unit to wa_itab1-gross_weight_unit1.
    move v_arktx to wa_item-arktx1.
    if v_kdmat <> ' '.
    move v_kdmat to wa_item-material1.
    else.
    move vbplp-matnr to wa_item-material1.
    endif.
    wa_item-vboxcnt = 1.
    append wa_item TO it_item.
      CLEAR : wa_item1, wa_item.
      it_item1[] = it_item[].
      REFRESH it_item[].
    break-point.
    endform.                    " item_list
    *&      Form  TOTAL_WEIGHT
          text
    -->  p1        text
    <--  p2        text
    form TOTAL_WEIGHT .
      LOOP AT it_item1 into wa_item1.
        READ TABLE it_item INTO wa_item WITH KEY material1 = wa_item1-material1 posnr1 = wa_item1-posnr1.
        IF sy-subrc NE 0.
          APPEND wa_item1 TO it_item.
        ELSE.
          wa_item1-brgew1 =   wa_item1-brgew1 +  wa_item-brgew1.
          Wa_item1-vboxcnt = wa_item1-vboxcnt + wa_item-vboxcnt.
          MODIFY it_item FROM wa_item1 TRANSPORTING brgew1 vboxcnt
                         WHERE material1 = wa_item1-material1
                              AND posnr1 = wa_item1-posnr1.
        ENDIF.
      ENDLOOP.
    endform.                    " TOTAL_WEIGHT

    the Logic to be added is this
    b.     Remove the carton ID & box ID from the print out,  the line item should just print the total delivery quantity, do not split the printing by different box ID or carton ID.
    i.     Delivery Item= LIPS-POSNR
    ii.     Delivery Qty for Item = LIPSD-G_LFIMG= LIPSD-PIKMG
    c.     Add Total Boxes for each item, this should be a calculation field for each material HUMV4-MATNR, count how many handling unit  VEKPVB-EXIDV has been used to pack the same material , output the total boxes for each delivery item.
    d.     Add Gross Weight for each  item , retrieve data from LIPS-BRGEW
    e.     Add Net weight to the print out, below the gross weight – retrieve data from LIKP-NTGEW

Maybe you are looking for

  • Counting date transactions for last six months

    Post Author: crystalrook CA Forum: Formula Any help is greatly appreciated.  I am running Crystal XI. I have an order field (PurchaseOders.PODatePlaced) for each item. There can be multiple orders in the same month for each item of course.  I would l

  • New PAR file not appearing in the Portal Archive Selection list

    Hello Knowledgeable Portal Ones, I am on EP6.0 SP13. A developer on the team created a new PAR.  It was uploaded, and it is now showing in my portalapps directory.  A super-admin for the portal can successfully create an iView using it (New from PAR)

  • Lumia 620 overheating on 3G network

    I've been using my lumia on DOCOMO 3G network and found that its back portion, particularly the camera region gets incredulously hot. I dont face the same problem while on 2G network. Is something wrong with my phone, or all the 620s or is it a commo

  • When is flash player going to be available

    when is flash player going to be available for the ipad/iphone

  • N9 and Google contacts sync issue (via MfE)

    Hi, When syncing my Google contacts using a mail for exchange account I've come across a small problem. The problem is that only one phone number of the same type is being synced. I.e. if I have two mobile phone numbers for a contact then only the fi