直接上代码 快速生成ALV
一、TOP定义变量
二、FRM01
PERFORM frm_display.
FORM frm_dis_data .
*" 设置ALV输出格式
PERFORM frm_set_layout.
*" 设置ALV输出字段
PERFORM frm_set_fieldcat.
*" ALV展示
PERFORM frm_output_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_layo-zebra = abap_true. " 斑马线
gs_layo-cwidth_opt = abap_true. " 自适应列宽
gs_layo-sel_mode = 'A'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
DATA:
lo_columns TYPE REF TO cl_salv_columns_table,
lo_aggregations TYPE REF TO cl_salv_aggregations,
lo_salv_table TYPE REF TO cl_salv_table,
lr_table TYPE REF TO data.
DATA:
lv_tabix LIKE sy-tabix,
ls_fact LIKE lvc_s_fcat.
REFRESH gt_fcat.
“内表的值给动态内表
CREATE DATA lr_table LIKE gt_idalv.
ASSIGN lr_table->* TO <fs_table>.
APPEND LINES OF gt_idalv TO <fs_table>.
TRY .
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = lo_salv_table
CHANGING
t_table = <fs_table>
).
CATCH cx_salv_msg INTO DATA(lo_msg).
DATA(lv_error) = lo_msg->if_message~get_text( ).
ENDTRY.
lo_columns = lo_salv_table->get_columns( ).
lo_aggregations = lo_salv_table->get_aggregations( ).
*" 取FCAT结构字段
gt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_columns
r_aggregations = lo_aggregations
).
* DELETE gt_fcat WHERE fieldname EQ 'ZTRTM' OR fieldname EQ 'PSPNR'."不显示的字段
”字段描述
LOOP AT gt_fcat ASSIGNING FIELD-SYMBOL(<ls_fcat>).
CASE <ls_fcat>-fieldname.
WHEN 'POST1'.
<ls_fcat>-coltext = '项目定义描述'. "
<ls_fcat>-scrtext_l = '项目定义描述'. "
<ls_fcat>-scrtext_m = '项目定义描述'. "
<ls_fcat>-scrtext_s = '项目定义描述'. "
WHEN 'SGTXT'.
<ls_fcat>-coltext = '行项目文本'. "
<ls_fcat>-scrtext_l = '行项目文本'. "
<ls_fcat>-scrtext_m = '行项目文本'. "
<ls_fcat>-scrtext_s = '行项目文本'. "
WHEN 'BUZEI'.
<ls_fcat>-coltext = '行项目'. "
<ls_fcat>-scrtext_l = '行项目'. "
<ls_fcat>-scrtext_m = '行项目'. "
<ls_fcat>-scrtext_s = '行项目'. "
ENDCASE.
ENDLOOP.
ENDFORM.
FORM frm_output_alv .
*" ALV 显示
IF <fs_table>[] IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'FRM_SET_STATUS'
* i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layo
is_variant = gs_vari
it_fieldcat_lvc = gt_fcat
i_save = 'A'
TABLES
t_outtab = <fs_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE s000(yxa_fi) WITH '没有满足条件数据' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.