Berikut contoh program report ALV dengan menggunakan lcl_alv_grid
FUNCTION zcm_get_fcat_from_itab.
*"----------------------------------------------------------------------
""Local Interface:
*" EXPORTING
*" VALUE(ET_FCAT) TYPE LVC_T_FCAT
*" TABLES
*" PT_DATA
*"----------------------------------------------------------------------
CONSTANTS:
lc_x TYPE c LENGTH 01 VALUE 'X',
lc_c500 TYPE c LENGTH 04 VALUE 'C500',
lc_zicon_l TYPE c LENGTH 30 VALUE 'Status',
lc_zicon_s TYPE c LENGTH 30 VALUE 'St.',
lc_yicon_l TYPE c LENGTH 30 VALUE 'Detail',
lc_yicon_s TYPE c LENGTH 30 VALUE 'De.',
lc_zitem TYPE c LENGTH 30 VALUE 'Item.'.
FIELD-SYMBOLS:
<wa> TYPE any,
<cp> TYPE any.
DATA: lv_sref TYPE REF TO data,
lc_stru_ref TYPE REF TO cl_abap_structdescr,
lc_clss_ref TYPE REF TO cl_abap_classdescr,
lc_elem_ref TYPE REF TO cl_abap_elemdescr,
lc_tab_ref TYPE REF TO cl_abap_tabledescr,
lt_comp TYPE cl_abap_structdescr=>component_table,
lt_comp_ LIKE lt_comp,
ls_comp LIKE LINE OF lt_comp,
lv_size TYPE i,
lv_index TYPE i,
lv_hlpid TYPE string,
lv_sname TYPE string,
ls_fcat TYPE lvc_s_fcat,
ls_dfies TYPE dfies,
lt_tab TYPE TABLE OF string,
lv_refstruct TYPE swcontdef-refstruct,
lv_reffield TYPE swcontdef-reffield,
ls_dd04v TYPE dd04v,
lv_len TYPE i,
lv_append TYPE c,
lv_txtab TYPE tabname,
lv_txfid TYPE fieldname.
--------------------------------------------------------------------
REFRESH et_fcat.
lc_tab_ref ?= cl_abap_typedescr=>describe_by_data( pt_data[] ).
lc_stru_ref ?= lc_tab_ref->get_table_line_type( ).
*-- Check Reference
lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( lc_stru_ref ).
IF lc_clss_ref->get_relative_name( ) <> 'CL_ABAP_STRUCTDESCR'.
RAISE not_a_structure.
ENDIF.
*-- Recursive Search for Include.
lt_comp_ = lc_stru_ref->get_components( ).
* Table Type ##
LOOP AT lt_comp_ INTO ls_comp.
lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( ls_comp-type ).
IF lc_clss_ref->get_relative_name( ) = 'CL_ABAP_TABLEDESCR'.
DELETE lt_comp_.
ENDIF.
ENDLOOP.
PERFORM cm_get_elements TABLES lt_comp_ lt_comp.
lv_size = lines( lt_comp ).
lv_sname = lc_stru_ref->absolute_name."get_relative_name( ).
*-- get memebers
CREATE DATA lv_sref TYPE (lv_sname).
ASSIGN lv_sref->* TO <wa>.
DO lv_size TIMES.
lv_index = lv_index + 1.
ASSIGN COMPONENT lv_index OF STRUCTURE <wa> TO <cp>.
DESCRIBE FIELD <cp> HELP-ID lv_hlpid.
" XXX-VVV, VVV, SPACE
SPLIT lv_hlpid AT '-' INTO TABLE lt_tab.
lv_len = lines( lt_tab ).
READ TABLE lt_comp INTO ls_comp INDEX lv_index.
IF lv_len EQ 2. "struct + field
READ TABLE lt_tab INTO lv_refstruct INDEX 1.
READ TABLE lt_tab INTO lv_reffield INDEX 2.
CALL FUNCTION 'SWP_DDIC_FIELD_INFO_GET'
EXPORTING
refstruct = lv_refstruct
reffield = lv_reffield
language = sy-langu
IMPORTING
field_attributes = ls_dfies.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_dfies TO ls_fcat.
CASE ls_dfies-datatype.
WHEN 'CURR' OR 'QUAN'.
READ TABLE lt_comp WITH KEY name = ls_dfies-reffield
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CASE ls_dfies-datatype.
WHEN 'CURR' .
ls_fcat-cfieldname = ls_dfies-reffield.
WHEN 'QUAN'.
ls_fcat-qfieldname = ls_dfies-reffield.
ENDCASE.
ENDIF.
ENDCASE.
ls_fcat-ref_table = lv_refstruct.
ls_fcat-ref_field = lv_reffield.
ls_fcat-tabname = space.
IF ls_fcat-reptext IS INITIAL.
ls_fcat-reptext = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_l IS INITIAL.
ls_fcat-scrtext_l = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_m IS INITIAL.
ls_fcat-scrtext_m = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_s IS INITIAL.
ls_fcat-scrtext_s = ls_dfies-fieldtext.
ENDIF.
ls_fcat-fieldname = ls_comp-name.
*** IF ls_fcat-checktable IS NOT INITIAL.
*** ls_fcat-emphasize = lc_c500.
*** ENDIF.
lv_append = lc_x.
CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
name = ls_dfies-rollname
langu = sy-langu
IMPORTING
dd04v_wa = ls_dd04v.
ENDIF.
ELSEIF lv_len = 1. "DataElement
READ TABLE lt_tab INTO lv_reffield INDEX 1.
CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
name = lv_reffield
langu = sy-langu
IMPORTING
dd04v_wa = ls_dd04v.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_dd04v TO ls_fcat.
ls_fcat-ref_table = space.
ls_fcat-tabname = space.
"[Add]
IF ls_fcat-reptext IS INITIAL.
ls_fcat-reptext = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_l IS INITIAL.
ls_fcat-scrtext_l = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_m IS INITIAL.
ls_fcat-scrtext_m = ls_dfies-fieldtext.
ENDIF.
IF ls_fcat-scrtext_s IS INITIAL.
ls_fcat-scrtext_s = ls_dfies-fieldtext.
ENDIF.
IF lv_reffield <> ls_comp-name.
ls_fcat-ref_field = lv_reffield.
ENDIF.
ls_fcat-fieldname = ls_comp-name.
APPEND ls_fcat TO et_fcat.
ELSE.
RAISE no_ddic.
ENDIF.
ELSEIF lv_len EQ 0.
lc_elem_ref ?= ls_comp-type.
ls_fcat-fieldname = ls_comp-name.
ls_fcat-inttype = lc_elem_ref->type_kind.
ls_fcat-intlen = lc_elem_ref->length.
ls_fcat-decimals = ls_fcat-decimals_o = lc_elem_ref->decimals.
ls_fcat-outputlen = lc_elem_ref->output_length.
lv_append = lc_x.
ENDIF.
IF lv_append EQ lc_x.
IF ls_dd04v-entitytab IS NOT INITIAL.
CALL FUNCTION 'DDUT_TEXTTABLE_GET'
EXPORTING
tabname = ls_dd04v-entitytab
IMPORTING
texttable = lv_txtab
checkfield = lv_txfid.
ls_fcat-parameter0 = lv_txtab.
ls_fcat-parameter1 = lv_txfid.
ENDIF.
APPEND ls_fcat TO et_fcat.
ENDIF.
CLEAR: ls_fcat, ls_comp, lv_reffield, lv_refstruct,
ls_dd04v, ls_dfies, lc_elem_ref, lt_tab[],
lv_append, lv_txtab, lv_txfid.
ENDDO.
--------------------------------------------------------------------
LOOP AT et_fcat INTO ls_fcat.
CASE ls_fcat-fieldname.
WHEN 'MANDT'.
ls_fcat-tech = lc_x.
WHEN 'ZICON'.
ls_fcat-key = lc_x.
ls_fcat-hotspot = lc_x.
ls_fcat-icon = lc_x.
ls_fcat-reptext = ls_fcat-scrtext_l = lc_zicon_l.
ls_fcat-scrtext_m = ls_fcat-scrtext_s = lc_zicon_s.
WHEN 'YICON'.
ls_fcat-key = lc_x.
ls_fcat-hotspot = lc_x.
ls_fcat-icon = lc_x.
ls_fcat-reptext = ls_fcat-scrtext_l = lc_yicon_l.
ls_fcat-scrtext_m = ls_fcat-scrtext_s = lc_yicon_s.
WHEN 'ZITEM'.
ls_fcat-icon = lc_x.
ls_fcat-coltext = lc_zitem.
ls_fcat-hotspot = lc_x.
WHEN 'ERNAM' OR 'AENAM'.
ls_fcat-no_out = lc_x.
WHEN 'ERDAT' OR 'ERZET' OR 'AEDAT' OR 'AEZET'.
ls_fcat-no_zero = lc_x.
ls_fcat-no_out = lc_x.
WHEN 'DEL'.
ls_fcat-checkbox = lc_x.
ls_fcat-no_out = lc_x.
WHEN 'MSGTA' OR 'LINE_STATUS' OR 'LINE_INDEX' OR 'LINE_FILT'
OR 'LINE_CHECK' OR 'LINE_DEL'.
ls_fcat-tech = lc_x.
ENDCASE.
MODIFY et_fcat FROM ls_fcat.
ENDLOOP.
ENDFUNCTION.
************************************************************************ * Modules/Sub Module : * * ---------------------------------------------------------------------* * T_CODE : * * CREATOR : * * FUNCTIONAL : * * CREATE DATE : * * TYPE : * * Description : * ************************************************************************ * Change history * * ------------ ---------- ------------ -----------------------------* * Number Date Name Description * * ------------ ---------- ------------ -----------------------------* * * ************************************************************************ REPORT ztemplate_alv MESSAGE-ID zcmm01 NO STANDARD PAGE HEADING. *--------------------------------------------------------------------* * INCLUDE * *--------------------------------------------------------------------* INCLUDE ztemplate_alv_c01. " Class INCLUDE ztemplate_alv_top. " Global Declarations INCLUDE ztemplate_alv_s01. " Selection-screen INCLUDE ztemplate_alv_f01. " Subroutines INCLUDE ztemplate_alv_f02. " ALV INCLUDE ztemplate_alv_o01. " PBO INCLUDE ztemplate_alv_i01. " PAI *--------------------------------------------------------------------* * INITIALIZATION * *--------------------------------------------------------------------* INITIALIZATION. PERFORM f_initialization. *--------------------------------------------------------------------* * START-OF-SELECTION * *--------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_input_validation. PERFORM f_get_data. PERFORM f_build_data. *--------------------------------------------------------------------* * END-OF-SELECTION * *--------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_show_data.
*---------------------------------------------------------------------*
* Include ZTEMPLATE_C01
*---------------------------------------------------------------------*
****************************************************************
* LOCAL CLASS: LCL_AVL_GRID
****************************************************************
CLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS:
lcl_optimize_all_cols,
lcl_set_delta_table
IMPORTING
modified TYPE c DEFAULT 'X'
CHANGING
delta_table TYPE lvc_t_moce.
ENDCLASS. " lcl_alv_grid DEFINITION
****************************************************************
CLASS lcl_alv_grid IMPLEMENTATION.
*===============================================================
METHOD lcl_optimize_all_cols.
CALL METHOD me->optimize_all_cols
EXPORTING
include_header = 1.
ENDMETHOD. "redefine_optimize_all_cols
*===============================================================
METHOD lcl_set_delta_table.
CHECK delta_table IS NOT INITIAL.
CALL METHOD me->set_delta_table
EXPORTING
modified = modified
CHANGING
delta_table = delta_table
EXCEPTIONS
error = 1
OTHERS = 2.
CALL METHOD me->check_changed_data.
ENDMETHOD. "redefine_optimize_all_cols
*===============================================================
ENDCLASS. " lcl_alv_grid IMPLEMENTATION
****************************************************************
* LOCAL CLASS: LCL_EVENT_RECEIVER
****************************************************************
CLASS lcl_event_receiver DEFINITION.
* PUBLIC SECTION.
* DATA: mv_grid TYPE c LENGTH 30.
* dg_dyndoc_id = e_dyndoc_id.
* METHODS:
* constructor
* IMPORTING e_grid_text TYPE char30,
* handle_double_click
* FOR EVENT double_click OF cl_gui_alv_grid
* IMPORTING e_row e_column es_row_no,
* handle_hotspot_click
* FOR EVENT hotspot_click OF cl_gui_alv_grid
* IMPORTING e_row_id e_column_id es_row_no,
* handle_toolbar
* FOR EVENT toolbar OF cl_gui_alv_grid
* IMPORTING e_object e_interactive,
* handle_menu_button
* FOR EVENT menu_button OF cl_gui_alv_grid
* IMPORTING e_object e_ucomm,
* handle_data_changed
* FOR EVENT data_changed OF cl_gui_alv_grid
* IMPORTING er_data_changed,
* handle_user_command
* FOR EVENT user_command OF cl_gui_alv_grid
* IMPORTING e_ucomm,
* handle_data_changed_finished " DATA_CHANGED_FINISHED
* FOR EVENT data_changed_finished OF cl_gui_alv_grid
* IMPORTING e_modified et_good_cells,
*
* handle_top_of_page " TOP OF PAGE
* FOR EVENT top_of_page OF cl_gui_alv_grid
* IMPORTING e_dyndoc_id.
*
* handle_close
* FOR EVENT close OF cl_gui_dialogbox_container
* IMPORTING sender.
*
*
*
PRIVATE SECTION.
DATA: dialogbox_status TYPE c. "'X': does exist, SPACE: does not ex.
ENDCLASS. "lcl_event_receiver DEFINITION
****************************************************************
CLASS lcl_event_receiver IMPLEMENTATION.
**===============================================================
* METHOD constructor.
* CALL METHOD super->constructor.
* mv_grid = e_grid_text.
* ENDMETHOD. "construcctor
**===============================================================
* METHOD handle_double_click.
** PERFORM f_double_click USING mv_grid e_row e_column.
* ENDMETHOD. "handle_double_click
*===============================================================
* METHOD handle_hotspot_click.
* PERFORM f_hotspot_click USING mv_grid e_row_id e_column_id CHANGING dialogbox_status.
* ENDMETHOD. "handle_hotspot_click
**===============================================================
* METHOD handle_toolbar.
*
* ENDMETHOD. "handle_toolbar
**===============================================================
* METHOD handle_data_changed.
** PERFORM f_data_changed USING mv_grid er_data_changed.
* ENDMETHOD.
**===============================================================
* METHOD handle_menu_button.
** PERFORM f_menu_button USING mv_grid e_ucomm
** CHANGING e_object.
* ENDMETHOD. "handle_toolbar
**===============================================================
* METHOD handle_user_command.
** PERFORM f_user_command USING mv_grid e_ucomm.
* ENDMETHOD. "handle_user_command
**===============================================================
* METHOD handle_data_changed_finished.
** PERFORM f_after_handle_data_changed USING mv_grid e_modified et_good_cells.
* ENDMETHOD. "handle_user_command
*===============================================================
* METHOD handle_top_of_page. "implementation
** Top-of-page event
*
* PERFORM f_event_top_of_page USING e_dyndoc_id.
* ENDMETHOD. "top_of_page
**--------------------------------------------------------*
* METHOD handle_close.
** ยง6.Handle the CLOSE-button of the dialogbox
*
** set dialogbox invisible
** (the dialogbox is destroyed outomatically when the user
** switches to another dynpro).
* CALL METHOD sender->set_visible
* EXPORTING
* visible = space.
** In this example closing the dialogbox leads
** to make it invisible. It is also conceivable to destroy it
** and recreate it if the user doubleclicks a line again.
** Displaying a great amount of data has a greater impact on performance.
* ENDMETHOD.
ENDCLASS. "lcl_event_receiver IMPLEMENTATION*---------------------------------------------------------------------*
* Include ZTEMPLATE_TOP
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* TABLES *
*---------------------------------------------------------------------*
*TABLES:
*---------------------------------------------------------------------*
* TYPES
*---------------------------------------------------------------------*
TYPES: BEGIN OF gty_s_grid,
* name TYPE c LENGTH 4,
* salv TYPE REF TO cl_salv_table,
* cust TYPE REF TO cl_gui_custom_container,
* dock TYPE REF TO cl_gui_docking_container,
spli TYPE REF TO cl_gui_splitter_container,
* cont TYPE REF TO cl_gui_container,
grid TYPE REF TO lcl_alv_grid,
html TYPE REF TO cl_gui_html_viewer,
event TYPE REF TO lcl_event_receiver,
* dialogbox TYPE REF TO cl_gui_dialogbox_container,
* tabix TYPE i,
* edit TYPE i, "0 = Display, 1 = Edit
* refresh TYPE c,
* save TYPE c, "'X' = Global, 'U' = User specific, 'A' = All
* view TYPE c, "Space = Text, 'X' = Fieldname,
* vari TYPE disvariant,
layo TYPE lvc_s_layo,
fcat TYPE lvc_t_fcat,
sort TYPE lvc_t_sort,
tool TYPE ui_functions,
* styl TYPE lvc_t_styl,
* modi TYPE lvc_t_modi,
* filt TYPE lvc_t_filt,
* f4 TYPE lvc_t_f4,
* dral TYPE lvc_t_dral,
dyndoc TYPE REF TO cl_dd_document,
dyndoc_table TYPE REF TO cl_dd_table_element,
dyndoc_left TYPE REF TO cl_dd_area,
dyndoc_right TYPE REF TO cl_dd_area,
par_html TYPE REF TO cl_gui_container,
par_grid TYPE REF TO cl_gui_container,
END OF gty_s_grid.
TYPES: gty_0100 TYPE sflight, "CHANGE THE TYPE
gtt_0100 TYPE TABLE OF gty_0100.
*---------------------------------------------------------------------*
* DATA *
*---------------------------------------------------------------------*
DATA: gt_0100 TYPE gtt_0100.
DATA: gs_grid_0100 TYPE gty_s_grid,
go_alv_details TYPE REF TO cl_salv_table,
ok_code LIKE sy-ucomm.
*---------------------------------------------------------------------*
* CONSTANTS *
*---------------------------------------------------------------------*
CONSTANTS:
gc_grid_0100 TYPE c LENGTH 30 VALUE 'GRID_0100'.
CONSTANTS:
gc_true TYPE sap_bool VALUE 'X',
gc_x TYPE sap_bool VALUE 'X',
gc_false TYPE sap_bool VALUE ''.*---------------------------------------------------------------------* * Include ZTEMPLATE_S01 *---------------------------------------------------------------------* *---------------------------------------------------------------------* * SELECTION SCREEN * *---------------------------------------------------------------------* *SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-001. *SELECT-OPTIONS: so_bukrs FOR bkpf-bukrs. *SELECTION-SCREEN END OF BLOCK b0. * *AT SELECTION-SCREEN OUTPUT. * PERFORM f_screen_output. **---------------------------------------------------------------------* ** Form F_SCREEN_OUTPUT **---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* *FORM f_screen_output . * LOOP AT SCREEN. * CASE screen-name. * WHEN 'SO_BUKRS-LOW'. * screen-required = 2. * ENDCASE. * MODIFY SCREEN. * ENDLOOP. *ENDFORM. *---------------------------------------------------------------------* * Form F_INPUT_VALIDATION *---------------------------------------------------------------------* * Input Validation *----------------------------------------------------------------------* FORM f_input_validation . * " mandatory check * IF so_bukrs IS INITIAL. * MESSAGE s035 DISPLAY LIKE 'E'. " Please fill all required fields. * LEAVE LIST-PROCESSING. * ENDIF. ENDFORM.
*----------------------------------------------------------------------* ***INCLUDE ZTEMPLATE_F01. *----------------------------------------------------------------------* *---------------------------------------------------------------------* * Form F_INITIALIZATION *---------------------------------------------------------------------* FORM f_initialization . sy-title = 'TEMPLATE TITLE'. ENDFORM. *---------------------------------------------------------------------* * Form F_GET_DATA *---------------------------------------------------------------------* FORM f_get_data . ENDFORM. *---------------------------------------------------------------------* * Form F_BUILD_DATA *---------------------------------------------------------------------* FORM f_build_data . ENDFORM.
*---------------------------------------------------------------------*
* Include ZTEMPLATE_F02
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* Form F_COUNT_DATA
*---------------------------------------------------------------------*
* Count itab lines and give return message
*---------------------------------------------------------------------*
FORM f_count_data TABLES pt_data CHANGING pc_count.
DATA: lv_char TYPE c LENGTH 10.
*--------------------------------------------------------------------*
CLEAR: pc_count.
IF pt_data[] IS INITIAL.
MESSAGE s000(zcmm01) DISPLAY LIKE 'E'.
ELSE.
DESCRIBE TABLE pt_data[] LINES pc_count.
WRITE pc_count TO lv_char LEFT-JUSTIFIED.
MESSAGE s001(zcmm01) WITH lv_char.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* Form F_SET_GRID_0100
*---------------------------------------------------------------------*
* Grid ALV Main Subroutine
*---------------------------------------------------------------------*
FORM f_set_grid_0100 TABLES pt_data
USING p_grid
CHANGING pcs_grid TYPE gty_s_grid.
DATA: lv_string TYPE string.
DATA: ls_print TYPE slis_print_alv.
* Create ALV Grid
IF pcs_grid-grid IS INITIAL.
PERFORM f_init_grid USING p_grid CHANGING pcs_grid.
PERFORM f_set_layo_0100 CHANGING pcs_grid.
PERFORM f_set_fcat TABLES pt_data[] CHANGING pcs_grid.
PERFORM f_set_sort_0100 CHANGING pcs_grid.
PERFORM f_set_tool_0100 CHANGING pcs_grid.
PERFORM f_set_even_0100 USING p_grid CHANGING pcs_grid.
PERFORM f_display_grid USING pcs_grid pt_data[].
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* Form F_SHOW_DATA
*---------------------------------------------------------------------*
FORM f_show_data .
DATA: lv_count TYPE i.
* PERFORM f_count_data TABLES gt_0100 CHANGING lv_count.
IF sy-batch IS INITIAL. "AND lv_count > 0.
CALL SCREEN 0100.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* Form F_INIT_GRID
*---------------------------------------------------------------------*
* Initializing Grid ALV
*----------------------------------------------------------------------*
FORM f_init_grid USING p_grid CHANGING pcs_grid TYPE gty_s_grid.
DATA: lv_grid_name TYPE string.
lv_grid_name = p_grid.
CREATE OBJECT pcs_grid-grid
EXPORTING
i_parent = cl_gui_container=>screen0
i_name = lv_grid_name.
ENDFORM.
FORM f_set_layo_0100 CHANGING pcs_grid TYPE gty_s_grid.
pcs_grid-layo-zebra = 'X'.
pcs_grid-layo-cwidth_opt = 'X'.
pcs_grid-layo-col_opt = 'X'.
pcs_grid-layo-sel_mode = 'A'.
ENDFORM.
*---------------------------------------------------------------------*
* Form f_set_fcat_0100
*---------------------------------------------------------------------*
* Set FieldCatalog
*----------------------------------------------------------------------*
FORM f_set_fcat TABLES pt_data CHANGING pcs_grid TYPE gty_s_grid.
*--------------------------------------------------------------------*
REFRESH: pcs_grid-fcat.
*--------------------------------------------------------------------*
PERFORM f_get_fcat TABLES pt_data USING pcs_grid-fcat.
*--------------------------------------------------------------------*
PERFORM f_set_fcat_att CHANGING pcs_grid.
ENDFORM.
*---------------------------------------------------------------------*
* Form F_GET_FCAT
*---------------------------------------------------------------------*
* Get fieldcat from itab attribute
*---------------------------------------------------------------------*
FORM f_get_fcat TABLES pt_data
USING pt_fcat TYPE lvc_t_fcat.
CALL FUNCTION 'ZCM_GET_FCAT_FROM_ITAB'
IMPORTING
et_fcat = pt_fcat
TABLES
pt_data = pt_data[].
ENDFORM. " f_get_fcat
*---------------------------------------------------------------------*
* Form F_SET_FCAT_ATT
*---------------------------------------------------------------------*
* Set fieldcat atttibutes
*----------------------------------------------------------------------*
FORM f_set_fcat_att CHANGING pcs_grid TYPE gty_s_grid.
DEFINE __set_text.
ls_fcat-coltext = &1.
ls_fcat-reptext = &1.
END-OF-DEFINITION.
DATA: ls_fcat TYPE lvc_s_fcat.
LOOP AT pcs_grid-fcat INTO ls_fcat.
* CASE ls_fcat-fieldname.
* WHEN 'BUKRS'.
* __set_text 'Comp'.
* ENDCASE.
MODIFY pcs_grid-fcat FROM ls_fcat.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* Form f_set_sort_0100
*---------------------------------------------------------------------*
* Set Sort
*----------------------------------------------------------------------*
FORM f_set_sort_0100 CHANGING pcs_grid TYPE gty_s_grid.
* PERFORM f_set_sort USING pcs_grid-fcat pcs_grid-sort:
* 'X' 'BUKRS' 'X' ' ',
* '' 'CUSTOMER' 'X' ' ',
ENDFORM.
*---------------------------------------------------------------------*
* Form F_SET_SORT
*---------------------------------------------------------------------*
FORM f_set_sort USING pt_fcat TYPE lvc_t_fcat
pt_sort TYPE lvc_t_sort
p_start p_field p_up p_subtot.
STATICS: lv_spos TYPE lvc_s_sort-spos,
lt_fcat TYPE lvc_t_fcat.
DATA : ls_sort TYPE lvc_s_sort,
ls_fcat TYPE lvc_s_fcat.
*--------------------------------------------------------------------*
IF p_start EQ 'X'.
lv_spos = 1.
CLEAR lt_fcat.
lt_fcat = pt_fcat[].
SORT lt_fcat BY fieldname.
ENDIF.
READ TABLE lt_fcat INTO ls_fcat
WITH KEY fieldname = p_field BINARY SEARCH.
CHECK sy-subrc EQ 0.
*--------------------------------------------------------------------*
IF p_start EQ 'X'.
lv_spos = 1.
ELSE.
lv_spos = lv_spos + 1.
ENDIF.
*--------------------------------------------------------------------*
ls_sort-spos = lv_spos.
ls_sort-fieldname = p_field.
ls_sort-up = p_up.
ls_sort-subtot = p_subtot.
APPEND ls_sort TO pt_sort.
ENDFORM. " F_SET_SORT
*---------------------------------------------------------------------*
* Form f_set_tool_0100
*---------------------------------------------------------------------*
* Excluding Toolbar
*----------------------------------------------------------------------*
FORM f_set_tool_0100 CHANGING pcs_grid TYPE gty_s_grid.
* APPEND: cl_gui_alv_grid=>mc_mb_view TO pcs_grid-tool.
* cl_gui_alv_grid=>mc_fc_info TO pcs_grid-tool.
ENDFORM. "f_set_tool_0100
*---------------------------------------------------------------------*
* Form f_set_even_0100
*---------------------------------------------------------------------*
* Set Event Info.
*----------------------------------------------------------------------*
FORM f_set_even_0100 USING p_grid
CHANGING pcs_grid TYPE gty_s_grid.
CHECK pcs_grid-event IS INITIAL.
*
* CREATE OBJECT pcs_grid-event
* EXPORTING
* e_grid_text = p_grid.
*
* SET HANDLER:
* pcs_grid-event->handle_hotspot_click FOR pcs_grid-grid.
* pcs_grid-event->handle_top_of_page FOR pcs_grid-grid.
ENDFORM.
*---------------------------------------------------------------------*
* Form F_DISPLAY_GRID
*---------------------------------------------------------------------*
* Display ALV Grid
*----------------------------------------------------------------------*
FORM f_display_grid USING ps_grid TYPE gty_s_grid
pt_data.
DATA gs_variant TYPE disvariant.
gs_variant-report = sy-repid.
CALL METHOD ps_grid-grid->set_table_for_first_display
EXPORTING
is_layout = ps_grid-layo
is_variant = gs_variant
i_save = 'A' "'X' = Global, 'U' = User specific, 'A' = All
it_toolbar_excluding = ps_grid-tool
CHANGING
it_outtab = pt_data
it_fieldcatalog = ps_grid-fcat
it_sort = ps_grid-sort.
* it_filter = ps_grid-filt.
ENDFORM.*---------------------------------------------------------------------*
* Include ZTEMPLATE_O01
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* Module STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
DATA: lv_title TYPE string.
lv_title = sy-title. " custom your ALV title here
SET PF-STATUS 'ST_0100'.
SET TITLEBAR 'TI_0100' WITH lv_title.
ENDMODULE.
*---------------------------------------------------------------------*
* Module INIT_0100 OUTPUT
*---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_0100 OUTPUT.
PERFORM f_set_grid_0100 TABLES gt_0100 USING gc_grid_0100
CHANGING gs_grid_0100.
ENDMODULE.*---------------------------------------------------------------------* * Include ZTEMPLATE_I01 *---------------------------------------------------------------------* *---------------------------------------------------------------------* * Module EXIT_COMMAND INPUT *---------------------------------------------------------------------* MODULE exit_command INPUT. LEAVE TO SCREEN 0. ENDMODULE. *---------------------------------------------------------------------* * Module USER_COMMAND_0100 INPUT *---------------------------------------------------------------------* MODULE user_command_0100 INPUT. ENDMODULE.