Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Problem with NUMC field in check_changed_data method

Former Member
0 Likes
930

Hi gurus,

I am working with two screens. In the first screen,I displayed an alv screen. From the first sctreen, i selected one row, and navigated to the second screen by pressing a button. In the second screen, I displayed an alv layout with a set of fields, among them one is of type NUMC type and the alv in the second screen is editable.

The problem comes here. I need to display a popup if any of the data is changed and pressed back without saving the data. For that i used check_changed_data method. But the problem is when i enter some characters in NUMC field and pressed back, the method internally validates the data and creates a dialog with error message. But the dialog is not popped in the screen itself. The first screen gets displayed and again if press the button again the dialog is appearing now.

Either I want to display that dialog in the second screen itself or i want to suppress that dialog.

Can any body help me?

Waiting for the solution.

Thanks in advance,

Suvan

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
662

Hi Check this code, I have done the similar code,

in that i have two screens, both are editable and i

gave popups also when i am leaving the screen with out saving the data,,please see that and ask anything.,....

in this i used popup to confirm function module...

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

3 REPLIES 3
Read only

Former Member
0 Likes
662

Can somebody help me?

Thanks in advance,

Suvan

Read only

0 Likes
662

Plese get back if you have any issues...

regards

vijay

Read only

Former Member
0 Likes
663

Hi Check this code, I have done the similar code,

in that i have two screens, both are editable and i

gave popups also when i am leaving the screen with out saving the data,,please see that and ask anything.,....

in this i used popup to confirm function module...

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