REPORT z_alv_crossed_table. *---------------------------------------------------------------------* * This report displays data from table VBAK (Orders) in a crossed * * table : * * - Column : Sales organization * * - Line : Creation date * * - Intersection : Number of orders created * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 16-Nov-07 * * HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X'. *---------------------------------------------------------------------* TYPE-POOLS: slis. " ALV Global types TYPES : BEGIN OF ty_data, erdat TYPE sydatum, " Creation Date vkorg TYPE vkorg, " Sales organization total TYPE i, " Total of orders END OF ty_data. DATA : gs_vbak TYPE vbak, " Sales Document gt_data TYPE TABLE OF ty_data. *---------------------------------------------------------------------* SELECT-OPTIONS : s_vkorg FOR gs_vbak-vkorg, " Sales organization s_kunnr FOR gs_vbak-kunnr, " Sold-to party s_vbeln FOR gs_vbak-vbeln, " Sales document s_erdat FOR gs_vbak-erdat. " Creation Date SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(3) TYPE n DEFAULT '020' OBLIGATORY. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'Maximum of lines to display'. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. SELECT erdat vkorg COUNT(*) AS total INTO TABLE gt_data FROM vbak UP TO p_max ROWS WHERE kunnr IN s_kunnr AND vbeln IN s_vbeln AND vkorg IN s_vkorg AND erdat IN s_erdat GROUP BY vkorg erdat ORDER BY erdat DESCENDING. ENDFORM. " F_READ_DATA *---------------------------------------------------------------------* * Form F_DISPLAY_DATA *---------------------------------------------------------------------* FORM f_display_data. FIELD-SYMBOLS : <field> TYPE ANY, <header> TYPE ANY, <lt_data> TYPE STANDARD TABLE. " Data to display * Macro definition DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. ls_sort-down = c_x. append ls_sort to lt_sort. END-OF-DEFINITION. DATA: l_col(5), ls_data TYPE ty_data, lp_struct TYPE REF TO data, lp_table TYPE REF TO data, " Pointer to dynamic table ls_lvc_cat TYPE lvc_s_fcat, lt_lvc_cat TYPE lvc_t_fcat, " Field catalog ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog lt_sort TYPE slis_t_sortinfo_alv, ls_sort TYPE slis_sortinfo_alv, ls_layout TYPE slis_layout_alv, lt_data TYPE TABLE OF ty_data. * Build Fieldcatalog - First column ls_lvc_cat-fieldname = 'ERDAT'. ls_lvc_cat-ref_table = 'VBAK'. APPEND ls_lvc_cat TO lt_lvc_cat. ls_fieldcat-fieldname = 'ERDAT'. ls_fieldcat-ref_tabname = 'VBAK'. ls_fieldcat-key = c_x. APPEND ls_fieldcat TO lt_fieldcat. lt_data[] = gt_data[]. SORT lt_data BY vkorg. DELETE ADJACENT DUPLICATES FROM lt_data COMPARING vkorg. LOOP AT lt_data INTO ls_data. * Build Fieldcatalog CLEAR ls_lvc_cat. CONCATENATE 'V' ls_data-vkorg INTO ls_lvc_cat-fieldname. ls_lvc_cat-datatype = 'INT4'. APPEND ls_lvc_cat TO lt_lvc_cat. * Build Fieldcatalog CLEAR ls_fieldcat. ls_fieldcat-fieldname = ls_lvc_cat-fieldname. ls_fieldcat-datatype = 'INT4'. ls_fieldcat-seltext_s = ls_data-vkorg. ls_fieldcat-no_zero = c_x. APPEND ls_fieldcat TO lt_fieldcat. ENDLOOP. FREE lt_data. * Create 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>. * Create structure = structure of the internal table CREATE DATA lp_struct LIKE LINE OF <lt_data>. ASSIGN lp_struct->* TO <header>. SORT gt_data BY erdat. * Fill the internal table <lt_data> LOOP AT gt_data INTO ls_data. AT NEW erdat. CLEAR <header>. ASSIGN COMPONENT 'ERDAT' OF STRUCTURE <header> TO <field>. IF sy-subrc NE 0. EXIT .ENDIF. <field> = ls_data-erdat. ENDAT. CONCATENATE 'V' ls_data-vkorg INTO l_col. ASSIGN COMPONENT l_col OF STRUCTURE <header> TO <field>. IF sy-subrc NE 0. EXIT .ENDIF. <field> = ls_data-total. AT END OF erdat. APPEND <header> TO <lt_data>. ENDAT. ENDLOOP. * Layout ls_layout-colwidth_optimize = c_x. ls_layout-zebra = c_x. m_sort 'ERDAT'. " Sort by creation date CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING is_layout = ls_layout it_fieldcat = lt_fieldcat it_sort = lt_sort TABLES t_outtab = <lt_data>. ENDFORM. " F_DISPLAY_DATA ************ END OF PROGRAM Z_ALV_CROSSED_TABLE **********************