You are on page 1of 25

Using basic events in OOPs ALV

Added by Tarun Gambhir, last edited by Tarun Gambhir on Jun 16, 2009
The below code illustrates the use of basic events in OO ALV like:-
handle toolbar of ALV
handle user command using the buttons in toolbar
handle double click on field values
*&---------------------------------------------------------------------*
*& Report ZALV_OOPS_DEMO
*&
*&---------------------------------------------------------------------*
*& OOPs ALV Demo Program
*&
*&---------------------------------------------------------------------*
REPORT zalv_oops_demo.
TYPE-POOLS : cndp.
CLASS :lcl_event_receiver DEFINITION DEFERRED.
*&---------------------------------------------------------------------*
* DECLARATIONS
*&---------------------------------------------------------------------*
*TYPE DECLARATION
TYPES : BEGIN OF t_material,
matnr TYPE matnr,
mtart TYPE mtart,
mbrsh TYPE mbrsh,
matkl TYPE matkl,
meins TYPE meins,
END OF t_material.
TYPES : BEGIN OF t_mat_detail,
matnr TYPE matnr,
werks TYPE werks_d,
lgort TYPE lgort_d,
END OF t_mat_detail.
*INTERNAL TABLE/WORK AREA DECLARATION
DATA : it_material TYPE STANDARD TABLE OF t_material,
wa_material TYPE t_material.
DATA : it_mat_detail TYPE STANDARD TABLE OF t_mat_detail,
wa_mat_detail TYPE t_mat_detail.
*VARIABLE DECLARATION
DATA : v_repid TYPE sy-repid,
v_okcode TYPE sy-ucomm.
*CONSTANT DECLARATION
CONSTANTS : c_check(1) TYPE c VALUE 'X'.
*NAME OF CUSTOM CONTAINER ADDED ON SCREEN
DATA : z_container TYPE scrfname VALUE 'MAT_CONTAINER'.
DATA : z_custom_container TYPE REF TO cl_gui_custom_container.
DATA : v_event_receiver TYPE REF TO lcl_event_receiver.
*ALV GRID CONTAINER
DATA : z_grid TYPE REF TO cl_gui_alv_grid.
*FIELD CATALOG
DATA : it_fieldcat TYPE lvc_t_fcat,
wa_fieldcat TYPE lvc_s_fcat.
*LAYOUT
DATA : wa_layout TYPE lvc_s_layo.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
v_repid = sy-repid.
*----------------------------------------------------------------------*
* CLASS lcl_oo_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_oo_alv DEFINITION.
PUBLIC SECTION.
METHODS populate_itab.
METHODS create_field_catalog.
METHODS create_layout.
METHODS display_alv.
ENDCLASS. "lcl_oo_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_oo_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_oo_alv IMPLEMENTATION.
*-->populate the internal table with data
METHOD populate_itab.
SELECT matnr
mtart
mbrsh
matkl
meins
FROM mara
INTO TABLE it_material.
ENDMETHOD. "populate_itab
*-->create the field catalog to map the data
METHOD create_field_catalog.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-coltext = 'Material #'.
wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MTART'.
wa_fieldcat-coltext = 'Material Type'.
wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MBRSH'.
wa_fieldcat-coltext = 'Industry'.
wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATKL'.
wa_fieldcat-coltext = 'Material Group'.
wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-coltext = 'UOM'.
wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDMETHOD. "create_field_catalog
*-->set the layout for the ALV display
METHOD create_layout.
wa_layout-grid_title = v_repid.
wa_layout-zebra = c_check.
wa_layout-grid_title = 'OOPs ALV'.
* wa_layout-stylefname = 'CELL_STYLE'.
ENDMETHOD. "create_layout
*-->display data in ALV Grid
METHOD display_alv.
CALL METHOD z_grid->set_table_for_first_display
EXPORTING
is_layout = wa_layout
CHANGING
it_outtab = it_material
it_fieldcatalog = it_fieldcat
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.
ENDMETHOD. "display_alv
ENDCLASS. "lcl_oo_alv IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
*---------------------------------------------------------------------*
* *
*---------------------------------------------------------------------*
PUBLIC SECTION.
*-->Method for User command
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.
ENDCLASS. "lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
* append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
* append an icon to show booking table
CLEAR ls_toolbar.
MOVE 'DETAILS' TO ls_toolbar-function.
MOVE icon_employee TO ls_toolbar-icon.
MOVE 'Show Details'(111) TO ls_toolbar-quickinfo.
MOVE 'Detail'(112) TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
*-->Handle user command
METHOD handle_user_command.
CASE e_ucomm.
WHEN 'DETAILS'.
DATA: lt_rows TYPE lvc_t_row,
wa_rows LIKE LINE OF lt_rows.
REFRESH it_mat_detail.
CLEAR : wa_mat_detail, wa_material.
CALL METHOD z_grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows.
CALL METHOD cl_gui_cfw=>flush.
READ TABLE lt_rows INTO wa_rows INDEX 1 TRANSPORTING index.
IF sy-subrc = 0.
READ TABLE it_material INTO wa_material INDEX wa_rows-index
TRANSPORTING matnr.
IF sy-subrc = 0.
SELECT matnr werks lgort
FROM mard
INTO TABLE it_mat_detail
WHERE matnr = wa_material-matnr.
IF sy-subrc = 0.
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
EXPORTING
endpos_col = 30
endpos_row = 10
startpos_col = 1
startpos_row = 1
titletext = 'Material Details'
TABLES
valuetab = it_mat_detail
EXCEPTIONS
break_off = 1
OTHERS = 2.
IF sy-subrc = 1.
MESSAGE 'Action Cancelled..!!' TYPE 'S'.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
ENDMETHOD. "handle_user_command
METHOD handle_double_click.
READ TABLE it_material INTO wa_material INDEX e_row-index
TRANSPORTING matnr.
SET PARAMETER ID 'MAT' FIELD wa_material-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
* CLASS INSTANCE VARIABLE
*&---------------------------------------------------------------------*
DATA : obj1 TYPE REF TO lcl_oo_alv.
*&---------------------------------------------------------------------*
* START OF SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*CREATE OBJECT
CREATE OBJECT : obj1,
v_event_receiver.
*-->call method to populate the internal table
CALL METHOD obj1->populate_itab.
*&---------------------------------------------------------------------*
* CALL SCREEN
*&---------------------------------------------------------------------*
CALL SCREEN 1011.
*&---------------------------------------------------------------------*
*& Module STATUS_1011 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1011 OUTPUT.
SET PF-STATUS 'ZALV_STATUS'.
SET TITLEBAR 'ZALV_OOPS'.
ENDMODULE. " STATUS_1011 OUTPUT
*&---------------------------------------------------------------------*
*& Module CREATE_INSTANCE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE create_instance OUTPUT.
*CUSTOM CONTAINER INSTANCE
CREATE OBJECT z_custom_container
EXPORTING
container_name = z_container
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.
*ALV GRID INSTANCE
CREATE OBJECT z_grid
EXPORTING
i_parent = z_custom_container
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.
SET HANDLER v_event_receiver->handle_toolbar FOR z_grid.
SET HANDLER v_event_receiver->handle_user_command FOR z_grid.
SET HANDLER v_event_receiver->handle_double_click FOR z_grid.
ENDMODULE. " CREATE_INSTANCE OUTPUT
*&---------------------------------------------------------------------*
*& Module DISPLAY_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE display_data OUTPUT.
*-->call method to create field catalog
CALL METHOD obj1->create_field_catalog.
*-->call method to create the layout
CALL METHOD obj1->create_layout.
*-->call method to display data in ALV Grid
CALL METHOD obj1->display_alv.
ENDMODULE. " DISPLAY_DATA OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1011 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1011 INPUT.
v_okcode = sy-ucomm.
CASE v_okcode.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_1011 INPUT

