ALV Grid taking key fileds settings from  I_STRUCTURE_NAME instead fieldcat

Hi,
i used lvc_fieldcatalog_merge FM to build catalog for "SFLIGHT" and made changes  to key column's color settings.
while calling method set_table_for_first_display, i am passing both parameters I_STRUCTURE_NAME and  IT_FIELDCATALOG as shown below. but only changes i made to non- key columns are effective and changes made for key column(CONNID) are  not effective.when i pass only field catalog, key column changes are effective.
CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME              = 'SFLIGHT'
        IS_VARIANT                    = S_LAYO_GRID
        I_SAVE                        = 'U'
        I_DEFAULT                     = 'X'
      CHANGING
        IT_OUTTAB                     = ITAB
        IT_FIELDCATALOG               = T_FCAT
so is the problem is due to passing  both parameters  I_STRUCTURE_NAME & IT_FIELDCATALOG.
Edited by: katamanenikishore on Feb 13, 2011 2:07 PM

Hi  karthi.....
we can use both options, filed catalog_merge and set_table_for_first display.if you pass structure to set_table_for_first_display, ALV will automatically generates filed catalog for you instead of calling fieldcatalog_merge additionally.if you want to make changes for generated filed catalog, then modify filedcatalog and use method set_frontend_fieldcatalog to reflect the changes.
But it is not advisable to use both at same time, as settings made in for filed catalog (key column settings,number of columns) will be overridden if you again pass i_structurename.However settings made through layout like column color settings will applied,though you use both.
Edited by: katamanenikishore on Feb 14, 2011 9:39 AM

