REPORT z_alv_dynamic_data_v3. *---------------------------------------------------------------------* * ALV GRID with internal table created dynamically + cells color * * Author : Michel PIOUD * * Email : HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* DATA : mara TYPE mara. " General Material Data TYPE-POOLS: slis. " ALV Global types FIELD-SYMBOLS : <data> TYPE table. " Data to display SELECT-OPTIONS : s_matnr FOR mara-matnr. " Material number SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'Maximum of lines to display'. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. FIELD-SYMBOLS : <field> TYPE ANY, <field2> TYPE ANY, <header> TYPE ANY, <header2> TYPE ANY, <lt_data> TYPE table. " Data read from DB DATA: lp_struct TYPE REF TO data, lp_struct2 TYPE REF TO data, lp_table TYPE REF TO data, " Pointer to dynamic table lp_table2 TYPE REF TO data, " Pointer to dynamic table ls_lvc_cat TYPE lvc_s_fcat, lt_lvc_cat TYPE lvc_t_fcat. " Field catalog * First column CLEAR ls_lvc_cat. ls_lvc_cat-fieldname = 'MATNR'. ls_lvc_cat-ref_table = 'MARA'. APPEND ls_lvc_cat TO lt_lvc_cat. * 2nd column CLEAR ls_lvc_cat. ls_lvc_cat-fieldname = 'MAKTX'. ls_lvc_cat-ref_table = 'MAKT'. APPEND ls_lvc_cat TO lt_lvc_cat. * 3rd column CLEAR ls_lvc_cat. ls_lvc_cat-fieldname = 'MATKL'. ls_lvc_cat-ref_table = 'MARA'. APPEND ls_lvc_cat TO lt_lvc_cat. * Create 1st internal table CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_lvc_cat IMPORTING ep_table = lp_table. ASSIGN lp_table->* TO <lt_data>. * Read data into 1st internal table SELECT matnr maktx matkl INTO TABLE <lt_data> FROM v_matnr UP TO p_max ROWS WHERE matnr IN s_matnr. * Create 2nd internal table * Checkbox CLEAR ls_lvc_cat. ls_lvc_cat-fieldname = 'CHECKBOX'. APPEND ls_lvc_cat TO lt_lvc_cat. * Table color CLEAR ls_lvc_cat. ls_lvc_cat-fieldname = 'TABCOLOR'. ls_lvc_cat-ref_table = 'CALENDAR_TYPE'. ls_lvc_cat-ref_field = 'COLTAB'. APPEND ls_lvc_cat TO lt_lvc_cat. * Create 2nd internal table CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_lvc_cat IMPORTING ep_table = lp_table2. ASSIGN lp_table2->* TO <data>. * Create structure = structure of the 1st internal table CREATE DATA lp_struct LIKE LINE OF <lt_data>. ASSIGN lp_struct->* TO <header>. * Create structure = structure of the 2nd internal table CREATE DATA lp_struct2 LIKE LINE OF <data>. ASSIGN lp_struct2->* TO <header2>. * Move data from 1st internal table --> 2nd internal table LOOP AT <lt_data> ASSIGNING <header>. DESCRIBE TABLE lt_lvc_cat. CLEAR <header2>. * Fill the internal to display <data> DO sy-tfill TIMES. READ TABLE lt_lvc_cat INTO ls_lvc_cat INDEX sy-index. * For each field of lt_lvc_cat. ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header> TO <field>. IF sy-subrc NE 0. EXIT .ENDIF. ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header2> TO <field2>. IF sy-subrc NE 0. EXIT .ENDIF. <field2> = <field>. ENDDO. * Modify color ASSIGN COMPONENT 'TABCOLOR' OF STRUCTURE <header2> TO <field2>. IF sy-subrc EQ 0. PERFORM f_modify_color USING 'MAKTX' <field2>. PERFORM f_modify_color USING 'MATKL' <field2>. ENDIF. APPEND <header2> TO <data> . ENDLOOP. ENDFORM. " f_read_data *---------------------------------------------------------------------* * Form F_DISPLAY_DATA *---------------------------------------------------------------------* FORM f_display_data. * Macro definition DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. ls_sort-down = 'X'. append ls_sort to lt_sort. END-OF-DEFINITION. DATA: ls_layout TYPE slis_layout_alv, lt_sort TYPE slis_t_sortinfo_alv, ls_sort TYPE slis_sortinfo_alv, ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv. " Field catalog * Build Fieldcatalog - First column CLEAR ls_fieldcat. ls_fieldcat-fieldname = 'MATNR'. ls_fieldcat-ref_tabname = 'MARA'. ls_fieldcat-key = 'X'. APPEND ls_fieldcat TO lt_fieldcat. * Build Fieldcatalog - 2nd column CLEAR ls_fieldcat. ls_fieldcat-fieldname = 'MAKTX'. ls_fieldcat-ref_tabname = 'MAKT'. APPEND ls_fieldcat TO lt_fieldcat. * Build Fieldcatalog - 3rd column CLEAR ls_fieldcat. ls_fieldcat-fieldname = 'MATKL'. ls_fieldcat-ref_tabname = 'MARA'. APPEND ls_fieldcat TO lt_fieldcat. * Layout ls_layout-zebra = 'X'. ls_layout-colwidth_optimize = 'X'. ls_layout-box_fieldname = 'CHECKBOX'. ls_layout-coltab_fieldname = 'TABCOLOR'. m_sort 'MATNR'. " Sort by creation date * Display data CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING is_layout = ls_layout it_fieldcat = lt_fieldcat it_sort = lt_sort TABLES t_outtab = <data>. ENDFORM. " F_DISPLAY_DATA *---------------------------------------------------------------------* * Form F_modify_color *---------------------------------------------------------------------* FORM f_modify_color USING u_fieldname TYPE lvc_fname ut_tabcolor TYPE table. DATA: l_rnd_value TYPE datatype-integer2, ls_tabcolor TYPE lvc_s_scol. * Random value CALL FUNCTION 'RANDOM_I2' EXPORTING rnd_min = 0 rnd_max = 3 IMPORTING rnd_value = l_rnd_value. CLEAR ls_tabcolor. ls_tabcolor-fname = u_fieldname. CASE l_rnd_value. WHEN 0. ls_tabcolor-color-col = 1. " Blue. ls_tabcolor-color-int = 0. ls_tabcolor-color-inv = 0. WHEN 1. ls_tabcolor-color-col = 3. " Yellow. ls_tabcolor-color-int = 0. ls_tabcolor-color-inv = 0. WHEN 2. ls_tabcolor-color-col = 5. " Green. ls_tabcolor-color-int = 0. ls_tabcolor-color-inv = 0. WHEN 3. ls_tabcolor-color-col = 6. " Red. ls_tabcolor-color-int = 0. ls_tabcolor-color-inv = 0. ENDCASE. INSERT ls_tabcolor INTO TABLE ut_tabcolor. ENDFORM. " F_MODIFY_COLOR ************ END OF PROGRAM Z_ALV_DYNAMIC_DATA_V3 *********************