ALV Grid Report - with Object Oriented SALV Classes

Added by Vinod Kumar, last edited by Vinod Kumar on May 23, 2012 (view change)
ALV Grid Report - with Object Oriented SALV Classes
Summary
This Post narrates the sample code for creating ALV Grid Report with Object Oriented method. Basic Functionalities for ALV Grid display is attained using different SALV Classes.
Author(s): Vinod Kumar T

Company: NIIT Technologies Limited
Created on: 05.10.2010
Author(s) Bio
Vinod Kumar is an ABAP consultant working with NIIT Technologies Limited.
Class and Methods used in the Report
Class Name Parent Class Method Description
CL_SALV_TABLE FACTORY To Create the Instance of ALV Table Object
CL_SALV_TABLE CL_SALV_MODEL_LIST GET_LAYOUT Layout Object with Current Settings
CL_SALV_TABLE GET_FUNCTIONS Returns Object to Define the functions of the ALV Table
CL_SALV_TABLE CL_SALV_MODEL_LIST GET_DISPLAY_SETTINGS Returns Global Settings for ALV Display
CL_SALV_TABLE GET_AGGREGATIONS Return Object to Edit Aggregation Functions Settings
CL_SALV_TABLE GET_SORTS Return Object to Set all Sort Information
CL_SALV_TABLE GET_SELECTIONS Return Object to do Settings for Selection pattern for Row(s) and Column(s)
CL_SALV_TABLE CL_SALV_MODEL_BASE SET_TOP_OF_LIST Set the Contents in Top of List in ALV Display
CL_SALV_TABLE GET_EVENT Return the Object to manage existing events
CL_SALV_TABLE GET_COLUMNS Return individual column objects of Output table
CL_SALV_LAYOUT SET_KEY Set Layout Key for Layouts in Report
CL_SALV_LAYOUT GET_LAYOUTS Returns all layouts defined for the report
CL_SALV_LAYOUT F4_LAYOUTS F4 Help to Display Existing Layouts of the Report
CL_SALV_LAYOUT SET_SAVE_RESTRICTION Restriction Methods while saving the Layout
CL_SALV_LAYOUT SET_DEFAULT Activate the Default Layout
CL_SALV_LAYOUT SET_INITIAL_LAYOUT Set specific Layout as Initial layout while starting ALV Display
CL_SALV_FUNCTIONS_LIST CL_SALV_FUNCTIONS SET_ALL Activate all Internal Functions of ALV
CL_SALV_DISPLAY_SETTINGS SET_STRIPPED_PATTERN Set ALV Display in Stripped Pattern
CL_SALV_DISPLAY_SETTINGS SET_LIST_HEADER Set Title of the ALV Display
CL_SALV_SORTS ADD_SORT Define Sort for a Specific Column
CL_SALV_SELECTIONS SET_SELECTION_MODE Set the Selection Methods
CL_SALV_AGGREGATIONS ADD_AGGREGATION Add Aggregation function of a Table column
CL_SALV_FORM_LAYOUT_GRID CREATE_HEADER_INFORMATION Create Header Information in the Cell
CL_SALV_FORM_LAYOUT_GRID CL_SALV_FORM_UIE_LAYOUT_GRID ADD_ROW Add New row in the Grid
CL_SALV_FORM_LAYOUT_GRID CREATE_LABEL Create Label in Grid Cell
CL_SALV_FORM_LAYOUT_GRID CREATE_TEXT Create Text in Grid Cell
CL_SALV_FORM_LABEL CL_SALV_FORM_UIE_TEXT_VIEW SET_TEXT Assign Text to the Label in Grid Cell
CL_SALV_COLUMNS_TABLE CL_SALV_COLUMNS GET Get the list of Columns of output table
CL_SALV_COLUMNS_TABLE CL_SALV_COLUMNS SET_OPTIMIZE Optimize the width of columns
CL_SALV_COLUMNS_TABLE CL_SALV_COLUMNS SET_KEY_FIXATION Fix the Key columns while Vertical Scrolling
CL_SALV_COLUMNS_TABLE CL_SALV_COLUMNS_LIST SET_COLOR_COLUMN Assign colors to the columns in output table
CL_SALV_COLUMNS_TABLE CL_SALV_COLUMNS GET_COLUMN Get Properties of Single Column
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN GET_DDIC_DATATYPE Get data type of Selected column
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN SET_TECHNICAL Set column as Technical (Invisible)
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN GET_DDIC_INITTYPE Returns Internal ABAP Data Type
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN GET_DDIC_DOMAIN Get the Domain Name of Column
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN_LIST SET_CELL_TYPE Set Cell type of Column
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN_LIST SET_COLOR Set the color of Single Column
CL_SALV_COLUMN_TABLE CL_SALV_COLUMN_LIST SET_KEY Set the column as Key column

