abap ALV 模板

介绍

今天给大家介绍一个alv的模板,可以满足日常中常用的需求,比如:自定义按钮,下载文件,上载文件,gui状态,使用alv模板可以大大提高开发报表的效率.

1.主程序

message-id 这个需要去打 se91 中去创建维护
该报表分为三个include文件和三个子程序

top:一般存放全局变量和选择屏幕(也可以include中)
f01:子程序
s01:用来处理alv的先关逻辑,包含字段处理;layout处理,数据显示等

REPORT zfir046 MESSAGE-ID zfir046.

INCLUDE zfir046_top.
INCLUDE zfir046_f01.
INCLUDE zfir046_s01.

START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_process_data.
  PERFORM frm_show_alv TABLES gt_output.

2.ZFIR046_TOP

*&---------------------------------------------------------------------*
*& 包含               ZFIR046_TOP
*&---------------------------------------------------------------------*

TABLES:sscrfields,  regup,reguh .
TYPE-POOLS : slis .

DATA: gr_alv       TYPE REF TO cl_salv_table,
      gr_functions TYPE REF TO cl_salv_functions_list.

DATA: lr_layout TYPE REF TO cl_salv_layout,
      ls_key    TYPE salv_s_layout_key.

DATA: gs_dyntxt TYPE smp_dyntxt.

FIELD-SYMBOLS: <fs_output> TYPE  zst_zfir046.

DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat,
      is_layout   TYPE lvc_s_layo,
      is_variant  TYPE disvariant.
FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:s_belnr FOR regup-belnr. "多值

PARAMETERS:p_zbukr TYPE reguh-zbukr OBLIGATORY. " 单值
*SELECTION-SCREEN SKIP. 空一行
*PARAMETERS p_xvorl AS CHECKBOX .  "复选框
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS p_priv TYPE c RADIOBUTTON GROUP rad DEFAULT 'X'.  "单选框
PARAMETERS p_pubi TYPE c RADIOBUTTON GROUP rad  .
SELECTION-SCREEN END OF BLOCK b2.

3.ZFIR046_F01

FORM frm_get_data .
*在这里插入SQL取数逻辑
ENDFORM.

FORM frm_process_data .
*在这里插入数据处理逻辑
ENDFORM.

4.ZFIR046_S01

复制标准gui状态参考博客: SAP abap ALV 自定义按钮功能

想添加Excel下载功能,参考博客:abap GUI_DOWNLOAD 可下载Excel TXT的文档

*&---------------------------------------------------------------------*
*& 包含               ZFIR046_S01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GT_OUTPUT
*&---------------------------------------------------------------------*
FORM frm_show_alv  TABLES   pt_outtab .
  DATA: ls_layout   TYPE lvc_s_layo,

        lt_fieldcat TYPE lvc_t_fcat,
        ls_fieldcat TYPE lvc_s_fcat.

  DATA : lt_sort TYPE slis_t_sortinfo_alv,
         ls_sort LIKE lvc_s_sort.

**--ALV显示样式
  PERFORM pf_alv_list_layout  USING ls_layout .
**--ALV报表的字段设置
  PERFORM pf_alv_list_fcat TABLES lt_fieldcat  .
**--定义排序字段
  " PERFORM pf_alv_sub_sort TABLES lt_sort  .
**----ALV报表显示
  PERFORM pf_alv_list_disply TABLES pt_outtab  lt_fieldcat lt_sort  USING ls_layout .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PF_ALV_LIST_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_LAYOUT  text
*----------------------------------------------------------------------*
FORM pf_alv_list_layout USING ps_layout TYPE lvc_s_layo.

  CLEAR:ps_layout.
  ps_layout-cwidth_opt    = 'X'.
  ps_layout-col_opt       = 'X'.
  ps_layout-zebra         = 'X'.
  ps_layout-sel_mode    = 'A'.
  ps_layout-box_fname      = 'SEL'.

ENDFORM. " PF_ALV_LIST_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  PF_ALV_SUB_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_SORT  text
*      -->P_TYPE  text
*      -->P_SLIS_T_SORTINFO_ALV  text
*----------------------------------------------------------------------*
FORM pf_alv_sub_sort  TABLES pt_sort TYPE slis_t_sortinfo_alv .
  DATA :  ls_sort LIKE lvc_s_sort.
ENDFORM.                    " PF_ALV_SUB_SORT

*&---------------------------------------------------------------------*
*&      Form  PF_ALV_LIST_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM pf_alv_list_fcat TABLES pt_fieldcat TYPE lvc_t_fcat    .

  DATA : ls_fieldcat   TYPE lvc_s_fcat .

  DATA : l_structure_name TYPE tabname .

  DATA : lt_dd03t TYPE STANDARD TABLE OF dd03t,
         ls_dd03t LIKE LINE OF lt_dd03t.

  IF p_priv IS NOT INITIAL.
    l_structure_name = 'ZST_ZFIR046_PRIV'.
  ELSEIF p_pubi IS NOT INITIAL .
    l_structure_name = 'ZST_ZFIR046'.
  ENDIF.

  "这个函数用来获取结构中字段和描述
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = l_structure_name " 结构名
      i_bypassing_buffer     = 'X'
    CHANGING
      ct_fieldcat            = pt_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.
  "删除不需要显示在alv上的的字段
  DELETE pt_fieldcat WHERE fieldname    = 'SEL'.

  *如果说你需要修改描述的话可以 修改这个个内表 pt_fieldcat[] 来更改描述
