USER_COMMAND in CL_GUI_ALV_GRID

Hi
Can anyone tell me when the USER_COMMAND event in the ALV Grid (OO) gets triggered? I tried creating handlers for both double_click and user_command events. My double_click seems to fire the way i wanted, but at no case the user_command event is getting fired.
I feel i am making a minor mistake somewhere, which i am not able to figure out.
Any help is greatly appreciated.
Thanks
Balaji

Hi,
Try this code
DATA gr_event_handler TYPE REF TO lcl_event_handler . .. ..
*--Creating an instance for the event handler
CREATE OBJECT gr_event_handler .
*--Registering handler methods to handle ALV Grid events
SET HANDLER gr_event_handler->handle_double_click FOR gr_alvgrid .
CLASS lcl_event_handler IMPLEMENTATION .
*Handle Double Click
METHOD handle_double_click .
PERFORM handle_double_click USING e_row e_column es_row_no .
ENDMETHOD .
CLASS lcl_event_handler DEFINITION
*Double-click control
Methods:
handle_double_click
      FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column
           i_fieldrows      TYPE lvc_t_row.
           w_fieldrows LIKE LINE OF i_fieldrows,
  CALL METHOD o_alvgrid->get_selected_rows
             IMPORTING
             et_index_rows = i_fieldrows.
  LOOP AT i_fieldrows INTO w_fieldrows.
    READ TABLE i_batch INTO w_block INDEX w_fieldrows-index.
if sy-subrc = 0.
      CLASS LCL_EVENT_RECEIVER DEFINITION
CLASS LCL_EVENT_RECEIVER DEFINITION.
Event receiver definitions for ALV actions
  PUBLIC SECTION.
    CLASS-METHODS:
Row Double click for dirll down.
       HANDLE_DOUBLE_CLICK
         FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
            IMPORTING E_ROW
                      E_COLUMN
                      ES_ROW_NO.
ENDCLASS.
Implementation
Every event handler that is specified below should also be set after
the object has been created.  This is done in the PBO processing.
with the following command
SET HANDLER oEventreceiver->handle_toolbar FOR o_Alvgrid.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*&      Method handle_double_click
This method is called when the user double clicks on a line to drill
down.
The following are exported from the ALV
LVC_S_ROW
LVC_S_COL
LVC_S_ROID
  METHOD HANDLE_DOUBLE_CLICK.
The double click drill down processing should be
coded in the form below.
   PERFORM F9007_HANDLE_DOUBLE_CLICK USING E_ROW
                                           E_COLUMN
                                           ES_ROW_NO.
  ENDMETHOD.
ENDCLASS.
*&      Form  F9007_HANDLE_DOUBLE_CLICK
This form is called when the user double clicks on a line to drill
down.
     -->P_E_ROW_ID    - Row ID  text
     -->P_E_COLUMN_ID - Column ID
     -->P_ES_ROW_NO   - Row number
FORM f9007_handle_double_click USING p_row
                                     p_column
                                     p_row_no.
  DATA: lw_output LIKE LINE OF i_output.
Need to check that a subtotal or grand total line has not been
double-clicked, otherwise the report will produce a short dump!
  check p_row+0(1) is initial.
RG:16/11/2004 - End of Changes
  READ TABLE i_output INDEX p_row INTO lw_output.
  CASE p_column.
    WHEN 'KNUMA'.
      IF NOT lw_output-knuma IS INITIAL.
        SET PARAMETER ID 'VBO' FIELD lw_output-knuma.
        CALL TRANSACTION 'VBO3' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN 'VBAK_VBELN'.
     IF NOT lw_output-vbak_vbeln IS INITIAL.
      SET PARAMETER ID 'AUN' FIELD lw_output-vbak_vbeln.
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN 'VBRK_VBELN'.
      IF NOT lw_output-vbrk_vbeln IS INITIAL.
        SET PARAMETER ID 'VF' FIELD lw_output-vbrk_vbeln.
        CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
      ENDIF.
  ENDCASE.
ENDFORM.                    " F9007_HANDLE_DOUBLE_CLICK
  DATA:    lv_bukrs    LIKE bkpf-bukrs,
           lv_belnr    LIKE bkpf-belnr,
           lv_gjahr    LIKE bkpf-gjahr.
LOOP AT i_fieldrows INTO w_fieldrows.
    READ TABLE i_output INTO w_output INDEX w_fieldrows-index.
ENDLOOP.
      lv_bukrs = w_output-bukrs.
      lv_belnr = w_output-belnr.
      lv_gjahr = w_output-gjahr.
      SET PARAMETER ID 'BUK' FIELD lv_bukrs.
      SET PARAMETER ID 'BLN' FIELD lv_belnr.
      SET PARAMETER ID 'GJR' FIELD lv_gjahr.
      CALL TRANSACTION c_transaction_call_fb03 AND SKIP FIRST SCREEN .
Also do a search in this forum.
Thanks & Regards,
Judith.