Sample Code

*&---------------------------------------------------------------------*
*& Report ZVK_CL_SALV
*&---------------------------------------------------------------------*
*&Report using OOPs with Basic functionalities.
*&---------------------------------------------------------------------*

REPORT zvk_cl_salv_1.
TABLES : vbak.
TYPE-POOLS : abap,rsanm.

TYPES : BEGIN OF t_vbak.
INCLUDE TYPE vbak.
TYPES : t_color TYPE lvc_t_scol,
END OF t_vbak.

DATA : lt_vbak TYPE STANDARD TABLE OF t_vbak,
ls_vbak TYPE t_vbak.

FIELD-SYMBOLS : TYPE t_vbak.

DATA : l_rec(5) TYPE n.

** Declaration for ALV Grid **
DATA : gr_table TYPE REF TO cl_salv_table.

** Declarations for ALV Functions
DATA : gr_functions TYPE REF TO cl_salv_functions_list.

** declaration for ALV Columns
DATA : gr_columns TYPE REF TO cl_salv_columns_table,
gr_column TYPE REF TO cl_salv_column_table,
lt_column_ref TYPE salv_t_column_ref,
ls_column_ref TYPE salv_s_column_ref.

** declaration for Layout Settings
DATA : gr_layout TYPE REF TO cl_salv_layout,
gr_layout_key TYPE salv_s_layout_key,
ls_layout TYPE salv_s_layout,
lt_layout_info TYPE salv_t_layout_info.

** Declaration for Global Display Settings
DATA : gr_display TYPE REF TO cl_salv_display_settings,
lv_title TYPE lvc_title.

** Declaration for Aggregate Function Settings
DATA : gr_aggr TYPE REF TO cl_salv_aggregations.

** Declaration for Sort Function Settings
DATA : gr_sort TYPE REF TO cl_salv_sorts.

** Declaration for Table Selection settings
DATA : gr_select TYPE REF TO cl_salv_selections.

** Declaration for Top of List settings
DATA : gr_content TYPE REF TO cl_salv_form_element.

** Class for handling Events
CLASS : lcl_handle_events DEFINITION DEFERRED.
DATA : gr_events TYPE REF TO lcl_handle_events,
lr_events TYPE REF TO cl_salv_events_table.

** Coloring of Date columns **
DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo,
ls_colo TYPE lvc_s_colo.

** Color Structure of columns **
DATA : lt_color TYPE lvc_t_scol,
ls_color TYPE lvc_s_scol.
*----------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS : on_double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
METHODS : on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_double_click.
PERFORM get_ord_info USING row column.
ENDMETHOD. "on_double_click
METHOD on_link_click.
PERFORM get_ord_info USING row column.
ENDMETHOD. "on_link_click
ENDCLASS. "lcl_handle_events IMPLEMENTATION
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS : p_erdat FOR vbak-erdat.
PARAMETER : p_var TYPE slis_vari.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
CLEAR : ls_layout.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_vbak.
CATCH cx_salv_msg .
ENDTRY.

IF gr_table IS NOT INITIAL.
MOVE sy-repid TO gr_layout_key-report. "Set Layout Key as Report ID"
gr_layout = gr_table->get_layout( ). "Get Layout of the Table"
gr_layout->set_key( gr_layout_key ). "Set Layout key to Layout"
lt_layout_info = gr_layout->get_layouts( )."Get the Layouts of report"
IF lt_layout_info[] IS NOT INITIAL.
ls_layout = gr_layout->f4_layouts( ). "Activate F4 Help for Layouts"
IF ls_layout IS NOT INITIAL.
MOVE ls_layout-layout TO p_var.
ENDIF.
ENDIF.
ENDIF.

START-OF-SELECTION.
REFRESH : lt_vbak.
SELECT * FROM vbak
INTO CORRESPONDING FIELDS OF TABLE lt_vbak
WHERE erdat IN p_erdat.


IF sy-subrc EQ 0.
DESCRIBE TABLE lt_vbak LINES l_rec.
PERFORM set_color.
PERFORM alv_grid_display.
ENDIF.

*&---------------------------------------------------------------------*
*& Form alv_grid_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_grid_display.
CLEAR : gr_table.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_vbak.
CATCH cx_salv_msg .
ENDTRY.
IF gr_table IS INITIAL.
MESSAGE 'Error Creating ALV Grid ' TYPE 'I' DISPLAY LIKE 'E'.
STOP.
ENDIF.
** Get functions details
gr_functions = gr_table->get_functions( ).

** Activate All Buttons in Tool Bar
gr_functions->set_all( if_salv_c_bool_sap=>true ).

******* Layout Settings *******
CLEAR : gr_layout, gr_layout_key.
MOVE sy-repid TO gr_layout_key-report. "Set Report ID as Layout Key"