loop at pt_fieldcat[] into ls_fieldcat.
	case ls_fieldcat-fieldname.
	 WHEN 'SEL'.
          PERFORM set_fieldcat_name  USING ls_fieldcat '选择' .
    when 'mesg' .
    	 PERFORM set_fieldcat_name  USING ls_fieldcat '消息' .
 ls_fieldcat-colddictxt = 'L'.
 MODIFY pt_fieldcat[] FROM ls_fieldcat .
endloop.

*如果需要新增一个字段到alv上展示
	PERFORM set_fieldcat_name  USING ls_fieldcat 'STA' '状态' .
	APPEND ls_fieldcat TO pt_fieldcat[].
	CLEAR ls_fieldcat .

	PERFORM set_fieldcat_name  USING ls_fieldcat 'MSG' '消息' .
	APPEND ls_fieldcat TO pt_fieldcat[].
	CLEAR ls_fieldcat .
 

ENDFORM .                    "pf_alv_list_fcat

*&---------------------------------------------------------------------*
*&      Form  PF_ALV_LIST_DISPLY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_OUTTAB  text
*      -->LT_FIELDCAT  text
*      -->LS_LAYOUT  text
*----------------------------------------------------------------------*
FORM pf_alv_list_disply TABLES pt_outtab pt_fieldcat TYPE lvc_t_fcat
                                pt_sort  TYPE slis_t_sortinfo_alv
                         USING ps_layout TYPE lvc_s_layo    .

  DATA : l_pf_status_name TYPE slis_formname VALUE 'ALV_SET_PF_STATUS',
         l_pf_comand_name TYPE slis_formname VALUE 'ALV_USER_COMMAND',

         l_repid          LIKE sy-repid  VALUE sy-repid.

  DATA : is_variant LIKE  disvariant .
  is_variant-report  = l_repid .
  is_variant-handle  = '0001' .

*ALV数据显示函数
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = l_repid
      i_callback_pf_status_set = l_pf_status_name "定义gui状态
      i_callback_user_command  = l_pf_comand_name " 定义按钮
      it_fieldcat_lvc          = pt_fieldcat[]  "字段
      is_layout_lvc            = ps_layout
      is_variant               = is_variant
      i_save                   = 'A'          "保存变式
    TABLES
      t_outtab                 = pt_outtab[]. "输出数据表

ENDFORM. " PF_ALV_LIST_DISPLY
*&---------------------------------------------------------------------*
*&      Form  sub_set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM alv_set_pf_status USING rt_extab TYPE slis_t_extab.

  DATA fcode TYPE TABLE OF sy-ucomm.
*创建贵状态的时候建议直接复制标准的
  SET PF-STATUS 'GUI01' EXCLUDING fcode.
  SET TITLEBAR 'CAP' WITH '&' .

ENDFORM. "sub_set_pf_status

*&---------------------------------------------------------------------*
*&      Form  ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM alv_user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield. "响应ALV点击自定义按钮之后的事件
  DATA: lr_grid  TYPE REF TO cl_gui_alv_grid,
        lc_i     TYPE i,
        lv_subrc TYPE sy-subrc.

  DATA: p_gv_answer(1).

  DATA: l_answer TYPE  string.
  DATA: l_tcode TYPE char20 .
  DATA:  is_stable  TYPE  lvc_s_stbl.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "刷新alv
    IMPORTING
      e_grid = lr_grid.

  is_stable-row = 'X'.
  is_stable-col = 'X'.

  CASE r_ucomm.  "按钮功能写在这里
    WHEN '&IC1'.
    WHEN '&F03' OR '&F15'.
      LEAVE PROGRAM .
    WHEN '&F12'.
      LEAVE PROGRAM.
    WHEN '&SAVE'.
  ENDCASE.

  CALL METHOD lr_grid->refresh_table_display  "刷新alv
    EXPORTING
      is_stable = is_stable.

ENDFORM. "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TEXT  text
*----------------------------------------------------------------------*
FORM set_fieldcat_name USING  ps_fieldcat TYPE lvc_s_fcat    p_text.

*FORM set_fieldcat_name USING  ps_fieldcat TYPE lvc_s_fcat p_fcatname p_text.
"如果说你结构中没有某个字段,然后添加这个参数,自定义某个字段在alv上展示
*  ps_fieldcat-fieldname = p_factname . 

  ps_fieldcat-scrtext_l = p_text.
  ps_fieldcat-scrtext_m = p_text.
  ps_fieldcat-scrtext_s = p_text.
  ps_fieldcat-reptext = p_text.
ENDFORM.                    " SET_FIELDCAT_NAME
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值