ABAP 快速动态生成ALV报表

直接上代码 快速生成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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值