gr_layout = gr_table->get_layout( ). "Get Layout of Table"
gr_layout->set_key( gr_layout_key ). "Set Report Id to Layout"
gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ). "No Restriction to Save Layout"
IF p_var IS INITIAL.
gr_layout->set_default( if_salv_c_bool_sap=>true ). "Set Default Variant"
ELSE.
gr_layout->set_initial_layout( p_var ). "Set the Selected Variant as Initial"
ENDIF.

******* Global Display Settings *******
CLEAR : gr_display.
MOVE 'Sales Order Details' TO lv_title.
gr_display = gr_table->get_display_settings( ). " Global Display settings"
gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ). "Activate Strip Pattern"
gr_display->set_list_header( lv_title ). "Report Header"

******* Aggregate Function Settings *******
gr_aggr = gr_table->get_aggregations( ). "Get Aggregate Functions"

******* Sort Functions *******
gr_sort = gr_table->get_sorts( ).
IF gr_sort IS NOT INITIAL.
TRY.
gr_sort->add_sort( columnname = 'ERNAM'
position = 1
sequence = if_salv_c_sort=>sort_up
subtotal = if_salv_c_bool_sap=>true
group = if_salv_c_sort=>group_none
obligatory = if_salv_c_bool_sap=>false ).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.

TRY.
gr_sort->add_sort( columnname = 'ERDAT'
position = 2
sequence = if_salv_c_sort=>sort_down
subtotal = if_salv_c_bool_sap=>false
group = if_salv_c_sort=>group_none
obligatory = if_salv_c_bool_sap=>false ).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
ENDIF.
******* Table Selection Settings *******
gr_select = gr_table->get_selections( ).
IF gr_select IS NOT INITIAL.
gr_select->set_selection_mode( if_salv_c_selection_mode=>row_column ). "Allow single row Selection"
ENDIF.

******* Top of List settings *******
PERFORM top_of_page CHANGING gr_content.
gr_table->set_top_of_list( gr_content ).

******* Event Register settings *******
lr_events = gr_table->get_event( ).
CREATE OBJECT gr_events.
SET HANDLER gr_events->on_double_click FOR lr_events.
SET HANDLER gr_events->on_link_click FOR lr_events.

** Get the columns from ALV Table
gr_columns = gr_table->get_columns( ).
IF gr_columns IS NOT INITIAL.
REFRESH : lt_column_ref.
CLEAR : ls_column_ref.
lt_column_ref = gr_columns->get( ).

** Get columns properties
gr_columns->set_optimize( if_salv_c_bool_sap=>true ).
gr_columns->set_key_fixation( if_salv_c_bool_sap=>true ).
TRY.
gr_columns->set_color_column( 'T_COLOR' ).
CATCH cx_salv_data_error .
ENDTRY.
** Individual Column Properties.
PERFORM column_settings.
ENDIF.
CALL METHOD gr_table->display.
ENDFORM. "alv_grid_display

*&---------------------------------------------------------------------*
*& Form column_settings
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM column_settings.
LOOP AT lt_column_ref INTO ls_column_ref.
TRY.
gr_column ?= gr_columns->get_column( ls_column_ref-columnname ).
CATCH cx_salv_not_found.
ENDTRY.
IF gr_column IS NOT INITIAL.
** Make Mandt column invisible **
IF gr_column->get_ddic_datatype( ) = 'CLNT'.
gr_column->set_technical( if_salv_c_bool_sap=>true ).
ENDIF.
** Create Aggregate function total for All Numeric/Currency Fields **
IF gr_column->get_ddic_inttype( ) EQ 'P' OR
gr_column->get_ddic_datatype( ) EQ 'CURR'.
IF gr_aggr IS NOT INITIAL.
TRY.
gr_aggr->add_aggregation( columnname = ls_column_ref-columnname
aggregation = if_salv_c_aggregation=>total ).
CATCH cx_salv_data_error .
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
ENDTRY.
ENDIF.
ENDIF.
** Create Check box for fields with domain "XFELD"
IF gr_column->get_ddic_domain( ) EQ 'XFELD'.
gr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
ENDIF.

** Set color to Date Columns **
IF gr_column->get_ddic_datatype( ) EQ 'DATS'.
CLEAR : ls_colo.
MOVE 2 TO ls_colo-col.
MOVE 1 TO ls_colo-int.
MOVE 1 TO ls_colo-inv.
gr_column->set_color( ls_colo ).
ENDIF.

** Add Hotspot&Hyper Link to the column vbeln
IF ls_column_ref-columnname EQ 'VBELN'.
gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
gr_column->set_key( if_salv_c_bool_sap=>true ).
ENDIF.

ENDIF.
ENDLOOP.
ENDFORM. "column_settings

*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
FORM top_of_page CHANGING lr_content TYPE REF TO cl_salv_form_element.
DATA : lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_text TYPE REF TO cl_salv_form_text,
lr_label TYPE REF TO cl_salv_form_label,
lr_head TYPE string.

MOVE 'Sales Order List' TO lr_head.
CREATE OBJECT lr_grid.
** Header of Top of Page **
lr_grid->create_header_information( row = 1
column = 1
text = lr_head
tooltip = lr_head ).
** Add Row **
lr_grid->add_row( ).

** Add Label in Grid **
lr_label = lr_grid->create_label( row = 2
column = 1
text = 'No of Records'
tooltip = 'No of Records' ).

** Add Text in The Grid **
lr_text = lr_grid->create_text( row = 2
column = 2
text = l_rec
tooltip = l_rec ).
** Set Label and Text Link **
lr_label->set_label_for( lr_text ).

** Move lr_grid to lr_content **
lr_content = lr_grid.
ENDFORM. "top_of_page

