REPORT z_alv_dynamic_data_v2. *>********************************************************************* * This report displays data from SAP tables, views (like SE16) * * FM : REUSE_ALV_GRID_DISPLAY - V6.20 - Updated 26-Nov-08 * *---------------------------------------------------------------------* * Author : Michel PIOUD * * HomePage : http://www.oocities.org/mpioud/Abap_programs.html * *>********************************************************************* * __o __o __o __o __o __o __o _ * * _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\ * * (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ * *********************************************************************** DATA: g_mandt TYPE mandt. SELECTION-SCREEN : BEGIN OF LINE, COMMENT 6(33) v_1 FOR FIELD p_table. "#EC NEEDED PARAMETERS p_table TYPE dd03l-tabname OBLIGATORY MEMORY ID dtb. SELECTION-SCREEN : END OF LINE, SKIP. SELECTION-SCREEN : BEGIN OF LINE, COMMENT 6(30) v_2 FOR FIELD s_mandt. "#EC NEEDED SELECT-OPTIONS s_mandt FOR g_mandt DEFAULT sy-mandt MATCHCODE OBJECT ddsef4clnt. SELECTION-SCREEN : END OF LINE, SKIP. SELECTION-SCREEN : SKIP , BEGIN OF LINE, COMMENT 6(33) v_3 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(3) TYPE n DEFAULT '200' OBLIGATORY. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM f_check_table. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'Table'. v_2 = 'Client'. v_3 = 'Maximum of records'. *---------------------------------------------------------------------* START-OF-SELECTION. PERFORM f_display_data. *---------------------------------------------------------------------* * Form F_DISPLAY_DATA *---------------------------------------------------------------------* FORM f_display_data. TYPE-POOLS: slis. " ALV Global Types DATA: lp_table TYPE REF TO data, " Pointer to dynamic table ls_layout TYPE slis_layout_alv, lt_fieldcat TYPE slis_t_fieldcat_alv. FIELD-SYMBOLS : <lt_data> TYPE STANDARD TABLE. " Data to display * Create internal table CREATE DATA lp_table TYPE STANDARD TABLE OF (p_table) WITH NON-UNIQUE DEFAULT KEY. ASSIGN lp_table->* TO <lt_data>. * Field MANDT exists ? SELECT SINGLE tabname INTO p_table FROM dd03l WHERE tabname = p_table AND fieldname = 'MANDT' AND as4local = 'A' AND as4vers = '0000' AND position = '0001' AND rollname IN ('MANDT','S_MANDT','SYMANDT'). IF sy-subrc EQ 0. * Read data SELECT * UP TO p_max ROWS FROM (p_table) CLIENT SPECIFIED INTO CORRESPONDING FIELDS OF TABLE <lt_data> WHERE mandt IN s_mandt ORDER BY PRIMARY KEY. ELSE. * Field CLIENT exists ? SELECT SINGLE tabname INTO p_table FROM dd03l WHERE tabname = p_table AND fieldname = 'CLIENT' AND as4local = 'A' AND as4vers = '0000' AND position = '0001' AND rollname IN ('MANDT','S_MANDT','SYMANDT'). IF sy-subrc EQ 0. * Read data SELECT * UP TO p_max ROWS FROM (p_table) CLIENT SPECIFIED INTO CORRESPONDING FIELDS OF TABLE <lt_data> WHERE client IN s_mandt ORDER BY PRIMARY KEY. ELSE. * Read data SELECT * UP TO p_max ROWS FROM (p_table) INTO CORRESPONDING FIELDS OF TABLE <lt_data> ORDER BY PRIMARY KEY. ENDIF. ENDIF. IF <lt_data>[] IS INITIAL. * No table entries found for specified key MESSAGE i429(mo). EXIT. ENDIF. * Build Field catalog CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = p_table i_client_never_display = '' CHANGING ct_fieldcat = lt_fieldcat 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. ls_layout-zebra = 'X'. ls_layout-colwidth_optimize = 'X'. * Display ALV List 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_DYNAMIC_DATA_V2 ****************