自用模板,可能有些问题。具体需要修改的地方可以看注释,没写注释的一般不用动。注释掉的语句也可以自己解注释测试一下。
*声明定义ALV所要用到的类型池,针对ALV的控制信息数据*
*ALV变量定义*
TYPE-POOLS: ABAP,
OLE2,
SLIS.
DATA: GS_LAYOUT TYPE LVC_S_LAYO, "SLIS_LAYOUT_ALV ALV布局控制
GS_FCAT TYPE LVC_S_FCAT,
GT_FCAT LIKE TABLE OF GS_FCAT.
*ALV字段设定*FRM_ALV_SET_FIELDS
FORM FRM_ALV_SET_FIELDS.
DATA : LV_INDEX LIKE SY-INDEX.
CLEAR : GS_FCAT,
GT_FCAT,
GS_LAYOUT.
"GS_LAYOUT-CWIDTH_OPT = 'X'."启用列宽自动优化
"GS_LAYOUT-BOX_FNAME = 'SEL'."通常用于配置 ALV 列表中的框架或边框的名称,'SEL' 是一个预定义的框架名称
*ALV字段处理 宏*
DEFINE CATALOG.
* lv_index = lv_index + 1.
* gs_fcat-col_pos = lv_index.
GS_FCAT-FIELDNAME = &1."在TYPE alv里面定义的字段名字
GS_FCAT-FIX_COLUMN = &2."固定列
GS_FCAT-REF_TABLE = &3.
GS_FCAT-EDIT = &4."描述信息
GS_FCAT-COLDDICTXT = 'L'.
GS_FCAT-SCRTEXT_L = &5.
GS_FCAT-REF_FIELD = &6.
GS_FCAT-OUTPUTLEN = &7.
GS_FCAT-EMPHASIZE = &8."列颜色
" gs_fcat-hotspot."热点 注释掉
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
*根据需要显示的信息字段进行修改 改变编号 修改描述信息*
** &1 &2 &3 &4 &5 &6 &7 &8 &9
CATALOG:
'STUID' 'X' '' '' TEXT-C01 '' '' '',
'STUNAME' '' '' '' TEXT-C02 '' '' '',
'SCHNAME' '' '' '' TEXT-C07 '' '' '',
'GENDER' '' '' '' TEXT-C03 '' '' '',
'ZDATE' '' '' '' TEXT-C04 '' '' '',
'ZPERIOD' '' '' '' TEXT-C05 '' '' '',
'ZDES' '' '' '' TEXT-C06 '' '' ''.
ENDFORM."FRM_ALV_SET_FIELDS
*设置程序的用户状态*FRM_ALV_SET_STATUS
FORM FRM_ALV_SET_STATUS USING EXTAB TYPE SLIS_T_EXTAB.
DATA: LT_FCODE TYPE TABLE OF SY-UCOMM.
APPEND '&RNT' TO LT_FCODE.
*此处需要双击PF_ALV,新建导入模板
"双击PF_ALV新建导入模板 附加->调整模板 程序SAPLKKBL 状态STANDARD_FULLSCREEN
SET PF-STATUS 'PF_ALV' EXCLUDING LT_FCODE."ALV的按钮
ENDFORM."FRM_ALV_SET_STATUS
*响应用户的操作*FRM_ALV_USER_COMMAND
FORM FRM_ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID,
GL_VALID TYPE C,
LT_FILTERED_ENTRIES TYPE LVC_T_FIDX.
CASE R_UCOMM.
WHEN '&DATA_SAVE'."
MESSAGE '功能开发中......' TYPE 'I'.
WHEN '&IC1'."用户在表格上做了操作
WHEN '&ZSHOW'."仅显示通过采购申请创建的订单
WHEN '&ZPRNT'."打印采购订单
ENDCASE.
ENDFORM."FRM_ALV_USER_COMMAND
*需要确定的是TYPE后面定义的名字是否和程序中的一致,对这里的内表名进行修改
FORM FRM_DISPLAY_ALV USING U_IT_ALV TYPE GVIA_T_ALV."引用传递,p_gt_alv 是要显示的内表的名字 "引用传递
PERFORM FRM_ALV_SET_FIELDS."准备表头等数据
*调用ALV显示数据
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "系统提供的函数帮助我们显示内表
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "固定写法
* i-default = '' "固定写法
I_CALLBACK_PF_STATUS_SET = 'FRM_ALV_SET_STATUS' "生成一些按钮 "生成一些按钮;3个PERFORM :FRM_ALV_SET_FIELDS、 FRM_ALV_SET_STATUS、FRM_ALV_USER_COMMAND,2个变量:GT_FCAT、GS_LAYOUT
IT_FIELDCAT_LVC = GT_FCAT "这个内表里存储着表头的一些信息 什么表、有几列
IS_LAYOUT_LVC = GS_LAYOUT "显示的格式
I_CALLBACK_USER_COMMAND = 'FRM_ALV_USER_COMMAND' "响应用户的按键
TABLES
T_OUTTAB = U_IT_ALV. "将此内表的数据,显示在最终界面上
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE SY-MSGTY
NUMBER SY-MSGNO
WITH SY-MSGV1
SY-MSGV2
SY-MSGV3
SY-MSGV4.
ENDIF.
ENDFORM.