*&---------------------------------------------------------------------*
*& Form
*&---------------------------------------------------------------------*
FORM get_ord_info USING row TYPE salv_de_row
column TYPE salv_de_column.
IF column EQ 'VBELN'.
CLEAR : ls_vbak.
READ TABLE lt_vbak INTO ls_vbak INDEX row.
IF sy-subrc EQ 0.
SET PARAMETER ID 'AUN' FIELD ls_vbak-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDFORM. "get_ord_info

*&---------------------------------------------------------------------*
*& Form set_color
*&---------------------------------------------------------------------*
* Set color to the column VBELN & NETWR for Order Value > 1000
*----------------------------------------------------------------------*
FORM set_color.
LOOP AT lt_vbak ASSIGNING .
IF -netwr GT 1000.
REFRESH : lt_color.

CLEAR : ls_color.
MOVE 'VBELN' TO ls_color-fname.
MOVE 3 TO ls_color-color-col.
MOVE 0 TO ls_color-color-int.
MOVE 0 TO ls_color-color-inv.
APPEND ls_color TO lt_color.

CLEAR : ls_color.
MOVE 'NETWR' TO ls_color-fname.
MOVE 3 TO ls_color-color-col.
MOVE 0 TO ls_color-color-int.
MOVE 0 TO ls_color-color-inv.
APPEND ls_color TO lt_color.

MOVE lt_color TO -t_color.
ENDIF.
ENDLOOP.
ENDFORM. "set_color


example
DATA:G_DOCKING_CONTAINER_1 TYPE REF TO CL_GUI_DOCKING_CONTAINER,
g_grid TYPE REF TO CL_GUI_ALV_GRID.

DATA:itab like sflight occurs 0 with header line,
okcode like sy-ucomm.

select * from sflight into table itab.

set screen 101.

MODULE STATUS_0101 OUTPUT.
SET PF-STATUS 'MENU'.
SET TITLEBAR 'TIT'.
perform create_and_init_controls.
ENDMODULE. " STATUS_0101 OUTPUT


FORM create_and_init_controls .
CREATE OBJECT G_DOCKING_CONTAINER_1
EXPORTING
REPID = sy-repid
DYNNR = '101'
SIDE = cl_gui_docking_container=>DOCK_AT_top
EXTENSION = 100.

CREATE OBJECT G_GRID
EXPORTING
I_PARENT = G_DOCKING_CONTAINER_1.

CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
CHANGING
IT_OUTTAB = itab[].
ENDFORM. " create_and_init_controls


MODULE user_command_0101 INPUT.
CASE okcode.
WHEN 'BACK'.
SET SCREEN 0.
ENDCASE.
ENDMODULE. " user_command_0101 INPUT

flow logic of screen 101:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0101.

PROCESS AFTER INPUT.
MODULE user_command_0101.


Re: ALV grid using oops concepts

Bharath Srinivas Apr 16, 2008 7:27 AM (in response to kushagra sharma)
REPORT z_alv_using_oops_conepts MESSAGE-ID z_OOPS.

TABLES: ekko, ekpo.

CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: ok_code TYPE sy-ucomm,
gx_fcat1 TYPE lvc_s_fcat,
gt_fcat1 TYPE STANDARD TABLE OF lvc_s_fcat,
gx_fcat2 TYPE lvc_s_fcat,
gt_fcat2 TYPE STANDARD TABLE OF lvc_s_fcat,
gx_layout1 TYPE lvc_s_layo,
gx_layout2 TYPE lvc_s_layo,
gx_variant TYPE disvariant,
g_custom_container1 TYPE REF TO cl_gui_custom_container,
g_custom_container2 TYPE REF TO cl_gui_custom_container,
grid1 TYPE REF TO cl_gui_alv_grid,
grid2 TYPE REF TO cl_gui_alv_grid,
g_container1 TYPE scrfname VALUE 'MAIN_REPORT_LIST',
g_container2 TYPE scrfname VALUE 'SECOND_REPORT_LIST',
gv_event_rec1 TYPE REF TO lcl_event_receiver,
gv_event_rec2 TYPE REF TO lcl_event_receiver,
gv_repid TYPE sy-repid,
gt_final1 TYPE STANDARD TABLE OF ekko,
gt_final2 TYPE STANDARD TABLE OF ekpo,
gt_final3 TYPE STANDARD TABLE OF ekpo,
gx_final TYPE ekko,
gx_final1 TYPE ekpo.


INITIALIZATION.
----

SELECTION-SCREEN *
----

SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME .
SELECT-OPTIONS:
s_ebeln FOR ekko-ebeln obligatory,
s_ebelp FOR ekpo-ebelp,
s_bukrs FOR ekko-bukrs,
s_bsart FOR ekko-bsart.
SELECTION-SCREEN END OF BLOCK blk3.

****************************************************************
LOCAL CLASSES: Definition
****************************************************************
*===============================================================
class lcl_event_receiver: local class to
define and handle own functions.
*
Definition:
~~~~~~~~~~~

CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS:

hotspot_click1
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id,
hotspot_click2
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id.

PRIVATE SECTION.

ENDCLASS. "lcl_event_receiver DEFINITION

----

CLASS lcl_event_receiver IMPLEMENTATION
----

*
----

CLASS lcl_event_receiver IMPLEMENTATION.
*----


METHOD hotspot_click1.
DATA: lv_tabix TYPE sy-tabix,
lx_final TYPE ekko.

READ TABLE gt_final1 INTO gx_final INDEX e_row_id.
IF sy-subrc = 0.
gt_final3 = gt_final2.
DELETE gt_final3 WHERE ebeln NE gx_final-ebeln.
IF NOT g_custom_container2 IS INITIAL.
CALL METHOD grid2->refresh_table_display.
CALL METHOD grid1->refresh_table_display.
ENDIF.
ELSE.
MESSAGE s000 WITH text-003.
LEAVE LIST-PROCESSING.
ENDIF.
ENDMETHOD. "hotspot_click1