Similar Messages

  • ALV grid list  report when selected  from  selection screen

    Hi folks,
                I need to get ALV grid display in my list report when selected the interval values from  the selection screen. If I change the values in list of ALV grid it needs to be updated when I press UPDATE pushbutton. The output of list should be in ALV grid display.I need sorting ,flitering,totaling functionality in the list output.
    For example if I selected BUKRS = 100 and 200 in the selection screen ,I need to display the ALV grid list in below the selection screen as ALV grid display...
    Its urgent as  I am new to ALV grid functionality...
    Thanks in advance..

    hi raja,
    check with the folllowing code.
    REPORT zca0m_zca0fcstftop NO STANDARD PAGE HEADING
                                    MESSAGE-ID zcsv_usrtbl_maintain.
    Type pools                                                           *
    TYPE-POOLS : slis.                          " Used for ALV display
    Tables
    TABLES: zca0fcstftop,
            dd04t,                         "R/3 DD: Data element texts
            tactt.                         "Activities that can be protected
    internal tables
    DATA: BEGIN OF wa_zca0fcstftop .
            INCLUDE STRUCTURE zca0fcstftop.
    DATA: END OF wa_zca0fcstftop.
    DATA: t_zca0fcstftop LIKE STANDARD TABLE OF wa_zca0fcstftop.
    DATA: BEGIN OF i_fcode OCCURS 0,
            fcode LIKE sy-ucomm,
          END OF i_fcode.
    *Record for variant selection
    DATA : BEGIN OF ws_variant,
             selected TYPE c,
             variant  LIKE ltdx-variant,  "Variant name
             text     LIKE ltdxt-text,    "Variant description
           END OF ws_variant.
    *Table for variant selection
    data : itab_variant LIKE STANDARD TABLE OF ws_variant WITH HEADER LINE.
    Variant selection pop-up global variables
    DECLARATION OF TABLECONTROL 'VARIANT_CNTL' ITSELF
    CONTROLS: variant_cntl TYPE TABLEVIEW USING SCREEN 0200.
    LINES OF TABLECONTROL 'VARIANT_CNTL'
    DATA:     g_variant_cntl_lines  LIKE sy-loopc.
    DATA:grid1 TYPE REF TO  cl_gui_alv_grid ,
         g_custom_container TYPE REF TO cl_gui_custom_container.
    Work fields
    DATA: table_name LIKE dd02l-tabname,   "To store table name
          field_name LIKE dd03l-fieldname, "To Store Field Name
          act_auth LIKE tactz-actvt,       "To pass Activity ID
          tab_maint LIKE dd02l-tabname,    "To pass Table Name to be Maintd.
          wg_confirm_ind,                  "To trap User responses
          flag,                            "To trap changes made to an entry
          f_copy,                          "To Identify 'COPY' Command Use
          f_select,                        "To decide between Select-options
                                           " and Internal Table
          l_transaction_code LIKE tstc-tcode,
          v_langu LIKE sy-langu,
          v_repid LIKE sy-repid,
          s_variant TYPE disvariant.
    DATA: ok_code LIKE sy-ucomm.
    DATA:selected_rows TYPE lvc_t_row  ,
         sel_rows TYPE lvc_t_row WITH HEADER LINE.
    DATA:t_lines TYPE i.
    Constants                                                            *
    CONSTANTS :
               c_x TYPE c VALUE 'X',             " Constant 'X'.
               c_f TYPE c VALUE 'F'.             " Constant 'F'.
    Parameters and Selection Options
    *Selection Screen for table maintenance
    *Selection option for Plant
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-b01.
    PARAMETERS:  p_werks   LIKE zca0fcstftop-werks OBLIGATORY.
    SELECT-OPTIONS: s_prdfml  FOR zca0fcstftop-product_family,
                    s_bmach   FOR zca0fcstftop-base_machine,
                    s_factop FOR zca0fcstftop-factory_top,
                    s_optval  FOR zca0fcstftop-option_value,
                    s_week    FOR zca0fcstftop-week.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-b02.
    PARAMETERS     : p_varant LIKE ltdx-variant.          " ALV variant
    SELECTION-SCREEN END OF BLOCK block2.
    At selection screen                                                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varant.
      PERFORM alv_variant_f4 CHANGING p_varant.
    AT SELECTION-SCREEN ON p_werks .
    Validating Plant on the selection screen
      PERFORM validate_plant.
    Initialization
    INITIALIZATION.
    Check Authorization for the Transaction
    Authorization Check For T Code
      SELECT tcode
         INTO l_transaction_code
         FROM tstc UP TO 1 ROWS
         WHERE pgmna = sy-repid.
      ENDSELECT.
      AUTHORITY-CHECK OBJECT 'S_TCODE'
                          ID 'TCD' FIELD l_transaction_code.
      IF sy-subrc NE 0.
        MESSAGE e001 WITH l_transaction_code.
      ENDIF.
      v_langu = sy-langu.                             " language
      v_repid = sy-repid .                            " abap Program name
    Start Of Selection
    START-OF-SELECTION.
      CALL SCREEN 0050.
    *&      Form  validate_plant                                           *
          Validating Plant on the selection screen                       *
    FORM validate_plant .
      DATA : l_werks LIKE t001w-werks.                          " Plant
      IF p_werks IS NOT INITIAL.
        SELECT SINGLE werks
            FROM t001w
            INTO l_werks
            WHERE werks EQ p_werks.
        IF sy-subrc NE 0.
          MESSAGE e100(ra) WITH text-001 .
        ENDIF.
      ENDIF.
      AUTHORITY-CHECK OBJECT 'Z_PP_PLANT'
               ID 'ACTVT' FIELD '03'
               ID 'WERKS' FIELD p_werks
               ID 'TCD' FIELD l_transaction_code.
      IF sy-subrc NE 0.
        MESSAGE e000(oo) WITH 'No authorization for plant:'(e80) p_werks.
      ENDIF.
    ENDFORM.                    " validate_plant
    *&      Form  get_data                                                 *
          Get data                                                       *
    FORM get_data .
      SELECT * FROM zca0fcstftop
        INTO TABLE t_zca0fcstftop
        WHERE werks           = p_werks
          AND product_family IN s_prdfml
          AND base_machine   IN s_bmach
          AND factory_top    IN s_factop
          AND option_value   IN s_optval
          AND week           IN s_week.
    ENDFORM.                    " get_data
    *&      Form  fill_fcode
    FORM fill_fcode USING    value(p_0029).
      i_fcode-fcode = p_0029.
      APPEND i_fcode.
      CLEAR i_fcode.
    ENDFORM.                               " fill_fcode
    *&      Module  STATUS_0100  OUTPUT
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'UPDATE'.
      CLEAR flag.
    ENDMODULE.                             " STATUS_0100  OUTPUT
    *&      Module  MODIFY_0100  OUTPUT
    MODULE modify_0100 OUTPUT.
      IF sy-ucomm = 'CHNG' OR
           sy-ucomm = 'PICK'.
        LOOP AT SCREEN.
          CHECK screen-group1 = 'CHG'.
          screen-required = '0'.
          screen-output   = '1'.
          screen-input    = '0'.
          MODIFY SCREEN.
        ENDLOOP.
      ENDIF.
    Check if you are in create mode & if yes then set the screen elements
    as mandatory
      IF ok_code = 'CREA'.
        LOOP AT SCREEN.
          CHECK screen-group1 = 'CHG'.
          screen-required = '1'.
          screen-output   = '1'.
          screen-input    = '1'.
          MODIFY SCREEN.
        ENDLOOP.
      ENDIF.
    ENDMODULE.                             " MODIFY_0100  OUTPUT
    *&      Module  Check_Exit  INPUT
          text
    MODULE check_exit INPUT.
      IF ( sy-ucomm = 'BACK' OR sy-ucomm = 'CANC' OR sy-ucomm = 'EXIT' ) AND
           ( flag = 'Y' ).
        CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
          EXPORTING
            defaultoption  = 'Y'
            textline1      = text-008
            textline2      = text-009
            titel          = text-004
            cancel_display = ' '
          IMPORTING
            answer         = wg_confirm_ind.
        CASE wg_confirm_ind.
          WHEN 'J'.                                             "Yes
            sy-ucomm = 'SAVE'.
            CLEAR flag.
          WHEN 'N'.                                             "No
            sy-ucomm = 'BACK'.
            CLEAR flag.
        ENDCASE.
      ENDIF.
    ENDMODULE.                             " Check_Exit  INPUT
    *&      Module  Exit_0100  INPUT
          text
    MODULE exit_0100 INPUT.
      SET SCREEN 0. LEAVE SCREEN.
    ENDMODULE.                             " Exit_0100  INPUT
    *&      Module  USER_COMMAND_0100  INPUT
          text
    MODULE user_command_0100 INPUT.
      CASE sy-ucomm.
        WHEN 'SAVE'.                       "Save
        Check to see if the user has the appropriate authorization
          IF p_werks NE zca0fcstftop-werks.
          could not update - not in selection
            MESSAGE e000(oo) WITH 'Entry not within selection'.
            SET SCREEN 0. LEAVE SCREEN.
            PERFORM get_data.
          ENDIF.
          IF f_copy = 'X'.
            INSERT zca0fcstftop.
            IF sy-subrc = 0.
              MESSAGE s004.
              PERFORM initialize.
              SET SCREEN 0. LEAVE SCREEN.
              PERFORM get_data.
            ELSE.
              MESSAGE w005.
            ENDIF.
          ELSE.
            MODIFY zca0fcstftop.
            IF sy-subrc = 0.
              MESSAGE s004.
              PERFORM initialize.
              SET SCREEN 0. LEAVE SCREEN.
              PERFORM get_data.
            ELSE.
              MESSAGE w005.
            ENDIF.
          ENDIF.
          PERFORM get_data.
        WHEN 'BACK'.                       "Back
          SET SCREEN 0. LEAVE SCREEN.
        WHEN 'CANC'.                       "Cancel
          SET SCREEN 0. LEAVE SCREEN.
        WHEN OTHERS.
      ENDCASE.
      COMMIT WORK.
    ENDMODULE.                             " USER_COMMAND_0100  INPUT
    *&      Form  Initialize
    FORM initialize.
      CLEAR :   table_name,
                field_name,
                wg_confirm_ind,
                f_copy,
                flag,
                t_zca0fcstftop,
                zca0fcstftop,
                wa_zca0fcstftop,
                i_fcode.
      REFRESH: t_zca0fcstftop.
    ENDFORM.                               " Initialize
    *&      Form  alv_variant_f4
          text
         <--P_VARIANT  text
    FORM alv_variant_f4  CHANGING variant.
      DATA: rs_variant LIKE disvariant.
      DATA nof4 TYPE c.
      CLEAR nof4.
      LOOP AT SCREEN.
        IF screen-name = 'VARIANT'.
          IF screen-input = 0.
            nof4 = 'X'.
          ENDIF.
        ENDIF.
      ENDLOOP.
      rs_variant-report   = sy-repid.
      rs_variant-username = sy-uname.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant = rs_variant
          i_save     = 'A'
        IMPORTING
          es_variant = rs_variant
        EXCEPTIONS
          OTHERS     = 1.
      IF sy-subrc = 0 AND nof4 EQ space.
        variant = rs_variant-variant.
      ENDIF.
    ENDFORM.                               " ALV_VARIANT_F4
    *&      Module  STATUS_0050  OUTPUT
          text
    MODULE status_0050 OUTPUT.
    In this module Initialize the container and put the grid in it
      DATA:grid_layout  TYPE lvc_s_layo,
           fieldcat TYPE lvc_t_fcat,
           wa_fieldcat LIKE LINE OF fieldcat.
      PERFORM set_auth.
      SET PF-STATUS 'UPD_0050' EXCLUDING i_fcode.
      SET TITLEBAR 'UPD_0050'.
      IF g_custom_container IS INITIAL .
        CREATE OBJECT g_custom_container
           EXPORTING
              container_name = 'FTDATA'.
        CREATE OBJECT grid1
           EXPORTING
            i_parent = g_custom_container.
      ELSE.
        CALL METHOD grid1->free.
        CALL METHOD g_custom_container->free.
        CREATE OBJECT g_custom_container
           EXPORTING
              container_name = 'FTDATA'.
        CREATE OBJECT grid1
           EXPORTING
            i_parent = g_custom_container.
      ENDIF.
    Every time refresh The variables
      PERFORM initialize.
      PERFORM get_data.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'ZCA0FCSTFTOP'
        CHANGING
          ct_fieldcat      = fieldcat.
      grid_layout-grid_title = text-t01.
      grid_layout-sel_mode = 'A'.
      grid_layout-stylefname = 'CT'.
      s_variant-report   = sy-repid.
      s_variant-username = sy-uname.
      s_variant-variant  = p_varant.
      CALL METHOD grid1->set_table_for_first_display
        EXPORTING
          i_structure_name = 'ZCA0FCSTFTOP'
          is_layout        = grid_layout
          is_variant       = s_variant
          i_save           = 'A'
        CHANGING
          it_outtab        = t_zca0fcstftop
          it_fieldcatalog  = fieldcat.
      Create Object to receive events and link them to handler methods.
      When the ALV Control raises the event for the specified instance
      the corresponding method is automatically called.
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_button_click FOR grid1.
    ENDMODULE.                 " STATUS_0050  OUTPUT
    *&      Module  USER_COMMAND_0050  INPUT
    MODULE user_command_0050 INPUT.
      CALL METHOD grid1->get_selected_rows
        IMPORTING
          et_index_rows = selected_rows.
      DESCRIBE TABLE selected_rows LINES t_lines.
      IF t_lines > 1 .
        MESSAGE e048(zcsv_sfdr).
      ENDIF.
    Clear Header
      CLEAR wa_zca0fcstftop.
      sel_rows[] = selected_rows .
      READ TABLE sel_rows INDEX 1.
      READ TABLE t_zca0fcstftop INTO wa_zca0fcstftop INDEX sel_rows-index.
      CASE ok_code.
        WHEN 'EXIT'.
          PERFORM exit_program.
        WHEN 'CREA'.
          CLEAR zca0fcstftop.
          ok_code = sy-ucomm.
          zca0fcstftop-werks = p_werks.
          CALL SCREEN 100.
        WHEN 'COPY'.
          MOVE wa_zca0fcstftop TO zca0fcstftop .
          CLEAR wa_zca0fcstftop.
          f_copy = 'X'.
          CALL SCREEN 100.
        WHEN 'CHNG'.
          CHECK NOT wa_zca0fcstftop IS INITIAL.
          MOVE wa_zca0fcstftop TO zca0fcstftop .
          CLEAR wa_zca0fcstftop.
          ok_code = sy-ucomm.
          CALL SCREEN 100.
        WHEN 'DELE'.
          CHECK NOT wa_zca0fcstftop IS INITIAL.
          CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
            EXPORTING
              defaultoption  = 'N'
              textline1      = text-005
              textline2      = text-006
              titel          = text-007
              cancel_display = ' '
            IMPORTING
              answer         = wg_confirm_ind.
          IF wg_confirm_ind EQ 'J'.
            DELETE zca0fcstftop FROM wa_zca0fcstftop .
            IF sy-subrc EQ 0.
              MESSAGE s004.
            ELSE.
              MESSAGE e005.
            ENDIF.
          ELSEIF wg_confirm_ind EQ 'N'.
          ENDIF.
      ENDCASE.
      CLEAR ok_code.
    ENDMODULE.                 " USER_COMMAND_0050  INPUT
    *&      Form  exit_program
    FORM exit_program .
      CALL METHOD g_custom_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      SET SCREEN 0.
      LEAVE SCREEN.
    ENDFORM.                    " exit_program
    *&      Form  set_auth
    FORM set_auth.
      REFRESH: i_fcode.
    Check authorization for change
      MOVE '02' TO act_auth.        "02 --> Change
      MOVE 'ZCA0FCSTFTOP' TO tab_maint.
      AUTHORITY-CHECK OBJECT 'ZZ:TABLMNP'
        ID 'ACTVT' FIELD act_auth
        ID 'TABLE' FIELD tab_maint.
      IF sy-subrc NE 0.
        PERFORM fill_fcode USING 'CHNG'.
      ENDIF.
    Check for authorization for create
      MOVE '01' TO act_auth.        "01 --> Create
      MOVE 'ZCA0FCSTFTOP' TO tab_maint.
      AUTHORITY-CHECK OBJECT 'ZZ:TABLMNP'
        ID 'ACTVT' FIELD act_auth
        ID 'TABLE' FIELD tab_maint.
      IF sy-subrc NE 0.
        PERFORM fill_fcode USING 'CREA'.
        PERFORM fill_fcode USING 'COPY'.
      ENDIF.
    Check for authorization for delete
      MOVE '06' TO act_auth.        "06 --> Delete
      MOVE 'ZCA0FCSTFTOP' TO tab_maint.
      AUTHORITY-CHECK OBJECT 'ZZ:TABLMNP'
        ID 'ACTVT' FIELD act_auth
        ID 'TABLE' FIELD tab_maint.
      IF sy-subrc NE 0.
        PERFORM fill_fcode USING 'DELE'.
      ENDIF.
    ENDFORM.                    " set_auth
    *&      Module  check_change  INPUT
    MODULE check_change INPUT.
      flag = 'Y'.
    ENDMODULE.                 " check_change  INPUT
    regards,
    vikas.
    plz reward if helpful

  • SUM from ALV grid

    Hey all,
    What i have to enable the sum button on the alv grid ... i guess from application bar....it is sign of sum... please give me option what i have to do....
    points will be rewarded.....

    hi,
    there will be sign like E (total ) using this u can have sum
    or
    u can add this property in ur fieldcat  for the field u want sum..
    l_r_fieldcat-tabname = 'G_T_ITAB'.
      l_r_fieldcat-fieldname = 'NETWR'.
       l_r_fieldcat-do_sum = 'X'.
      l_r_fieldcat-emphasize = 'C500'.
      APPEND l_r_fieldcat TO g_t_fieldcat.
      CLEAR l_r_fieldcat.
    reward if usefull....

  • How to transpose rows to columns and columns to rows in alv grid

    can u plz tell me in alv grid how to
    display data from itab having data
    1
    2
    3 and so on
    how to print in alv in a single row ie
    1 2 3 and so on

    chk this code...
    REPORT  Z_TRANSPOSEALV                                    .
    * Type pools declaration for ALV
    TYPE-POOLS: slis.
    *Declarations for ALV, dynamic table and col no for transpose
    DATA:    l_col    TYPE sy-tabix,
             l_structure   TYPE REF TO data,
             l_dyntable    TYPE REF TO data,
             wa_lvc_cat  TYPE lvc_s_fcat,
             lt_lvc_cat  TYPE lvc_t_fcat,
             lt_fieldcatalogue     TYPE slis_t_fieldcat_alv,
             wa_fieldcat TYPE slis_fieldcat_alv,
             lt_fieldcat TYPE slis_t_fieldcat_alv,
             lt_layout   TYPE slis_layout_alv.
    *Field symbols declarations
    FIELD-SYMBOLS :
      <header>    TYPE ANY,
      <dynheader> TYPE ANY,
      <dyndata>   TYPE ANY,
      <ls_table>      TYPE ANY,
      <dynamictable>      TYPE STANDARD TABLE,
      <it_table> TYPE STANDARD TABLE.
    *Input the name of the table
    PARAMETERS p_table TYPE dd02l-tabname OBLIGATORY.
    *Initialization event
    INITIALIZATION.
    *Start of selection event
    START-OF-SELECTION.
    * Create internal table of dynamic type
      CREATE DATA l_dyntable TYPE STANDARD TABLE OF (p_table)
                           WITH NON-UNIQUE DEFAULT KEY.
      ASSIGN l_dyntable->* TO <it_table>.
    *select statement to select data from the table as input into
    *our dynamic internal table.
    *Here i have restricted only till 5 rows.
    *You can set a variable and give no of rows to be fetched
    *The variable can be set in your select statement
    SELECT * INTO CORRESPONDING FIELDS OF TABLE <it_table>
                    FROM (p_table) up to 5 rows.
    *Fieldcatalogue definitions
      wa_lvc_cat-fieldname = 'COLUMNTEXT'.
      wa_lvc_cat-ref_table = 'LVC_S_DETA'.
      APPEND wa_lvc_cat TO lt_lvc_cat.
      wa_fieldcat-fieldname = 'COLUMNTEXT'.
      wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
      wa_fieldcat-key  = 'X'..
      APPEND wa_fieldcat TO lt_fieldcat.
      DESCRIBE TABLE <it_table>.
      DO sy-tfill TIMES.
    *   For each line, a column 'VALUEx' is created in the fieldcatalog
    *   Build Fieldcatalog
        WRITE sy-index TO wa_lvc_cat-fieldname LEFT-JUSTIFIED.
        CONCATENATE 'VALUE' wa_lvc_cat-fieldname
               INTO wa_lvc_cat-fieldname.
        wa_lvc_cat-ref_field = 'VALUE'.
        wa_lvc_cat-ref_table = 'LVC_S_DETA'.
        APPEND wa_lvc_cat TO lt_lvc_cat.
    *   Build Fieldcatalog
        CLEAR wa_fieldcat.
        wa_fieldcat-fieldname = wa_lvc_cat-fieldname.
        wa_fieldcat-ref_fieldname = 'VALUE'.
        wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
        APPEND wa_fieldcat TO lt_fieldcat.
      ENDDO.
    * Create dynamic internal table
      CALL METHOD cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog = lt_lvc_cat
        IMPORTING
          ep_table        = l_dyntable.  ASSIGN l_dyntable->* TO <dynamictable>.
    * Create structure as structure of the internal table
      CREATE DATA l_structure LIKE LINE OF <dynamictable>.
      ASSIGN l_structure->* TO <header>.
    * Create structure = structure of the internal table
      CREATE DATA l_structure LIKE LINE OF <it_table>.
      ASSIGN l_structure->* TO <ls_table>.
    * Create field catalog from our table structure
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = p_table
        CHANGING
          ct_fieldcat            = lt_fieldcatalogue
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.  DESCRIBE TABLE lt_fieldcatalogue.
    * Fill the internal to display <dynamictable>
      DO sy-tfill TIMES.
        IF sy-index = 1.
          READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX 1.
        ENDIF.
    *   For each field of it_table
        ASSIGN COMPONENT 1 OF STRUCTURE <header> TO <dynheader>.
        IF sy-subrc NE 0. EXIT .ENDIF.
        READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX sy-index.
    *   Fill 1st column
        <dynheader> = wa_fieldcat-seltext_m.
        IF <dynheader> IS INITIAL.
          <dynheader> = wa_fieldcat-fieldname.
        ENDIF.
    *Filling the other columns
        LOOP AT <it_table> INTO <ls_table>.
          l_col = sy-tabix + 1.
          ASSIGN COMPONENT sy-index OF STRUCTURE <ls_table> TO <dyndata>.
          IF sy-subrc NE 0. EXIT .ENDIF.
          ASSIGN COMPONENT l_col OF STRUCTURE <header> TO
    <dynheader>.
          IF sy-subrc NE 0. EXIT .ENDIF.
          WRITE <dyndata> TO <dynheader> LEFT-JUSTIFIED.
        ENDLOOP.
        APPEND <header> TO <dynamictable>.
      ENDDO.
    *Layout for ALV output
      lt_layout-zebra = 'X'.
      lt_layout-no_colhead = 'X'..
      lt_layout-colwidth_optimize ='X'.
      lt_layout-window_titlebar = 'ALV GRID TRANSPOSED'.
    *ALV Grid output for display
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          is_layout   = lt_layout
          it_fieldcat = lt_fieldcat
        TABLES
          t_outtab    = <dynamictable>.

  • ALV grid in Subscreen

    Hi all,
    I have a subscreen with ALV grid in module pool program.
    The main screen has two subscreens (one is header and other is items/reports)
    from the main screen, the ALV Grid subscreen can be called in two ways.
    1. from application tool bar (show report button) - ALV grid will be displayed in Items/Reports subscreen.
    2. In Items/Reports subscreen, while displaying items there is a requirement to display same ALV grid subscreen report on hotspot of particular item.
    ALV Grid in subscreen displaying only first come first serve for subscreen, if the subscreen called from application toolbar button then the ALV grid from items hotspot call not displaying and vice versa.
    Not sure where i am doing wrong, but if i free the container, alv and re-generate all the objects its working fine but user doesn't like the flickering display of conatiner when it re-generating.
    Any suggestions would help.
    Regards
    Syed

    Hi Aruna Kumara,
    Thanks for the reply.
    I have only one ALV grid instance.
    Process Flow from Application toolbar
    Main Screen: 100
    PBO:
    CALL SUBSCREEN C_REPORT INCLUDING SY_REPID '0300'.
    SUBSCREEN: 300
    PBO:
    IF CONTAINER IS NOT BOUND.
         CREATE Container.           with container name
         CREATE ALV_Grid.           passing container created
         BUILD FIELDCAT.
         CREATE EVENTS.
         CALL METHOD SET_DISPLAY_TABLE_FIRST.
    ELSE.
         REFRESH_TABLE_DISPLAY.
         FLUSH.     "tried with without flush too.
    ENDIF.
    Process Flow from Items:
    Items table is a subscreen 200 in main screen.
    When the desired item click thru hotspot, a Modal dialog screen 250 open with subscreen element.
    In event hotspot_click.
    CALL SCREEN 250 STARTING AT ...ENDING AT.
    PBO of 250:
    CALL SUBSCREEN C_REPORT INCLUDING SY-REPID '0300'.
    SubScreen 0300:
    PBO as describe above, as the container already bound next time it refreshes the table display. But i see a blank screen in Popup.
    Hope this helps.
    Regards
    Syed

  • Alv grid with data

    hey,
    alv grid method for export data from alv grid  to itab.
    regards,
    purna

    Hey,
    Any methods for exporting  alv grid data into itab.

  • Display of "Average Values Text in ALV grid"

    Hi
        I use ALV grid to display  the fields from a table. I have 15 columns.  I need to do average for four columns.
    In the field catalog i did a do_sum for those fields.
       When the ALV grid is displayed I get average values for these columns.
    Eg. Let suppose the grid looks like
    Field1           Field2           Field3             Field4     Field5         Field 6.
    vendor1       18                 22                   6            17                28
    vendor1       54                 11                  16           62                28
    vendor1       33                 21                   26          79                18
                        35             18                 16        52             24
      My requirement is I need to display the text "AVERAGE VALUES" . ( I need something like this.)
    Field1                      Field2           Field3             Field4     Field5         Field 6.
    vendor1                   18                 22                   6            17                28
    vendor1                    54                 11                  16           62                28
    vendor1                    33                 21                  26          79                18
    Average values        35             18                16        52             24
    Could someone help me in this?
    Thanks & Regards
    Kavitha

    Hello,
    you can use event subtotal_text of ALV_GRID.
    Regards,
    Pedro Santos

  • ALV grid report

    HI experts,
    I have displayed a report in an ALV grid. In the settings tab in the title bar, there is an option Layout-> Save.
    But this "SAVE" option is disabled. could u tell me how to enable this so that i can save the layout after changing it.
    Thanks,

    Hi,
    U need to transfer the name of the report and the user to the grid class in order to allow to save the layout:
    DATA: LT_VARIANT  TYPE DISVARIANT.
    LT_VARIANT-REPORT   = SY-REPID.
    LT_VARIANT-USERNAME = SY-UNAME.
    CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
           EXPORTING
                     IS_VARIANT                      = LT_VARIANT
                     I_SAVE                             = 'A'
                     IS_LAYOUT                       = LT_LAYOUT
                     IT_TOOLBAR_EXCLUDING = GT_NO_CODES
           CHANGING 
                     IT_OUTTAB                  = T_OUTPUT
                     IT_FIELDCATALOG      = GT_FIELDCAT.
    The user has to have the authorizations to manage the layout.
    Regards,
    Priyanka.

  • ALV GRID Problem when delete key is pressed from keyboard

    I have created a ALV Grid using cl_gui_alv_grid class
    I this I made one field editable based on some conditions
    and used SEL_MODE as 'A' ( i tried 'D' too) in the LAYOUT Settings
    When I select the records and press the DELETE key from keyboard
    the records are getting deleted, and i am not able to catch this action
    in the debug mode
    (FYI: I have written my own set of code for delete row in the USER COMMAND EVENT which is not getting triggered in this case )
    Can any body help me with this

    have you used this to trigger the event
    SET HANDLER W_EVENT_RECEIVER->HANDLE_USER_COMMAND FOR W_GRID

  • Taking download into excel from ALV Grid - header is printing in two lines

    Hi All,
    I have a scenario where I am taking the download from ALV grid to an excel sheet. Now the header of the ALV (column names) is appearing in two lines in the downloaded excel sheet while items (records of the ALV table) are getting displayed in a single line.
    This download is taken from the standard download to local file (spreadsheet) button provided by SAP for ALVs.
    I am using function module "Reuse_alv_grid_display" for the purpose.
    Can somebody provide an idea how I can avoid the header printing in two lines and keep the length as it is.
    Thanks in Advance,
    Chandan

    Hi..
    1. Pass header name in internal table appned first line.
    2. after that pass u r data .
    3. Use  FM. WS_DOWNLOAD 
    Salil ......
    Edited by: salil chavan on Nov 26, 2008 11:07 AM

  • Not able to download all the rows to excel sheet from alv grid display

    Hi experts,
    I am not able to download all the rows which are displayed in alv grid display for some material numbers.
    for some materials i am able to download, i used two ways to download 1) from icon(local file) on grid 2) menu list->export.
    i checked in debugging till selecting the spread sheet pop up window, i am able to see all the data in internal table.
    Can you suggest me what will be the problem....
    thanks in advance,

    hi sandeep,
    sorry for didnt specify clearly.
    note: EX: "asaasdada  in this sentence i said  " this symbol is special character not the text.
    building final internal table code
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          capid                 = p_capid
          datuv                 = sy-datum
          ehndl                 = '1'
          mktls                 = 'X'
          mehrs                 = 'X'
          mmory                 = '1'
          mtnrv                 = p_matnr
          stlal                 = '1'
          stpst                 = 0
          svwvo                 = 'X'
          werks                 = p_werks
          vrsvo                 = 'X'
        TABLES
          stb                   = i_stb
        EXCEPTIONS
          alt_not_found         = 1
          call_invalid          = 2
          material_not_found    = 3
          missing_authorization = 4
          no_bom_found          = 5
          no_plant_data         = 6
          no_suitable_bom_found = 7
          conversion_error      = 8
          OTHERS                = 9.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      i_stb1[] = i_stb[].
      IF NOT i_stb1[] IS INITIAL.
        SORT i_stb1 BY idnrk.
        DELETE ADJACENT DUPLICATES FROM i_stb1 COMPARING idnrk.
        SELECT bmatn ematn FROM ampl INTO TABLE i_ampl
          FOR ALL ENTRIES IN i_stb1
          WHERE bmatn = i_stb1-idnrk AND
                datuv LE sy-datum AND                          
                datub GE sy-datum.                              
        SELECT
        matnr
        bwkey
        verpr
        stprs
        bwprh
        FROM mbew
        INTO TABLE i_mbew
        FOR ALL ENTRIES IN i_stb1
        WHERE
            matnr EQ i_stb1-idnrk AND
            bwkey EQ i_stb1-werks.
        IF NOT i_stb1[] IS INITIAL.
          SELECT matnr werks beskz
                 dzeit webaz plifz                              
                 ekgrp                                         
          INTO TABLE i_marc
          FROM marc
          FOR ALL ENTRIES IN i_stb1
          WHERE matnr = i_stb1-idnrk
          AND werks = i_stb1-werks.
          SORT i_marc BY matnr werks.
        ENDIF.
        CLEAR i_ekpo.
        CLEAR i_vend.
        IF NOT i_stb1[] IS INITIAL.
          SELECT ebeln ebelp matnr werks loekz aedat
                 netpr peinh                                   
          INTO TABLE i_ekpo
          FROM ekpo
                FOR ALL ENTRIES IN i_stb1
                WHERE matnr = i_stb1-idnrk
                AND werks = i_stb1-werks.
          SORT i_ekpo BY matnr ASCENDING
                         aedat DESCENDING
                         ebeln DESCENDING
                         ebelp DESCENDING.
          IF NOT i_ekpo IS INITIAL.
            SELECT k~ebeln k~lifnr l~name1
            INTO TABLE i_vend
            FROM ekko AS k INNER JOIN lfa1 AS l
            ON k~lifnr EQ l~lifnr
            FOR ALL ENTRIES IN i_ekpo
            WHERE ebeln = i_ekpo-ebeln.
            SORT i_vend BY ebeln.
          ENDIF.
        ENDIF.
      ENDIF.
      i_ampl1[] = i_ampl[].
      IF NOT i_ampl1[] IS INITIAL.
        SORT i_ampl1 BY ematn.
        DELETE ADJACENT DUPLICATES FROM i_ampl1 COMPARING ematn.
        SELECT matnr mfrpn mfrnr FROM mara INTO TABLE i_mara
          FOR ALL ENTRIES IN i_ampl1
           WHERE matnr = i_ampl1-ematn.
      ENDIF.
      SORT i_ampl BY bmatn.
      IF NOT i_stb[] IS INITIAL.
        SELECT stlty stlnr stlkn stpoz idnrk potx1 potx2
        INTO TABLE i_stpo
        FROM stpo
        FOR ALL ENTRIES IN i_stb
        WHERE stlty = i_stb-stlty
          AND stlnr = i_stb-stlnr
          AND stlkn = i_stb-stlkn
          AND stpoz = i_stb-stpoz
          AND idnrk = i_stb-idnrk.
        SORT i_stpo BY stlty stlnr stlkn stpoz idnrk.
      ENDIF.
      LOOP AT i_stb INTO wa_stb.
        READ TABLE i_marc INTO wa_marc
        WITH KEY     matnr = wa_stb-idnrk
                     werks = wa_stb-werks
                     BINARY SEARCH.
        IF sy-subrc = 0.
          wa_outtab-beskz = wa_marc-beskz.
          wa_outtab-dzeit = wa_marc-dzeit.                      
          wa_outtab-webaz = wa_marc-webaz.                     
          wa_outtab-plifz = wa_marc-plifz.                     
          wa_outtab-ekgrp = wa_marc-ekgrp.                     
        ENDIF.
        READ TABLE i_ekpo INTO wa_ekpo
            WITH KEY matnr = wa_stb-idnrk.
        IF sy-subrc = 0.
          wa_outtab-netpr = wa_ekpo-netpr.                     
          wa_outtab-peinh = wa_ekpo-peinh.                     
          READ TABLE i_vend INTO wa_vend
          WITH KEY ebeln = wa_ekpo-ebeln
                   BINARY SEARCH.
          IF sy-subrc = 0.
            wa_outtab-lifnr = wa_vend-lifnr.
            wa_outtab-name_sup = wa_vend-name1.
          ENDIF.
        ENDIF.
        READ TABLE i_stpo INTO wa_stpo
        WITH KEY stlty = wa_stb-stlty
                 stlnr = wa_stb-stlnr
                 stlkn = wa_stb-stlkn
                 stpoz = wa_stb-stpoz
                 idnrk = wa_stb-idnrk
                 BINARY SEARCH.
        IF sy-subrc = 0.
          wa_outtab-potx1 = wa_stpo-potx1.
          wa_outtab-potx2 = wa_stpo-potx2.
        ENDIF.
        READ TABLE i_mbew INTO wa_mbew
        WITH KEY
        matnr = wa_stb-idnrk
        bwkey = wa_stb-werks.
        IF sy-subrc IS INITIAL.
          MOVE:
          wa_mbew-verpr TO wa_outtab-verpr,
          wa_mbew-stprs TO wa_outtab-stprs,
          wa_mbew-bwprh TO wa_outtab-bwprh.
        ENDIF.
        wa_outtab-matnr = p_matnr.
        wa_outtab-posnr = wa_stb-posnr.
        wa_outtab-stufe = wa_stb-stufe.
        wa_outtab-idnrk = wa_stb-idnrk.
        wa_outtab-ojtxb = wa_stb-ojtxp.
        wa_outtab-menge = wa_stb-menge.
        wa_outtab-meins = wa_stb-meins.
        MOVE: wa_stb-zzitem_draw_no TO wa_outtab-zzitem_draw_no.
        IF wa_stb-upskz = 'X'.
          SELECT * FROM stpu INTO TABLE i_stpu
                   WHERE  stlty = wa_stb-stlty AND
                          stlnr = wa_stb-stlnr AND
                          stlkn = wa_stb-stlkn AND
                          stpoz = wa_stb-stpoz.
        ENDIF.
        LOOP AT i_stpu INTO wa_stpu.
          wa_outtab-upmng = wa_stpu-upmng.
          wa_outtab-ebort = wa_stpu-ebort.
          wa_outtab-uposz = wa_stpu-uposz.
          CONCATENATE v_ebort wa_stpu-ebort      INTO v_ebort
          SEPARATED BY space.
        ENDLOOP.
        MOVE strlen( v_ebort ) TO v_len.
        MOVE: 0 TO x,
          128 TO y.
        DATA : lt_tab TYPE TABLE OF swastrtab.
        DATA : ls_tab LIKE LINE OF lt_tab.
        DATA : lv_ebort TYPE string.
        CLEAR lv_ebort. CLEAR lt_tab.
        MOVE v_ebort TO lv_ebort.
        CALL FUNCTION 'SWA_STRING_SPLIT'
          EXPORTING
            input_string                 = lv_ebort
            max_component_length         = 128
          TABLES
            string_components            = lt_tab
          EXCEPTIONS
            max_component_length_invalid = 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.
        IF lt_tab[] IS NOT INITIAL.
          LOOP AT lt_tab INTO ls_tab.
            CLEAR lv_ebort.
            MOVE: ls_tab-str TO lv_ebort.
            CONDENSE lv_ebort.
            MOVE lv_ebort TO wa_outtab-ebort.
            APPEND wa_outtab TO i_outtab.
            CLEAR:
            wa_outtab-matnr,
            wa_outtab-posnr,
            wa_outtab-zzitem_draw_no,
            wa_outtab-ojtxb,
            wa_outtab-menge,
            wa_outtab-meins,
            wa_outtab-uposz,
            wa_outtab-upmng,
            wa_outtab-verpr,
            wa_outtab-stprs,
            wa_outtab-bwprh,
            wa_outtab-lifnr,
            wa_outtab-name_sup,
            wa_outtab-potx1,
            wa_outtab-potx2,
            wa_outtab-netpr,
            wa_outtab-peinh.
    *        wa_outtab-idnrk.
          ENDLOOP.
        ELSE.
          APPEND wa_outtab TO i_outtab.
        ENDIF.
        CLEAR v_ebort.
        CLEAR: wa_stpu.
        REFRESH: i_stpu.
        LOOP AT i_ampl INTO wa_ampl WHERE bmatn = wa_stb-idnrk.
        READ TABLE i_mara INTO wa_mara WITH TABLE KEY matnr = wa_ampl-ematn.
          IF sy-subrc = 0.
            LOOP AT i_outtab INTO wa_outtab
            WHERE
            idnrk = wa_stb-idnrk AND
            flag NE 'X'.
              wa_outtab-mfrpn = wa_mara-mfrpn.
              wa_outtab-mfrnr = wa_mara-mfrnr.
              SELECT SINGLE name1 FROM lfa1 INTO wa_outtab-name1 WHERE lifnr = wa_mara-mfrnr.
              MOVE 'X' TO wa_outtab-flag.
              MODIFY i_outtab FROM wa_outtab
              TRANSPORTING mfrpn mfrnr name1 flag.
              EXIT.
            ENDLOOP.
            IF sy-subrc <> 0.
              CLEAR:
              wa_outtab-matnr,
              wa_outtab-posnr,
              wa_outtab-zzitem_draw_no,
              wa_outtab-ojtxb,
              wa_outtab-ebort,
    *          wa_outtab-idnrk,
              wa_outtab-menge,
              wa_outtab-meins,
              wa_outtab-uposz,
              wa_outtab-upmng,
              wa_outtab-verpr,
              wa_outtab-stprs,
              wa_outtab-bwprh,
              wa_outtab-lifnr,                                 
              wa_outtab-name_sup,                              
              wa_outtab-potx1,                                 
              wa_outtab-potx2,                                 
              wa_outtab-netpr,                                 
              wa_outtab-peinh.                                 
              wa_outtab-mfrpn = wa_mara-mfrpn.
              wa_outtab-mfrnr = wa_mara-mfrnr.
              SELECT SINGLE name1 FROM lfa1 INTO wa_outtab-name1 WHERE lifnr = wa_mara-mfrnr.
              APPEND wa_outtab TO i_outtab.
            ENDIF.
          ENDIF.
          REFRESH i_stpu.
          CLEAR i_stpu.
        ENDLOOP.    CLEAR: wa_matnr1, wa_mfrnr, wa_outtab.
      ENDLOOP.
    Edited by: srinivasareddy j on Mar 9, 2011 7:16 AM
    Edited by: srinivasareddy j on Mar 9, 2011 7:20 AM

  • Displaying text from domain in ALV Grid OO

    Hi all,
    i have a problem regarding ALV grid OO.
    I try to displaying domain text instead of domain value in the grid.
    The domain value range are:
    1     text 1
    5     text 5
    6     text 6
    I created a drop down list and it works fine, but the eintries in the grid displaying only the value instead of text.
    General I like to work the value's but in the grid schoul be only the texts.
    Have anybody any idea?
    Thanks,
    a
    If it is not enogh clear , please ask me.

    hi,
    look this.
    U should be able to get text of domain  from table DD07V.
    SELECT DOMNAME VALPOS DOMVALUE_L DOMVALUE_H
    into idomval
    from dd07v
    where domname = Domain Name
    and ddlanguage = sy-langu.
    <i><b>opr u can use the below FM</b></i>
    DATA : BEGIN OF int_orient OCCURS 10,
               domvalue_l LIKE dd07v-domvalue_l,
               ddtext LIKE dd07v-ddtext,
               END OF int_orient.
    DATA: ZPETS_PORTORIEN type dd07l-domname,
            int_values_table  TYPE dd07v OCCURS 0 WITH HEADER LINE.
    CALL FUNCTION 'GET_DOMAIN_VALUES'
        EXPORTING
          domname         = 'ZPETS_PORTORIEN'
          text            = 'X'
        TABLES
          values_tab      = int_values_table
        EXCEPTIONS
          no_values_found = 1
          OTHERS          = 2.
      LOOP AT int_values_table.
         int_orient-domvalue_l = int_values_table-domvalue_l.
        int_orient-ddtext = int_values_table-ddtext .
        append int_orient.
      ENDLOOP.
    read table int_orient. with key domvalue_l transporting  ddtext .
    rgds
    Anver
    <b>if hlped pls mark points</b>

  • Getting data back from ALV grid

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

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

  • Setting ALV grid Graphic properties from program

    Hi all,
    Could any one tell me how to set the properties of the histogram generated by ALV output from program.
    I want to display the value on top of the bar, by setting this property from program.
    Manually i can do this by selecting the graph icon from the alv toolbar, and in the graph, right-click the bar, and from the context menu, select 'format data series', then choose 'Data labels' tab and then select 'Show value'.
    Thanks in advance.
    regards,
    Anup

    Hi Anup
    Yes, ALV Grid uses GFW for the graphics. However, it encapsulates the graphic object and let's your intervention to some extent. To do so, you can use the parameter at the interface of the method "<b>set_table_for_first_display</b>". Here is the information about the parameter:
    <u><b>IT_ALV_GRAPHICS</b></u>
    <i> Settings for displaying the ALV list as a diagram (for example, axis labels). The row type of the table has two fields (variables/value pairs):
    PROP_ID : Assign a constant attribute of the class CL_ALV_GRAPHICS_CU with prefix CO_PROPID_ to this field to determine the changes to be made to the graphic. Use the CL_ALV_GRAPHICS_CU=>CO_PROPID_TITLE attribute, for example, to refer to the title of the diagram.
    PROP_VAL : The value of the relevant topic, for example, 'My Title'.</i>
    You can also find <b>GFW</b> programs as "<b>GFW_DEMO_*</b>". If you want, you can prepare your own graphics and override the standard graphics function of the ALV Grid or add your own graphics functionality. For these you can refer to <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/documents/a1-8-4/an%20easy%20reference%20for%20alv%20grid%20control.pdf">"An Easy Reference for ALV Grid Control"</a>.
    Kind regards...
    *--Serdar

  • Selecting Multiple Rows from ALV GRID Display

    Hi,
    I am having a ALV GRID Display. I want to select multiple rows from the Output and move them to an internal table.
    Please let me know how do I acheive this.
    Thanks in advance,
    Ishaq.

    Hi,
    Have a look on the following code. It displays the selected rows which hv been selected in basic list.
    TABLES:
      spfli.
    TYPE-POOLS:
      slis.
    DATA:
      BEGIN OF t_spfli OCCURS 0,
        checkbox.
            INCLUDE STRUCTURE spfli.
    DATA:  END OF t_spfli.
    DATA:
      t_sspfli LIKE STANDARD TABLE OF t_spfli .
    DATA:
      fs_spfli LIKE LINE OF t_sspfli.
    DATA:
      fs_layout TYPE  slis_layout_alv,
      w_program TYPE sy-repid.
    SELECT *
      FROM spfli
      INTO CORRESPONDING FIELDS OF TABLE t_spfli.
    *fs_layout-info_fieldname = 'COLOR'.
    fs_layout-box_fieldname = 'CHECKBOX'.
    w_program = sy-repid.
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
      EXPORTING
        i_callback_program       = w_program
        i_callback_pf_status_set = 'FLIGHT'
        i_callback_user_command  = 'SPFLI_INFO'
        i_structure_name         = 'SPFLI'
        is_layout                = fs_layout
      TABLES
        t_outtab                 = t_spfli
      EXCEPTIONS
        program_error            = 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.
    *&      Form  FLIGHT
          text
         -->RT_EXTAB   text
    FORM flight    USING rt_extab TYPE slis_t_extab..
      SET PF-STATUS 'FLIGHT' EXCLUDING rt_extab.
    ENDFORM.                    "FLIGHT
    *&      Form  SPFLI_INFO
          text
         -->UCOMM      text
         -->SELFIELD   text
    FORM spfli_info USING ucomm LIKE sy-ucomm
                           selfield TYPE slis_selfield.
      selfield-refresh = 'X'.
      CASE ucomm.
        WHEN 'FLIGHT'.
          LOOP AT t_spfli.
            IF t_spfli-checkbox = 'X'.
              t_spfli-checkbox = ' '.
             t_spfli-color = 'C51'.
              MODIFY t_spfli TRANSPORTING checkbox.
              fs_spfli = t_spfli.
              APPEND fs_spfli TO t_sspfli.
            ENDIF.
          ENDLOOP.
        WHEN 'EXIT'.
          LEAVE PROGRAM.
      ENDCASE.
      CLEAR fs_spfli.
      fs_layout-info_fieldname = 'COLOR'.
    fs_layout-confirmation_prompt = 'X'.
      fs_layout-key_hotspot = 'X'.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
          i_callback_program = w_program
          i_structure_name   = 'SFLIGHT'
          is_layout          = fs_layout
        TABLES
          t_outtab           = t_sspfli
        EXCEPTIONS
          program_error      = 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.
      REFRESH t_sspfli.
    ENDFORM.                    "SPFLI_INFO
    Regards,
    Chandu

Maybe you are looking for

  • Cannot boot from USB to install windows 7

    I am trying to install windows 7 using a usb on my 2011 macbook pro. Boot camp did not allow me to check the box to use a USB but I found a work around for that. So I was able to create the USB windows install, but when I ran bootcamp it returned "No

  • How to set time delay in javascript for indesign cs2?

    while am running the js, am using function date.getMonth, date.getDate()... this function produce the error, which return the function as error message, if i set alert before running this every time , am not getting the errror how to solve this? than

  • Can't Print to PDF

    I don't understand why I can't print to pdf from any Adobe project, InDesign, Acrobat Pro, Reader, etc.

  • Interakt File Upload incompatible with Firefox?  Recommend ASP Upload tool?

    Hi, I've been using Interakt's File Upload tool for quite some time but have recently been made aware that it doesn't work in Firefox! Anyway, I notice that Interakt no longer exist now, having been bought out by Adobe some time ago as it turns out.

  • Making stop and play functions fool-proof

    I have a timeline control embedded into my flash piece. It contains the buttons "Re-Play, Pause, and Play." I am building some testing software, therefore I have instances where the animation/sound stops and waits for the user to select an answer. At