cancel
Showing results for 
Search instead for 
Did you mean: 

New to ALV Grid Help me..

Former Member
0 Kudos

Hi Everyone,

Could anyone please help me out to learn How to display list using ALV Grid. I am new to this ALV concept. Any attachments or stuff would be appreciated.

Thanks

Accepted Solutions (0)

Answers (8)

Answers (8)

Former Member
0 Kudos

thanks

Former Member
0 Kudos

Hi Vivek,

1 REUSE_ALV_GRID_DISPLAY

REUSE_ALV_FIELDCATALOG_MERGE

The above 2 function modules will

accomplish what u want.

Just see documentation on these 2 FM.

2 There is another way of using grid

thru

OO Class concepts,

but that is quite cumbersome.

Instead, keep it simple, and use the above two FMs.

I Hope it helps.

Regards,

Amit M.

Former Member
0 Kudos
Former Member
former_member188685
Active Contributor
0 Kudos

Hi

if you are using ALV grid (OO classes) the see the below code.

or for more info

http://www.sapdevelopment.co.uk

REPORT ZTEST_GRID  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

Former Member
0 Kudos

Hi,

Welcome to SDN!!!!!!!!!

Just follow this link.........

http://www.sapdevelopment.co.uk/reporting/alvhome.htm

ALV

http://www.geocities.com/mpioud/Abap_programs.html

Thanks.

If this helps you reward with points by pressing star on left side.

Former Member
0 Kudos
Former Member
0 Kudos