METHOD hotspot_click2.
READ TABLE gt_final3 INTO gx_final1 INDEX e_row_id.
IF sy-subrc = 0.
SET PARAMETER ID 'BES' FIELD gx_final-ebeln.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.
ENDMETHOD. "button_click1

ENDCLASS. "lcl_event_receiver IMPLEMENTATION



----

START-OF-SELECTION *
----

START-OF-SELECTION.

SELECT * FROM ekko INTO TABLE gt_final1 WHERE ebeln IN s_ebeln
AND bukrs IN s_bukrs
AND bsart IN s_bsart.
IF sy-subrc = 0.
SELECT * FROM ekpo INTO TABLE gt_final2 FOR ALL ENTRIES IN gt_final1
WHERE ebeln = gt_final1-ebeln
AND ebelp IN s_ebelp.
IF sy-subrc = 0.
gt_final3 = gt_final2.
ENDIF.

ENDIF.

PERFORM sub_get_fieldcat CHANGING gt_fcat1.

PERFORM sub_get_fieldcat CHANGING gt_fcat2.

----

END-OF-SELECTION *
----


END-OF-SELECTION.


PERFORM display_process.

CALL SCREEN 9000.

----

MODULE pbo OUTPUT
----

*
----

MODULE pbo OUTPUT.

SET PF-STATUS 'MAIN100'.

gx_layout1-grid_title = 'Purchase Order Header'.
gx_layout1-zebra = 'X'.
gx_layout1-info_fname = 'COLOR_LINE'.
gx_layout1-sel_mode = 'X'.
gx_layout2-grid_title = 'Purchase Order Items'.
gx_layout2-zebra = 'X'.
gx_layout1-stylefname = 'CB'.
gs_layout1-excp_led = gc_check.
gs_layout1-excp_group = gc_check.
gv_repid = sy-repid.
gx_variant-report = gv_repid.

READ TABLE gt_final1 INTO gx_final INDEX 1.
IF sy-subrc = 0.
DELETE gt_final3 WHERE ebeln NE gx_final-ebeln.
ENDIF.

IF g_custom_container1 IS INITIAL.
CREATE OBJECT g_custom_container1
EXPORTING
container_name = g_container1.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container1.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
is_layout = gx_layout1
is_variant = gx_variant
i_save = 'U'
i_default = 'X'
i_structure_name = 'EKKO'
CHANGING
it_outtab = gt_final1
it_fieldcatalog = gt_fcat1.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = grid1.
ENDIF.

IF g_custom_container2 IS INITIAL.
CREATE OBJECT g_custom_container2
EXPORTING
container_name = g_container2.
CREATE OBJECT grid2
EXPORTING
i_parent = g_custom_container2.
CALL METHOD grid2->set_table_for_first_display
EXPORTING
is_layout = gx_layout2
is_variant = gx_variant
i_save = 'U'
i_default = 'X'
i_structure_name = 'EKPO'
CHANGING
it_outtab = gt_final3
it_fieldcatalog = gt_fcat2.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = grid2.
ENDIF.

CREATE OBJECT gv_event_rec1.
SET HANDLER gv_event_rec1->hotspot_click1 FOR grid1.

CREATE OBJECT gv_event_rec2.
SET HANDLER gv_event_rec1->hotspot_click2 FOR grid2.

IF gt_final2 IS INITIAL.
MESSAGE i000 WITH 'No Items exist for the Purchase Order'.
ENDIF.

ENDMODULE. "PBO OUTPUT
----

MODULE PAI INPUT *
----

MODULE pai INPUT.

To react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.

WHEN 'EXIT'.
PERFORM exit_program.
LEAVE PROGRAM.

WHEN 'BACK'.
LEAVE TO SCREEN 0.

WHEN 'CANCEL'.
LEAVE TO SCREEN 0.

ENDCASE.
CLEAR ok_code.

ENDMODULE. "PAI INPUT
----

FORM EXIT_PROGRAM *
----

FORM exit_program.

CALL METHOD grid1->free.
CALL METHOD grid2->free.
CALL METHOD cl_gui_cfw=>flush.

IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = gv_repid
txt2 = sy-subrc
txt1 = 'Error in Flush'(009).
ENDIF.


ENDFORM. "EXIT_PROGRAM



&----

*& Form display_process
&----

text
----

--> p1 text
<-- p2 text
----

FORM display_process .

DATA: a LIKE sy-ucomm.

DO 100 TIMES.
DO 300 TIMES.
GET TIME.
ENDDO.
a(3) = sy-index.a+3 = '%'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-index
text = a.
ENDDO.
ENDFORM. " display_process
&----

*& Form sub_get_fieldcat
&----

text
----

<--P_GT_FCAT1 text
----

FORM sub_get_fieldcat CHANGING lt_fcat TYPE lvc_t_fcat.

gx_fcat1-fieldname = 'EBELN'.
gx_fcat1-tabname = 'gt_final1'.
gx_fcat1-hotspot = 'X'.
APPEND gx_fcat1 TO lt_fcat.

ENDFORM. " sub_get_fieldcat
Report Abuse

Like (0)
Correct AnswerRe: ALV grid using oops concepts

Bharat Kalagara Apr 16, 2008 7:28 AM (in response to kushagra sharma)
Hi,

without creating a container in a screen u can create ALV grid through oops.
for that we have to use docking controller

example
DATA:G_DOCKING_CONTAINER_1 TYPE REF TO CL_GUI_DOCKING_CONTAINER,
g_grid TYPE REF TO CL_GUI_ALV_GRID.

DATA:itab like sflight occurs 0 with header line,
okcode like sy-ucomm.