Similar Messages

  • EVENT USER_COMMAND for CL_GUI_ALV_GRID

    Hello All,
    We have a program that uses the CL_GUI_ALV_GRID and the events user_command and context_menu_request.  The program functions by selecting an option for the context menu on an ALV grid which will then take you to another screen with another ALV grid. 
    The issue is on the second screen where the user clicks the back button to return to the first ALV Grid.  For some reason, the functionality of Method user_command is triggered twice preventing the user from returning to the initial screen.  Once when the menu option is selected and again when the Back button on the second screen is selected.  If the user clicks the Back button again it will return to the initial ALV grid.  We need to have the program go to the initial ALV grid after the Back button is clicked the first time not the second. 
    Does anyone have any suggestions on how to correct this?  Thanks in advance for your help.
    John

    Hi John,
    maybe this will help you. I had a similar situation.
    1.) When you initialize the grid-controls try to set a
    unique identifier within the display-variant.
    lf_variant TYPE disvariant.
    lf_variant-report = ls_report (NOT SY_REPID!)
    lf_variant-handle = 'HUGO'....
    2.) After leaving the 2. screen clear all handles using
    the method hndle->free, free, clear ...
    In PAI you can easaly check <if hndle is initial> 
    or <if not ( hndle is initial )> ....
    Hope this will help you
    BR
    Michael

  • How to insert line with values in ALV (CL_GUI_ALV_GRID)?

    Hi,
    Does anyone know how to get control of new line inserted in ALV (I am using class CL_GUI_ALV_GRID) before the new line is shown to the user. What I want the user to see is not a completely blank line, but a new line with certain fields filled with data.
    I have tried with ALL events in CL_GUI_ALV_GRID but without any luck. If I create my own user command and insert it in the alv menu I get control, but not with the standards. Why?
    Please help
    Kind regards - Keld Gregersen

    Hi,
    I created a nice work around...
    CLASS lcl_event_handler DEFINITION.
    handle_toolbar
    FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object e_interactive,
    handle_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING e_ucomm.
    ENDCLASS. "lcl_event_handler DEFINITION
    CLASS lcl_event_handler IMPLEMENTATION.
    METHOD handle_toolbar.
    DATA:
    l_toolbar TYPE stb_button.
    Here I replace SAP standard functions with own functions
    READ TABLE e_object->mt_toolbar INTO l_toolbar
    WITH KEY function = '&LOCAL&APPEND'.
    IF sy-subrc = 0.
    l_toolbar-function = 'OWN_APPEND'.
    MODIFY e_object->mt_toolbar FROM l_toolbar INDEX sy-tabix.
    ENDIF.
    READ TABLE e_object->mt_toolbar INTO l_toolbar
    WITH KEY function = '&LOCAL&COPY_ROW'.
    IF sy-subrc = 0.
    l_toolbar-function = 'OWN_COPY_ROW'.
    MODIFY e_object->mt_toolbar FROM l_toolbar INDEX sy-tabix.
    ENDIF.
    ENDMETHOD. "handle_toolbar
    METHOD handle_user_command.
    CASE e_ucomm.
    WHEN 'OWN_APPEND'.
    CALL METHOD ref_alv->check_changed_data
    IMPORTING
    e_valid =
    CHANGING
    c_refresh = 'X'
    CREATE YOUR OWN CODE HERE
    CALL METHOD ref_alv->refresh_table_display
    EXPORTING
    is_stable = 'X'
    i_soft_refresh =
    EXCEPTIONS
    finished = 1
    others = 2
    ENDMETHOD. "handle_user_command
    ENDCLASS. "lcl_event_handler IMPLEMENTATION
    Kind regards
    Keld Gregersen

  • Issue with editable alv using  cl_gui_alv_grid

    Hello all,
    its a table update program . user can save create new entry and delete the entires . the screen should be avaiable for multiple time inputs by the user . i achived it by  method handle double click and i am refreshing the scrren and making the alv for ready for input . but user wants the screen shoukld get refreshed automatically once user clicks on save button .
    how can I achive plz advise .
    I am working on ALV by cl_gui_alv_grid , I am using the followingmethods of the class
    1)  METHODS:  handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
                  IMPORTING e_object e_interactive.
    2)     METHODS:     handle_user_command FOR EVENT
                     user_command OF cl_gui_alv_grid
                     IMPORTING e_ucomm,
                     check_changed_data.
    3)     METHODS:      handle_double_click FOR EVENT
                      double_click  OF  cl_gui_alv_grid
                      IMPORTING e_row e_column.
    4)    METHODS: handle_data_changed
                  FOR EVENT data_changed OF cl_gui_alv_grid
                  IMPORTING er_data_changed.
    Thanks in advance .

    Hi Soumyaprakash,
    SAve is an user command . I want to have the values which are changed by the user and again the output should be ready for any actions like change the data , create new and delete any entry .
    basically  the alv output screen should be reday for inputs any number of times untill user clicks on back button .
    Thanks
    Basavaraj

  • How can I trigger a USER_COMMAND for alv grid "toolbar" ???

    Hi,
    i have the standard ALV Grid "toolbar" and if i click to the Button "&LOCAL&COPY_ROW" than i want try to make a Refresh to my ALV Table in the Event "afteruser_command"_!!!!
    Here is the implementation of my Event *"afteruser_command":*_
    METHOD on_after_user_command.
    ........DATA: ls_stable TYPE lvc_s_stbl.
    .....CASE e_ucomm.
    .....WHEN '&LOCAL&COPY_ROW'.
    ........MESSAGE 'LOCAL_COPY_ROW' TYPE 'S' DISPLAY LIKE 'E'.
    ........ls_stable-row = 'X'.
    ........ls_stable-col = 'X'.
    ........CALL METHOD gr_grid_d0100->refresh_table_display
    ..............EXPORTING
    .......................is_stable      = ls_stable
    ..............EXCEPTIONS
    .......................finished       = 1
    .......................OTHERS         = 2.
    ......ENDCASE.
      ENDMETHOD.   
    But it doesnt work.
    Is there another function code for the Copy Button????
    Thanks
    Ersin

    Hello Ersin,
    the events "after_user_command", "before_user_command" and "user_command" will not be fired when selecting this command!
    In my opinion, there is no solution, to fire these events, using this alv-function!
    But there is a trick:
    1. Register on the event "toolbar" with an own method:
          toolbar_own          for event toolbar of cl_gui_alv_grid
                                       importing e_object
                                              e_interactive,
    In this method change the function code of "&LOCAL&COPY_ROW", but don´t change the row of the entry, because the button should appear on the same place in the toolbar:
        field-symbols: <ls_toolbar>  type stb_button.
        read table e_object->mt_toolbar with key function = '&LOCAL&COPY_ROW'
                                        assigning <ls_toolbar>.
        if sy-subrc = 0.
          <ls_toolbar>-function = 'COPYROW_OWN'.
        endif.
    2. Register on the event "user_command" ( I think, that´s clear ):
          user_cmd_own           for event user_command
                                              of cl_gui_alv_grid
                                              importing e_ucomm,
    ( don´t forget the set handler-commands for both events:
      set handler po_alv_own->user_cmd_own              for po_alv_own.
      set handler po_alv_own->toolbar_own               for po_alv_own.     )
    3. Now you can react in the method "user_command" on your own function code:
        case e_ucomm.
          when 'COPYROW_OWN'.
            perform copy_row using    me
                             changing gt_bis_cf_out.
    Sample code for copying the current line:
    FORM COPY_ROW  using    po_alv_own          type ref to gcl_alv_own
                   changing pt_table_alv      type gt_table_alv_t.
      data: l_index         type i,
            ls_table_alv   type gs_table_alvt_t.
      call method po_alv_own->get_current_cell
         importing
           e_row     = l_index.
    *      e_value   =
    *      e_col     =
    *      es_row_id =
    *      es_col_id =
    *      es_row_no =
      "read the current line:
      read table pt_table_alv index l_index
                               into ls_table_alv_out.
      "some changes for the new row:
      clear: ls_table_alv-style,
             ls_table_alv-tabix.
      "insert the new line:
      add 1 to l_index.
      insert ls_table_alv into pt_table_alv index l_index.
      po_alv_own->refresh( ).
    ENDFORM.                    " COPY_ROW
    In this manner the events "after_user_command", "before_user_command" are fired, too!
    For information: My problem was, that the ALV-function copied the style-information too, so in the new line, some fields are not editable. At least his field must be cleared!
    Best regard
    Thomas Scheuermann

  • ALV OO toolbar event of  cl_gui_alv_grid - problem

    I have defined a Button in ALV grid toolbar in my program using Event Toolbar OF cl_gui_alv_grid.
    I have also disabled/Excluded some of the buttons on Standard Grid toolbar.
    My requirement is when i click on Button defined on ALV grid toolbar..i have to trigger a Perform in which code for submit the changes done on the grid is written..
    I tried to use event user_command and this method is not getting trigerred when i click on button defined on toolbar, Probably since i have mutiple grids in my output..
    suggest me appropriate event handler method or proper approach to go about this?

    Hello Ksiva
    Have you set the event handler for USER_COMMAND? You can do this either for all or a specific grid instance.
    SET HANDLER: lcl_eventhandler=>handle_user_command    FOR ALL INSTANCES.
    SET HANDLER: lcl_eventhandler=>handle_user_command    FOR go_grid1.
    Within your event handler method you can easily distinguish between the different grid instance.
    CLASS lcl_eventhandler DEFINITION.
    METHODS: handle_user_command FOR EVENT user_command
                                                         OF cl_gui_alv_grid
                        IMPORTING
                           e_ucomm
                           sender.    " !!! Optional parameter, instance which raised the event
    CLASS lcl_eventhandler IMPLEMENTATION.
    METHOD handle_user_command.
      CASE sender.
         WHEN go_grid1.
             " handle user command
         WHEN others.
               RETURN.
      ENDCASE.
    ENDMETHOD.
    Regards
      Uwe

  • First try with ALV Grid and Abap Objects

    Hi,
    this is my first try to write a simple report which just reads a textfile and display it in an ALV Grid. As a basis, I used some examples from SDN, but it did not work as expected
    I would like just to use a docking container. I do not need a separate area for the ALV Grid. The report gives no syntax errors, but it just display the report title, nothing else. SAP R/3 Release is 4.7. Below is the source code of the report. Any idea what is missing?
    *& Report  Z_PLAN_TEXT_UPLOAD                                          *
    REPORT z_plan_text_upload.
    INCLUDE <icon>.
    * Data Declaration
    DATA:
      gf_dynnr TYPE sy-dynnr,
      gf_repid TYPE sy-repid.
    DATA:
      go_docking_container TYPE REF TO cl_gui_docking_container,
      go_alv_grid TYPE REF TO cl_gui_alv_grid.
    DATA:
      gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat.
    TYPES:
      BEGIN OF gy_text_input,
        firma(20)           TYPE c,
        kostenstelle(20)    TYPE c,
        datenart1(10)       TYPE c,
        planjahr(10)        TYPE c,
    *    planperiode         TYPE co_perio,
        planperiode(5)      TYPE c,
        datenart2(10)       TYPE c,
        planungposition(10) TYPE c,
    *    kostenart           TYPE koart,
        kostenart(10)       TYPE c,
    *    planbetrag          TYPE bapicurr_d,
        planbetrag(20)      TYPE c,
      END OF gy_text_input.
    DATA:
      gt_text_input TYPE TABLE OF gy_text_input,
      gs_text_input LIKE LINE OF gt_text_input.
    * Local Class Definition
    * Local Class Implementation
    * Selection-Screen
    SELECTION-SCREEN BEGIN OF BLOCK b1
      WITH FRAME TITLE text-001.
    SKIP.
    PARAMETERS:
      gp_file TYPE localfile,
      gp_head TYPE checkbox DEFAULT 'X'.
    SKIP.
    PARAMETERS:
      gp_gjahr LIKE coep-gjahr,
      gp_versn LIKE coep-versn.
    SELECTION-SCREEN END OF BLOCK b1.
    * Initialization
    INITIALIZATION.
      DATA:
        lf_sapworkdir TYPE string.
      CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
        CHANGING
          sapworkdir            = lf_sapworkdir
        EXCEPTIONS
          get_sapworkdir_failed = 1
          cntl_error            = 2
          error_no_gui          = 3
          not_supported_by_gui  = 4
          OTHERS                = 5.
      IF sy-subrc <> 0 OR lf_sapworkdir = ''.
        CALL METHOD cl_gui_frontend_services=>directory_get_current
          CHANGING
            current_directory            = lf_sapworkdir
          EXCEPTIONS
            directory_get_current_failed = 1
            cntl_error                   = 2
            error_no_gui                 = 3
            not_supported_by_gui         = 4
            OTHERS                       = 5.
        CALL METHOD cl_gui_cfw=>flush.
      ENDIF."sy-subrc <> 0 OR sapworkdir = ''
      gp_file = lf_sapworkdir.
      gf_dynnr = sy-dynnr.
      gf_repid = sy-repid.
    * At Selection-Screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR gp_file.
      DATA:
        lt_filetable TYPE filetable,
        ls_filetable LIKE LINE OF lt_filetable,
        lt_rc TYPE i.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
    *  EXPORTING
    *    WINDOW_TITLE            =
    *    DEFAULT_EXTENSION       =
    *    DEFAULT_FILENAME        =
    *    FILE_FILTER             =
    *    INITIAL_DIRECTORY       =
    *    MULTISELECTION          =
    *    WITH_ENCODING           =
        CHANGING
          file_table              = lt_filetable
          rc                      = lt_rc
    *    USER_ACTION             =
    *    FILE_ENCODING           =
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE lt_filetable INDEX 1
        INTO
          ls_filetable.
      gp_file = ls_filetable-filename.
      CALL METHOD cl_gui_cfw=>flush.
    * Start-Of-Selection
    START-OF-SELECTION.
      DATA:
        lf_filename LIKE filename-fileintern.
      lf_filename = gp_file.
      CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
        EXPORTING
          i_filename                 = lf_filename
          i_servertyp                = 'PRS '
          i_fileformat               = 'TXT'
    *     I_FIELD_SEPERATOR          =
          i_line_header              = gp_head
    *   IMPORTING
    *     E_BIN_FILELENGTH           =
       TABLES
         i_tab_receiver             = gt_text_input
       EXCEPTIONS
         file_not_found             = 1
         close_failed               = 2
         authorization_failed       = 3
         open_failed                = 4
         conversion_failed          = 5
         OTHERS                     = 6.
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *------ Build the Field Catalog ---------------------------------------*
      PERFORM build_fieldcatalog
        CHANGING gt_fieldcat.
    *------ Create the docking container ----------------------------------*
      IF go_docking_container IS INITIAL.
        CREATE OBJECT go_docking_container
          EXPORTING
    *      PARENT                      =
            repid                       = gf_repid
            dynnr                       = gf_dynnr
    *     SIDE                        = go_docking_container->DOCK_AT_bottom
    *      EXTENSION                   = 200
    *      STYLE                       =
    *      LIFETIME                    = lifetime_default
    *      CAPTION                     =
    *      METRIC                      = 0
    *      RATIO                       =
    *      NO_AUTODEF_PROGID_DYNNR     =
    *      NAME                        =
          EXCEPTIONS
            cntl_error                  = 1
            cntl_system_error           = 2
            create_error                = 3
            lifetime_error              = 4
            lifetime_dynpro_dynpro_link = 5
            OTHERS                      = 6.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF."go_docking_container IS INITIAL
    *------ Create the ALV Grid -------------------------------------------*
      IF go_alv_grid IS INITIAL.
        CREATE OBJECT go_alv_grid
          EXPORTING
    *      I_SHELLSTYLE      = 0
    *      I_LIFETIME        =
            i_parent          = go_docking_container
    *      I_APPL_EVENTS     = space
    *      I_PARENTDBG       =
    *      I_APPLOGPARENT    =
    *      I_GRAPHICSPARENT  =
    *      I_NAME            =
          EXCEPTIONS
            error_cntl_create = 1
            error_cntl_init   = 2
            error_cntl_link   = 3
            error_dp_create   = 4
            OTHERS            = 5.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF."go_alv_grid is initial
    *------ Call ALV Grid -------------------------------------------------*
      CALL METHOD go_alv_grid->set_table_for_first_display
    *     EXPORTING
    *      I_BUFFER_ACTIVE               =
    *      I_BYPASSING_BUFFER            =
    *      I_CONSISTENCY_CHECK           =
    *      I_STRUCTURE_NAME              =
    *      IS_VARIANT                    =
    *      I_SAVE                        =
    *      I_DEFAULT                     = 'X'
    *      IS_LAYOUT                     =
    *      IS_PRINT                      =
    *      IT_SPECIAL_GROUPS             =
    *      IT_TOOLBAR_EXCLUDING          =
    *      IT_HYPERLINK                  =
    *      IT_ALV_GRAPHICS               =
    *      IT_EXCEPT_QINFO               =
        CHANGING
          it_outtab                     = gt_text_input
          it_fieldcatalog               = gt_fieldcat
    *      IT_SORT                       =
    *      IT_FILTER                     =
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *&      Form  build_fieldcatalog
    *       text
    *      <--P_GT_FIELDCAT  text
    FORM build_fieldcatalog
      CHANGING
        pt_fieldcat TYPE lvc_t_fcat.
      DATA ls_fcat TYPE lvc_s_fcat.
      ls_fcat-fieldname = 'FIRMA' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'Firma' .
      ls_fcat-seltext = 'Firma' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'KOSTENSTELLE' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'Kostenstelle' .
      ls_fcat-seltext = 'Kostenstelle' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'DATENART1' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Datenart1' .
      ls_fcat-seltext = 'Datenart1' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANJAHR' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Planjahr' .
      ls_fcat-seltext = 'Planjahr' .
      APPEND ls_fcat TO pt_fieldcat .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANPERIODE' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '5' .
      ls_fcat-coltext = 'Planperiode' .
      ls_fcat-seltext = 'Planperiode' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'DATENART2' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Datenart2' .
      ls_fcat-seltext = 'Datenart2' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANUNGSPOSITION' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Planungsposition' .
      ls_fcat-seltext = 'Planungsposition' .
      APPEND ls_fcat TO pt_fieldcat .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'KOSTENART' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Kostenart' .
      ls_fcat-seltext = 'Kostenart' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANBETRAG' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'Planbetrag' .
      ls_fcat-seltext = 'Planbetrag' .
      APPEND ls_fcat TO pt_fieldcat .
    ENDFORM.                    "build_fieldcatalog

    I have added some more functionality to my report. The good thing is, the report works as it should.
    BUT, I'm not really sure, whether this is a good (correct) design. The report works the following way:
    1. Read planning data form text file into internal table
    2. Display the internal table
    3. Convert the data and display the converted result
    4. Post the converted data to the system
    5. Display log with messages
    The main thing is, I would like to know, do i really need two dynros, to display the two different internal tables or is it possible just to use one ALV-Grid? I was not able to find another solution. Any comment or help to the report is appreciated.
    *& Report  Z_PLAN_TEXT_UPLOAD_TEST                                     *
    REPORT z_plan_text_upload_test.
    INCLUDE <icon>.
    * Data Declaration
    DATA:
      gf_okcode TYPE ui_func,
      gf_balloghndl TYPE balloghndl.
    DATA:
      go_docking_container TYPE REF TO cl_gui_docking_container,
      go_alv_grid_0100 TYPE REF TO cl_gui_alv_grid,
      go_alv_grid_0200 TYPE REF TO cl_gui_alv_grid.
    DATA:
      gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat.
    TYPES:
      BEGIN OF gy_text_input,
        firma(20)            TYPE c,
        kostenstelle(20)     TYPE c,
        datenart1(10)        TYPE c,
        planjahr(10)         TYPE c,
    *    planperiode         TYPE co_perio,
        planperiode(5)       TYPE c,
        datenart2(10)        TYPE c,
        planungsposition(10) TYPE c,
    *    kostenart           TYPE koart,
        kostenart(10)        TYPE c,
    *    planbetrag          TYPE bapicurr_d,
        planbetrag(20)       TYPE c,
      END OF gy_text_input.
    DATA:
      gt_text_input TYPE TABLE OF gy_text_input,
      gs_text_input LIKE LINE OF gt_text_input.
    * Bapi Strukturen
    DATA:
      gs_headerinfo TYPE bapiplnhdr,
      gt_indexstructure TYPE TABLE OF bapiacpstru,
      gs_indexstructure LIKE LINE OF gt_indexstructure,
      gt_coobject TYPE TABLE OF bapipcpobj,
      gs_coobject LIKE LINE OF gt_coobject,
      gt_pervalue TYPE TABLE OF bapipcpval,
      gs_pervalue LIKE LINE OF gt_pervalue,
      gt_return TYPE TABLE OF bapiret2,
      gs_return LIKE LINE OF gt_return,
      gt_control TYPE TABLE OF bapipcpctrl,
      gt_totvalue TYPE TABLE OF bapipcptot.
    TYPES:
      BEGIN OF gy_bapi_input,
        version      TYPE versn,
    *    perio       TYPE co_perio,
        fisc_year    TYPE gjahr,
        coobject(10) TYPE c,
        cost_elem    TYPE kstar,
        wkgbtr01     TYPE wkgxxx,
        wkgbtr02     TYPE wkgxxx,
        wkgbtr03     TYPE wkgxxx,
        wkgbtr04     TYPE wkgxxx,
        wkgbtr05     TYPE wkgxxx,
        wkgbtr06     TYPE wkgxxx,
        wkgbtr07     TYPE wkgxxx,
        wkgbtr08     TYPE wkgxxx,
        wkgbtr09     TYPE wkgxxx,
        wkgbtr10     TYPE wkgxxx,
        wkgbtr11     TYPE wkgxxx,
        wkgbtr12     TYPE wkgxxx,
      END OF gy_bapi_input.
    DATA:
      gt_bapi_input TYPE TABLE OF gy_bapi_input,
      gs_bapi_input LIKE LINE OF gt_bapi_input.
    * Anwendungs-Log
    DATA: gs_balsmsg TYPE bal_s_msg.
    * Selection-Screen
    SELECTION-SCREEN BEGIN OF BLOCK b1
      WITH FRAME TITLE text-001.
    PARAMETERS:
      gp_file TYPE localfile,
      gp_head TYPE checkbox DEFAULT 'X'.
    SELECTION-SCREEN SKIP.
    PARAMETERS:
      gp_kokrs  LIKE coep-kokrs,
      gp_gjahr LIKE coep-gjahr,
      gp_versn LIKE coep-versn,
      gp_test AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b1.
    * Local Class Definition
    CLASS lcl_event_handler DEFINITION.
      PUBLIC SECTION.
        METHODS:
        handle_toolbar_0100 FOR EVENT toolbar OF cl_gui_alv_grid
          IMPORTING
            e_object
            e_interactive,
        handle_user_command_0100 FOR EVENT user_command OF cl_gui_alv_grid
          IMPORTING
            e_ucomm,
        handle_toolbar_0200 FOR EVENT toolbar OF cl_gui_alv_grid
          IMPORTING
            e_object
            e_interactive,
        handle_user_command_0200 FOR EVENT user_command OF cl_gui_alv_grid
          IMPORTING
            e_ucomm.
      PRIVATE SECTION.
    ENDCLASS.                    "lcl_event_handler DEFINITION
    * Local Class Implementation
    CLASS lcl_event_handler IMPLEMENTATION.
      METHOD handle_toolbar_0100.
        PERFORM handle_toolbar_0100
          USING
            e_object.
    *        e_interactive.
      ENDMETHOD.                    "handle_toolbar_0100
      METHOD handle_user_command_0100.
        PERFORM handle_user_command_0100
          USING
            e_ucomm.
      ENDMETHOD.                    "handle_user_command_0100
      METHOD handle_toolbar_0200.
        PERFORM handle_toolbar_0200
          USING
            e_object.
    *        e_interactive.
      ENDMETHOD.                    "handle_toolbar_0100
      METHOD handle_user_command_0200.
        PERFORM handle_user_command_0200
          USING
            e_ucomm.
      ENDMETHOD.                    "handle_user_command_0100
    ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
    * Initialization
    INITIALIZATION.
      DATA:
        lf_sapworkdir TYPE string.
      CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
        CHANGING
          sapworkdir            = lf_sapworkdir
        EXCEPTIONS
          get_sapworkdir_failed = 1
          cntl_error            = 2
          error_no_gui          = 3
          not_supported_by_gui  = 4
          OTHERS                = 5.
      IF sy-subrc <> 0 OR lf_sapworkdir = ''.
        CALL METHOD cl_gui_frontend_services=>directory_get_current
          CHANGING
            current_directory            = lf_sapworkdir
          EXCEPTIONS
            directory_get_current_failed = 1
            cntl_error                   = 2
            error_no_gui                 = 3
            not_supported_by_gui         = 4
            OTHERS                       = 5.
        CALL METHOD cl_gui_cfw=>flush.
      ENDIF."sy-subrc <> 0 OR sapworkdir = ''
      gp_file = lf_sapworkdir.
    * At Selection-Screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR gp_file.
      DATA:
        lt_filetable TYPE filetable,
        ls_filetable LIKE LINE OF lt_filetable,
        lt_rc TYPE i.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
    *  EXPORTING
    *    WINDOW_TITLE            =
    *    DEFAULT_EXTENSION       =
    *    DEFAULT_FILENAME        =
    *    FILE_FILTER             =
    *    INITIAL_DIRECTORY       =
    *    MULTISELECTION          =
    *    WITH_ENCODING           =
        CHANGING
          file_table              = lt_filetable
          rc                      = lt_rc
    *    USER_ACTION             =
    *    FILE_ENCODING           =
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      READ TABLE lt_filetable INDEX 1
        INTO
          ls_filetable.
      gp_file = ls_filetable-filename.
      CALL METHOD cl_gui_cfw=>flush.
    * Start-Of-Selection
    START-OF-SELECTION.
      DATA:
        lf_filename LIKE filename-fileintern.
      PERFORM create_log.
      gs_return-type = 'I'.
      IF gp_test = 'X'.
        gs_return-message = text-010.
      ELSE.
        gs_return-message = text-020.
      ENDIF.
      PERFORM add_log_message_free_text
        USING
           gs_return-type
           gs_return-message.
      lf_filename = gp_file.
      CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
        EXPORTING
          i_filename                 = lf_filename
          i_servertyp                = 'PRS '
          i_fileformat               = 'TXT'
    *     I_FIELD_SEPERATOR          =
          i_line_header              = gp_head
    *   IMPORTING
    *     E_BIN_FILELENGTH           =
       TABLES
         i_tab_receiver             = gt_text_input
       EXCEPTIONS
         file_not_found             = 1
         close_failed               = 2
         authorization_failed       = 3
         open_failed                = 4
         conversion_failed          = 5
         OTHERS                     = 6.
      IF sy-subrc <> 0.
        gs_balsmsg-msgty = sy-msgty.
        gs_balsmsg-msgid = sy-msgid.
        gs_balsmsg-msgno = sy-msgno.
        gs_balsmsg-msgv1 = sy-msgv1.
        gs_balsmsg-msgv2 = sy-msgv2.
        gs_balsmsg-msgv3 = sy-msgv3.
        gs_balsmsg-msgv4 = sy-msgv4.
        PERFORM add_log_message
          USING
            gs_balsmsg.
      ENDIF.
      CALL SCREEN '0100'.
    *&      Module  status_0100  OUTPUT
    *       text
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'STATUS_0100'.
    *------ Create the docking container ----------------------------------*
      IF go_docking_container IS INITIAL.
        CREATE OBJECT go_docking_container
          EXPORTING
            parent                      = cl_gui_container=>screen0
    *        repid                       = gf_repid
    *        dynnr                       = gf_dynnr
    *     SIDE                        = go_docking_container->DOCK_AT_bottom
    *       EXTENSION                   = 200
    *      STYLE                       =
    *      LIFETIME                    = lifetime_default
    *      CAPTION                     =
    *      METRIC                      = 0
            ratio                       = 95
    *      NO_AUTODEF_PROGID_DYNNR     =
    *      NAME                        =
          EXCEPTIONS
            cntl_error                  = 1
            cntl_system_error           = 2
            create_error                = 3
            lifetime_error              = 4
            lifetime_dynpro_dynpro_link = 5
            OTHERS                      = 6.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
    *------ Expand  docking container to full screen    -------------------*
        CALL METHOD go_docking_container->set_extension
          EXPORTING
            extension  = 99999  "full-screen size !!!
          EXCEPTIONS
            cntl_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.
      ENDIF."go_docking_container IS INITIAL
    *------ Link docking container to screen ------------------------------*
      CALL METHOD go_docking_container->link
        EXPORTING
          repid                       = sy-repid
          dynnr                       = '0100'
    *      CONTAINER                   =
        EXCEPTIONS
          cntl_error                  = 1
          cntl_system_error           = 2
          lifetime_dynpro_dynpro_link = 3
          OTHERS                      = 4
      IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *------ Build the Field Catalog ---------------------------------------*
      PERFORM build_fieldcatalog_input
        CHANGING gt_fieldcat.
    *------ Create the ALV Grid -------------------------------------------*
      IF go_alv_grid_0100 IS INITIAL.
        CREATE OBJECT go_alv_grid_0100
          EXPORTING
    *      I_SHELLSTYLE      = 0
    *      I_LIFETIME        =
            i_parent          = go_docking_container
    *      I_APPL_EVENTS     = space
    *      I_PARENTDBG       =
    *      I_APPLOGPARENT    =
    *      I_GRAPHICSPARENT  =
    *      I_NAME            =
          EXCEPTIONS
            error_cntl_create = 1
            error_cntl_init   = 2
            error_cntl_link   = 3
            error_dp_create   = 4
            OTHERS            = 5.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF."go_alv_grid_0100 is initial
    *------ Create instance for event handler -----------------------------*
      DATA: go_event_handler_0100 TYPE REF TO lcl_event_handler.
      CREATE OBJECT go_event_handler_0100.
    *------ Register event handler ----------------------------------------*
      SET HANDLER go_event_handler_0100->handle_toolbar_0100
        FOR go_alv_grid_0100.
      SET HANDLER go_event_handler_0100->handle_user_command_0100
        FOR go_alv_grid_0100.
    *------ Call ALV Grid -------------------------------------------------*
      CALL METHOD go_alv_grid_0100->set_table_for_first_display
    *     EXPORTING
    *      I_BUFFER_ACTIVE               =
    *      I_BYPASSING_BUFFER            =
    *      I_CONSISTENCY_CHECK           =
    *      I_STRUCTURE_NAME              =
    *      IS_VARIANT                    =
    *      I_SAVE                        =
    *      I_DEFAULT                     = 'X'
    *      IS_LAYOUT                     =
    *      IS_PRINT                      =
    *      IT_SPECIAL_GROUPS             =
    *      IT_TOOLBAR_EXCLUDING          =
    *      IT_HYPERLINK                  =
    *      IT_ALV_GRAPHICS               =
    *      IT_EXCEPT_QINFO               =
        CHANGING
          it_outtab                     = gt_text_input
          it_fieldcatalog               = gt_fieldcat
    *      IT_SORT                       =
    *      IT_FILTER                     =
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *---- Call method 'set_toolbar_interactive' to raise event TOOLBAR.
      CALL METHOD go_alv_grid_0100->set_toolbar_interactive.
    ENDMODULE.                 " status_0100  OUTPUT
    *&      Module  status_0200  OUTPUT
    *       text
    MODULE status_0200 OUTPUT.
      SET PF-STATUS 'STATUS_0100'.
    *------ Create the docking container ----------------------------------*
      IF go_docking_container IS INITIAL.
        CREATE OBJECT go_docking_container
          EXPORTING
            parent                      = cl_gui_container=>screen0
    *        repid                       = gf_repid
    *        dynnr                       = gf_dynnr
    *     SIDE                        = go_docking_container->DOCK_AT_bottom
    *       EXTENSION                   = 200
    *      STYLE                       =
    *      LIFETIME                    = lifetime_default
    *      CAPTION                     =
    *      METRIC                      = 0
            ratio                       = 95
    *      NO_AUTODEF_PROGID_DYNNR     =
    *      NAME                        =
          EXCEPTIONS
            cntl_error                  = 1
            cntl_system_error           = 2
            create_error                = 3
            lifetime_error              = 4
            lifetime_dynpro_dynpro_link = 5
            OTHERS                      = 6.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
    *------ Expand  docking container to full screen    -------------------*
        CALL METHOD go_docking_container->set_extension
          EXPORTING
            extension  = 99999
          EXCEPTIONS
            cntl_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.
      ENDIF."go_docking_container IS INITIAL
    *------ Link docking container to screen ------------------------------*
      CALL METHOD go_docking_container->link
        EXPORTING
          repid                       = sy-repid
          dynnr                       = '0200'
    *      CONTAINER                   =
        EXCEPTIONS
          cntl_error                  = 1
          cntl_system_error           = 2
          lifetime_dynpro_dynpro_link = 3
          OTHERS                      = 4
      IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *------ Build the Field Catalog---------------------------------------*
      PERFORM build_fieldcatalog_bapi_input
        CHANGING
          gt_fieldcat.
    *------ Create the ALV Grid -------------------------------------------*
      IF go_alv_grid_0200 IS INITIAL.
        CREATE OBJECT go_alv_grid_0200
          EXPORTING
    *      I_SHELLSTYLE      = 0
    *      I_LIFETIME        =
           i_parent          = go_docking_container
    *      I_APPL_EVENTS     = space
    *      I_PARENTDBG       =
    *      I_APPLOGPARENT    =
    *      I_GRAPHICSPARENT  =
    *      I_NAME            =
          EXCEPTIONS
            error_cntl_create = 1
            error_cntl_init   = 2
            error_cntl_link   = 3
            error_dp_create   = 4
            OTHERS            = 5.
        IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF."go_alv_grid_0200 is initial
    *------ Create instance for event handler -----------------------------*
      DATA: go_event_handler_0200 TYPE REF TO lcl_event_handler.
      CREATE OBJECT go_event_handler_0200.
    *------ Register event handler ----------------------------------------*
      SET HANDLER go_event_handler_0200->handle_toolbar_0200
        FOR go_alv_grid_0200.
      SET HANDLER go_event_handler_0200->handle_user_command_0200
        FOR go_alv_grid_0200.
    *------ Call ALV Grid -------------------------------------------------*
      CALL METHOD go_alv_grid_0200->set_table_for_first_display
    *     EXPORTING
    *      I_BUFFER_ACTIVE               =
    *      I_BYPASSING_BUFFER            =
    *      I_CONSISTENCY_CHECK           =
    *      I_STRUCTURE_NAME              =
    *      IS_VARIANT                    =
    *      I_SAVE                        =
    *      I_DEFAULT                     = 'X'
    *      IS_LAYOUT                     =
    *      IS_PRINT                      =
    *      IT_SPECIAL_GROUPS             =
    *      IT_TOOLBAR_EXCLUDING          =
    *      IT_HYPERLINK                  =
    *      IT_ALV_GRAPHICS               =
    *      IT_EXCEPT_QINFO               =
        CHANGING
          it_outtab                     = gt_bapi_input
          it_fieldcatalog               = gt_fieldcat
    *      IT_SORT                       =
    *      IT_FILTER                     =
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *---- Call method 'set_toolbar_interactive' to raise event TOOLBAR.
      CALL METHOD go_alv_grid_0200->set_toolbar_interactive.
      CALL METHOD go_alv_grid_0200->refresh_table_display
    *  EXPORTING
    *    IS_STABLE      =
    *    I_SOFT_REFRESH =
        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.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = go_alv_grid_0200.
    ENDMODULE.                 " status_0200  OUTPUT
    *&      Module  user_command_0100  INPUT
    *       text
    MODULE user_command_0100 INPUT.
      CASE gf_okcode.
        WHEN 'BACK' OR 'END' OR 'CANC'.
          PERFORM exit_program.
        WHEN OTHERS.
      ENDCASE.
      CLEAR gf_okcode.
    ENDMODULE.                 " user_command_0100  INPUT
    *&      Module  user_command_0200  INPUT
    *       text
    MODULE user_command_0200 INPUT.
      CASE gf_okcode.
        WHEN 'BACK' OR 'END' OR 'CANC'.
          PERFORM exit_program.
        WHEN OTHERS.
      ENDCASE.
      CLEAR gf_okcode.
    ENDMODULE.                 " user_command_0200  INPUT
    *&      Form  build_fieldcatalog
    *       text
    *      <--P_GT_FIELDCAT  text
    FORM build_fieldcatalog_input
      CHANGING
        pt_fieldcat TYPE lvc_t_fcat.
      DATA ls_fcat TYPE lvc_s_fcat.
      CLEAR pt_fieldcat.
      ls_fcat-fieldname = 'FIRMA' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'Firma' .
      ls_fcat-seltext = 'Firma' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'KOSTENSTELLE' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'CO-Objekt' .
      ls_fcat-seltext = 'CO-Objekt' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'DATENART1' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Datenart1' .
      ls_fcat-seltext = 'Datenart1' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANJAHR' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Planjahr' .
      ls_fcat-seltext = 'Planjahr' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANPERIODE' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '5' .
      ls_fcat-coltext = 'Planperiode' .
      ls_fcat-seltext = 'Planperiode' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'DATENART2' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Datenart2' .
      ls_fcat-seltext = 'Datenart2' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANUNGSPOSITION' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Planungsposition' .
      ls_fcat-seltext = 'Planungsposition' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'KOSTENART' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '10' .
      ls_fcat-coltext = 'Kostenart' .
      ls_fcat-seltext = 'Kostenart' .
      APPEND ls_fcat TO pt_fieldcat .
      ls_fcat-fieldname = 'PLANBETRAG' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'Planbetrag' .
      ls_fcat-seltext = 'Planbetrag' .
      APPEND ls_fcat TO pt_fieldcat .
    ENDFORM.                    "build_fieldcatalog
    *&      Form  handle_toolbar_0100
    *       text
    *      -->P_E_OBJECT  text
    *      -->P_E_INTERACTIVE  text
    FORM handle_toolbar_0100
      USING
        po_object TYPE REF TO cl_alv_event_toolbar_set.
      DATA: ls_toolbar TYPE stb_button.
      CLEAR ls_toolbar.
      ls_toolbar-butn_type  = 0.
      ls_toolbar-function   = 'KONV'.
      ls_toolbar-quickinfo  = 'Konvertieren'.
      ls_toolbar-text       = 'Konvertieren'.
      ls_toolbar-disabled   = ' '.
      APPEND ls_toolbar TO po_object->mt_toolbar.
    ENDFORM.                    " handle_toolbar_0100
    *&      Form  handle_user_command_0100
    *       text
    *      -->P_E_UCOMM  text
    FORM handle_user_command_0100
      USING
        pf_ucomm TYPE syucomm.
      CASE pf_ucomm.
        WHEN 'KONV'.
          PERFORM convert_data.
      ENDCASE.
    ENDFORM.                    " handle_user_command_0100
    *&      Form  exit_program
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM exit_program.
      CALL METHOD go_alv_grid_0100->free.
      IF NOT go_alv_grid_0200 IS INITIAL.
        CALL METHOD go_alv_grid_0200->free.
      ENDIF.
      CALL METHOD go_docking_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      IF sy-subrc NE 0.
    * add your handling, for example
        CALL FUNCTION 'POPUP_TO_INFORM'
          EXPORTING
            titel = sy-repid
            txt2  = sy-subrc
            txt1  = 'Error in Flush'(500).
      ENDIF.
      LEAVE PROGRAM.
    ENDFORM.                    " exit_program
    *&      Form  handle_toolbar_0200
    *       text
    *      -->P_E_OBJECT  text
    *      -->P_E_INTERACTIVE  text
    FORM handle_toolbar_0200
      USING
        po_object TYPE REF TO cl_alv_event_toolbar_set.
      DATA: ls_toolbar TYPE stb_button.
      CLEAR ls_toolbar.
      ls_toolbar-butn_type  = 0.
      ls_toolbar-function   = 'POST'.
      ls_toolbar-quickinfo  = 'Buchen'.
      ls_toolbar-text       = 'Buchen'.
      ls_toolbar-disabled   = ' '.
      APPEND ls_toolbar TO po_object->mt_toolbar.
    ENDFORM.                    " handle_toolbar_0200
    *&      Form  handle_user_command_0200
    *       text
    *      -->P_E_UCOMM  text
    FORM handle_user_command_0200
      USING
        pf_ucomm TYPE syucomm.
      CASE pf_ucomm.
        WHEN 'POST'.
          PERFORM post.
      ENDCASE.
    ENDFORM.                    " handle_user_command_0200
    *&      Form  convert_data
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM convert_data.
      DATA: lf_perio(3) TYPE n.
      LOOP AT gt_text_input INTO gs_text_input.
        TRANSLATE gs_text_input-planbetrag USING '. '.
        TRANSLATE gs_text_input-planbetrag USING ',.'.
        CONDENSE gs_text_input-planbetrag.
        gs_bapi_input-version   = gp_versn.
        gs_bapi_input-fisc_year = gp_gjahr.
        gs_bapi_input-coobject  = gs_text_input-kostenstelle.
        gs_bapi_input-cost_elem = gs_text_input-kostenart.
        lf_perio = gs_text_input-planperiode.
        CASE lf_perio.
          WHEN '001'.
            gs_bapi_input-wkgbtr01 = gs_text_input-planbetrag.
          WHEN '002'.
            gs_bapi_input-wkgbtr02 = gs_text_input-planbetrag.
          WHEN '003'.
            gs_bapi_input-wkgbtr03 = gs_text_input-planbetrag.
          WHEN '004'.
            gs_bapi_input-wkgbtr04 = gs_text_input-planbetrag.
          WHEN '005'.
            gs_bapi_input-wkgbtr05 = gs_text_input-planbetrag.
          WHEN '006'.
            gs_bapi_input-wkgbtr06 = gs_text_input-planbetrag.
          WHEN '007'.
            gs_bapi_input-wkgbtr07 = gs_text_input-planbetrag.
          WHEN '008'.
            gs_bapi_input-wkgbtr08 = gs_text_input-planbetrag.
          WHEN '009'.
            gs_bapi_input-wkgbtr09 = gs_text_input-planbetrag.
          WHEN '010'.
            gs_bapi_input-wkgbtr10 = gs_text_input-planbetrag.
          WHEN '011'.
            gs_bapi_input-wkgbtr11 = gs_text_input-planbetrag.
          WHEN '012'.
            gs_bapi_input-wkgbtr12 = gs_text_input-planbetrag.
        ENDCASE.
        COLLECT gs_bapi_input INTO gt_bapi_input.
        CLEAR gs_bapi_input.
      ENDLOOP. "at gt_text_input
      CALL SCREEN 0200.
    ENDFORM.                    " convert_data
    *&      Form  build_fieldcatalog_bapi_input
    *       text
    *      <--P_GT_FIELDCAT  text
    FORM build_fieldcatalog_bapi_input
      CHANGING
        pt_fieldcat TYPE lvc_t_fcat.
      DATA ls_fcat TYPE lvc_s_fcat.
      CLEAR pt_fieldcat.
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'VERSION' .
      ls_fcat-ref_table = 'BAPIPLNHDR' .
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'FISC_YEAR' .
      ls_fcat-ref_table = 'BAPIPLNHDR' .
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'COOBJECT' .
      ls_fcat-inttype = 'C' .
      ls_fcat-outputlen = '20' .
      ls_fcat-coltext = 'CO-Objekt' .
      ls_fcat-seltext = 'CO-Objekt' .
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'COST_ELEM' .
      ls_fcat-ref_table = 'BAPIPCPVAL' .
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR01'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR02'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR03'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR04'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR05'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR06'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR07'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR08'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR09'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR10'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR11'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
      CLEAR ls_fcat.
      ls_fcat-fieldname = 'WKGBTR12'.
      ls_fcat-ref_table = 'COEP' .
      ls_fcat-ref_field = 'WKGBTR'.
      APPEND ls_fcat TO pt_fieldcat .
    ENDFORM.                    " build_fieldcatalog_bapi_input
    *&      Form  post
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM post.
      DATA:
        lf_index(6) TYPE n,
        lf_kostl    LIKE csks-kostl,
        lf_aufnr    LIKE aufk-aufnr,
        lf_kstar    LIKE cska-kstar.
      DATA:
        lt_csks TYPE TABLE OF csks.
      break c5085345.
    * Header
      gs_headerinfo-co_area       = gp_kokrs.
      gs_headerinfo-fisc_year     = gp_gjahr.
      gs_headerinfo-period_from   = '001'.
      gs_headerinfo-period_to     = '012'.
      gs_headerinfo-version       = gp_versn.
      gs_headerinfo-plan_currtype = 'C'.
      LOOP AT gt_bapi_input INTO gs_bapi_input.
    *   Fill index structure
        CLEAR gs_indexstructure.
        lf_index = sy-tabix.
        gs_indexstructure-object_index = lf_index.
        gs_indexstructure-value_index  = lf_index.
        gs_indexstructure-attrib_index = '000000'.
        INSERT gs_indexstructure INTO TABLE gt_indexstructure.
    *   Fill coobject
        CLEAR gs_coobject.
        gs_coobject-object_index = lf_index.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = gs_bapi_input-coobject
          IMPORTING
            output = lf_kostl.
        SELECT * FROM csks INTO TABLE lt_csks
          WHERE
            kokrs = gp_kokrs AND
            kostl = lf_kostl.
        IF sy-subrc = 0.
          gs_coobject-costcenter = lf_kostl.
        ELSE.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              input  = gs_bapi_input-coobject
            IMPORTING
              output = lf_aufnr.
          CALL FUNCTION 'K_ORDER_READ'
            EXPORTING
              aufnr     = lf_aufnr
            EXCEPTIONS
              not_found = 1.
          IF NOT sy-subrc = 0.
            gs_return-type = 'E'.
            gs_return-message+0(10)  = 'CO-Objekt '.
            gs_return-message+10(10) = gs_bapi_input-coobject.
            gs_return-message+20(20)  = ' existiert nicht.'.
            CONDENSE gs_return-message.
            PERFORM add_log_message_free_text
              USING
                gs_return-type
                gs_return-message.
            EXIT.
          ENDIF. "IF NOT sy-subrc = 0
          gs_coobject-orderid = lf_aufnr.
        ENDIF. "sy-subrc = 0
        INSERT gs_coobject INTO TABLE gt_coobject.
    *   Period value
        gs_pervalue-value_index = lf_index.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = gs_bapi_input-cost_elem
          IMPORTING
            output = lf_kstar.
        gs_pervalue-cost_elem = lf_kstar.
        gs_pervalue-fix_val_per01 = gs_bapi_input-wkgbtr01.
        gs_pervalue-fix_val_per02 = gs_bapi_input-wkgbtr02.
        gs_pervalue-fix_val_per03 = gs_bapi_input-wkgbtr03.
        gs_pervalue-fix_val_per04 = gs_bapi_input-wkgbtr04.
        gs_pervalue-fix_val_per05 = gs_bapi_input-wkgbtr05.
        gs_pervalue-fix_val_per06 = gs_bapi_input-wkgbtr06.
        gs_pervalue-fix_val_per07 = gs_bapi_input-wkgbtr07.
        gs_pervalue-fix_val_per08 = gs_bapi_input-wkgbtr08.
        gs_pervalue-fix_val_per09 = gs_bapi_input-wkgbtr09.
        gs_pervalue-fix_val_per10 = gs_bapi_input-wkgbtr10.
        gs_pervalue-fix_val_per11 = gs_bapi_input-wkgbtr11.
        gs_pervalue-fix_val_per12 = gs_bapi_input-wkgbtr12.
        INSERT gs_pervalue INTO TABLE gt_pervalue.
      ENDLOOP. "at gt_bapi_input
    * Buchungsbaustein
      CALL FUNCTION 'BAPI_PRIM_COST_CHECK_AND_POST'
        EXPORTING
          header_info         = gs_headerinfo
          testrun             = gp_test
    *   DELTA               = ' '
        TABLES
          idx_structure       = gt_indexstructure
          object              = gt_coobject
          per_value           = gt_pervalue
          tot_value           = gt_totvalue
          contrl              = gt_control
          return              = gt_return.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    *   EXPORTING
    *     WAIT          =
    *   IMPORTING
    *     RETURN        =
      LOOP AT gt_return INTO gs_return.
        gs_balsmsg-msgty = gs_return-type.
        gs_balsmsg-msgid = gs_return-id.
        gs_balsmsg-msgno = gs_return-number.
        gs_balsmsg-msgv1 = gs_return-message_v1.
        gs_balsmsg-msgv2 = gs_return-message_v2.
        gs_balsmsg-msgv3 = gs_return-message_v3.
        gs_balsmsg-msgv4 = gs_return-message_v4.
        PERFORM add_log_message
          USING
            gs_balsmsg.
      ENDLOOP. "AT gt_return
      PERFORM show_log.
    ENDFORM.                    " post
    *&      Form  create_log
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM create_log .
      DATA: ls_balslog TYPE bal_s_log.
    * Einige Verwaltungsdaten
      ls_balslog-extnumber = 'ZPLAN010'.
      ls_balslog-aluser    = sy-uname.
      ls_balslog-alprog    = sy-repid.
    * Create
      CALL FUNCTION 'BAL_LOG_CREATE'
        EXPORTING
          i_s_log                 = ls_balslog
    *    IMPORTING
    *      e_log_handle            = gf_balloghndl
        EXCEPTIONS
          log_header_inconsistent = 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.                    " create_log
    *&      Form  add_log_message
    *       text
    *      -->P_GS_BALSMSG  text
    FORM add_log_message
      USING
        ps_balsmsg TYPE bal_s_msg.
      break c5085345.
      CALL FUNCTION 'BAL_LOG_MSG_ADD'
        EXPORTING
    *       I_LOG_HANDLE              =
          i_s_msg                   = ps_balsmsg
    *     IMPORTING
    *       E_S_MSG_HANDLE            =
    *       E_MSG_WAS_LOGGED          =
    *       E_MSG_WAS_DISPLAYED       =
       EXCEPTIONS
         log_not_found             = 1
         msg_inconsistent          = 2
         log_is_full               = 3
         OTHERS                    = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " add_log_messa
    *&      Form  add_log_message_free_text
    *       text
    *      -->P_GS_RETURN_TYPE  text
    *      -->P_GS_RETURN_MESSAGE  text
    FORM add_log_message_free_text
      USING
        ps_type
        ps_message.
      CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'
        EXPORTING
    *       I_LOG_HANDLE              =
          i_msgty                   = ps_type
    *       I_PROBCLASS               = '4'
          i_text                    = ps_message
    *       I_S_CONTEXT               =
    *       I_S_PARAMS                =
    *     IMPORTING
    *       E_S_MSG_HANDLE            =
    *       E_MSG_WAS_LOGGED          =
    *       E_MSG_WAS_DISPLAYED       =
       EXCEPTIONS
         log_not_found             = 1
         msg_inconsistent          = 2
         log_is_full               = 3
         OTHERS                    = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " add_log_message_free_text
    *&      Form  show_log
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM show_log .
      DATA:
        l_s_display_profile TYPE bal_s_prof.
    * get display profile
      CALL FUNCTION 'BAL_DSP_PROFILE_NO_TREE_GET'
        IMPORTING
          e_s_display_profile = l_s_display_profile
        EXCEPTIONS
          OTHERS              = 1.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    * use grid for display if wanted
      l_s_display_profile-use_grid = 'X'.
    * set report to allow saving of variants
      l_s_display_profile-disvariant-report = sy-repid.
    * when you use also other ALV lists in your report,
    * please specify a handle to distinguish between the display
    * variants of these different lists, e.g:
      l_s_display_profile-disvariant-handle = 'LOG'.
    * call display function module
    * We do not specify any filter (like I_S_LOG_FILTER, ...,
    * I_T_MSG_HANDLE) since we want to display all logs available
      CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
        EXPORTING
          i_s_display_profile = l_s_display_profile
        EXCEPTIONS
          OTHERS              = 1.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

  • Field catalog in abap objects

    hi friends,
                   i am using factory method to display my alv. now some of the fields in my internal table i have declared them as char fields, i want certain type of headings for these fields,so where can i give heading to these fields.
                   where exactly do we create a field catalog for factory method.
    pls advice me on this

    hi
    good
    go throgh this code
    *& Report  Z_ALV_OOPS
    REPORT  Z_ALV_OOPS.
    *Event class Definition                             "Event handler class
    class event_handle definition.
      public section.
        methods: handle_user
          for event user_command of cl_gui_alv_grid
          importing e_ucomm.
    endclass.
    *Event class Implementation
    class event_handle implementation.
      method handle_user.
        write:/ ''.
      endmethod.
    endclass.
    Data: t_alv       type ref to cl_gui_alv_grid,           "ALV control
          t_cont      type ref to cl_gui_custom_container,   "Cust Container
          t_alv2      type ref to cl_gui_alv_grid,           "ALV control
          t_cont2     type ref to cl_gui_custom_container,   "Cust Container
          t_fieldcat  type lvc_t_fcat with header line,      "Field Cat
          t_fieldcat2 type lvc_t_fcat with header line,      "Field Cat
          t_layout    type lvc_s_layo,                       "Layout
          t_event     type ref to event_handle,              "Event handler
          t_sort      type LVC_T_SORT with header line,      "Sort
          t_toolbar   type ui_functions with header line.    "Toolbar xclude
    Types: begin of g_vbak,                                 "Header Table
             vbeln like vbak-vbeln,
             auart like vbak-auart,
             vkorg like vbak-vkorg,
             vtweg like vbak-vtweg,
             spart like vbak-spart,
             kunnr like vbak-kunnr,
             bstnk like vbak-bstnk,
             seltab,
           end of g_vbak.
    Types: begin of g_vbap,                                  "Item Table
             vbeln like vbap-vbeln,
             posnr(6) type c,
            posrn like vbap-posnr,
             matnr like vbap-matnr,
             netwr like vbap-netwr,
             waerk like vbap-waerk,
           end of g_vbap.
    Data: t_vbak type g_vbak occurs 0,
          t_vbap type g_vbap occurs 0.
    Start-Of-Selection.
    *Fetch data from DB Table
    select vbeln auart vkorg vtweg spart kunnr bstnk
        from vbak into table t_vbak up to 20 rows.
    End-Of-Selection.
    *Call ALV screen
    call screen 100.
    *&      Module  STATUS_0100  OUTPUT
          text
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'ALV'.
      SET TITLEBAR 'VBAK'.
    if t_cont is initial.
      create object t_cont
        exporting
          container_name = 'ALV'.
      create object t_alv
        exporting
          i_parent = t_cont.
    *Create event handlers
      create object t_event.
      set handler t_event->handle_user for t_alv.
      perform build_fieldcatlog.
      perform build_layout.
      perform xclude_toolbar.
      CALL METHOD t_alv->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
         I_BUFFER_ACTIVE               =
         I_BYPASSING_BUFFER            =
         I_CONSISTENCY_CHECK           =
         I_STRUCTURE_NAME              =
         IS_VARIANT                    =
         I_SAVE                        =
         I_DEFAULT                     = 'X'
          IS_LAYOUT                     = t_layout
         IS_PRINT                      =
         IT_SPECIAL_GROUPS             =
          IT_TOOLBAR_EXCLUDING          = t_toolbar[]
         IT_HYPERLINK                  =
         IT_ALV_GRAPHICS               =
         IT_EXCEPT_QINFO               =
        CHANGING
          IT_OUTTAB                     = t_vbak[]
          IT_FIELDCATALOG               = t_fieldcat[]
         IT_SORT                       =
         IT_FILTER                     =
       EXCEPTIONS
         INVALID_PARAMETER_COMBINATION = 1
         PROGRAM_ERROR                 = 2
         TOO_MANY_LINES                = 3
         others                        = 4
      IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    endif.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
          text
    MODULE USER_COMMAND_0100 INPUT.
    Data: lt_rows type lvc_t_row,
          wa_rows type line of lvc_t_row,
          wa_vbak type g_vbak,
          l_lines type i.
    refresh: t_vbap.
    case sy-ucomm.
      when 'DET'.                                  "Item details
      Get selected rows from ALV
        call method t_alv->get_selected_rows
            importing
                et_index_rows = lt_rows.
      Fetch corresponding Item details from VBAP
        loop at lt_rows into wa_rows.
          read table t_vbak into wa_vbak index wa_rows-index transporting
                                                                    vbeln.
          select vbeln posnr matnr netwr waerk from vbap
              appending corresponding fields of table t_vbap
              where vbeln = wa_vbak-vbeln.
        endloop.
      Prepare fieldcatlog
      Display Item details in ALV
        call screen 200 starting at 8 5.
      when 'SHOW'.                                  "Display order
        call method t_alv->get_selected_rows
            importing
                et_index_rows = lt_rows.
        Describe table lt_rows lines l_lines.
        if l_lines > 1.
          message e999(z_error).
        else.
          read table lt_rows into wa_rows index 1.
          read table t_vbak into wa_vbak index wa_rows-index transporting
                                                                    vbeln.
          set parameter id 'AUN' field wa_vbak-vbeln.
          call transaction 'VA03' and skip first screen.
        endif.
    endcase.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Form  build_fieldcatlog
          text
    form build_fieldcatlog .
      clear t_fieldcat.
      t_fieldcat-col_pos = '1'.
      t_fieldcat-fieldname = 'VBELN'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'VBELN'.
      append t_fieldcat.
      t_fieldcat-col_pos = '2'.
      t_fieldcat-fieldname = 'AUART'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'AUART'.
      append t_fieldcat.
      t_fieldcat-col_pos = '3'.
      t_fieldcat-fieldname = 'VKORG'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'VKORG'.
      append t_fieldcat.
      t_fieldcat-col_pos = '4'.
      t_fieldcat-fieldname = 'VTWEG'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'VTWEG'.
      append t_fieldcat.
      t_fieldcat-col_pos = '5'.
      t_fieldcat-fieldname = 'SPART'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'SPART'.
      append t_fieldcat.
      t_fieldcat-col_pos = '6'.
      t_fieldcat-fieldname = 'KUNNR'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'KUNNR'.
      append t_fieldcat.
      t_fieldcat-col_pos = '7'.
      t_fieldcat-fieldname = 'BSTNK'.
      t_fieldcat-ref_table = 'VBAK'.
      t_fieldcat-ref_field = 'BSTNK'.
      append t_fieldcat.
    endform.                    " build_fieldcatlog
    *&      Module  LEAVE  INPUT
          text
    module LEAVE input.
    case sy-ucomm.
      when 'BACK' or 'EXIT' or 'CANCEL'.
        leave program.
    endcase.
    endmodule.                 " LEAVE  INPUT
    *&      Form  build_layout
          text
    -->  p1        text
    <--  p2        text
    form build_layout .
    t_layout-zebra = 'X'.
    t_layout-sel_mode = 'A'.
    t_layout-grid_title = 'Header Details'.
    endform.                    " build_layout
    *&      Form  build_fcat_vbap
          text
    form build_fcat_vbap .
      clear t_fieldcat2.
      t_fieldcat2-scrtext_m = 'Sales Doc'.
      t_fieldcat2-col_pos = 1.
      t_fieldcat2-fieldname = 'VBELN'.
      t_fieldcat2-tabname = 'T_VBAP'.
      t_fieldcat2-no_zero = 'X'.
      t_fieldcat2-ref_table = 'VBAP'.
      t_fieldcat2-ref_field = 'VBELN'.
      append t_fieldcat2.
      clear t_fieldcat2.
      t_fieldcat2-col_pos = 2.
      t_fieldcat2-scrtext_m = 'Item'.
      t_fieldcat2-fieldname = 'POSNR'.
      t_fieldcat2-tabname = 'T_VBAP'.
      t_fieldcat2-intlen = '6'.
      t_fieldcat2-inttype = 'C'.
      t_fieldcat2-no_zero = 'X'.
    t_fieldcat2-ref_table = 'VBAP'.
    t_fieldcat2-ref_field = 'POSNR'.
      append t_fieldcat2.
      clear t_fieldcat2.
      t_fieldcat2-col_pos = 3.
      t_fieldcat2-fieldname = 'MATNR'.
      t_fieldcat2-ref_table = 'VBAP'.
      t_fieldcat2-ref_field = 'MATNR'.
      append t_fieldcat2.
      clear t_fieldcat2.
      t_fieldcat2-col_pos = 4.
      t_fieldcat2-fieldname = 'NETWR'.
      t_fieldcat2-ref_table = 'VBAP'.
      t_fieldcat2-ref_field = 'NETWR'.
      t_fieldcat2-do_sum = 'X'.
      append t_fieldcat2.
      clear t_fieldcat2.
      t_fieldcat2-col_pos = 5.
      t_fieldcat2-fieldname = 'WAERK'.
      t_fieldcat2-ref_table = 'VBAP'.
      t_fieldcat2-ref_field = 'WAERK'.
      append t_fieldcat2.
    endform.                    " build_fcat_vbap
    *&      Module  STATUS_0200  OUTPUT
          text
    module STATUS_0200 output.
      SET PF-STATUS 'ITEM1'.
      SET TITLEBAR 'VBAP'.
      perform build_fcat_vbap.
      perform sort_alv2.
    if t_cont2 is initial.
      create object t_cont2
        exporting
          container_name = 'ITEM'.
      create object t_alv2
        exporting
          i_parent = t_cont2.
      t_layout-grid_title = 'Item Details'.
      CALL METHOD t_alv2->set_table_for_first_display
        EXPORTING
         I_BUFFER_ACTIVE               =
         I_BYPASSING_BUFFER            =
         I_CONSISTENCY_CHECK           =
         I_STRUCTURE_NAME              =
         IS_VARIANT                    =
         I_SAVE                        =
         I_DEFAULT                     = 'X'
          IS_LAYOUT                     = t_layout
         IS_PRINT                      =
         IT_SPECIAL_GROUPS             =
          IT_TOOLBAR_EXCLUDING          = t_toolbar[]
         IT_HYPERLINK                  =
         IT_ALV_GRAPHICS               =
         IT_EXCEPT_QINFO               =
         IR_SALV_ADAPTER               =
        CHANGING
          it_outtab                     = t_vbap[]
          IT_FIELDCATALOG               = t_fieldcat2[]
          IT_SORT                       = t_sort[]
         IT_FILTER                     =
       EXCEPTIONS
         INVALID_PARAMETER_COMBINATION = 1
         PROGRAM_ERROR                 = 2
         TOO_MANY_LINES                = 3
         others                        = 4
      IF sy-subrc <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    else.
      CALL METHOD t_alv2->refresh_table_display
       EXPORTING
         IS_STABLE      =
         I_SOFT_REFRESH =
       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.
    endif.
    endmodule.                 " STATUS_0200  OUTPUT
    *&      Module  USER_COMMAND_0200  INPUT
          text
    module USER_COMMAND_0200 input.
    case sy-ucomm.
      when 'GOBACK'.
        leave to screen 0.
    endcase.
    endmodule.                 " USER_COMMAND_0200  INPUT
    *&      Form  sort_alv2
          text
    -->  p1        text
    <--  p2        text
    form sort_alv2 .
    clear t_sort.
    t_sort-spos = '1'.
    t_sort-fieldname = 'VBELN'.
    t_sort-up = 'X'.
    t_sort-subtot = 'X'.
    append t_sort.
    endform.                    " sort_alv2
    *&      Form  xclude_toolbar
          text
    -->  p1        text
    <--  p2        text
    form xclude_toolbar .
    t_toolbar = '&DETAIL'.
    append t_toolbar.
    t_toolbar = '&&SEP00'.
    append t_toolbar.
    t_toolbar = '&&SEP01'.
    append t_toolbar.
    t_toolbar = '&&SEP02'.
    append t_toolbar.
    t_toolbar = '&SORT_ASC'.
    append t_toolbar.
    t_toolbar = '&SORT_DSC'.
    append t_toolbar.
    t_toolbar = '&FIND'.
    append t_toolbar.
    t_toolbar = '&MB_FILTER'.
    append t_toolbar.
    t_toolbar = '&&SEP04'.
    append t_toolbar.
    t_toolbar = '&MB_SUM'.
    append t_toolbar.
    t_toolbar = '&MB_SUB_TOTAL'.
    append t_toolbar.
    t_toolbar = '&PRINT_BACK'.
    append t_toolbar.
    t_toolbar = '&MB_VIEW'.
    append t_toolbar.
    t_toolbar = '&MB_EXPORT'.
    append t_toolbar.
    t_toolbar = '&GRAPH'.
    append t_toolbar.
    t_toolbar = '&COLO'.
    append t_toolbar.
    t_toolbar = '&&SEP06'.
    append t_toolbar.
    t_toolbar = '&&SEP07'.
    append t_toolbar.
    t_toolbar = '&INFO'.
    append t_toolbar.
    t_toolbar = '&&SEP03'.
    append t_toolbar.
    endform.                    " xclude_toolbar
    reward point if helpful.
    thanks
    mrutyun^

  • Unable to trigger my event

    dear experts,
                            I need to add some extra features to title bar of my alv report.i got some documents and iam trying on that.Here in my program its displaying the newly created icon but when i click on that icon its not displaying or teriigering my event -
    class lcl_event_receiver definition deferred.
    TYPE-POOLS: ICON.
    data: con type ref to cl_gui_custom_container,
          gr_alvgrid type ref to cl_gui_alv_grid.
    DATA: ITAB_EXCLUDE TYPE UI_FUNCTIONS.
    DATA: WA_EXCLUDE TYPE UI_FUNC.
    data: it_toolbar  TYPE stb_button.
    data: begin of itab occurs 0.
            include structure mara.
    data: end of itab.
    data: event_receiver TYPE REF TO LCL_EVENT_RECEIVER.
    select * from mara into table itab.
    call screen 1000.
          CLASS lcl_event_receiver DEFINITION
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        class-methods: handle_toolbar for event toolbar of cl_gui_alv_grid importing e_object e_interactive,
        handle_menu_buttons for event menu_button of cl_gui_alv_grid importing e_object e_ucomm,
        handle_USER_COMMAND for event user_command   of cl_gui_alv_grid importing e_ucomm.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
          CLASS lcl_event_receiver IMPLEMENTATION
    CLASS lcl_event_receiver implementation.
      method handle_toolbar.
        move 'DETAIL-TAIL' TO IT_TOOLBAR-FUNCTION.
        MOVE ICON_DETAIL TO IT_TOOLBAR-ICON.
        MOVE 2 TO IT_TOOLBAR-BUTN_TYPE.
        APPEND IT_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
      ENDMETHOD.                    "handle_toolbar
      METHOD HANDLE_MENU_BUTTONS.
        IF E_UCOMM = 'DETAIL'.
          CALL METHOD e_object->add_function
            EXPORTING
              fcode = 'DISPLAY'
              text  = 'DISPLAY'.
        ENDIF.
      ENDMETHOD.                    "HANDLE_MENU_BUTTONS
      METHOD handle_user_command.
        CASE e_ucomm.
          WHEN 'DISPLAY'.
            MESSAGE 'Menu Clicked' TYPE 'I'.
        ENDCASE.
      ENDMETHOD.                           "handle_user_command
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    MODULE STATUS_1000 OUTPUT
    MODULE STATUS_1000 OUTPUT.
    SET PF-STATUS 'xxxxxxxx'.
    SET TITLEBAR 'xxx'.
      CREATE OBJECT CON
        EXPORTING
       PARENT                      =
          CONTAINER_NAME              = 'CO_CON'
       STYLE                       =
       LIFETIME                    = lifetime_default
       REPID                       =
       DYNNR                       =
       NO_AUTODEF_PROGID_DYNNR     =
    EXCEPTIONS
       CNTL_ERROR                  = 1
       CNTL_SYSTEM_ERROR           = 2
       CREATE_ERROR                = 3
       LIFETIME_ERROR              = 4
       LIFETIME_DYNPRO_DYNPRO_LINK = 5
       others                      = 6
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT GR_ALVGRID
        EXPORTING
        I_SHELLSTYLE      = 0
        I_LIFETIME        =
          I_PARENT           =  CON
        I_APPL_EVENTS     = space
        I_PARENTDBG       =
        I_APPLOGPARENT    =
        I_GRAPHICSPARENT  =
        I_NAME            =
        I_FCAT_COMPLETE   = SPACE
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        others            = 5
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      WA_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.
      APPEND WA_EXCLUDE TO ITAB_EXCLUDE.
      WA_EXCLUDE = CL_GUI_ALV_GRID=>MC_mb_SUM.
      APPEND WA_EXCLUDE TO ITAB_EXCLUDE.
      CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
       I_BUFFER_ACTIVE               =
       I_BYPASSING_BUFFER            =
       I_CONSISTENCY_CHECK           =
          I_STRUCTURE_NAME              = 'MARA'
       IS_VARIANT                    =
       I_SAVE                        =
       I_DEFAULT                     = 'X'
       IS_LAYOUT                     =
       IS_PRINT                      =
       IT_SPECIAL_GROUPS             =
          IT_TOOLBAR_EXCLUDING          = ITAB_EXCLUDE
       IT_HYPERLINK                  =
       IT_ALV_GRAPHICS               =
       IT_EXCEPT_QINFO               =
       IR_SALV_ADAPTER               =
        CHANGING
          IT_OUTTAB                     = ITAB[]
       IT_FIELDCATALOG               =
       IT_SORT                       =
       IT_FILTER                     =
    EXCEPTIONS
       INVALID_PARAMETER_COMBINATION = 1
       PROGRAM_ERROR                 = 2
       TOO_MANY_LINES                = 3
       others                        = 4
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT event_receiver.
      SET HANDLER event_receiver->handle_user_command
                  event_receiver->handle_menu_buttons
                  event_receiver->handle_toolbar FOR ALL INSTANCES.  "*Calling the interactive toolbar method of ALV
      CALL METHOD GR_ALVGRID->set_toolbar_interactive.
    ENDMODULE.                 " STATUS_1000  OUTPUT
    *&      Module  USER_COMMAND_1000  INPUT
          text
    MODULE USER_COMMAND_1000 INPUT.
    ENDMODULE.                 " USER_COMMAND_1000  INPUT

    hi marcin, thanks a lot for your help..i have coded but still unable to trigger user_commaned method.Could you check this in your machine-
    class lcl_event_receiver definition deferred.
    TYPE-POOLS: ICON.
    data: con type ref to cl_gui_custom_container,
          gr_alvgrid type ref to cl_gui_alv_grid.
    DATA: ITAB_EXCLUDE TYPE UI_FUNCTIONS.
    DATA: WA_EXCLUDE TYPE UI_FUNC.
    data: it_toolbar  TYPE stb_button.
    data: begin of itab occurs 0.
            include structure mara.
    data: end of itab.
    data: event_receiver TYPE REF TO LCL_EVENT_RECEIVER.
    select * from mara into table itab.
    call screen 1000.
          CLASS lcl_event_receiver DEFINITIONL
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        class-methods:
        handle_menu_buttons for event menu_button of cl_gui_alv_grid importing e_object e_ucomm,
        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_receiver DEFINITION
          CLASS lcl_event_receiver IMPLEMENTATION
    CLASS lcl_event_receiver implementation.
      method handle_toolbar.
        move 'DETAIL-TAIL' TO IT_TOOLBAR-FUNCTION.
        MOVE ICON_DETAIL TO IT_TOOLBAR-ICON.
        MOVE 2 TO IT_TOOLBAR-BUTN_TYPE.
        APPEND IT_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
      ENDMETHOD.                    "handle_toolbar
      METHOD HANDLE_MENU_BUTTONS.
        IF E_UCOMM = 'DETAIL-TAIL'.
          CALL METHOD e_object->add_function
            EXPORTING
              fcode = 'DISPLAY-TAIL'
              text  = 'DISPLAY'.
        ENDIF.
      ENDMETHOD.                    "HANDLE_MENU_BUTTONS
      METHOD handle_user_command.
        CASE E_UCOMM.
          WHEN 'DISPLAY-TAIL'.
            MESSAGE 'THESE IS TEST EVENT' TYPE 'I'.
            ENDCASE.
            ENDMETHOD.
            ENDCLASS.
    MODULE STATUS_1000 OUTPUT
    MODULE STATUS_1000 OUTPUT.
    SET PF-STATUS 'xxxxxxxx'.
    SET TITLEBAR 'xxx'.
    CREATE OBJECT CON
        EXPORTING
       PARENT                      =
          CONTAINER_NAME              = 'CO_CON'
       STYLE                       =
       LIFETIME                    = lifetime_default
       REPID                       =
       DYNNR                       =
       NO_AUTODEF_PROGID_DYNNR     =
    EXCEPTIONS
       CNTL_ERROR                  = 1
       CNTL_SYSTEM_ERROR           = 2
       CREATE_ERROR                = 3
       LIFETIME_ERROR              = 4
       LIFETIME_DYNPRO_DYNPRO_LINK = 5
       others                      = 6
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT GR_ALVGRID
        EXPORTING
        I_SHELLSTYLE      = 0
        I_LIFETIME        =
          I_PARENT           =  CON
        I_APPL_EVENTS     = space
        I_PARENTDBG       =
        I_APPLOGPARENT    =
        I_GRAPHICSPARENT  =
        I_NAME            =
        I_FCAT_COMPLETE   = SPACE
      EXCEPTIONS
        ERROR_CNTL_CREATE = 1
        ERROR_CNTL_INIT   = 2
        ERROR_CNTL_LINK   = 3
        ERROR_DP_CREATE   = 4
        others            = 5
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      WA_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.
      APPEND WA_EXCLUDE TO ITAB_EXCLUDE.
      WA_EXCLUDE = CL_GUI_ALV_GRID=>MC_mb_SUM.
      APPEND WA_EXCLUDE TO ITAB_EXCLUDE.
    CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
       I_BUFFER_ACTIVE               =
       I_BYPASSING_BUFFER            =
       I_CONSISTENCY_CHECK           =
          I_STRUCTURE_NAME              = 'MARA'
       IS_VARIANT                    =
       I_SAVE                        =
       I_DEFAULT                     = 'X'
       IS_LAYOUT                     =
       IS_PRINT                      =
       IT_SPECIAL_GROUPS             =
          IT_TOOLBAR_EXCLUDING          = ITAB_EXCLUDE
       IT_HYPERLINK                  =
       IT_ALV_GRAPHICS               =
       IT_EXCEPT_QINFO               =
       IR_SALV_ADAPTER               =
        CHANGING
          IT_OUTTAB                     = ITAB[]
       IT_FIELDCATALOG               =
       IT_SORT                       =
       IT_FILTER                     =
    EXCEPTIONS
       INVALID_PARAMETER_COMBINATION = 1
       PROGRAM_ERROR                 = 2
       TOO_MANY_LINES                = 3
       others                        = 4
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT event_receiver.
      SET HANDLER  event_receiver->handle_menu_buttons
                  event_receiver->handle_toolbar
                  event_receiver->handle_user_command
                  FOR ALL INSTANCES.
      CALL METHOD GR_ALVGRID->set_toolbar_interactive.
    ENDMODULE.                 " STATUS_1000  OUTPUT
    *&      Module  USER_COMMAND_1000  INPUT
          text
    MODULE USER_COMMAND_1000 INPUT.
    ENDMODULE.                 " USER_COMMAND_1000  INPUT

  • Passing a structure of selected fields

    hi folks
    hope all will be fine
    just see the code typed below it is a module pool program
    and thing is here instead of passing the table lfa1 into custom container , i need to pass a internal table that contains specific fields .
    what i need to do
    any pointers regarding this are welcome
    *& Module pool       ZCONTAINER
    PROGRAM  zcontainer.
    *&      Module  USER_COMMAND_0100  INPUT
          text
    MODULE user_command_0100 INPUT.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Module  STATUS_0100  OUTPUT
          text
    MODULE status_0100 OUTPUT.
    data: itab type table of lfa1.
      DATA: identity TYPE REF TO cl_gui_custom_container.
      DATA: grid TYPE REF TO cl_gui_alv_grid.
      select * from lfa1 into table itab.
      IF identity IS INITIAL.
        CREATE OBJECT identity
          EXPORTING
       parent                      =
            container_name              ='ALV'.
       style                       =
       lifetime                    = lifetime_default
       repid                       =
       dynnr                       =
       no_autodef_progid_dynnr     =
    EXCEPTIONS
       cntl_error                  = 1
       cntl_system_error           = 2
       create_error                = 3
       lifetime_error              = 4
       lifetime_dynpro_dynpro_link = 5
       others                      = 6
    *IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
        CREATE OBJECT grid
          EXPORTING
       i_shellstyle      = 0
       i_lifetime        =
            i_parent          =  identity.
       i_appl_events     = space
       i_parentdbg       =
       i_applogparent    =
       i_graphicsparent  =
       i_name            =
       i_fcat_complete   = space
    EXCEPTIONS
       error_cntl_create = 1
       error_cntl_init   = 2
       error_cntl_link   = 3
       error_dp_create   = 4
       others            = 5
    *IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
        CALL METHOD grid->set_table_for_first_display
          EXPORTING
       i_buffer_active               =
       i_bypassing_buffer            =
       i_consistency_check           =
            i_structure_name              = 'LFA1'
       is_variant                    =
       i_save                        =
       i_default                     = 'X'
       is_layout                     =
       is_print                      =
       it_special_groups             =
       it_toolbar_excluding          =
       it_hyperlink                  =
       it_alv_graphics               =
       it_except_qinfo               =
       ir_salv_adapter               =
          CHANGING
            it_outtab                     = itab
       it_fieldcatalog               =
       it_sort                       =
       it_filter                     =
    EXCEPTIONS
       invalid_parameter_combination = 1
       program_error                 = 2
       too_many_lines                = 3
       others                        = 4
        IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.
    SET PF-STATUS 'xxxxxxxx'.
    SET TITLEBAR 'xxx'.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    thnx in advance
    with regards
    S.Janagar

    Hi,
    Go thru the following code once it may be help full for u.
    REPORT z_1060_oops_alv_grid.
    TYPES : BEGIN OF tw_ekko,
    mark TYPE flag,
    ebeln TYPE ebeln,
    bukrs TYPE bukrs,
    bstyp TYPE ebstyp,
    bsart TYPE esart,
    aedat TYPE erdat,
    END OF tw_ekko,
    tt_ekko TYPE TABLE OF tw_ekko.
    TYPES : BEGIN OF tw_ekpo,
    ebeln TYPE ebeln,
    ebelp TYPE ebelp,
    statu TYPE astat,
    aedat TYPE paedt,
    END OF tw_ekpo,
    tt_ekpo TYPE TABLE OF tw_ekpo.
    DATA: wa_ekko TYPE tw_ekko,
    it_ekko TYPE tt_ekko.
    DATA: wa_ekpo TYPE tw_ekpo,
    it_ekpo TYPE tt_ekpo.
    DATA: cl_container1 TYPE REF TO cl_gui_custom_container,
    cl_container2 TYPE REF TO cl_gui_custom_container,
    cl_container3 TYPE REF TO cl_gui_custom_container,
    cl_alv1 TYPE REF TO cl_gui_alv_grid,
    cl_alv2 TYPE REF TO cl_gui_alv_grid,
    cl_alv3 TYPE REF TO cl_gui_alv_grid.
    DATA : v_ebeln TYPE ebeln.
    DATA: i_fldcat TYPE lvc_t_fcat,
    i_fldcat1 TYPE lvc_t_fcat,
    wa_fldcat LIKE LINE OF i_fldcat.
    CLASS lcl_event DEFINITION
    CLASS lcl_event DEFINITION.
    PUBLIC SECTION.
    METHODS: toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive,
    usercommand FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm.
    ENDCLASS. "lcl_event DEFINITION
    CLASS lcl_event IMPLEMENTATION
    CLASS lcl_event IMPLEMENTATION.
    METHOD toolbar.
    PERFORM toolbar CHANGING e_object e_interactive
    e_object->mt_toolbar.
    ENDMETHOD. "lcl_event IMPLEMENTATION
    METHOD usercommand.
    PERFORM user_command CHANGING e_ucomm.
    ENDMETHOD. "usercommand
    ENDCLASS. "lcl_event IMPLEMENTATION
    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE t001.
    SELECT-OPTIONS: so_ebeln FOR v_ebeln.
    SELECTION-SCREEN END OF BLOCK blk1.
    START-OF-SELECTION.
    CALL SCREEN 100.
    DATA: obj_event TYPE REF TO lcl_event.
    CREATE OBJECT obj_event.
    *& Module STATUS_0100 OUTPUT
    text
    MODULE status_0100 OUTPUT.
    SET PF-STATUS 'STATUS_100'.
    SET TITLEBAR 'TITLE_100'.
    SELECT ebeln
    bukrs
    bstyp
    bsart
    aedat
    INTO CORRESPONDING FIELDS OF TABLE it_ekko
    FROM ekko
    WHERE ebeln IN so_ebeln.
    IF cl_alv1 IS INITIAL.
    CREATE OBJECT cl_container1 EXPORTING container_name = 'CONT1'.
    CREATE OBJECT cl_alv1 EXPORTING i_parent = cl_container1.
    PERFORM fieldcatalog.
    CALL METHOD cl_alv1->set_table_for_first_display
    EXPORTING
    I_BUFFER_ACTIVE =
    I_BYPASSING_BUFFER =
    I_CONSISTENCY_CHECK =
    I_STRUCTURE_NAME =
    IS_VARIANT =
    i_save = 'X'
    I_DEFAULT = 'X'
    is_layout =
    IS_PRINT =
    IT_SPECIAL_GROUPS =
    IT_TOOLBAR_EXCLUDING =
    IT_HYPERLINK =
    IT_ALV_GRAPHICS =
    IT_EXCEPT_QINFO =
    IR_SALV_ADAPTER =
    CHANGING
    it_outtab = it_ekko
    it_fieldcatalog = i_fldcat
    it_sort =
    IT_FILTER =
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4
    IF sy-subrc 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT obj_event.
    SET HANDLER : obj_event->toolbar FOR cl_alv1.
    SET HANDLER : obj_event->usercommand FOR cl_alv1.
    CALL METHOD cl_alv1->set_toolbar_interactive.
    ELSE.
    CALL METHOD cl_alv1->refresh_table_display.
    ENDIF.
    ENDMODULE. " STATUS_0100 OUTPUT
    *& Form toolbar
    text
    <--P_E_OBJECT text
    <--P_E_INTERACTIVE text
    <--P_E_OBJECT_>MT_toolbar text
    FORM toolbar CHANGING p_e_object TYPE REF TO cl_alv_event_toolbar_set
    p_e_interactive
    mt_toolbar TYPE ttb_button.
    DATA wal_button TYPE stb_button.
    wal_button-text = 'ITEM DETAILS'.
    wal_button-quickinfo = 'PROCEED'.
    wal_button-function = 'ITM1'.
    wal_button-butn_type = 0.
    wal_button-disabled = space.
    INSERT wal_button INTO p_e_object->mt_toolbar INDEX 1.
    ENDFORM. " toolbar
    *& Form user_command
    text
    <--P_E_UCOMM text
    FORM user_command CHANGING p_e_ucomm.
    CASE p_e_ucomm.
    WHEN 'ITM1'.
    LEAVE TO SCREEN 200.
    ENDCASE.
    ENDFORM. " user_command
    *& Module STATUS_0200 OUTPUT
    text
    MODULE status_0200 OUTPUT.
    SET PF-STATUS 'STATUS_200'.
    SET TITLEBAR 'TITLE_200'.
    CLEAR wa_ekko.
    LOOP AT it_ekko INTO wa_ekko WHERE mark = 'X'.
    READ TABLE it_ekko INTO wa_ekko WITH KEY mark = 'X'.
    IF sy-subrc = 0.
    CLEAR wa_ekPo.
    SELECT SINGLE ebeln
    ebelp
    statu
    aedat
    FROM ekpo
    INTO wa_ekpo
    WHERE ebeln = wa_ekKo-ebeln.
    APPEND wa_ekPo TO it_ekPo.
    ENDIF.
    ENDLOOP.
    IF cl_alv2 IS INITIAL.
    CREATE OBJECT cl_container2 EXPORTING container_name = 'CONT2'.
    CREATE OBJECT cl_alv2 EXPORTING i_parent = cl_container2.
    PERFORM fieldcatalog1.
    CALL METHOD cl_alv2->set_table_for_first_display
    EXPORTING
    I_BUFFER_ACTIVE =
    I_BYPASSING_BUFFER =
    I_CONSISTENCY_CHECK =
    I_STRUCTURE_NAME =
    IS_VARIANT =
    i_save = 'X'
    I_DEFAULT = 'X'
    is_layout =
    IS_PRINT =
    IT_SPECIAL_GROUPS =
    IT_TOOLBAR_EXCLUDING =
    IT_HYPERLINK =
    IT_ALV_GRAPHICS =
    IT_EXCEPT_QINFO =
    IR_SALV_ADAPTER =
    CHANGING
    it_outtab = it_ekPo
    it_fieldcatalog = i_fldcat1
    it_sort =
    IT_FILTER =
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4
    IF sy-subrc 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ELSE.
    CALL METHOD cl_ALV2->refresh_table_display.
    ENDIF.
    ENDMODULE. " STATUS_0200 OUTPUT
    *& Module USER_COMMAND_0100 INPUT
    text
    MODULE user_command_0100 INPUT.
    IF sy-ucomm = 'BACK' OR sy-ucomm = 'EXIT' OR sy-ucomm = 'CANCEL'.
    LEAVE TO SCREEN 0.
    ENDIF.
    ENDMODULE. " USER_COMMAND_0100 INPUT
    *& Module USER_COMMAND_0200 INPUT
    text
    MODULE user_command_0200 INPUT.
    IF sy-ucomm = 'BACK'.
    LEAVE TO SCREEN 100.
    ENDIF.
    IF sy-ucomm = 'EXIT' OR sy-ucomm = 'CANCEL'.
    LEAVE TO SCREEN 0.
    ENDIF.
    ENDMODULE. " USER_COMMAND_0200 INPUT
    *& Form fieldcatalog
    text
    --> p1 text
    <-- p2 text
    FORM fieldcatalog .
    wa_fldcat-col_pos = '1'.
    wa_fldcat-fieldname = 'MARK'.
    wa_fldcat-checkbox = 'X'.
    wa_fldcat-edit = 'X'.
    APPEND wa_fldcat TO i_fldcat.
    CLEAR wa_fldcat.
    wa_fldcat-col_pos = '2'.
    wa_fldcat-fieldname = 'EBELN'.
    wa_fldcat-tabname = 'IT_EKKO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'PO NUMBER'.
    APPEND wa_fldcat TO i_fldcat.
    wa_fldcat-col_pos = '3'.
    wa_fldcat-fieldname = 'BUKRS'.
    wa_fldcat-tabname = 'I_EKKO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'Type'.
    APPEND wa_fldcat TO i_fldcat.
    wa_fldcat-col_pos = '4'.
    wa_fldcat-fieldname = 'BSTYP'.
    wa_fldcat-tabname = 'I_EKKO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'Type'.
    APPEND wa_fldcat TO i_fldcat.
    wa_fldcat-col_pos = '5'.
    wa_fldcat-fieldname = 'BSART'.
    wa_fldcat-tabname = 'I_EKKO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'Type'.
    APPEND wa_fldcat TO i_fldcat.
    wa_fldcat-col_pos = '6'.
    wa_fldcat-fieldname = 'AEDAT'.
    wa_fldcat-tabname = 'I_EKKO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'Type'.
    APPEND wa_fldcat TO i_fldcat.
    ENDFORM. " fieldcatalog
    *& Form fieldcatalog1
    text
    --> p1 text
    <-- p2 text
    FORM fieldcatalog1 .
    wa_fldcat-col_pos = '1'.
    wa_fldcat-fieldname = 'EBELN'.
    wa_fldcat-tabname = 'IT_EKPO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'PO NUMBER'.
    APPEND wa_fldcat TO i_fldcat1.
    wa_fldcat-col_pos = '2'.
    wa_fldcat-fieldname = 'EBELP'.
    wa_fldcat-tabname = 'IT_EKPO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'PO NUMBER'.
    APPEND wa_fldcat TO i_fldcat1.
    wa_fldcat-col_pos = '3'.
    wa_fldcat-fieldname = 'STATU'.
    wa_fldcat-tabname = 'IT_EKPO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'PO NUMBER'.
    APPEND wa_fldcat TO i_fldcat1.
    wa_fldcat-col_pos = '4'.
    wa_fldcat-fieldname = 'AEDAT'.
    wa_fldcat-tabname = 'IT_EKPO'.
    wa_fldcat-outputlen = 10.
    wa_fldcat-scrtext_m = 'PO NUMBER'.
    APPEND wa_fldcat TO i_fldcat1.
    ENDFORM. " fieldcatalog1
    Regards,
    Vijetha.

  • Here's how to do ALV (OO) with dynamic fcat, int table and editable data

    Hi everybody
    Here's a more useful approach to ALV grid with OO using dynamic table, data NOT from DDIC, dynamic FCAT and how to get changed lines from the grid when ENTER key is pressed.
    It's really not too dificult but I think this is more useful than the ever present SFLIGHT methods from the demos.
    This also defines a subclass of cl_gui_alv_grid so you can access the protected attributes / methods of that class.
    You don't need to add the class via SE24 -- done fron this ABAP.
    When you run it click Edit for the first time.
    After editing data press ENTER and the break point should bring you into the relevant method.
    Code developed on NW2004S trial version but also works on rel 6.40 on a "Real" system.
    The code should work without any changes on any system >=6.40.
    All you need to do is to create a blank screen 100 via SE51  with a custom container on it called CCONTAINER1.
    The rest of the code can just be uploaded into your system using the SE38 upload facility.
    When running the program click on the EDIT button to enable the edit functionality of the grid.
    Change your data and when you press ENTER you should get the break-point where you can see the original table and changed rows.
    This program is actually quite general as it covers Dynamic tables, building a dynamic fcat where your table fields are NOT in the DDIC, intercepting the ENTER key via using an event, and accessing the protected attributes of the cl_gui_alv_grid by defining a subclass of this class in the abap.
    I've seen various questions relating to all these functions but none in my view ever answers the questions in a simple manner. I hope this simple program will answer all these and show how using OO ALV is actually quite easy and people shouldn't be scared of using OO.
    Have fun and award points if useful.
    Cheers
    Jimbo.
    <b>PROGRAM zdynfieldcat.
    Simple test of dynamic ITAB with user defined (not ddic) fields
    Build dynamic fcat
    use ALV grid to display and edit.
    *When edit mode set to 1 toolbar gives possibility of adding and
    *deleting rows.
    *Define subclass of cl_gui_alv_grid so we can use protected attributes
    *and methods.
    Add event handler to intercept user entering data and pressing the
    *ENTER key.
    When enter key is pressed get actual value of NEW table (all rows)
    rather than just the changed data.
    *use new RTTI functionality to retrieve internal table structure
    *details.
    Create a blank screen 100  with a custom container called CCONTAINER1.
    James Hawthorne
    include <icon>.
    define  any old internal structure  NOT in DDIC
    types: begin of s_elements,
           anyfield1(20) type c,
           anyfield2(20) type c,
           anyfield3(20) type c,
           anyfield4(20) type c,
           anyfield5(11) type n,
           end of s_elements.
    types:  lt_rows  type lvc_t_roid.
    Note new RTTI functionality allows field detail retrieval
    at runtime for dynamic tables.
    data:   wa_element type s_elements ,
            wa_data type s_elements,
            c_index type sy-index,
            c_dec2 type s_elements-anyfield5,
            wa_it_fldcat type lvc_s_fcat,
            it_fldcat type lvc_t_fcat,
            lr_rtti_struc TYPE REF TO cl_abap_structdescr,    "RTTI
            lt_comp TYPE cl_abap_structdescr=>component_table,"RTTI
            ls_comp LIKE LINE OF lt_comp,                     "RTTI
            zog  like line of lr_rtti_struc->components,      "RTTI
            struct_grid_lset type lvc_s_layo,
            l_valid  type c,
            new_table type ref to data.
    field-symbols: <dyn_table> type standard table,
                   <actual_tab> type standard table,
                   <fs1> type ANY,
                   <FS2> TYPE TABLE.
    data: grid_container1 type ref to cl_gui_custom_container.
    class lcl_grid_event_receiver definition deferred.
    data: g_event_receiver type ref to lcl_grid_event_receiver.
    data: ls_modcell type LVC_S_MODI,
          stab type ref to data,
          sdog type  s_elements.      .
    class lcl_grid_event_receiver definition.
      public section.
        methods:
        handle_data_changed
             for event data_changed of cl_gui_alv_grid
                 importing er_data_changed,
           toolbar for event toolbar of cl_gui_alv_grid
                     importing e_object
                               e_interactive,
          user_command for event user_command of cl_gui_alv_grid
                     importing e_ucomm.
    endclass.
    *implementation of Grid event-handler class
    class lcl_grid_event_receiver implementation.
    method handle_data_changed.
    code whatever required after data entry.
    various possibilites here as you can get back Cell(s) changed
    columns or the entire updated table.
    Data validation is also possible here.
    perform check_data using er_data_changed.
    endmethod.
    Method for handling all creation/modification calls to the toolbar
      method toolbar.
        data : ls_toolbar type stb_button.
    Define Custom Button in the toolbar
        clear ls_toolbar.
        move 0 to ls_toolbar-butn_type.
        move 'EDIT' to ls_toolbar-function.
        move space to ls_toolbar-disabled.
        move 'Edit' to ls_toolbar-text.
        move icon_change_text to ls_toolbar-icon.
        move 'Click2Edit' to ls_toolbar-quickinfo.
        append ls_toolbar to e_object->mt_toolbar.
        clear ls_toolbar.
        move 0 to ls_toolbar-butn_type.
        move 'UPDA' to ls_toolbar-function.
        move space to ls_toolbar-disabled.
        move 'Update' to ls_toolbar-text.
        move icon_system_save to ls_toolbar-icon.
        move 'Click2Update' to ls_toolbar-quickinfo.
        append ls_toolbar to e_object->mt_toolbar.
        clear ls_toolbar.
        move 0 to ls_toolbar-butn_type.
        move 'EXIT' to ls_toolbar-function.
        move space to ls_toolbar-disabled.
        move 'Exit' to ls_toolbar-text.
        move icon_system_end to ls_toolbar-icon.
        move 'Click2Exit' to ls_toolbar-quickinfo.
        append ls_toolbar to e_object->mt_toolbar.
      endmethod.
      method user_command.
        case e_ucomm .
          when 'EDIT'.          "From Tool bar
            perform set_input.
             perform init_grid.
          when 'UPDA'.          "From Tool bar
            perform refresh_disp.
            perform update_table.
          when 'EXIT'.          "From Tool bar
            leave program.
        endcase.
      endmethod.
    endclass.
    class zcltest definition inheriting from  cl_gui_alv_grid.
    define this as a subclass so we can access the protected attributes
    of the superclass cl_gui_alv_grid
    public section.
    methods: constructor, disp_tab.
    endclass.
    need this now to instantiate object
    as we are using subclass rather than the main cl_gui_alv_grid.
    class zcltest implementation.
    METHOD constructor.
    CALL METHOD super->constructor
            exporting i_appl_events = 'X'
               i_parent = grid_container1.
    endmethod.
    method disp_tab.
    FIELD-SYMBOLS: <outtab> TYPE STANDARD TABLE.
    break-point 1.
    mt_outtab is the data table held as a protected attribute
    in class cl_gui_alv_grid.
    ASSIGN me->mt_outtab->* TO <outtab>.  "Original data
    do whatever you want with <outtab>
    contains data BEFORE changes each time.
    Note that NEW (Changed) table has been obtained already by
    call to form check_data USING P_ER_DATA_CHANGED
             TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
    Entered data is in table defined by <fs2>
    In this method you can compare original and changed data.
    Easier than messing around with individual cells.
    do what you want with data in <fs2>  validate / update / merge etc
    endmethod.
    endclass.
    data :
        ok_code like sy-ucomm,
        save_ok like sy-ucomm,
        i4 type int4,
    Container Object [grid_container]
    now created via method constructor
    in the subclass zcltest.
    Control Object [grid]
    grid1 type ref to zcltest,
    Event-Handler Object [grid_handler]
    grid_handler type ref to lcl_grid_event_receiver.
    start-of-selection.
    call screen 100.
    module status_0100 output.
    now display it as grid
    if grid_container1 is initial.
        create object grid_container1
            exporting
              container_name = 'CCONTAINER1'.
        create object grid1.
         break-point 1.
        create object grid_handler.
        set handler:
           grid_handler->user_command for grid1,
           grid_handler->toolbar for grid1,
           grid_handler->handle_data_changed for grid1.
    perform create_dynamic_fcat.
    perform create_dynamic_itab.
    perform populate_dynamic_itab.
    perform init_grid.
    perform register_enter_event.
    set off ready for input initially
    i4 = 0.
      call method grid1->set_ready_for_input
             exporting
               i_ready_for_input = i4.
    endif.
    endmodule.
    module user_command_0100 input.
    *PAI not needed in OO ALV anymore as User Commands are handled as events
    *in method user_command.
    *we can also get control if the Data entered and the ENTER is pressed by
    *raising an event.
    Control then returns to method handle_data_changed.
    endmodule.
    form create_dynamic_fcat.
    get structure of our user table for building field catalog
    Use the RTTI functionality
    lr_rtti_struc ?= cl_abap_structdescr=>describe_by_data( wa_data ).
    Build field catalog just use basic data here
    colour specific columns as well
    loop at lr_rtti_struc->components into zog.
    c_index = c_index + 1.
    clear wa_it_fldcat.
      wa_it_fldcat-fieldname = zog-name .
      wa_it_fldcat-datatype =  zog-type_kind.
      wa_it_fldcat-inttype =   zog-type_kind.
      wa_it_fldcat-intlen =    zog-length.
      wa_it_fldcat-decimals =  zog-decimals.
      wa_it_fldcat-lowercase = 'X'.
      if c_index eq 2.
      wa_it_fldcat-emphasize = 'C411'.
         endif.
        if c_index eq 3.
      wa_it_fldcat-emphasize = 'C511'.
       endif.
      append wa_it_fldcat to it_fldcat .
    endloop.
    endform.
    form create_dynamic_itab.
    Create dynamic internal table and assign to field sysmbol.
    Use dynamic field catalog just built.
    call method cl_alv_table_create=>create_dynamic_table
                 exporting
                    it_fieldcatalog = it_fldcat
                 importing
                    ep_table        = new_table.
    assign new_table->* to <dyn_table>.
    endform.
    form populate_dynamic_itab.
    load up a line of the dynamic table
    c_dec2 = c_dec2 + 11.
    wa_element-anyfield1 = 'Tabbies'.
    wa_element-anyfield2 = 'ger.shepards'.
    wa_element-anyfield3  = 'White mice'.
    wa_element-anyfield4 =  'Any old text'.
    wa_element-anyfield5 =  c_dec2.
    append  wa_element to <dyn_table>.
    endform.
    form check_data USING P_ER_DATA_CHANGED
               TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
    Get altered data back
      ASSIGN   p_er_data_changed->mp_mod_rows TO <FS1>.
    stab =       p_er_data_changed->mp_mod_rows.
    ASSIGN STAB->* TO <FS2>.
    LOOP AT <FS2> INTO sdog.
    ALV grid display with altered data is now in <fs2>.
    do any extra processing you want here
    endloop.
    now display new table
    call method grid1->disp_tab.
    endform.
    form exit_program.
      call method grid_container1->free.
      call method cl_gui_cfw=>flush.
      leave program.
    endform.
    form refresh_disp.
      call method grid1->refresh_table_display.
    endform.
    form update_table.
    The dynamic table here is the changed table read from the grid
    after user has changed it
    Data can be saved to DB or whatever.
    loop at <dyn_table> into wa_element.
    do what you want with the data here
    endloop.
    switch off edit mode again for next function
    i4 = 0.
      call method grid1->set_ready_for_input
          exporting
              i_ready_for_input = i4.
    endform.
    form set_input.
    i4 = 1.
      call method grid1->set_ready_for_input
         exporting
           i_ready_for_input = i4.
    endform.
    form switch_input.
    if i4 = 1.
    i4 = 0.
    else.
    i4 = 1.
    endif.
      call method grid1->set_ready_for_input
         exporting
           i_ready_for_input = i4.
    endform.
    form init_grid.
    Enabling the grid to edit mode,
         struct_grid_lset-edit = 'X'. "To enable editing in ALV
         struct_grid_lset-grid_title  = 'Jimbos Test'.
         call method grid1->set_table_for_first_display
           exporting
             is_layout           = struct_grid_lset
           changing
             it_outtab             =  <dyn_table>
             it_fieldcatalog       =  it_fldcat.
    endform.
    form register_enter_event.
    call method grid1->register_edit_event
                   exporting
                      i_event_id = cl_gui_alv_grid=>mc_evt_enter.
    Instantiate the event or it won't work.
    create object g_event_receiver.
    set handler g_event_receiver->handle_data_changed for grid1.
    endform.</b>

    Hi there
    IE7 doesn't give me the add new page option and I get 404 error when trying to access the "How to contribute" section.
    I'll load up Firefox later (this browser usually works when IE7 doesn't always work properly).
    I'll copy the stuff to the wiki when I've got the browser sorted out.
    Cheers
    jimbp

  • RG1 summary of Finished goods-report.

    Hi Folks,
    RG1 summary of Finished goods-report.
    The closing balance for a particular material number during the month Jan 2007 is showing 1.00 but the opening balance for the same material number during the month February 2007 is showing 0.00 but not 1.00.
    I mean to say the closing balance in January 2007 is not carrying forward into the month Feb 2007.May I know how to go ahead with this problem.
    What is the concept of UPDATE RULES of the table.?
    The previous developer has developed the following report.
    REPORT zxxx MESSAGE-ID z_apd.
    *& Includes *
    INCLUDE <icon>.
    *& Tables *
    TABLES : j_1irg1,
    j_2irg1bal,
    z2irg1bal,
    ser03,
    objk.
    *& Selection Screen *
    SELECTION-SCREEN : BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
    PARAMETERS : p_exgrp TYPE j_1irg1-exgrp OBLIGATORY,
    p_stdate LIKE sy-datum OBLIGATORY,
    p_endate LIKE sy-datum OBLIGATORY.
    SELECT-OPTIONS s_chapid FOR j_1irg1-chapid .
    SELECTION-SCREEN : END OF BLOCK blk1.
    *& Data Declaration *
    Internal Tables
    DATA : it_display TYPE TABLE OF zj1irg1,
    it_final TYPE TABLE OF zj1irg1,
    it_alv TYPE TABLE OF zj1irg1,
    Work Areas
    wa_display TYPE zj1irg1,
    wa_alv TYPE zj1irg1,
    it_display1 TYPE TABLE OF zj1irg1,
    wa_display1 TYPE zj1irg1,
    wa_alv1 TYPE zj1irg1.
    DATA: BEGIN OF it_itab OCCURS 0.
    INCLUDE STRUCTURE zj1irg1.
    DATA: END OF it_itab.
    DATA : BEGIN OF itab1 OCCURS 0,
    matnr LIKE j_1irg1-matnr,
    END OF itab1.
    DATA : BEGIN OF itab2 OCCURS 0,
    cpudt LIKE j_1irg1-cpudt,
    END OF itab2.
    DATA : BEGIN OF itab3 OCCURS 0.
    INCLUDE STRUCTURE j_1irg1.
    DATA: END OF itab3.
    DATA : itab4 LIKE j_1irg1 OCCURS 0 WITH HEADER LINE,
    itab5 LIKE j_1irg1 OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF itab6 OCCURS 0.
    INCLUDE STRUCTURE j_1irg1.
    DATA : sernr LIKE objk-sernr.
    DATA: END OF itab6.
    DATA : BEGIN OF itab61 OCCURS 0.
    INCLUDE STRUCTURE j_1irg1.
    DATA: sernr LIKE objk-sernr.
    DATA: END OF itab61.
    DATA : itab7 LIKE j_2irg1bal OCCURS 0 WITH HEADER LINE,
    it_bal LIKE j_2irg1bal OCCURS 0 WITH HEADER LINE,
    it_bal1 LIKE j_2irg1bal OCCURS 0 WITH HEADER LINE.
    DATA: qty_menge LIKE j_1irg1-menge,
    iss_menge LIKE j_1irg1-menge,
    tot_menge LIKE j_1irg1-menge,
    op_menge LIKE j_1irg1-menge,
    matnr LIKE j_1irg1-matnr,
    exgrp LIKE j_1irg1-exgrp ,
    cpudt LIKE j_1irg1-cpudt.
    *for checcking lines of itab
    DATA: n1 TYPE i.
    Others
    DATA : v_bwart TYPE mseg-bwart,
    v_index TYPE i,
    v_index1 TYPE i,
    count(4) TYPE n VALUE '0',
    neg TYPE char1 VALUE '-',
    menge TYPE char16,
    count_1 TYPE i,
    count_2 TYPE i,
    count_3 TYPE i,
    count12(4) TYPE n VALUE '0',
    count13(4) TYPE n VALUE '0'.
    *Ranges
    RANGES: v_bwart1 FOR mseg-bwart.
    For ALV Display
    DATA : gs_variant TYPE disvariant,
    gs_layout TYPE lvc_s_layo,
    c_stk TYPE scrfname VALUE 'ZRG1',
    custom_container TYPE REF TO cl_gui_custom_container.
    CLASS lcl_event_receiver DEFINITION DEFERRED.
    DATA : grid1 TYPE REF TO cl_gui_alv_grid,
    event_receiver TYPE REF TO lcl_event_receiver,
    ok_code TYPE sy-ucomm,
    it_fieldcatalog TYPE lvc_t_fcat,
    wafieldcatlog TYPE LINE OF lvc_t_fcat,
    lt_rows TYPE lvc_t_row,
    wa_rows TYPE LINE OF lvc_t_row.
    *& Start of Selection *
    START-OF-SELECTION.
    IMPORT s_chapid FROM MEMORY ID 'SCHAPID'.
    PERFORM get_data.
    IF it_display[] IS INITIAL.
    No Details Available
    MESSAGE i017(z_apd) WITH text-005.
    STOP.
    ELSE.
    Display the Details on the Screen
    sort it_display by matnr.
    *sort it_display by cpudt RISINDR RISINDI matnr.
    LOOP AT it_display INTO wa_display.
    ON CHANGE OF wa_display-matnr.
    *insert
    *Check record exits
    SELECT SINGLE * FROM z2irg1bal
    WHERE
    exgrp = exgrp AND
    matnr = matnr AND
    form = 'P' AND
    cb_finish = tot_menge AND
    datum = cpudt.
    *If record does not exists
    *Update balance Table.
    IF count12 GE 1.
    IF sy-subrc NE 0.
    z2irg1bal-mandt = sy-mandt.
    z2irg1bal-exgrp = exgrp.
    z2irg1bal-matnr = matnr.
    z2irg1bal-form = 'P'.
    z2irg1bal-cb_finish = tot_menge.
    z2irg1bal-datum = cpudt.
    INSERT z2irg1bal ."values wa_display.
    COMMIT WORK.
    ENDIF.
    Start of Insertion
    IF sy-subrc EQ 0.
    z2irg1bal-mandt = sy-mandt.
    z2irg1bal-exgrp = exgrp.
    z2irg1bal-matnr = matnr.
    z2irg1bal-form = 'P'.
    z2irg1bal-cb_finish = tot_menge.
    z2irg1bal-datum = cpudt.
    UPDATE z2irg1bal SET cb_finish = z2irg1bal-cb_finish
    WHERE exgrp = z2irg1bal-exgrp AND
    datum = z2irg1bal-datum AND
    matnr = z2irg1bal-matnr AND
    form = 'P'.
    ENDIF.
    End of Insertion.
    ENDIF.
    CLEAR: qty_menge,
    iss_menge,
    tot_menge,
    count,
    matnr,
    cpudt,
    exgrp.
    ENDON.
    loop at itab6.
    AT NEW matnr.
    v_index = 1.
    count = count + 1 .
    ENDAT.
    IF v_index = 1.
    CLEAR v_index.
    *INsert for adding start
    IF wa_display-risind = 'R'.
    *wa_display-OP_FINISH = wa_display-OP_FINISH +
    wa_display-CB_FINISH +
    wa_display-MENGE.
    wa_display-op_finish = wa_display-menge.
    qty_menge = wa_display-op_finish.
    IF wa_display-status = space.
    tot_menge = tot_menge + qty_menge + wa_display-cb_finish .
    ELSE.
    tot_menge = tot_menge - qty_menge + wa_display-cb_finish.
    ENDIF.
    *tot_menge = op_menge.
    op_menge = tot_menge.
    ELSE.
    *Qty Issued
    wa_display-op_bond = wa_display-op_finish - wa_display-menge.
    IF wa_display-op_bond LT 0.
    iss_menge = wa_display-op_bond.
    iss_menge = ABS( iss_menge ).
    *Start of modification
    tot_MENGE = tot_MENGE - iss_MENGE ."
    IF count LE 1.
    tot_menge = wa_display-cb_finish - iss_menge ."
    ELSE.
    tot_menge = tot_menge - iss_menge ."
    ENDIF.
    *End of modification
    op_menge = tot_menge.
    ENDIF.
    ENDIF.
    *wa_display-MENGE_FINI = wa_display-OP_FINISH - wa_display-OP_BOND.
    *tot_MENGE = tot_MENGE + qty_MENGE - iss_MENGE .
    wa_display-menge_fini = tot_menge.
    **matnr for insert
    matnr = wa_display-matnr.
    *excise group
    exgrp = wa_display-exgrp.
    *Date
    cpudt = wa_display-cpudt.
    *Opening Balance
    *Insert start
    *if count le 1.
    if wa_display-RISIND = 'R'.
    wa_display-CB_FINISH = wa_display-CB_FINISH + qty_MENGE.
    else.
    wa_display-CB_FINISH = wa_display-CB_FINISH - iss_MENGE.
    endif.
    *endif.
    *Insert End
    IF count GT 1.
    IF wa_display-risind = 'R'.
    wa_display-cb_finish = tot_menge - qty_menge.
    ELSE.
    wa_display-cb_finish = tot_menge + iss_menge.
    ENDIF.
    ENDIF.
    *check it_display-SERIALNO = wa_display-SERIALNO.
    MODIFY it_display FROM wa_display.
    *INsert for adding end
    *move-corresponding wa_display to it_itab.
    *append it_itab.
    *check it_itab-SERIALNO = wa_display-SERIALNO.
    *if sy-subrc = 0.
    *endif.
    *Insert to update closng to balance to Rg1bal table
    *start
    count12 = count12 + 1.
    *for last record
    AT LAST.
    *Check record exits
    SELECT SINGLE * FROM z2irg1bal
    WHERE
    exgrp = exgrp AND
    matnr = matnr AND
    form = 'P' AND
    cb_finish = tot_menge AND
    datum = cpudt.
    *If record does not exists
    *Update balance Table.
    IF count12 GE 1.
    IF sy-subrc NE 0.
    z2irg1bal-mandt = sy-mandt.
    z2irg1bal-exgrp = exgrp.
    z2irg1bal-matnr = matnr.
    z2irg1bal-form = 'P'.
    z2irg1bal-cb_finish = tot_menge.
    z2irg1bal-datum = cpudt.
    INSERT z2irg1bal ."values wa_display.
    COMMIT WORK.
    Start of Insertion
    IF sy-subrc EQ 0.
    z2irg1bal-mandt = sy-mandt.
    z2irg1bal-exgrp = exgrp.
    z2irg1bal-matnr = matnr.
    z2irg1bal-form = 'P'.
    z2irg1bal-cb_finish = tot_menge.
    z2irg1bal-datum = cpudt.
    UPDATE z2irg1bal SET cb_finish = z2irg1bal-cb_finish
    WHERE exgrp = z2irg1bal-exgrp AND
    datum = z2irg1bal-datum AND
    matnr = z2irg1bal-matnr AND
    form = 'P'.
    ENDIF.
    End of Insertion
    ENDIF.
    ENDIF.
    ENDAT.
    *Insert to update closng to balance to Rg1bal table
    *end
    MOVE-CORRESPONDING wa_display TO wa_alv.
    APPEND wa_alv TO it_alv.
    append itab6 to it_alv.
    ENDIF.
    ENDLOOP.
    loop at it_alv into wa_alv.
    wa_alv-exgrp = wa_alv-exgrp.
    wa_alv-SYEAR = wa_alv-syear.
    wa_alv-SERIALNO = wa_alv-SERIALNO.
    endloop.
    EXPORT it_alv TO MEMORY ID 'ABCD'.
    call screen 100.
    ENDIF.
    *& End of Selection *
    END-OF-SELECTION.
    *& Class Definition *
    CLASS lcl_event_receiver DEFINITION.
    PUBLIC SECTION.
    METHODS:
    handle_toolbar
    FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object e_interactive,
    handle_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING e_ucomm,
    handle_double_click
    FOR EVENT double_click OF cl_gui_alv_grid
    IMPORTING e_row e_column.
    PRIVATE SECTION.
    ENDCLASS. "lcl_event_receiver DEFINITION
    *& Class Implementation *
    CLASS lcl_event_receiver IMPLEMENTATION.
    METHOD handle_toolbar.
    Local Variables
    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 an icon to to show printing
    CLEAR ls_toolbar.
    MOVE 'PRINT' TO ls_toolbar-function.
    MOVE icon_print TO ls_toolbar-icon.
    MOVE 'Print Receipts' TO ls_toolbar-quickinfo.
    MOVE ' Print' TO ls_toolbar-text.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.
    ENDMETHOD. " Handle_toolbar
    METHOD handle_user_command.
    CASE e_ucomm.
    WHEN 'PRINT'.
    REFRESH : lt_rows , it_final.
    CALL METHOD grid1->get_selected_rows
    IMPORTING
    et_index_rows = lt_rows.
    CALL METHOD cl_gui_cfw=>flush.
    LOOP AT lt_rows INTO wa_rows.
    READ TABLE it_alv INDEX wa_rows-index INTO wa_alv.
    LOOP AT it_display INTO wa_display
    WHERE mblnr = wa_alv-mblnr.
    APPEND wa_display TO it_final.
    ENDLOOP.
    ENDLOOP.
    perform display_form.
    ENDCASE.
    ENDMETHOD. "handle_user_command
    METHOD handle_double_click.
    IF e_column = 'MBLNR'.
    READ TABLE it_alv INDEX e_row-index INTO wa_alv.
    IF sy-subrc = 0.
    REFRESH it_final.
    LOOP AT it_display INTO wa_display
    WHERE mblnr = wa_alv-mblnr.
    APPEND wa_display TO it_final.
    ENDLOOP.
    PERFORM call_migo.
    ENDIF.
    ENDIF.
    ENDMETHOD. "handle_double_click
    ENDCLASS. "lcl_event_receiver IMPLEMENTATION
    *& Form get_data
    text
    --> p1 text
    <-- p2 text
    FORM get_data .
    *Select only for matnr and chapid from table
    SELECT matnr FROM j_1irg1
    APPENDING CORRESPONDING FIELDS OF TABLE itab1
    WHERE exgrp = p_exgrp
    AND
    WERKS = P_WERKS
    and
    MATNR in s_MATNR
    and
    CPUDT in s_CPUDT.
    cpudt BETWEEN p_stdate AND p_endate
    AND
    *Chapid
    chapid IN s_chapid
    ORDER BY matnr.
    SORT itab1 BY matnr. " for performance
    DELETE ADJACENT DUPLICATES FROM itab1 COMPARING matnr .
    SELECT cpudt FROM j_1irg1
    APPENDING CORRESPONDING FIELDS OF TABLE itab2
    WHERE exgrp = p_exgrp
    AND
    cpudt BETWEEN p_stdate AND p_endate
    AND
    *Chapid
    chapid IN s_chapid
    ORDER BY cpudt.
    SORT itab2 BY cpudt. " for Performance
    DELETE ADJACENT DUPLICATES FROM itab2 COMPARING cpudt .
    LOOP AT itab1.
    LOOP AT itab2.
    *on change of itab1-matnr or itab2-cpudt.
    *select * from J_1IRG1
    CLEAR itab3.
    SELECT * FROM j_1irg1
    *into itab3
    APPENDING CORRESPONDING FIELDS OF TABLE itab3
    WHERE matnr = itab1-matnr
    AND
    cpudt = itab2-cpudt.
    *count = count + 1.
    IF sy-subrc EQ 0.
    LOOP AT itab3.
    *count = count + 1.
    *READ TABLE itab3 INDEX count."1.
    IF itab3-risind = 'R'.
    MOVE-CORRESPONDING itab3 TO itab4.
    APPEND itab4.
    DELETE itab3.
    MOVE-CORRESPONDING itab4 TO itab6.
    APPEND itab6.
    CLEAR itab4.
    ELSE.
    MOVE-CORRESPONDING itab3 TO itab5.
    APPEND itab5.
    DELETE itab3.
    MOVE-CORRESPONDING itab5 TO itab6.
    APPEND itab6.
    CLEAR itab5.
    ENDIF.
    ENDLOOP.
    ENDIF.
    *endon.
    ENDLOOP.
    ENDLOOP.
    SELECT * FROM z2irg1bal
    APPENDING CORRESPONDING FIELDS OF TABLE itab7
    WHERE exgrp = p_exgrp
    AND
    datum LE p_stdate
    ORDER BY datum.
    SORT itab7 BY datum.
    DELETE ADJACENT DUPLICATES FROM itab7 COMPARING datum .
    *insert Start
    LOOP AT itab6.
    DELETE itab7 WHERE matnr NE itab6-matnr.
    ENDLOOP.
    *insert End
    *insert Start
    LOOP AT itab6.
    CLEAR itab61. REFRESH itab61.
    CLEAR wa_display.
    MOVE-CORRESPONDING itab6 TO wa_display.
    EQPT Serno
    count13 = 1.
    SELECT SINGLE obknr FROM ser03 INTO ser03-obknr WHERE
    mblnr EQ itab6-mblnr
    AND mjahr EQ itab6-mjahr.
    IF sy-subrc EQ 0.
    SELECT sernr FROM objk INTO CORRESPONDING
    FIELDS OF TABLE itab61 WHERE
    obknr EQ ser03-obknr.
    DESCRIBE TABLE itab61 LINES n1.
    *do N1 times.
    LOOP AT itab61.
    IF count13 EQ 1.
    wa_display-sernr = itab61-sernr.
    ENDIF.
    IF count13 EQ 2.
    wa_display-sernr1 = itab61-sernr.
    ENDIF.
    IF count13 EQ 3.
    wa_display-sernr2 = itab61-sernr.
    ENDIF.
    IF count13 EQ 4.
    wa_display-sernr3 = itab61-sernr.
    ENDIF.
    IF count13 EQ 5.
    wa_display-sernr4 = itab61-sernr.
    ENDIF.
    IF count13 EQ 6.
    wa_display-sernr5 = itab61-sernr.
    ENDIF.
    IF count13 EQ 7.
    wa_display-sernr6 = itab61-sernr.
    ENDIF.
    if count13 eq 8.
    objk-SERNR8 = objk-SERNR.
    endif.
    if count13 eq 9.
    objk-SERNR9 = objk-SERNR.
    endif.
    count13 = count13 + 1.
    endselect.
    ENDLOOP.
    *enddo.
    ENDIF.
    endif.
    *End of Modification Eqpt Serial No
    MOVE-CORRESPONDING itab6 TO wa_display.
    SELECT * FROM z2irg1bal
    APPENDING CORRESPONDING FIELDS OF TABLE it_bal1
    WHERE matnr = itab6-matnr
    AND datum LE p_stdate
    AND exgrp = itab6-exgrp.
    SORT it_bal1 DESCENDING .
    READ TABLE it_bal1 INDEX 1.
    ON CHANGE OF itab6-matnr .
    wa_display-cb_finish = it_bal1-cb_finish.
    ENDON.
    AT LAST ."matnr.
    wa_display-cb_finish = it_bal1-cb_finish.
    ENDAT.
    APPEND wa_display TO it_display .
    CLEAR wa_display-cb_finish.
    CLEAR it_bal1. REFRESH it_bal1.
    ENDLOOP.
    SELECT * FROM j_1irg1
    APPENDING CORRESPONDING FIELDS OF TABLE it_itab
    WHERE exgrp = p_exgrp
    AND
    cpudt BETWEEN p_stdate AND p_endate.
    DESCRIBE TABLE it_itab[] LINES count_1.
    count_3 = count_1 + 1.
    DESCRIBE TABLE it_display[] LINES count_2.
    IF it_display IS NOT INITIAL.
    DELETE it_display FROM count_3 TO count_2.
    ENDIF.
    *start of insertion
    DELETE it_display WHERE status = 'C'.
    LOOP AT it_display INTO wa_display.
    CLEAR wa_display-cb_finish.
    MODIFY it_display FROM wa_display.
    ON CHANGE OF wa_display-matnr .
    SELECT * FROM z2irg1bal
    INTO CORRESPONDING FIELDS OF TABLE it_bal1
    WHERE matnr = wa_display-matnr
    AND datum LE p_stdate
    AND exgrp = wa_display-exgrp.
    IF sy-subrc = 0.
    SORT it_bal1 DESCENDING .
    READ TABLE it_bal1 INDEX 1.
    wa_display-cb_finish = it_bal1-cb_finish.
    MODIFY it_display FROM wa_display.
    ENDIF.
    ENDON.
    ENDLOOP.
    *End of insertion
    ENDFORM. " get_data
    *& Module STATUS_0100 OUTPUT
    text
    MODULE status_0100 OUTPUT.
    SET PF-STATUS 'ZRG1'.
    SET TITLEBAR 'ZRG1'.
    DATA: lt_exclude TYPE ui_functions.
    IF custom_container IS INITIAL.
    Create the Custom Container
    CREATE OBJECT custom_container
    EXPORTING
    container_name = c_stk.
    Create an instance of alv control
    CREATE OBJECT grid1
    EXPORTING
    i_parent = custom_container.
    Layout Settings
    gs_layout-sel_mode = 'A'. " Multiple Lines
    MOVE 'RG1 Register' TO gs_layout-grid_title.
    Prepare the Field Catalog
    PERFORM prepare_catalog.
    To Exclude the PRINT Button from the Standard toolbar of ALV
    PERFORM exclude_tb_functions CHANGING lt_exclude.
    Display the List for ALV Display
    CALL METHOD grid1->set_table_for_first_display
    EXPORTING
    it_toolbar_excluding = lt_exclude
    is_layout = gs_layout
    CHANGING
    it_fieldcatalog = it_fieldcatalog[]
    it_outtab = it_alv[].
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_user_command FOR grid1.
    SET HANDLER event_receiver->handle_toolbar FOR grid1.
    SET HANDLER event_receiver->handle_double_click FOR grid1.
    CALL METHOD grid1->set_toolbar_interactive.
    ENDIF.
    CALL METHOD cl_gui_control=>set_focus
    EXPORTING
    control = grid1.
    ENDMODULE. " STATUS_0100 OUTPUT
    *& Form exclude_tb_functions
    text
    <--P_LT_EXCLUDE text
    FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
    Local Varaibles
    DATA ls_exclude TYPE ui_func.
    ls_exclude = cl_gui_alv_grid=>mc_fc_print.
    APPEND ls_exclude TO pt_exclude.
    ENDFORM. " exclude_tb_functions
    *& Form prepare_catalog
    text
    --> p1 text
    <-- p2 text
    FORM prepare_catalog .
    DATA : v_index TYPE i.
    *Entry Date
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'CPUDT'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'RG1 Entry Date'.
    wafieldcatlog-reptext = 'RG1 Entry Date'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Serial No
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERIALNO'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'RG1 serial number'.
    wafieldcatlog-reptext = 'RG1 serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'CHAPID'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Chapter ID'.
    wafieldcatlog-reptext = 'Chapter ID'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MBLNR'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Number of Material Document'.
    wafieldcatlog-reptext = 'Number of Material Document'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Item
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'ZEILE'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Item in Material Document'.
    wafieldcatlog-reptext = 'Item in Material Document'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'BWART'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Movement Type'.
    wafieldcatlog-reptext = 'Movement Type'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MENGE'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Quantity'.
    wafieldcatlog-reptext = 'Quantity'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    wafieldcatlog-DO_SUM = 'X'.
    append wafieldcatlog to it_fieldcatalog.
    clear wafieldcatlog-reptext.
    clear wafieldcatlog-key.
    *Base Unit of Measure
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MEINS'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Base Unit of Measure'.
    wafieldcatlog-reptext = 'Base Unit of Measure'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    wafieldcatlog-do_sum = 'X'.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'RISIND'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Goods Movement Direction'.
    wafieldcatlog-reptext = 'Goods Movement Direction'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Material Number
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MATNR'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Material Number'.
    wafieldcatlog-reptext = 'Material Number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *CB_FINISH
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'CB_FINISH'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Opening Balance'.
    wafieldcatlog-reptext = 'Opening Balance'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *materail manufactured
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'OP_FINISH'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Qty Manufactured'.
    wafieldcatlog-reptext = 'Qty Manufactured'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Material Issued
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'OP_BOND'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Qty Issue'.
    wafieldcatlog-reptext = 'Qty Issue'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Total
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MENGE_FINI'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Closing Balance'.
    wafieldcatlog-reptext = 'Closing Balance'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Material Description
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'MAKTX'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Material Description'.
    wafieldcatlog-reptext = 'Material Description'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Storage Location
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'LGORT'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Storage Location'.
    wafieldcatlog-reptext = 'Storage Location'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Goods Movement Direction
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'RISIND'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Goods Movement Direction'.
    wafieldcatlog-reptext = 'Goods Movement Direction'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Reference Document 1
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'RDOC1'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Reference Document 1'.
    wafieldcatlog-reptext = 'Reference Document 1'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Excise Duty Base Amount
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'EXBAS'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Excise Duty Base Amount'.
    wafieldcatlog-reptext = 'Excise Duty Base Amount'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Basic Excise Duty
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'EXBED'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Basic Excise Duty'.
    wafieldcatlog-reptext = 'Basic Excise Duty'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Additional Excise Duty
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'EXAED'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Additional Excise Duty'.
    wafieldcatlog-reptext = 'Additional Excise Duty'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Special Excise Duty
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'EXSED'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Special Excise Duty'.
    wafieldcatlog-reptext = 'Special Excise Duty'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *Cess amount
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'CESS'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Cess amount'.
    wafieldcatlog-reptext = 'Cess amount'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *ECS Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'ECS'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'ECS Value'.
    wafieldcatlog-reptext = 'ECS Value'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    **Register Entry Status
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'STATUS'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Register Entry Status'.
    wafieldcatlog-reptext = 'Register Entry Status'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    append wafieldcatlog to it_fieldcatalog.
    clear wafieldcatlog-reptext.
    clear wafieldcatlog-key.
    *EQPT Serno 1 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 2 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR1'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 3 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR2'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 4 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR3'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 5 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR4'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 6 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR5'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    *EQPT Serno 7 Value
    v_index = v_index + 1.
    wafieldcatlog-fieldname = 'SERNR6'.
    wafieldcatlog-tabname = 'IT_ALV'.
    wafieldcatlog-seltext = 'Serial number'.
    wafieldcatlog-reptext = 'Serial number'.
    wafieldcatlog-hotspot = ' '.
    wafieldcatlog-col_pos = v_index.
    APPEND wafieldcatlog TO it_fieldcatalog.
    CLEAR wafieldcatlog-reptext.
    CLEAR wafieldcatlog-key.
    ENDFORM. " prepare_catalog
    *& Module USER_COMMAND_0100 INPUT
    text
    MODULE user_command_0100 INPUT.
    IF ok_code = 'EXIT'.
    CALL METHOD grid1->free.
    CALL METHOD cl_gui_cfw=>flush.
    leave program .
    LEAVE TO SCREEN 0.
    ENDIF.
    ENDMODULE. " USER_COMMAND_0100 INPUT
    *& Form call_migo
    text
    --> p1 text
    <-- p2 text
    FORM call_migo .
    CALL FUNCTION 'MIGO_DIALOG' "n547170
    EXPORTING "n547170
    i_action = 'A04' "n547170
    i_refdoc = 'R02' "n547170
    i_notree = 'X' "n547170
    i_no_auth_check = ' ' "n547170
    i_deadend = 'X' "n547170
    i_skip_first_screen = 'X' "n547170
    i_okcode = 'OK_GO' "n547170
    i_mblnr = wa_alv-mblnr "n547170
    i_mjahr = wa_alv-mjahr . "n547170
    ENDFORM. " call_migo

    T.Code: MB5B
    Regards,
    Rajesh Banka
    How to give points: Mark your thread as a question while creating it. In the answers you get, you can assign the points by clicking on the stars to the left. You also get a point yourself for rewarding (one per thread).

  • Regarding making hyperlink in OOPs ALV

    Please see the following ALV Code. Its based on OOPs. There is no fieldcatalog defined in the program. In the output I want to make a hotspot on the filed VBELN & want to call T.code VA03 using SET PARAMETER ID. Please help. If I would have made it through Function Modules, It could have been easier as I can modify the fieldcatalog. Please help me urgently. Points will be rewarded.
    *& Report  ZTEST_OOPS_REPT1                                            *
    REPORT  ztest_oops_rept1                        .
    Type pool for icons - used in the toolbar
    TYPE-POOLS: icon.
    TYPE-POOLS: slis.
    TABLES: vbak.
    To allow the declaration of o_event_receiver before the
    lcl_event_receiver class is defined, decale it as deferred in the
    start of the program
    CLASS lcl_event_receiver DEFINITION DEFERRED.
    G L O B A L   I N T E R N  A L   T A B L E S
    *DATA: gi_sflight TYPE STANDARD TABLE OF sflight.
    To include a traffic light and/or color a line the structure of the
    table must include fields for the traffic light and/or the color
    TYPES: BEGIN OF st_vbak.
            INCLUDE STRUCTURE vbak.
    TYPES: END OF st_vbak.
    TYPES: tt_vbak TYPE STANDARD TABLE OF st_vbak.
    DATA: gi_vbak TYPE tt_vbak.
    *declaration for fieldcatalog
    DATA: lit_fieldcat TYPE slis_t_fieldcat_alv,
        ls_fieldcat  TYPE slis_fieldcat_alv.
    G L O B A L   D A T A
    DATA: ok_code         LIKE sy-ucomm,
        Work area for internal table
          g_wa_vbak    TYPE st_vbak,
        ALV control: Layout structure
          gs_layout       TYPE lvc_s_layo.
    Declare reference variables to the ALV grid and the container
    DATA:
      go_grid             TYPE REF TO cl_gui_alv_grid,
      go_custom_container TYPE REF TO cl_gui_custom_container,
      o_event_receiver    TYPE REF TO lcl_event_receiver.
    DATA:
    Work area for screen 200
      g_screen200 LIKE vbak.
    Data for storing information about selected rows in the grid
    DATA:
    Internal table
      gi_index_rows TYPE lvc_t_row,
    Information about 1 row
      g_selected_row LIKE lvc_s_row.
                            SELECTION-SCREEN                             *
    SELECTION-SCREEN BEGIN OF BLOCK ch1 WITH FRAME.
    SELECT-OPTIONS:  s_vbeln FOR vbak-vbeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK ch1.
    C L A S S E S
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS:
         handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
           IMPORTING
             e_object e_interactive,
         handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
           IMPORTING e_ucomm.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
          CLASS lcl_event_receiver IMPLEMENTATION
    CLASS lcl_event_receiver IMPLEMENTATION.
      METHOD handle_toolbar.
    Event handler method for event toolbar.
        CONSTANTS:
    Constants for button type
          c_button_normal           TYPE i VALUE 0,
          c_menu_and_default_button TYPE i VALUE 1,
          c_menu                    TYPE i VALUE 2,
          c_separator               TYPE i VALUE 3,
          c_radio_button            TYPE i VALUE 4,
          c_checkbox                TYPE i VALUE 5,
          c_menu_entry              TYPE i VALUE 6.
        DATA:
            ls_toolbar  TYPE stb_button.
      Append seperator to the normal toolbar
        CLEAR ls_toolbar.
        MOVE c_separator TO ls_toolbar-butn_type..
        APPEND ls_toolbar TO e_object->mt_toolbar.
      Append a new button that to the toolbar. Use E_OBJECT of
      event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.
      This class has one attribute MT_TOOLBAR which is of table type
      TTB_BUTTON. The structure is STB_BUTTON
        CLEAR ls_toolbar.
        MOVE 'CHANGE'        TO ls_toolbar-function.
        MOVE  icon_change    TO ls_toolbar-icon.
        MOVE 'Change flight' TO ls_toolbar-quickinfo.
        MOVE 'Change'        TO ls_toolbar-text.
        MOVE ' '             TO ls_toolbar-disabled.
        APPEND ls_toolbar    TO e_object->mt_toolbar.
      ENDMETHOD.                    "handle_toolbar
      METHOD handle_user_command.
      Handle own functions defined in the toolbar
        CASE e_ucomm.
          WHEN 'CHANGE'.
            PERFORM change_flight.
           LEAVE TO SCREEN 0.
        ENDCASE.
      ENDMETHOD.                    "handle_user_command
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    S T A R T - O F - S E L E C T I O N.
    START-OF-SELECTION.
      SET SCREEN '100'.
    *&      Module  USER_COMMAND_0100  INPUT
    MODULE user_command_0100 INPUT.
      CASE ok_code.
        WHEN 'BACK'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Module  STATUS_0100  OUTPUT
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'ZTEST_ALV'.
      SET TITLEBAR 'ZTEST_ALV'.
      DATA:
      For parameter IS_VARIANT that is sued to set up options for storing
      the grid layout as a variant in method set_table_for_first_display
        l_layout TYPE disvariant,
      Utillity field
        l_lines TYPE i.
    After returning from screen 200 the line that was selected before
    going to screen 200, should be selected again. The table gi_index_rows
    was the output table from the GET_SELECTED_ROWS method in form
    CHANGE_FLIGHT
      DESCRIBE TABLE gi_index_rows LINES l_lines.
      IF l_lines > 0.
        CALL METHOD go_grid->set_selected_rows
          EXPORTING
            it_index_rows = gi_index_rows.
        CALL METHOD cl_gui_cfw=>flush.
        REFRESH gi_index_rows.
      ENDIF.
    Read data and create objects
      IF go_custom_container IS INITIAL.
      Read data from datbase table
        PERFORM get_data.
      Create objects for container and ALV grid
        CREATE OBJECT go_custom_container
          EXPORTING container_name = 'ALV_CONTAINER'.
        CREATE OBJECT go_grid
          EXPORTING
            i_parent = go_custom_container.
      Create object for event_receiver class
      and set handlers
        CREATE OBJECT o_event_receiver.
        SET HANDLER o_event_receiver->handle_user_command FOR go_grid.
        SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.
      Layout (Variant) for ALV grid
        l_layout-report = sy-repid. "Layout fo report
    Setup the grid layout using a variable of structure lvc_s_layo
      Set grid title
        gs_layout-grid_title = 'SALES ORDER'.
      Selection mode - Single row without buttons
      (This is the default  mode
        gs_layout-sel_mode = 'B'.  "B for single selection.
      Grid setup for first display
        CALL METHOD go_grid->set_table_for_first_display
          EXPORTING
            i_structure_name = 'VBAK'
            is_variant       = l_layout
            i_save           = 'A'
            is_layout        = gs_layout
          CHANGING
            it_outtab        = gi_vbak.
    *-- End of grid setup -
      Raise event toolbar to show the modified toolbar
        CALL METHOD go_grid->set_toolbar_interactive.
      Set focus to the grid. This is not necessary in this
      example as there is only one control on the screen
        CALL METHOD cl_gui_control=>set_focus
          EXPORTING
            control = go_grid.
      ENDIF.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  USER_COMMAND_0200  INPUT
          text
    MODULE user_command_0200 INPUT.
      CASE ok_code.
        WHEN 'BACK'.
          LEAVE TO SCREEN 100.
          WHEN'SAVE'.
          PERFORM save_changes.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0200  INPUT
    *&      Form  get_data
          text
    FORM get_data.
    Read data from table VBAK
      SELECT *
        FROM vbak
        INTO TABLE gi_vbak
        WHERE vbeln IN s_vbeln.
    ENDFORM.                    " load_data_into_grid
    *&      Form  change_flight
    Reads the contents of the selected row in the grid, ans transfers
    the data to screen 200, where it can be changed and saved.
    FORM change_flight.
      DATA:l_lines TYPE i.
      REFRESH gi_index_rows.
      CLEAR   g_selected_row.
    Read index of selected rows
      CALL METHOD go_grid->get_selected_rows
        IMPORTING
          et_index_rows = gi_index_rows.
    Check if any row are selected at all. If not
    table  gi_index_rows will be empty
      DESCRIBE TABLE gi_index_rows LINES l_lines.
      IF l_lines = 0.
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
          EXPORTING
            textline1 = 'You must choose a line'.
        EXIT.
      ENDIF.
    Read indexes of selected rows. In this example only one
    row can be selected as we are using gs_layout-sel_mode = 'B',
    so it is only ncessary to read the first entry in
    table gi_index_rows
      LOOP AT gi_index_rows INTO g_selected_row.
        IF sy-tabix = 1.
          READ TABLE gi_vbak INDEX g_selected_row-index
           INTO g_wa_vbak.
        ENDIF.
      ENDLOOP.
    Transfer data from the selected row to screenm 200 and show
    screen 200
      CLEAR g_screen200.
      MOVE-CORRESPONDING g_wa_vbak TO g_screen200.
      LEAVE TO SCREEN '200'.
    ENDFORM.                    " change_flight
    *&      Form  save_changes
    Changes made in screen 200 are written to the datbase table
    zsflight, and to the grid table gi_sflight, and the grid is
    updated with method refresh_table_display to display the changes
    FORM save_changes.
    Update traffic light field
    Update database table
      MODIFY vbak FROM g_screen200.
    Refresh grid
      CALL METHOD go_grid->refresh_table_display.
      CALL METHOD cl_gui_cfw=>flush.
      LEAVE TO SCREEN '100'.
    ENDFORM.                    " save_changes
    *&      Module  STATUS_0200  OUTPUT
          text
    MODULE status_0200 OUTPUT.
      SET PF-STATUS 'ZTEST_ALV'.
      SET TITLEBAR 'ZTEST_ALV'.
    ENDMODULE.                 " STATUS_0200  OUTPUT
                     " lit_fieldcat_init

    Use FM -LVC_FIELDCATALOG_MERGE to derive the field catalog for table VBAK. It will give you the field catalog. You can modify the column VBELN  by changing HOTSPOT = 'X".
    and in your code - at the method SET_TABLE_FOR....DISPLAY , you comment out the structure name and pass the modified field catalog.
    Hope it helps.

  • When "BACK"

    Hi Folks,
    The following report is working perfectly except that when clicking on BACK button on the toolbar it is not coming to selection-screen but leaving to Easy Access Screen.Kindly let me know.
    REPORT  zdr   LINE-SIZE 1023 LINE-COUNT 58(3)
    MESSAGE-ID z_ma NO STANDARD PAGE HEADING      .
    TABLES : vbrk, " Billing Document: Header Data
             vbrp, " Billing Document: Item Data
             konv, " Conditions (Transaction Data)
             vbak, " Sales Document: Header Data
             usr21, " Assign user name address key
             adcp,  " Person/Address Assignment
             tvv2t,
             m_vmcfa,
             m_vmcra,
             kna1,
             tvfkt,
             vmcfao,
             adrc.
    Includes
    INCLUDE rvreuse_global_data.
    INCLUDE rvreuse_local_data.
    INCLUDE rvreuse_forms.
    Type-Pools
    TYPE-POOLS slis.
    TYPES: BEGIN OF ty_temp,
            fidoc TYPE bkpf-belnr,              "FIDOC No
            awkey TYPE bkpf-belnr,              "Reference Key
            gjahr TYPE bkpf-gjahr,              "Fiscal Year
            budat TYPE bkpf-budat,              "Posting Date
            belnr TYPE rbkp-belnr,              "Doc No
            blart TYPE bkpf-blart,              "Document Type
            vbeln TYPE bkpf-xblnr,              "Billing Doc No
            xblnr TYPE bkpf-xblnr,
           END OF ty_temp.
    TYPES: BEGIN OF ty_konv,
              knumv TYPE konv-knumv,
              kposn TYPE konv-kposn,
              kschl TYPE konv-kschl,
              kwert TYPE konv-kwert,
              kbetr TYPE konv-kbetr,
              kwert1 type konv-kwert,
           END OF ty_konv.
    TYPES: BEGIN OF ty_objk,
              equnr TYPE objk-equnr,
              sernr TYPE objk-sernr,
              taser TYPE objk-taser,
           END OF ty_objk.
    *& Includes                                                            *
    INCLUDE <icon>.
    Data Declaration
    For ALV Display
    DATA : gs_variant TYPE disvariant.
    DATA : gs_layout TYPE lvc_s_layo.
    DATA : gs_print  TYPE lvc_s_prnt.
    DATA : c_stk TYPE scrfname VALUE 'CUSTOM'.
    DATA:  c_stk3 TYPE scrfname VALUE 'TEST'.
    DATA : custom_container TYPE REF TO cl_gui_custom_container.
    DATA: custom_container3 TYPE REF TO cl_gui_custom_container.
    CLASS: lcl_event_receiver DEFINITION DEFERRED.
    DATA : grid1  TYPE REF TO cl_gui_alv_grid.
    DATA:  grid3 TYPE REF TO cl_gui_alv_grid.
    DATA : event_receiver TYPE REF TO lcl_event_receiver.
    DATA : ok_code TYPE sy-ucomm.
    DATA : it_fieldcatalog TYPE lvc_t_fcat.
    DATA : wafieldcatlog TYPE LINE OF lvc_t_fcat.
    DATA : lt_rows TYPE lvc_t_row.
    DATA : wa_rows TYPE LINE OF lvc_t_row.
    DATA: it_fieldcatalog1 TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          wafieldcatlog1 TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          gd_layout TYPE slis_layout_alv,
          gd_prntparams TYPE slis_print_alv,
          gd_repid LIKE sy-repid.
    Internal tables and work areas for ALV ouput display
    DATA: is_layout        TYPE slis_layout_alv,
          i_events         TYPE slis_t_event,
          events           TYPE slis_alv_event,
          alv_top_of_page  TYPE slis_t_listheader,
          gs_line          TYPE slis_listheader,
          alv_events       TYPE slis_t_event,
          alv_variant      TYPE disvariant,
          alv_title        TYPE lvc_title,
          alv_sort         TYPE slis_t_sortinfo_alv,
          csort            TYPE slis_sortinfo_alv,
          alv_print        TYPE slis_print_alv.
    Internal Table
    DATA: it_objk TYPE ty_objk OCCURS 0 WITH HEADER LINE.
    DATA: itab_temp TYPE ty_temp OCCURS 0 WITH HEADER LINE.
    DATA: itab_konv TYPE ty_konv OCCURS 0 WITH HEADER LINE.
    DATA: gt_vmcfa LIKE vmcfao OCCURS 50 WITH HEADER LINE.
    *>>>
    DATA : adrnr1 LIKE t001w-adrnr.
    DATA: plant_name1 LIKE adrc-name1.
    DATA: plant_name2 TYPE adrc-name2.
    DATA: plant_name(136).
    DATA: comp_name1 LIKE adrc-name1.
    DATA: comp_name2 TYPE adrc-name2.
    DATA: comp_name(136).
    *<<<
    DATA: BEGIN OF name_dazu OCCURS 10,
            kunnr LIKE kna1-kunnr     ,
            name1 LIKE kna1-name1     ,
            ort01 LIKE kna1-ort01     ,
          END   OF name_dazu.
    DATA: BEGIN OF fkart_dazu OCCURS 10,
            fkart LIKE tvfkt-fkart     ,
            vtext LIKE tvfkt-vtext     ,
          END   OF fkart_dazu.
    DATA: BEGIN OF hsave,
          vbeln LIKE vbuv-vbeln,
          tabix LIKE sy-tabix  ,
          text(40)             .
    DATA: END   OF hsave.
    DATA: BEGIN OF it_vbrk_vbrp OCCURS 0,
            vbeln TYPE vbrk-vbeln,  " Invoice Number
            posnr TYPE vbrp-posnr,  " Item number
            erdat TYPE vbrk-erdat,  " Billing Date
            fkart TYPE vbrk-fkart,  " Billing Type
            vtext TYPE tvfkt-vtext,  " Billing type Desc
            knumv TYPE vbrk-knumv,  " Number of the document condition
            netwr TYPE vbrk-netwr,  " Net value in document currency
            fkdat TYPE vbrk-fkdat,  " Invoice Date
            typbz TYPE equi-typbz,  " Model
            serge TYPE equi-serge,  " Serial No Ref
            fkimg TYPE vbrp-fkimg,  " Invoce Quantity
            kzwi1 TYPE vbrp-kzwi1,  " Base Price
            kzwi2 TYPE vbrp-kzwi2,  " Packing
            kzwi4 TYPE vbrp-kzwi4,  " Freight and Insurance
            jex2  TYPE konv-kwert,  " Exice duty
            jces  TYPE konv-kwert,  " Cess
            jecx  TYPE konv-kwert,  " Education Cess
            jin1  TYPE konv-kwert,  " CST
            jin1_per TYPE konv-kbetr, " %CST
            jin2  TYPE konv-kwert,  " LST
            jin2_per TYPE konv-kbetr, " %LST
            jin5  TYPE konv-kwert,  " Surcharge on LST
            jin5_per TYPE konv-kbetr, " %Surcharge on LST
            turn  TYPE konv-kwert,  " Turn Over
            turn_lst TYPE konv-kwert, " LST turn over
            turn_cst TYPE konv-kwert, " CST turn over
            total TYPE konv-kwert,  " Total
            zadv TYPE konv-kwert,   " Advance Recieved
            net  TYPE konv-kwert,   " Net Payable
            zcod TYPE konv-kwert,   " Dealer Fee
            zdbk TYPE konv-kwert,   " Deamed Benifit
            zopt TYPE konv-kwert,   " Optional Value
            zfoc TYPE konv-kwert,   " FOC Coupon Value
            zfcf TYPE konv-kwert,   " FOC Filter
            netreal TYPE konv-kwert, " Net Realisation
            vgbel TYPE vbrp-vgbel,  " Delivery Number
            kunag TYPE vbrk-kunag,  " Sold-to party
            name1 TYPE kna1-name1,                              " Name1
            name2 TYPE kna1-name1,  " Ship to name
            name3 TYPE kna1-name2,  " Ship to name 2nd column
            mwsbk TYPE vbrk-mwsbk,  " Tax amount in document currency
            werks TYPE vbrp-werks,  " Plant
            regio TYPE vbrk-regio,  " Region (State, Province, County)
            bezei TYPE t005u-bezei, " Region Description
            wkreg TYPE vbrp-wkreg,  " Region in which plant is located
            fksto TYPE vbrk-fksto,  " Billing document is cancelled
            bstkd TYPE vbkd-bstkd,  " Customer purchase order number
            bstdk TYPE vbkd-bstdk,  " Customer purchase order date
            exnum TYPE j_1iexcdtl-exnum, " Excise Doc Number
            matnr TYPE vbrp-matnr,   " Material number
            arktx TYPE vbrp-arktx,   " Material Desc
            mvgr5 TYPE vbap-mvgr5,   " PWC code
            bezei5 TYPE tvm5t-bezei, " PWC code Desc
            kdgrp_auft TYPE vbrp-kdgrp_auft, " Dealer
            ktext TYPE t151t-ktext, " Dealer Desc
            j_1icstno TYPE j_1imocust-j_1icstno, " CST reg number
            j_1ilstno TYPE j_1imocust-j_1ilstno, " LST reg number
            city1 TYPE adrc-city1,                              " City1
            street TYPE adrc-street,
            addr1 TYPE adrc-str_suppl1, " address
            addr2 TYPE adrc-str_suppl2,
            city2 TYPE adrc-city2,
            country TYPE adrc-country,
            landx TYPE t005t-landx,"Country
            kvgr2 TYPE vbak-kvgr2, "Sales Type
            fname TYPE kna1-name1, " Financier Name
            aubel TYPE vbrp-aubel,
            stypetext TYPE tvv2t-bezei,
            zdex  TYPE konv-kwert,
            zdec  TYPE konv-kwert,
            dif1  TYPE konv-kwert,
            dif2  TYPE konv-kwert,
            dif3  TYPE konv-kwert,
            dif4  TYPE konv-kwert,
            dif5  TYPE konv-kwert,
            dif6  TYPE konv-kwert,
            deemed_jex2 TYPE konv-kwert,
            deemed_jecs TYPE konv-kwert,
            roundoff1 TYPE konv-kwert,
            roundoff2 TYPE konv-kwert,
            roundoff3 TYPE konv-kwert,
            roundoff4 TYPE konv-kwert,
            roundoff5 TYPE konv-kwert,
            roundoff6 TYPE konv-kwert,
            zcal  TYPE konv-kwert,
            zser  TYPE konv-kwert,
            zces  TYPE konv-kwert,
            zkf0 TYPE konv-kwert,
            zins TYPE konv-kwert,
           vgpos LIKE vbrp-vgpos,
           ort01 LIKE kna1-ort01,
           belnr LIKE bseg-belnr,
           bukrs LIKE vbrk-bukrs,
           zstf LIKE konv-kwert,
           di13 LIKE konv-kwert,
            vkorg TYPE vbrk-vkorg,
            vbtyp TYPE vbrk-vbtyp,
            aupos TYPE vbrp-aupos,
            xblnr TYPE bkpf-xblnr,
            augru TYPE vbak-augru,
            reason TYPE tvaut-bezei,
            waerk type vbrk-waerk,
           END OF it_vbrk_vbrp.
    DATA: BEGIN OF it_vbrk_vbrp3 OCCURS 0,
            vbeln TYPE vbrk-vbeln,  " Invoice Number
            posnr TYPE vbrp-posnr,  " Item number
            erdat TYPE vbrk-erdat,  " Billing Date
            fkart TYPE vbrk-fkart,  " Billing Type
            vtext TYPE tvfkt-vtext,  " Billing type Desc
            knumv TYPE vbrk-knumv,  " Number of the document condition
            netwr TYPE vbrk-netwr,  " Net value in document currency
            fkdat TYPE vbrk-fkdat,  " Invoice Date
            typbz TYPE equi-typbz,  " Model
            serge TYPE equi-serge,  " Serial No Ref
            fkimg TYPE vbrp-fkimg,  " Invoce Quantity
            kzwi1 TYPE vbrp-kzwi1,  " Base Price
            kzwi2 TYPE vbrp-kzwi2,  " Packing
            kzwi4 TYPE vbrp-kzwi4,  " Freight and Insurance
            jex2  TYPE konv-kwert,  " Exice duty
            jces  TYPE konv-kwert,  " Cess
            jecx  TYPE konv-kwert,  " Education Cess
            jin1  TYPE konv-kwert,  " CST
            jin1_per TYPE konv-kbetr, " %CST
            jin2  TYPE konv-kwert,  " LST
            jin2_per TYPE konv-kbetr, " %LST
            jin5  TYPE konv-kwert,  " Surcharge on LST
            jin5_per TYPE konv-kbetr, " %Surcharge on LST
            turn  TYPE konv-kwert,  " Turn Over
            turn_lst TYPE konv-kwert, " LST turn over
            turn_cst TYPE konv-kwert, " CST turn over
            total TYPE konv-kwert,  " Total
            zadv TYPE konv-kwert,   " Advance Recieved
            net  TYPE konv-kwert,   " Net Payable
            zcod TYPE konv-kwert,   " Dealer Fee
            zdbk TYPE konv-kwert,   " Deamed Benifit
            zopt TYPE konv-kwert,   " Optional Value
            zfoc TYPE konv-kwert,   " FOC Coupon Value
            zfcf TYPE konv-kwert,   " FOC Filter
            netreal TYPE konv-kwert, " Net Realisation
            vgbel TYPE vbrp-vgbel,  " Delivery Number
            kunag TYPE vbrk-kunag,  " Sold-to party
            name1 TYPE kna1-name1,                              " Name1
            name2 TYPE kna1-name1,  " Ship to name
            name3 TYPE kna1-name2,  " Ship to name 2nd column
            mwsbk TYPE vbrk-mwsbk,  " Tax amount in document currency
            werks TYPE vbrp-werks,  " Plant
            regio TYPE vbrk-regio,  " Region (State, Province, County)
            bezei TYPE t005u-bezei, " Region Description
            wkreg TYPE vbrp-wkreg,  " Region in which plant is located
            fksto TYPE vbrk-fksto,  " Billing document is cancelled
            bstkd TYPE vbkd-bstkd,  " Customer purchase order number
            bstdk TYPE vbkd-bstdk,  " Customer purchase order date
            exnum TYPE j_1iexcdtl-exnum, " Excise Doc Number
            matnr TYPE vbrp-matnr,   " Material number
            arktx TYPE vbrp-arktx,   " Material Desc
            mvgr5 TYPE vbap-mvgr5,   " PWC code
            bezei5 TYPE tvm5t-bezei, " PWC code Desc
            kdgrp_auft TYPE vbrp-kdgrp_auft, " Dealer
            ktext TYPE t151t-ktext, " Dealer Desc
            j_1icstno TYPE j_1imocust-j_1icstno, " CST reg number
            j_1ilstno TYPE j_1imocust-j_1ilstno, " LST reg number
            city1 TYPE adrc-city1,                              " City1
            street TYPE adrc-street,
            addr1 TYPE adrc-str_suppl1, " address
            addr2 TYPE adrc-str_suppl2,
            city2 TYPE adrc-city2,
            country TYPE adrc-country,
            landx TYPE t005t-landx,"Country
            kvgr2 TYPE vbak-kvgr2, "Sales Type
            fname TYPE kna1-name1, " Financier Name
            aubel TYPE vbrp-aubel,
            stypetext TYPE tvv2t-bezei,
            zdex  TYPE konv-kwert,
            zdec  TYPE konv-kwert,
            dif1  TYPE konv-kwert,
            dif2  TYPE konv-kwert,
            dif3  TYPE konv-kwert,
            dif4  TYPE konv-kwert,
            dif5  TYPE konv-kwert,
            dif6  TYPE konv-kwert,
            deemed_jex2 TYPE konv-kwert,
            deemed_jecs TYPE konv-kwert,
            roundoff1 TYPE konv-kwert,
            roundoff2 TYPE konv-kwert,
            roundoff3 TYPE konv-kwert,
            roundoff4 TYPE konv-kwert,
            roundoff5 TYPE konv-kwert,
            roundoff6 TYPE konv-kwert,
            zcal  TYPE konv-kwert,
            zser  TYPE konv-kwert,
            zces  TYPE konv-kwert,
            zkf0 TYPE konv-kwert,
            zins TYPE konv-kwert,
           vgpos LIKE vbrp-vgpos,
           ort01 LIKE kna1-ort01,
           belnr LIKE bseg-belnr,
           bukrs LIKE vbrk-bukrs,
           zstf LIKE konv-kwert,
           di13 LIKE konv-kwert,
            vkorg TYPE vbrk-vkorg,
            vbtyp TYPE vbrk-vbtyp,
            aupos TYPE vbrp-aupos,
            xblnr TYPE bkpf-xblnr,
            augru TYPE vbak-augru,
            reason TYPE tvaut-bezei,
    *Variable for Summed up fields
            waerk type vbrk-waerk,
    *End of changes by Kiran.K dated 27082007
            sum1 TYPE vbrp-kzwi1,                               "Base Price
            sum2 TYPE vbrp-kzwi2,                               "Packing
            sum4 TYPE vbrp-kzwi4,                               "Freight and Insurance
           sum5 TYPE konv-kwert,                               "zsdr3-jex2
           sum6 TYPE konv-kwert,                               "zsdr3-jecx
           total1 TYPE konv-kwert,                             "ZSDR3
            total2 TYPE konv-kwert,                             "Taxable LST Turnover
            total3 TYPE konv-kwert,                             "Taxable CST Turnover
            total4 TYPE konv-kwert,                             "Total
           jin6 type konv-kwert,
           lst1 type konv-kwert,
            lsum type konv-kwert,                               "LST
           END OF it_vbrk_vbrp3.
    *ALV Display
    *Authorization check
    DATA : v_pnum  TYPE usr21-persnumber.
    DATA : v_dname TYPE adcp-department.
    Work Areas
    DATA : wa_display LIKE it_vbrk_vbrp.
    DATA : wa_alv LIKE it_vbrk_vbrp.
    Data
    DATA : kdauf LIKE lips-kdauf.
    DATA : obknr LIKE ser01-obknr.
    DATA : equnr LIKE equi-equnr.
    DATA : header(60) TYPE c.
    DATA : vbelv LIKE vbfa-vbelv.
    DATA   vbelvp LIKE vbrp-aubel.
    DATA : posnv LIKE vbfa-posnv.
    DATA : kunnr LIKE kna1-kunnr.
    DATA : kunnr1 LIKE kna1-kunnr.
    DATA : adrnr LIKE vbpa-adrnr.
    DATA : country LIKE adrc-country.
    DATA : date1(10).
    DATA : date2(10).
    DATA : text(60).
    DATA : alles(1) TYPE c.
    DATA : allea(1) TYPE c.
    DATA : alleb(1) TYPE c.
    DATA : allef(1) TYPE c.
    DATA : alleg(1) TYPE c.
    DATA : allek(1) TYPE c.
    DATA : allen(1) TYPE c.
    DATA: xvbtyp LIKE dd07v-domvalue_l.
    DATA: text1  LIKE dd07v-ddtext.
    DATA: char(50).
    DATA: tabix LIKE sy-tabix.
    DATA: lilli LIKE sy-lilli.
    FIELD-SYMBOLS: <feld>.
    DATA   : trvog TYPE c.
    DATA : deemed_jex2 TYPE konv-kwert,
           deemed_jecx TYPE konv-kwert,
           roundoff1 TYPE konv-kwert,
           roundoff2 TYPE konv-kwert,
           roundoff3 TYPE konv-kwert,
           roundoff4 TYPE konv-kwert,
           roundoff5 TYPE konv-kwert,
           roundoff6 TYPE konv-kwert.
    Structure for IT
    DATA wa_it_vbrk_vbrp LIKE it_vbrk_vbrp.
    DATA wa_it_vbrk_vbrp3 LIKE it_vbrk_vbrp.
    DATA:itevent3 TYPE slis_t_event.
    DATA:itlistheader TYPE slis_t_listheader.
    DATA:itlistheader3 TYPE slis_t_listheader.
    DATA:walistheader LIKE LINE OF itlistheader.
    DATA:walistheader3 LIKE LINE OF itlistheader.
    DATA: string1(70).
    DATA: title(100),date3(10),date4(10),name3(35),name4(35),plant3(4).
    **SELECTION-SCREEN
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETER     : vkorg LIKE vbrk-vkorg OBLIGATORY.
    PARAMETER     : plant LIKE vbrp-werks OBLIGATORY.
    PARAMETER     : p_bukrs LIKE vbrk-bukrs OBLIGATORY.
    SELECT-OPTIONS: s_fkart FOR vbrk-fkart OBLIGATORY.
    SELECT-OPTIONS: s_fkdat FOR vbrk-fkdat OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECT-OPTIONS: s_vbtyp FOR vbrk-vbtyp NO-DISPLAY.
    *>>>>>>
    SELECTION-SCREEN: BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
    PARAMETERS: sales RADIOBUTTON GROUP grp1,
                credit RADIOBUTTON GROUP grp1,
                debit RADIOBUTTON GROUP grp1,
                test RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN: END OF BLOCK block1.
    *<<<<<<
    START-OF-SELECTION.
    To get authorisation check data
      AUTHORITY-CHECK OBJECT 'ZBUKRS'
        ID 'ACTVT' FIELD '01'.
      ID 'BUKRS' FIELD p_bukrs.
      IF sy-subrc NE 0.
        MESSAGE e034(z_apd) WITH p_bukrs.
      ENDIF.
      PERFORM get_auth.
      PERFORM getdata.
    **START-OF-SELECTION
      PERFORM get_unrel_item. "fill the tb with unrel.
      PERFORM get_header_item.
      PERFORM filtering.
      PERFORM calculation.
      PERFORM credit_debit.
    ALV Display
      IF sy-batch <> 'X'.
        SET SCREEN 100.
      ELSE.
        PERFORM background.
      ENDIF.
      IF test = 'X'.
        perform opt.
        PERFORM test.
        <b>set screen 0.</b>
      ENDIF.
    *&      Form  getdata
          text
    -->  p1        text
    <--  p2        text
    FORM getdata .
      SELECT belnr AS fidoc
             awkey AS vbeln
             xblnr
             budat
             gjahr
             blart
             FROM bkpf INTO CORRESPONDING FIELDS OF TABLE itab_temp
             WHERE bukrs = p_bukrs
             AND budat IN s_fkdat
             AND bstat = space.
      IF sy-subrc NE 0.
        MESSAGE 'No Values exist for the Selection.' TYPE 'S'.
        STOP.
      ENDIF.
    ENDFORM.                    " getdata
    *&      Form  get_header_item
          text
    -->  p1        text
    <--  p2        text
    FORM get_header_item .
      LOOP AT itab_temp.
        MOVE itab_temp-fidoc TO it_vbrk_vbrp-belnr.
        MOVE itab_temp-xblnr TO it_vbrk_vbrp-xblnr.
        SELECT SINGLE vbeln
                      fkart
                      knumv
                      netwr
                      waerk
                      fkdat
                      kunag
                      mwsbk
                      fksto
                      bukrs
                      vkorg
                      vbtyp
                      erdat
                      regio
                      FROM vbrk INTO CORRESPONDING FIELDS OF it_vbrk_vbrp
                      WHERE vbeln = itab_temp-vbeln.
        SELECT werks
               aubel
               mvgr5
               wkreg
               posnr
               fkimg
               kzwi1
               kzwi2
               kzwi4
               vgbel
               matnr
               arktx
               vgpos
               aupos
               kdgrp_auft
               FROM vbrp INTO CORRESPONDING FIELDS OF it_vbrk_vbrp
               WHERE vbeln = itab_temp-vbeln.
          APPEND it_vbrk_vbrp.
        ENDSELECT.
        CLEAR it_vbrk_vbrp.
        CLEAR itab_temp.
      ENDLOOP.
    ENDFORM.                    " get_header_item
    *& Class Definition                                                    *
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS:
          handle_toolbar
            FOR EVENT toolbar OF cl_gui_alv_grid
                IMPORTING e_object e_interactive,
          handle_user_command
            FOR EVENT user_command OF cl_gui_alv_grid
                IMPORTING e_ucomm,
          handle_double_click
              FOR EVENT double_click OF cl_gui_alv_grid
                  IMPORTING e_row e_column,
          handle_top_of_page
            FOR EVENT print_top_of_page OF cl_gui_alv_grid.
      PRIVATE SECTION.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    *& Class Implementation                                                *
    CLASS lcl_event_receiver IMPLEMENTATION.
      METHOD handle_toolbar.
      Local Variables
        DATA: ls_toolbar  TYPE stb_button.
        DATA : wa LIKE LINE OF e_object->mt_toolbar.
        LOOP AT e_object->mt_toolbar INTO wa.
          wa-disabled = ''.
          MODIFY  e_object->mt_toolbar FROM wa.
        ENDLOOP.
    *End
      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 icon to to show printing
        CLEAR ls_toolbar.
        MOVE 'PRINT' TO ls_toolbar-function.
        MOVE icon_print TO ls_toolbar-icon.
        MOVE 'Print Receipts' TO ls_toolbar-quickinfo.
        MOVE ' Print' TO ls_toolbar-text.
        MOVE ' ' TO ls_toolbar-disabled.
        APPEND ls_toolbar TO e_object->mt_toolbar.
      ENDMETHOD.                       " Handle_toolbar
      METHOD handle_user_command.
        CASE e_ucomm.
          WHEN 'PRINT'.
            REFRESH : lt_rows , it_vbrk_vbrp.
            CALL METHOD grid1->get_selected_rows
              IMPORTING
                et_index_rows = lt_rows.
            CALL METHOD cl_gui_cfw=>flush.
        ENDCASE.
      ENDMETHOD.                           "handle_user_command
      METHOD handle_double_click.
        IF e_column = 'VBELN'.
          READ TABLE it_vbrk_vbrp INDEX e_row-index INTO wa_it_vbrk_vbrp.
          IF sy-subrc = 0.
    Set parameter ID for transaction screen field
            SET PARAMETER ID 'VF' FIELD wa_it_vbrk_vbrp-vbeln.
        Execute transaction VF03, and skip initial data entry screen
            CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
          ENDIF.
        ENDIF.
      ENDMETHOD.                           "handle_double_click
      METHOD handle_top_of_page.
        WRITE:/ comp_name,
              / plant_name ,
              /  text.
      ENDMETHOD.                           "handle_top_of_page
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    *&      Form  get_auth
          text
    -->  p1        text
    <--  p2        text
    FORM get_auth .
      SELECT SINGLE persnumber FROM usr21 INTO (v_pnum)
          WHERE bname = sy-uname.
      SELECT SINGLE department FROM adcp INTO (v_dname)
          WHERE persnumber = v_pnum.
    ENDFORM.                    " get_auth
    *&      Form  filtering
          text
    -->  p1        text
    <--  p2        text
    FORM filtering .
      s_vbtyp-sign = 'I'.
      s_vbtyp-option = 'EQ'.
      s_vbtyp-low = 'M'.
      APPEND s_vbtyp.
      s_vbtyp-low = 'O'.
      APPEND s_vbtyp.
      s_vbtyp-low = 'P'.
      APPEND s_vbtyp.
      SORT it_vbrk_vbrp BY vbeln posnr.
      LOOP AT it_vbrk_vbrp.
        IF sales = 'X' OR TEST = 'X'.
          IF it_vbrk_vbrp-fksto NE 'X'
               AND it_vbrk_vbrp-werks EQ plant
               AND it_vbrk_vbrp-fkdat IN s_fkdat
               AND it_vbrk_vbrp-vkorg EQ vkorg
               AND it_vbrk_vbrp-fkart IN s_fkart
               AND it_vbrk_vbrp-vbtyp EQ 'M'.
          ELSE.
            DELETE it_vbrk_vbrp.
            CONTINUE.
          ENDIF.
          CLEAR it_vbrk_vbrp.
        ENDIF.
        IF credit = 'X'.
          IF it_vbrk_vbrp-fksto NE 'X'
           AND it_vbrk_vbrp-werks EQ plant
           AND it_vbrk_vbrp-fkdat IN s_fkdat
           AND it_vbrk_vbrp-vkorg EQ vkorg
           AND it_vbrk_vbrp-fkart IN s_fkart
           AND it_vbrk_vbrp-vbtyp EQ 'O'.
          ELSE.
            DELETE it_vbrk_vbrp.
            CONTINUE.
          ENDIF.
          CLEAR it_vbrk_vbrp.
        ENDIF.
        IF debit = 'X'.
          IF it_vbrk_vbrp-fksto NE 'X'
             AND it_vbrk_vbrp-werks EQ plant
             AND it_vbrk_vbrp-fkdat IN s_fkdat
             AND it_vbrk_vbrp-vkorg EQ vkorg
             AND it_vbrk_vbrp-fkart IN s_fkart
             AND it_vbrk_vbrp-vbtyp EQ 'P'.
          ELSE.
            DELETE it_vbrk_vbrp.
            CONTINUE.
          ENDIF.
          CLEAR it_vbrk_vbrp.
        ENDIF.
    *End of Insertion
    *Commented For Debit and Credit Filtering Process on 19.03.07
    IF it_vbrk_vbrp-fksto NE 'X'
        AND it_vbrk_vbrp-werks EQ plant
        AND it_vbrk_vbrp-fkdat IN s_fkdat
        AND it_vbrk_vbrp-vkorg EQ vkorg
        AND it_vbrk_vbrp-fkart IN s_fkart
        AND it_vbrk_vbrp-vbtyp in s_vbtyp.
    **ELSE.
       DELETE it_vbrk_vbrp.
       CONTINUE.
    **ENDIF.
    **CLEAR it_vbrk_vbrp.
      ENDLOOP.
    ENDFORM.                    " filtering
    *&      Form  taxamount
          text
    -->  p1        text
    <--  p2        text
    FORM taxamount .
      SELECT kwert
             kschl
             knumv
             kposn
             kbetr
             FROM konv INTO CORRESPONDING FIELDS OF TABLE itab_konv
             WHERE knumv = it_vbrk_vbrp-knumv
             AND kposn = it_vbrk_vbrp-posnr.
    ENDFORM.                    " taxamount
    *&      Form  calculation
          text
    -->  p1        text
    <--  p2        text
    FORM calculation .
      DATA:sum LIKE konv-kwert,
           SUMM LIKE KONV-KWERT.
        sum5 like konv-kwert,           "jex2
        sum6 like konv-kwert.           "jecx
      LOOP AT it_vbrk_vbrp.
        CLEAR itab_konv.
        PERFORM taxamount.
        SORT itab_konv BY knumv kposn kschl.
    *DIF1
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF1' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif1.
        ENDIF.
    *DIF2
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF2' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif2.
        ENDIF.
    *DIF3
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF3' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif3.
        ENDIF.
    *DIF4
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF4' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif4.
        ENDIF.
    *DIF5
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF5' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif5.
        ENDIF.
    *DIF6
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DIF6' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-dif6.
        ENDIF.
    *DIF13
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'DI13' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-di13.
        ENDIF.
    *ZDEX
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZDEX' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zdex.
        ENDIF.
    *ZDEC
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZDEC' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zdec.
        ENDIF.
    *EXCISE-DUTY JEX2
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JEX2' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-jex2.
        ENDIF.
        IF it_vbrk_vbrp-fkart = 'ZWFX' OR it_vbrk_vbrp-fkart ='ZWJX' OR
           it_vbrk_vbrp-fkart ='S1' OR it_vbrk_vbrp-fkart ='S3'.
          deemed_jex2  =  it_vbrk_vbrp-jex2 + it_vbrk_vbrp-zdex.
          roundoff1 = deemed_jex2 + it_vbrk_vbrp-dif1.
          MOVE roundoff1 TO it_vbrk_vbrp-jex2.
        ENDIF.
    *CESS - JCES
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JCES' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-jces.
        ENDIF.
        roundoff6 = it_vbrk_vbrp-jces + it_vbrk_vbrp-dif6.
        MOVE roundoff6 TO it_vbrk_vbrp-jces.
    *EDUCATION CESS
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JECX' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-jecx.
        ENDIF.
        roundoff2 = it_vbrk_vbrp-jecx + it_vbrk_vbrp-dif2.
        MOVE roundoff2 TO it_vbrk_vbrp-jecx.
        IF it_vbrk_vbrp-fkart = 'ZWFX' OR it_vbrk_vbrp-fkart ='ZWJX' OR
           it_vbrk_vbrp-fkart ='S1' OR it_vbrk_vbrp-fkart ='S3'.
          deemed_jecx  =  it_vbrk_vbrp-jecx + it_vbrk_vbrp-zdec.
          roundoff2 = deemed_jecx + it_vbrk_vbrp-dif1.
          MOVE roundoff2 TO it_vbrk_vbrp-jecx.
        ENDIF.
    *ZSTF SERVICE TAX
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZSTF' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zstf.
        ENDIF.
        it_vbrk_vbrp-zstf = it_vbrk_vbrp-zstf + it_vbrk_vbrp-di13.
    *CST-CST%
        IF it_vbrk_vbrp-fkdat GE '20070101'.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JIN7' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-jin1.
            MOVE itab_konv-kbetr TO it_vbrk_vbrp-jin1_per.
          ENDIF.
        ELSE.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JIN1' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-jin1.
            MOVE itab_konv-kbetr TO it_vbrk_vbrp-jin1_per.
          ENDIF.
        ENDIF.
        roundoff3 = it_vbrk_vbrp-jin1 + it_vbrk_vbrp-dif3.
        MOVE roundoff3 TO it_vbrk_vbrp-jin1.
        it_vbrk_vbrp-jin1_per = it_vbrk_vbrp-jin1_per / 10.
    *LST-LST%
        IF it_vbrk_vbrp-fkdat GE '20070101'.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JIN6' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-jin2.
            MOVE itab_konv-kbetr TO it_vbrk_vbrp-jin2_per.
          ENDIF.
        ELSE.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JIN2' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-jin2.
            MOVE itab_konv-kbetr TO it_vbrk_vbrp-jin2_per.
          ENDIF.
        ENDIF.
        roundoff4 = it_vbrk_vbrp-jin2 + it_vbrk_vbrp-dif4.
        MOVE roundoff4 TO it_vbrk_vbrp-jin2.
        it_vbrk_vbrp-jin2_per = it_vbrk_vbrp-jin2_per / 10.
    Surcharge on LST
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'JIN5' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-jin5.
          MOVE itab_konv-kbetr TO it_vbrk_vbrp-jin5_per.
        ENDIF.
        roundoff5 = it_vbrk_vbrp-jin5 + it_vbrk_vbrp-dif5.
        MOVE roundoff5 TO it_vbrk_vbrp-jin5.
        it_vbrk_vbrp-jin5_per = it_vbrk_vbrp-jin5_per / 10.
    Taxable turn over
        it_vbrk_vbrp-turn = it_vbrk_vbrp-kzwi1 +
                            it_vbrk_vbrp-kzwi2 +
                            it_vbrk_vbrp-jex2 +
                            it_vbrk_vbrp-jces +
                            it_vbrk_vbrp-jecx.
    For moving turn over to LST and CST colomns depending upon
    Region.
        IF it_vbrk_vbrp-regio = '22'.
          MOVE it_vbrk_vbrp-turn TO it_vbrk_vbrp-turn_lst.
        ELSE.
          MOVE it_vbrk_vbrp-turn TO it_vbrk_vbrp-turn_cst.
        ENDIF.
    *CALIBRATION COST
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZCAL' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zcal.
        ENDIF.
    *SERVICE CHARGE
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZSER' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zser.
        ENDIF.
    *CESS ON SERVICE CHARGE
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZCES' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zces.
        ENDIF.
        CLEAR: it_vbrk_vbrp-zins,it_vbrk_vbrp-zkf0.
    *ZINS
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZINS' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zins.
        ENDIF.
    *ZKF0
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZKF0' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zkf0.
        ENDIF.
    *ZKFP
        IF sy-subrc <> 0.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZKFP' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-zkf0.
          ENDIF.
        ENDIF.
    *TOTAL
        it_vbrk_vbrp-total = it_vbrk_vbrp-turn +
                             it_vbrk_vbrp-jin1 +
                             it_vbrk_vbrp-jin2 +
                             it_vbrk_vbrp-jin5 +
                             it_vbrk_vbrp-kzwi4 +
                             it_vbrk_vbrp-zcal +
                             it_vbrk_vbrp-zser +
                             it_vbrk_vbrp-zces.
    Advance Recieved (ZADV)
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZADV' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zadv.
        ENDIF.
    Net Payable
        it_vbrk_vbrp-net = it_vbrk_vbrp-total - it_vbrk_vbrp-zadv.
    *DEALER FEE
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZCOD' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zcod.
        ENDIF.
        IF it_vbrk_vbrp-zcod IS INITIAL.
          READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZCOA' BINARY SEARCH.
          IF sy-subrc = 0.
            MOVE itab_konv-kwert TO it_vbrk_vbrp-zcod.
          ENDIF.
        ENDIF.
    *DEEMED BENEFIT
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZDBK' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zdbk.
        ENDIF.
    *OPTIONAL VALUE
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZOPT' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zopt.
        ENDIF.
    *FOC COUPON VALUE
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZFOC' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zfoc.
        ENDIF.
    *FOC FILTER
        READ TABLE itab_konv WITH KEY knumv = it_vbrk_vbrp-knumv kposn = it_vbrk_vbrp-posnr kschl = 'ZFCF' BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE itab_konv-kwert TO it_vbrk_vbrp-zfcf.
        ENDIF.
    Net Realisation
        it_vbrk_vbrp-netreal = it_vbrk_vbrp-kzwi1 - ( it_vbrk_vbrp-zcod +
                                   it_vbrk_vbrp-zopt + it_vbrk_vbrp-zfoc
                                  + it_vbrk_vbrp-zfcf ).
        CLEAR : vbelv,posnv.
        vbelvp = it_vbrk_vbrp-aubel.
        vbelv = it_vbrk_vbrp-vgbel.
        posnv = it_vbrk_vbrp-posnr.
        CLEAR kunnr.
        CLEAR adrnr.
    Getting Sales type
        SELECT SINGLE kvgr2 INTO it_vbrk_vbrp-kvgr2
                            FROM vbak
                            WHERE vbeln = vbelvp.
        SELECT SINGLE bezei INTO it_vbrk_vbrp-stypetext
                            FROM tvv2t
                            WHERE spras = 'EN'
                            AND kvgr2 = it_vbrk_vbrp-kvgr2.
    PWC code Desc
        SELECT SINGLE bezei INTO it_vbrk_vbrp-bezei5
                            FROM tvm5t
                            WHERE spras = 'EN'
                            AND   mvgr5 = it_vbrk_vbrp-mvgr5.
        SELECT SINGLE bstkd bstdk INTO (it_vbrk_vbrp-bstkd,
        it_vbrk_vbrp-bstdk)
                                  FROM vbkd
                                 WHERE vbeln = it_vbrk_vbrp-aubel
                                 AND posnr EQ '0'.
        CLEAR kunnr.
        CLEAR adrnr.
        SELECT SINGLE kunnr adrnr INTO (kunnr,adrnr) FROM vbpa
                                       WHERE vbeln = vbelv
                                       AND posnr = '0'
                                       AND   parvw = 'WE'.
    *ship-to city
        SELECT SINGLE name1 name2 ort01 INTO
                        (it_vbrk_vbrp-name2,it_vbrk_vbrp-name3,
                        it_vbrk_vbrp-ort01)
                        FROM kna1
                        WHERE kunnr = kunnr.
        CLEAR kunnr1.
        SELECT SINGLE kunnr INTO kunnr1 FROM vbpa
                                       WHERE vbeln = vbelvp
                                       AND posnr = '0'
                                       AND   parvw = 'ZF'.
        CLEAR it_vbrk_vbrp-fname.
        SELECT SINGLE name2 INTO
                        (it_vbrk_vbrp-fname)
                        FROM kna1
                        WHERE kunnr = kunnr1.
        CLEAR country.
        CLEAR: it_vbrk_vbrp-addr1,it_vbrk_vbrp-addr2,it_vbrk_vbrp-name3,
        it_vbrk_vbrp-city1,it_vbrk_vbrp-country.
        SELECT SINGLE name3 street str_suppl1 str_suppl2 city1 city2 country
        INTO
                             (it_vbrk_vbrp-name3,it_vbrk_vbrp-street,
                             it_vbrk_vbrp-addr1,it_vbrk_vbrp-addr2,
                             it_vbrk_vbrp-city1,it_vbrk_vbrp-city2,
                             it_vbrk_vbrp-country)
                             FROM adrc
                             WHERE addrnumber = adrnr.
        CLEAR it_vbrk_vbrp-landx.
        SELECT SINGLE landx INTO it_vbrk_vbrp-landx FROM t005t
                            WHERE spras = 'EN'
                            AND   land1 = country.
        CLEAR obknr.
        CLEAR equnr.
        CLEAR it_vbrk_vbrp-typbz.
    Model and Serial No Ref
        SELECT SINGLE obknr INTO obknr FROM ser01
                                       WHERE lief_nr = it_vbrk_vbrp-vgbel
                                       AND   posnr   = it_vbrk_vbrp-vgpos.
        IF sy-subrc EQ 0.
          SELECT DISTINCT equnr sernr taser INTO TABLE it_objk
                                         FROM objk
                                         WHERE obknr = obknr.
                                        AND   taser = 'SER01'.
          LOOP AT it_objk.
            IF it_objk-taser NE 'SER01'.
              DELETE it_objk.
            ENDIF.
          ENDLOOP.
          READ TABLE it_objk INDEX 1.
          IF sy-subrc

    Hi,
    if you want to leave the program and go back to the code then use.
    when 'BACK'.
    set screen 0.
    leave program.
    or if you want to go back to selection screen
    when 'BACK'.
    leave to screen 0.
    thanks
    vivekanand

  • Create, Update & Save Functions

    Hi All,
    This is my code for the requirement to print sales order in ALV Grid Format using OOPS concept.
    Please tell me how i should add select button to the ALV Grid in the first column.
    Also when i click on CREATE button a new blank line should be added to the alv grid.
    when i click on UPDATE button the selected row should become editable & when i click on save then my Ztable should be update with the new values and all the changes made.
    The Ztable has fields as of the IT_FIANL table.
    I have gone through many links regarding this topic but cant implement it in my code.
    REPORT  z12darp_shad_so_alv_oops
            MESSAGE-ID z12darp1.
    *Class definition for handling double click
    CLASS event_class DEFINITION DEFERRED.
    *Class definition for ALV toolbar
    CLASS lcl_alv_toolbar   DEFINITION DEFERRED.
    *AUTHOR: Darpana. Ahire
    *DATE: 28/11/2008
    *DESCRIPTION: To printsales order as Interactive ALV using OOPS concept.
    *&               D A T A   D E C L R A T I O N
    type-pools: icon.
    INCLUDE z12darp_alv_oops.
    data: ok_code_2008 like sy-ucomm.
    *&  Include           Z12DARP_ALV_OOPS
    *Author: Darpana. Ahire
    *Date: 28/11/2008
    *Description: ALV Grid Using OOPS concept.
    tables: z12Darp_final.
    types: begin of ty_vbak,
             vbeln   type   vbeln_va,
             erdat   type   erdat,
             vkorg   type   vkorg,
             spart   type   spart,
          end of ty_vbak.
    types: begin of ty_vbap,
             vbeln   type   vbeln_va,
             posnr   type   posnr_va,
             matnr   type   matnr,
             netpr   type   netpr,
             netwr   type   netwr_ap,
           end of ty_vbap.
    types: begin of ty_final,
             vbeln   type   vbeln_va,
             erdat   type   erdat,
             vkorg   type   vkorg,
             spart   type   spart,
             posnr   type   posnr_va,
             matnr   type   matnr,
             netpr   type   netpr,
             netwr   type   netwr_ap,
           end of ty_final.
    data: wa_vbak   type   ty_vbak,
          wa_vbap   type   ty_vbap,
          wa_final  type   ty_final.
    data: it_vbak   type   standard table of   ty_vbak,
          it_vbap   type   standard table of   ty_vbap,
          it_final  type   standard table of   ty_final.
    data: v_vbeln   type   vbeln_va.
    data: cust   type   ref to     cl_gui_custom_container,
          alv    type   ref to     cl_gui_alv_grid,
          event_receiver TYPE REF TO event_class.
    data: wa_fcat       type    lvc_s_fcat,
          it_fcat       type    lvc_t_fcat,
          wa_layout     type    lvc_s_layo.
    *Declaration for toolbar buttons
    DATA : ty_toolbar TYPE stb_button.
    data: c_alv_toolbar    TYPE REF TO lcl_alv_toolbar.      "Alv toolbar
    *&               S E L E C T I O N     S C R E E N
    SELECT-OPTIONS: ss_vbeln FOR v_vbeln.
    *&                 I N I T I A L I Z A T I O N
    INITIALIZATION.
      PERFORM initial.
    *&               A T   S E L E C T I O N - S C R E E N
    AT SELECTION-SCREEN.
      PERFORM at_sel_scr.
    *&            S T A R T - O F - S E L E C T I O N
    START-OF-SELECTION.
      PERFORM sel_records.
      PERFORM join_tables.
      PERFORM alv_output.
    * CLASS lcl_event_receiver DEFINITION
    CLASS event_class DEFINITION.
    *Handling double click
      PUBLIC SECTION.
      METHODS:
        handle_double_click
        FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column.
    ENDCLASS. "lcl_event_receiver DEFINITION
    * CLASS lcl_event_receiver IMPLEMENTATION
    CLASS event_class IMPLEMENTATION.
    METHOD handle_double_click.
      case e_column.
        when 'MATNR'.
          read table it_final into wa_final index e_row-index.
          set parameter id 'MAT' field wa_final-matnr.
          call transaction 'MM03' and skip first screen.
       endcase.
    ENDMETHOD.           "handle_double_click
    endclass.
    *       CLASS lcl_alv_toolbar DEFINITION
    *       ALV event handler
    CLASS lcl_alv_toolbar DEFINITION.
      PUBLIC SECTION.
    *Event for toolbar
        on_toolbar
           FOR EVENT toolbar
           OF  cl_gui_alv_grid
           IMPORTING e_object e_interactive,
      handle_user_command
            for event user_command of cl_gui_alv_grid
                importing e_ucomm.
    endclass.
    *       CLASS lcl_alv_toolbar IMPLEMENTATION
    *       ALV event handler
    CLASS lcl_alv_toolbar IMPLEMENTATION.
    METHOD on_toolbar.
    *   Add customized toolbar buttons.
    *   variable for Toolbar Button
        clear ty_toolbar.
        ty_toolbar-icon      =  icon_create.
        ty_toolbar-butn_type = 0.
        ty_toolbar-text = 'CREATE'.
        APPEND ty_toolbar TO e_object->mt_toolbar.
        clear ty_toolbar.
        ty_toolbar-icon      =  icon_change.
        ty_toolbar-butn_type = 0.
        ty_toolbar-text = 'UPDATE'.
        APPEND ty_toolbar TO e_object->mt_toolbar.
        clear ty_toolbar.
        ty_toolbar-icon      =  icon_system_save.
        ty_toolbar-butn_type = 0.
        ty_toolbar-text = 'SAVE'.
        APPEND ty_toolbar TO e_object->mt_toolbar.
    ENDMETHOD.                    "on_toolbar
    method handle_user_command.
    case e_ucomm.
        when 'CREATE'.
        when 'UPDATE'.
    endcase.
    endmethod.                           "handle_user_command
    ENDCLASS.            "lcl_event_receiver IMPLEMENTATION
    *&      Module  STATUS_2008  OUTPUT
    *       text
    MODULE status_2008 OUTPUT.
      SET PF-STATUS 'MENU1'.
      SET TITLEBAR 'TITLE1'.
    ENDMODULE.                 " STATUS_2008  OUTPUT
    *&      Module  alv_display  OUTPUT
    *       text
    MODULE alv_display OUTPUT.
      IF cust IS INITIAL.
    *    Creating object of container
        CREATE OBJECT cust
        EXPORTING
          container_name              = 'CUSTOM'.
    *    Creating object of alv
        CREATE OBJECT alv
          EXPORTING
            i_parent          = cust.
    ** create ALV event handler
    *  CREATE OBJECT c_alv_toolbar
    *    EXPORTING
    *      io_alv_grid = alv.
    create object c_alv_toolbar.
    * Register event handler
      SET HANDLER c_alv_toolbar->on_toolbar FOR alv.
      set handler c_alv_toolbar->handle_user_command for alv.
    *    alv layout
        PERFORM alv_layout.
    *    alv field catalogue
        PERFORM fieldcatalog_display.
    *    Displaying the ALV grid
        CALL METHOD alv->set_table_for_first_display(
          EXPORTING
            is_layout                     = wa_layout
          CHANGING
            it_outtab                     = it_final
            it_fieldcatalog               = it_fcat ).
    *Create object of the event class and setting handler for double click
        CREATE OBJECT event_receiver.
        SET HANDLER event_receiver->handle_double_click FOR alv.
    ENDIF.
    ENDMODULE.                 " alv_display  OUTPUT
    *&      Module  USER_COMMAND_2008  INPUT
    *       text
    module USER_COMMAND_2008 input.
      case ok_code_2008.
        when 'EXT'.
          leave program.
        when 'BCK'.
          leave to screen 0.
        when 'UP'.
          leave program.
      endcase.
    endmodule.                 " USER_COMMAND_2008  INPUT
    *&                E N D   O F   M A I N   P R O G R A M
    *&      Form  initial
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM initial .
      CLEAR: wa_vbak,
             wa_vbap,
             wa_final.
      REFRESH: it_vbak,
               it_vbap,
               it_final.
    ENDFORM.                    " initial
    *&      Form  at_sel_scr
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM at_sel_scr .
      SELECT vbeln
        INTO TABLE it_vbak
        FROM vbak
        WHERE vbeln IN ss_vbeln.
      IF sy-subrc <> 0.
        MESSAGE e000.
      ENDIF.
    ENDFORM.                    " at_sel_scr
    *&      Form  sel_records
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM sel_records .
      SELECT vbeln
             erdat
             vkorg
             spart
      INTO TABLE it_vbak
      FROM vbak
      WHERE vbeln IN ss_vbeln.
      IF sy-subrc <> 0.
        MESSAGE e000.
      ENDIF.
      SELECT vbeln
             posnr
             matnr
             netpr
             netwr
      INTO TABLE it_vbap
      FROM vbap
      FOR ALL ENTRIES IN it_vbak
      WHERE vbeln = it_vbak-vbeln.
      IF sy-subrc <> 0.
        MESSAGE e000.
      ENDIF.
    ENDFORM.                    " sel_records
    *&      Form  join_tables
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM join_tables .
      SORT it_vbak BY vbeln.
      SORT it_vbap BY vbeln posnr.
      LOOP AT it_vbap INTO wa_vbap.
        READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_vbap-vbeln
        BINARY SEARCH.
        wa_final-vbeln = wa_vbak-vbeln.
        wa_final-erdat = wa_vbak-erdat.
        wa_final-vkorg = wa_vbak-vkorg.
        wa_final-spart = wa_vbak-spart.
        wa_final-posnr = wa_vbap-posnr.
        wa_final-matnr = wa_vbap-matnr.
        wa_final-netpr = wa_vbap-netpr.
        wa_final-netwr = wa_vbap-netwr.
        APPEND wa_final TO it_final.
        CLEAR wa_final.
      ENDLOOP.
    ENDFORM.                    " join_tables
    *&      Form  alv_output
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM alv_output .
      CALL SCREEN 2008.
    ENDFORM.                    " alv_output
    *&      Form  alv_layout
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM alv_layout .
      wa_layout-grid_title = 'SALES ORDER'.
      wa_layout-zebra = 'X'.
    ENDFORM.                    " alv_layout
    *&      Form  fieldcatalog_display
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM fieldcatalog_display .
    *  IT_FINAL-VBELN.                    SALES ORDER NUMBER
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='2'.
      wa_fcat-fieldname ='VBELN'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = 'X'.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='SALES ORDER NO.'.
      wa_fcat-outputlen   = 15.
      wa_fcat-ref_table ='VBAK'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-POSNR.                    SALES ITEM NUMBER
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='3'.
      wa_fcat-fieldname ='POSNR'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = 'X'.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='SALES ITEM NO'.
      wa_fcat-outputlen   = 15.
      wa_fcat-ref_table ='VBAP'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-ERDAT.                    DATE ON WHICH DOCUMENT WAS CREATED
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='4'.
      wa_fcat-fieldname ='ERDAT'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='DATE OF CREATION'.
      wa_fcat-outputlen   = 10.
      wa_fcat-ref_table ='VBAK'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-VKORG.                    SALES ORGANIZATION
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='5'.
      wa_fcat-fieldname ='VKORG'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='SALES ORG'.
      wa_fcat-outputlen   = 10.
      wa_fcat-ref_table ='VBAK'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-SPART.                    DIVISION
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='6'.
      wa_fcat-fieldname ='SPART'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='DIVISION'.
      wa_fcat-outputlen   = 10.
      wa_fcat-ref_table ='VBAK'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-MATNR.                    MATERIAL NUMBER
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='7'.
      wa_fcat-fieldname ='MATNR'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='MATERIAL NUMBER'.
      wa_fcat-outputlen   = 20.
      wa_fcat-ref_table ='VBAP'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-NETPR.                    NET PRICE
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='8'.
      wa_fcat-fieldname ='NETPR'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='NET PRICE'.
      wa_fcat-outputlen   = 15.
      wa_fcat-ref_table ='VBAP'.
      APPEND wa_fcat TO it_fcat.
    *  IT_FINAL-NETWR.                    NAET VALUE
      CLEAR wa_fcat.
      wa_fcat-col_pos  ='9'.
      wa_fcat-fieldname ='NETWR'.
      wa_fcat-tabname  ='IT_FINAL'.
      wa_fcat-key      = ' '.
      wa_fcat-just     = 'L'.
      wa_fcat-hotspot  = ' '.
      wa_fcat-lzero    ='X'.
      wa_fcat-seltext ='NET VALUE'.
      wa_fcat-outputlen   = 15.
      wa_fcat-ref_table ='VBAP'.
      APPEND wa_fcat TO it_fcat.
    ENDFORM.                    " fieldcatalog_display
    Regards,
    Darpana.
    Edited by: Darpana Ahire on Dec 3, 2008 7:10 AM
    Edited by: Matt on Dec 4, 2008 12:04 PM - added  tags

    im99_chs wrote:
    I have created a package with some functions in it.Keep in mind that these functions requires PL/SQL code to be executed. Thus it needs a context switch from the SQL engine (executing your view code) to the PL/SQL engine (to do the function call).
    This may work fine for smaller data sets. But it does not scale well as context switches are expensive operations with inherent latency. The more switches there are, the bigger the execution time chunk required for context switching.
    The ideal is to rather use SQL to perform the work of the function. SQL code can implement if-then-else logic via the DECODE() SQL function and SQL CASE command. Analytical functions can be used for complex aggregation and calculation.
    If a user define (PL/SQL) function is needed, then ensure that the function is as fast as possible (minimal moving parts), and consider defining it as a deterministic function if the same input always produces the same output.

Maybe you are looking for