REPORT z_alv_list_transposed_v2. *---------------------------------------------------------------------* * This report displays an ALV Grid list transposed. * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 19-Nov-07 * * HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X'. *---------------------------------------------------------------------* TYPE-POOLS: slis. " ALV Global types SELECTION-SCREEN : BEGIN OF LINE, COMMENT 1(35) v_1 FOR FIELD p_table. "#EC NEEDED PARAMETERS p_table TYPE dd03l-tabname OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 5(27) v_2 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(2) TYPE n DEFAULT '10' OBLIGATORY. SELECTION-SCREEN END OF LINE. FIELD-SYMBOLS : <gt_data> TYPE STANDARD TABLE. " Read Data *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'Table or view'. v_2 = 'Maximum of records to read'. *---------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM f_check_table. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_read_data. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form f_read_data *---------------------------------------------------------------------* FORM f_read_data. DATA: lp_table TYPE REF TO data. " Pointer to dynamic table * Create internal table CREATE DATA lp_table TYPE STANDARD TABLE OF (p_table) WITH NON-UNIQUE DEFAULT KEY. ASSIGN lp_table->* TO <gt_data>. SELECT * INTO CORRESPONDING FIELDS OF TABLE <gt_data> UP TO p_max ROWS FROM (p_table). ENDFORM. " F_READ_DATA *---------------------------------------------------------------------* * Form F_DISPLAY_DATA *---------------------------------------------------------------------* FORM f_display_data. DATA: l_column TYPE sy-tabix, 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 lt_fcat TYPE slis_t_fieldcat_alv, " Field catalog ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog ls_layout TYPE slis_layout_alv. FIELD-SYMBOLS : <ls_header> TYPE ANY, <field_header> TYPE ANY, <field_data> TYPE ANY, <ls_data> TYPE ANY, <lt_data> TYPE STANDARD TABLE." Data to display ls_lvc_cat-fieldname = 'COLUMNTEXT'. ls_lvc_cat-ref_table = 'LVC_S_DETA'. APPEND ls_lvc_cat TO lt_lvc_cat. ls_fieldcat-fieldname = 'COLUMNTEXT'. ls_fieldcat-ref_tabname = 'LVC_S_DETA'. ls_fieldcat-key = c_x. APPEND ls_fieldcat TO lt_fieldcat. DESCRIBE TABLE <gt_data>. DO sy-tfill TIMES. * For each line, a column 'VALUEx' is created in the fieldcatalog * Build Fieldcatalog WRITE sy-index TO ls_lvc_cat-fieldname LEFT-JUSTIFIED. CONCATENATE 'VALUE' ls_lvc_cat-fieldname INTO ls_lvc_cat-fieldname. ls_lvc_cat-ref_field = 'VALUE'. ls_lvc_cat-ref_table = 'LVC_S_DETA'. APPEND ls_lvc_cat TO lt_lvc_cat. * Build Fieldcatalog CLEAR ls_fieldcat. ls_fieldcat-fieldname = ls_lvc_cat-fieldname. ls_fieldcat-ref_fieldname = 'VALUE'. ls_fieldcat-ref_tabname = 'LVC_S_DETA'. APPEND ls_fieldcat TO lt_fieldcat. ENDDO. * 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 <ls_header>. * Create structure = structure of the internal table CREATE DATA lp_struct LIKE LINE OF <gt_data>. ASSIGN lp_struct->* TO <ls_data>. * Create field catalog from dictionary structure CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = p_table CHANGING ct_fieldcat = lt_fcat EXCEPTIONS inconsistent_interface = 1 program_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. DESCRIBE TABLE lt_fcat. * Fill the internal to display <lt_data> DO sy-tfill TIMES. IF sy-index = 1. READ TABLE lt_fcat INTO ls_fieldcat INDEX 1. IF ls_fieldcat-fieldname = 'MANDT'. * If 1st column is MANDT, it's not displayed CONTINUE. ENDIF. ENDIF. * For each field of GT_DATA ASSIGN COMPONENT 1 OF STRUCTURE <ls_header> TO <field_header>. IF sy-subrc NE 0. EXIT .ENDIF. READ TABLE lt_fcat INTO ls_fieldcat INDEX sy-index. * Fill 1st column <field_header> = ls_fieldcat-seltext_m. IF <field_header> IS INITIAL. <field_header> = ls_fieldcat-fieldname. ENDIF. LOOP AT <gt_data> INTO <ls_data>. l_column = sy-tabix + 1. ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data> TO <field_data>. IF sy-subrc NE 0. EXIT .ENDIF. ASSIGN COMPONENT l_column OF STRUCTURE <ls_header> TO <field_header>. IF sy-subrc NE 0. EXIT .ENDIF. WRITE <field_data> TO <field_header> LEFT-JUSTIFIED. ENDLOOP. APPEND <ls_header> TO <lt_data>. ENDDO. ls_layout-zebra = c_x. ls_layout-no_colhead = c_x. ls_layout-colwidth_optimize = c_x. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING is_layout = ls_layout it_fieldcat = lt_fieldcat TABLES t_outtab = <lt_data>. ENDFORM. " F_DISPLAY_DATA *---------------------------------------------------------------------* * Form F_CHECK_TABLE *---------------------------------------------------------------------* FORM f_check_table . DATA : l_tabclass TYPE tabclass, " Table category l_viewclass TYPE viewclass. " View Type * Read table category SELECT SINGLE tabclass viewclass INTO (l_tabclass, l_viewclass) FROM dd02l WHERE tabname = p_table AND as4local = 'A' AND as4vers = '0000'. IF sy-subrc NE 0. * Table & is not active in the Dictionary MESSAGE e402(mo) WITH p_table. ELSEIF l_tabclass = 'INTTAB'. * & is a structure, not a table MESSAGE e403(mo) WITH p_table. ELSEIF l_tabclass = 'VIEW' AND l_viewclass NE 'D'. * Only use views of type "Maintenance view" MESSAGE e309(sv). ENDIF. ENDFORM. " F_CHECK_TABLE ********* END OF PROGRAM Z_ALV_LIST_TRANSPOSED_V2 *********************