select * from sflight into table itab.

set screen 101.

MODULE STATUS_0101 OUTPUT.
SET PF-STATUS 'MENU'.
SET TITLEBAR 'TIT'.
perform create_and_init_controls.
ENDMODULE. " STATUS_0101 OUTPUT


FORM create_and_init_controls .
CREATE OBJECT G_DOCKING_CONTAINER_1
EXPORTING
REPID = sy-repid
DYNNR = '101'
SIDE = cl_gui_docking_container=>DOCK_AT_top
EXTENSION = 100.

CREATE OBJECT G_GRID
EXPORTING
I_PARENT = G_DOCKING_CONTAINER_1.

CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
CHANGING
IT_OUTTAB = itab[].
ENDFORM. " create_and_init_controls


MODULE user_command_0101 INPUT.
CASE okcode.
WHEN 'BACK'.
SET SCREEN 0.
ENDCASE.
ENDMODULE. " user_command_0101 INPUT

flow logic of screen 101:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0101.

PROCESS AFTER INPUT.
MODULE user_command_0101.


rgds,
bharat.
Report Abuse

Like (0)
Re: ALV grid using oops concepts

Sankar M Apr 16, 2008 7:54 AM (in response to kushagra sharma)
Hi,
Following report is the sample report for OOPS concept.

type-pools : slis.
include <icon>.
TABLES : EKKO,EKPO,MAKT.

DATA : BEGIN OF IEKKO OCCURS 0,
EBELN LIKE EKKO-EBELN,
AEDAT LIKE EKKO-AEDAT,
BEDAT LIKE EKKO-BEDAT,
END OF IEKKO.

DATA : BEGIN OF IEKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
END OF IEKPO.

DATA : BEGIN OF IMAKT OCCURS 0,
MATNR LIKE MAKT-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF IMAKT.

DATA : BEGIN OF IFINAL OCCURS 0,
BOX,
EBELN LIKE EKKO-EBELN,
EBELP LIKE EKPO-EBELP,
AEDAT LIKE EKKO-AEDAT,
BEDAT LIKE EKKO-BEDAT,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
MAKTX LIKE MAKT-MAKTX,
END OF IFINAL.
*DATA : IFINALFUL LIKE STANDARD TABLE OF
DATA : OKCODE LIKE SY-UCOMM,
CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GRID TYPE REF TO CL_GUI_ALV_GRID,
text TYPE sdydo_text_element,
o_dd_doc TYPE REF TO cl_dd_document,
o_top type ref to cl_gui_container,
split1 type ref to cl_gui_easy_splitter_container.

data : split type ref to cl_gui_splitter_container,
contaner1 type ref to cl_gui_container,
contaner2 type ref to cl_gui_container,
contaner3 type ref to cl_gui_container,
contaner4 type ref to cl_gui_container,
grid2 type ref to cl_gui_alv_grid.



CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: o_event_receiver TYPE REF TO lcl_event_receiver.

DATA : IFIELDCAT TYPE LVC_T_FCAT,
WFIELDCAT TYPE LVC_S_FCAT,
ILAYOUT TYPE LVC_S_LAYO,
ISORT TYPE LVC_T_SORT,
WSORT TYPE LVC_S_SORT.

data : ilist type slis_t_listheader,
wlist type slis_listheader.

SELECT-OPTIONS : S_AEDAT FOR EKKO-AEDAT.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING e_dyndoc_id,
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.


CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_top_of_page.

text = 'Test Top of page'.

CALL METHOD e_dyndoc_id->add_text
EXPORTING text = text
sap_fontsize = 'LARGE'
sap_color = 'LIST_KEY_INV'
*sap_fontstyle = 'LIST_HEADING'
*sap_style = 'HEADING'
.

CALL METHOD E_DYNDOC_ID->UNDERLINE
.

CALL METHOD E_DYNDOC_ID->NEW_LINE
* EXPORTING
* REPEAT =
.

clear text.
text = 'Test Top of page 2nd line & space'.

CALL METHOD e_dyndoc_id->add_text
EXPORTING text = text
sap_fontsize = 'LARGE'
sap_color = 'LIST_KEY_INV'.

CALL METHOD e_dyndoc_id->display_document
EXPORTING parent = CONTANER3.


ENDMETHOD. "handle_top_of_page

method handle_user_command.
case e_ucomm.
when 'DETAIL'.
DATA : LT_ROWS TYPE LVC_T_ROW.
CALL METHOD GRID->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_ROWS
* ET_ROW_NO =
.
IF SY-SUBRC NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Message'
TXT1 = 'Please choose a row'
TXT2 = ''
* TXT3 = ' '
* TXT4 = ' '
.

ENDIF.
endcase.
endmethod.

method handle_toolbar.
data : wtoolbar type stb_button.
clear wtoolbar.
wtoolbar-butn_type = 3.
append wtoolbar to e_object->mt_toolbar.
clear wtoolbar.
wtoolbar-function = 'DETAIL'.
wtoolbar-ICON = ICON_OVERVIEW.
wtoolbar-QUICKINFO = 'Detail list'.
wtoolbar-TEXT = 'Detail list'.
append wtoolbar to e_object->mt_toolbar.
endmethod.

ENDCLASS. "lcl_application_f4 IMPLEMENTATION



