【SAP】动态内表代码示例
*&---------------------------------------------------------------------* *& Report YTEST7 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ytest7. *&---------------------------------------------------------------------* *& TYPE-POOLS & TABLES *&---------------------------------------------------------------------* TYPE-POOLS: slis. TABLES:mara. *&---------------------------------------------------------------------* *& PROGRAM VARIABLES & CONSTANTS *&---------------------------------------------------------------------* DATA: gs_layout TYPE lvc_s_layo, gt_fieldcat TYPE TABLE OF lvc_s_fcat, gs_fieldcat TYPE lvc_s_fcat, gr_grid TYPE REF TO cl_gui_alv_grid, gs_variant LIKE disvariant, gt_events TYPE TABLE OF slis_alv_event, gs_events TYPE slis_alv_event. *&---------------------------------------------------------------------* *& DEFINE TABLE *&---------------------------------------------------------------------* TYPES:BEGIN OF ty_tab, sel TYPE c, END OF ty_tab. DATA:gt_tab TYPE TABLE OF ty_tab, gs_tab TYPE ty_tab. FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE. *&---------------------------------------------------------------------* *& DEFINITION *&---------------------------------------------------------------------* DEFINE mcr_field. CLEAR gs_fieldcat. gs_fieldcat-fieldname = &1. gs_fieldcat-scrtext_l = &2. gs_fieldcat-colddictxt = &3. gs_fieldcat-qfieldname = &4. gs_fieldcat-no_zero = &5. gs_fieldcat-edit = &6. gs_fieldcat-ref_table = &7. gs_fieldcat-ref_field = &8. gs_fieldcat-hotspot = &9. APPEND gs_fieldcat TO gt_fieldcat. END-OF-DEFINITION. *----------------------------------------------------------------------* * SELECTION SCREEN *----------------------------------------------------------------------* PARAMETERS p_col TYPE string OBLIGATORY. "填入动态创建的列名,以逗号分隔 *----------------------------------------------------------------------* * START-OF-SELECTION *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_dis_data . "展示数据 *&---------------------------------------------------------------------* *& Form frm_dis_data *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_dis_data . CLEAR: gs_layout. gs_layout-cwidth_opt = 'X'. gs_layout-zebra = 'X'. PERFORM frm_fill_fieldcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid * i_callback_pf_status_set = 'FRM_STATUS' * i_callback_user_command = 'FRM_COMMAND' is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat[] is_variant = gs_variant it_events = gt_events i_default = 'X' i_save = 'A' TABLES t_outtab = <dyn_table> EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_fill_fieldcat *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_fill_fieldcat . SPLIT p_col AT ',' INTO TABLE DATA(gt_col). LOOP AT gt_col ASSIGNING FIELD-SYMBOL(<fs_col>). DATA(lv_txt) = <fs_col> && '描述'. mcr_field:<fs_col> lv_txt 'L' '' '' '' '' '' ''. ENDLOOP. PERFORM frm_create_dyn. "创建动态内表&&填充数据 ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CREATE_DYN *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_create_dyn . DATA:lt_table TYPE REF TO data. "创建动态内表 CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = gt_fieldcat IMPORTING ep_table = lt_table EXCEPTIONS generate_subpool_dir_full = 1 OTHERS = 2. ASSIGN lt_table->* TO <dyn_table>. PERFORM frm_write_data_to_dyntable. "向动态内表中写数 ENDFORM. *&---------------------------------------------------------------------* *& Form frm_write_data_to_dyntable *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_write_data_to_dyntable . DATA:ls_new_line TYPE REF TO data. FIELD-SYMBOLS:<dyn_wa>, <field>. SPLIT p_col AT ',' INTO TABLE DATA(gt_col). "建立一个与动态内表结构相同的数据对象 CREATE DATA ls_new_line LIKE LINE OF <dyn_table>. ASSIGN ls_new_line->* TO <dyn_wa>. DESCRIBE TABLE gt_col LINES DATA(lv_col). "填充数据 DO 3 TIMES. DO lv_col TIMES. DATA(lv_index) = sy-index. ASSIGN COMPONENT sy-index OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_field>). <fs_field> = '填充值' && lv_index . ENDDO. APPEND <dyn_wa> TO <dyn_table>. ENDDO. ENDFORM.



浙公网安备 33010602011771号