START-OF-SELECTION.
PERFORM FILL_EKKO.
PERFORM FILL_EKPO.
PERFORM FILL_MAKT.
PERFORM BUILD_FINALTAB.
PERFORM BUILD_FIELDCAT.
PERFORM BUILD_SORT.
PERFORM BUILD_LAYOUT.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Form fill_ekko
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_EKKO .
SELECT EBELN AEDAT BEDAT INTO TABLE IEKKO FROM EKKO WHERE AEDAT IN S_AEDAT.
ENDFORM. " fill_ekko
*&---------------------------------------------------------------------*
*& Form fill_ekpo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_EKPO .
IF NOT IEKKO[] IS INITIAL.
SELECT EBELN EBELP MATNR MENGE INTO TABLE IEKPO FROM EKPO FOR ALL ENTRIES IN IEKKO
WHERE EBELN = IEKKO-EBELN.
ENDIF.
ENDFORM. " fill_ekpo
*&---------------------------------------------------------------------*
*& Form fill_makt
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_MAKT .
IF NOT IEKPO[] IS INITIAL.
SELECT MATNR MAKTX FROM MAKT INTO TABLE IMAKT FOR ALL ENTRIES IN IEKPO WHERE
MATNR = IEKPO-MATNR.
ENDIF.
ENDFORM. " fill_makt
*&---------------------------------------------------------------------*
*& Form BUILD_FINALTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_FINALTAB .
LOOP AT IEKPO.
IFINAL-MATNR = IEKPO-MATNR.
IFINAL-MENGE = IEKPO-MENGE.
IFINAL-EBELP = IEKPO-EBELP.
IFINAL-EBELN = IEKPO-EBELN.
READ TABLE IEKKO WITH KEY EBELN = IEKPO-EBELN.
IF SY-SUBRC = 0.
IFINAL-AEDAT = IEKKO-AEDAT.
IFINAL-BEDAT = IEKKO-BEDAT.
ENDIF.
READ TABLE IMAKT WITH KEY MATNR = IEKPO-MATNR.
IF SY-SUBRC = 0.
IFINAL-MAKTX = IMAKT-MAKTX.
ENDIF.
APPEND IFINAL.
CLEAR : IFINAL,IEKKO,IMAKT,IEKPO.
ENDLOOP.
ENDFORM. " BUILD_FINALTAB
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
WFIELDCAT-FIELDNAME = 'EBELN'.
WFIELDCAT-COL_POS = 1.
WFIELDCAT-OUTPUTLEN = 10.
WFIELDCAT-COLTEXT = 'Document No'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'EBELP'.
WFIELDCAT-COL_POS = 2.
WFIELDCAT-OUTPUTLEN = 5.
WFIELDCAT-COLTEXT = 'Item No'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'AEDAT'.
WFIELDCAT-COL_POS = 3.
WFIELDCAT-OUTPUTLEN = 8.
WFIELDCAT-COLTEXT = 'Creatn dat'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'BEDAT'.
WFIELDCAT-COL_POS = 4.
WFIELDCAT-OUTPUTLEN = 8.
WFIELDCAT-COLTEXT = 'Delv dat'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'MATNR'.
WFIELDCAT-COL_POS = 5.
WFIELDCAT-OUTPUTLEN = 18.
WFIELDCAT-COLTEXT = 'Material no'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'MAKTX'.
WFIELDCAT-COL_POS = 6.
WFIELDCAT-OUTPUTLEN = 32.
WFIELDCAT-COLTEXT = 'Material desc.'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.

WFIELDCAT-FIELDNAME = 'MENGE'.
WFIELDCAT-COL_POS = 7.
WFIELDCAT-OUTPUTLEN = 16.
wfieldcat-just = 'L'.
WFIELDCAT-COLTEXT = 'Quantity'.
WFIELDCAT-DO_SUM = 'X'.
APPEND WFIELDCAT TO IFIELDCAT.
CLEAR WFIELDCAT.


ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form BUILD_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_SORT .
WSORT-FIELDNAME = 'EBELN'.
WSORT-SPOS = 1.
WSORT-UP = 'X'.
WSORT-GROUP = 'UL'.
WSORT-SUBTOT = 'X'.
APPEND WSORT TO ISORT.
ENDFORM. " BUILD_SORT
*&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO OUTPUT.
SET PF-STATUS 'ZSPD'.
CREATE OBJECT CONTAINER
EXPORTING
* PARENT =
CONTAINER_NAME = 'CONTAINER'
* 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 SPLIT
EXPORTING
* LINK_DYNNR =
* LINK_REPID =
* SHELLSTYLE =
* LEFT =
* TOP = 3
* WIDTH = 5
* HEIGHT = 3
* METRIC = cntl_metric_dynpro
* ALIGN = 15
PARENT = container
ROWS = 1
COLUMNS = 1
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
others = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD split->set_border
EXPORTING
border = space.

CALL METHOD split->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = contaner1.

CALL METHOD split->set_row_height
EXPORTING
id = 1
height = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3 .

CREATE OBJECT split1
EXPORTING
parent = contaner1
SASH_POSITION = 15
with_border = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

contaner3 = split1->top_left_container.
contaner4 = split1->bottom_right_container.

*contaner3 = container->SCREEN0. "DEFAULT_SCREEN." PARENT.

CREATE OBJECT GRID
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = CONTANER4
* 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.

CREATE OBJECT o_event_receiver.
SET HANDLER o_event_receiver->handle_top_of_page FOR GRID.
set handler o_event_receiver->handle_user_command for grid.
set handler o_event_receiver->handle_toolbar for grid.

CREATE OBJECT o_dd_doc EXPORTING style = 'ALV_GRID'
no_margins = 'X'.


CALL METHOD 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 = ILAYOUT
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
IT_OUTTAB = IFINAL[]
IT_FIELDCATALOG = IFIELDCAT
* IT_SORT = ISORT
* 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 GRID->SET_TOOLBAR_INTERACTIVE.

CALL METHOD GRID->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = o_dd_doc.


ENDMODULE. " PBO OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PAI INPUT.
CASE OKCODE.
WHEN 'BACK' OR 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " PAI INPUT
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT .
ILAYOUT-ZEBRA = 'X'.
ILAYOUT-SEL_MODE = 'A'.
ENDFORM. " BUILD_LAYOUT

You might also like