文章目录
ALV报表概述
AVL报表是ABAP最重要的报表工具,其英文全称Abap list viewer ,其输入结果以行和列展示,集成的功能有排序,求和,过滤,列求和,隐藏等输出的格式也有EXCEL,水晶报表,CSV文件等。展现的方式有简单list,连续等级list,树等。
报表开发步骤
声明变量定义alv所要用到的类型池:针对ALV的控制信息数据
声明使用的类型池:ABAP、OLE2和SLIS。
声明局部变量,包括用于ALV布局的GS_LAYOUT和字段目录的GS_FCAT,以及一个表类型的GT_FCAT。
TYPE-POOLS: ABAP,
OLE2,
SLIS.
DATA: GS_LAYOUT TYPE LVC_S_LAYO,
GS_FCAT TYPE LVC_S_FCAT,
GT_FCAT LIKE TABLE OF GS_FCAT.
定义内表存放自定义数据文件的数据,以及在ALV中显示
*&---------------------------------------------------------------------*
*& 包含 Z36193_03_00_D01
*& 定义ALV数据输出的格式
*& 定义内表,结构体
*&---------------------------------------------------------------------*
TYPES: BEGIN OF GTY_ALV,
ZCODE TYPE ZCODE_JSM,
ZNAME TYPE ZNAME_JSM,
SEX TYPE ZSEX_JSM,
ZSCHOOL TYPE ZSCHOOL_JSM,
ZSNAME TYPE ZSNAME_JSM,
ZADD TYPE ZADD_JSM,
END OF GTY_ALV.
TYPES: GTY_T_ALV TYPE STANDARD TABLE OF GTY_ALV.
DATA GS_ALV TYPE GTY_ALV.
DATA GT_ALV TYPE GTY_T_ALV.
创建选择屏幕,用于用户输入参数
TABLES: ZSTUDENT_JSM_01.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
S_SEX TYPE ZSEX_JSM.
SELECT-OPTIONS:
S_CODE FOR GS_ALV-ZCODE.
SELECTION-SCREEN END OF BLOCK B1.
*TEST
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
P_CODE TYPE ZSTUDENT_JSM_01-ZCODE.
SELECTION-SCREEN END OF BLOCK B2.
检查用户输入
FORM FRM_CHECK_DATA .
TABLES:ZSCHOOL_JSM_01.
"变量的定义
DATA: LS_DATA TYPE ZSTUDENT_JSM_01,
LT_DATA TYPE TABLE OF ZSTUDENT_JSM_01.
*检查用户输入,F/M/空合法
IF S_SEX <> 'F' AND S_SEX <> 'M' AND S_SEX IS NOT INITIAL.
MESSAGE E005.
ENDIF.
*检查学生ID是否存在P_CODE
*IF P_CODE[] IS INITIAL.
*MESSAGE E004.
*ELSE.
SELECT * FROM ZSTUDENT_JSM_01 INTO LS_DATA WHERE ZCODE = P_CODE.
ENDSELECT.
IF SY-SUBRC <> 0 AND P_CODE IS NOT INITIAL.
MESSAGE E004.
ENDIF.
ENDFORM.
读取并处理取到的数据存放至内表
FORM FRM_GET_DATA .
IF S_SEX IS NOT INITIAL.
SELECT A~ZCODE ,A~ZNAME, A~SEX,A~ZSCHOOL, B~ZSNAME, B~ZADD
FROM ZSTUDENT_JSM_01 AS A LEFT OUTER JOIN ZSCHOOL_JSM_01 AS B
ON A~ZSCHOOL = B~ZSCHOOL
INTO CORRESPONDING FIELDS OF TABLE @GT_ALV
WHERE SEX = @S_SEX
AND ZCODE IN @S_CODE.
ELSE.
SELECT A~ZCODE ,A~ZNAME, A~SEX,A~ZSCHOOL, B~ZSNAME, B~ZADD
FROM ZSTUDENT_JSM_01 AS A LEFT OUTER JOIN ZSCHOOL_JSM_01 AS B
ON A~ZSCHOOL = B~ZSCHOOL
INTO CORRESPONDING FIELDS OF TABLE @GT_ALV
WHERE ZCODE IN @S_CODE.
ENDIF.
*处理取到的数据,把F/M转换成男/女
LOOP AT GT_ALV INTO GS_ALV.
IF GS_ALV-SEX = 'F'.
GS_ALV-SEX = '女'.
ELSE.
GS_ALV-SEX = '男'.
ENDIF.
MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
建立AVL显示样式(layout)和显示字段清单(Field Catalogs)
使用宏DEFINE CATALOG来添加字段到字段目录表GT_FCAT。
*ALV字段设定-需要修改
FORM FRM_ALV_SET_FIELDS.
DATA: LV_INDEX LIKE SY-INDEX.
CLEAR: GS_FCAT,
GS_FCAT,
GS_LAYOUT.
**ALV字段处理宏
DEFINE CATALOG.
LV_INDEX = LV_INDEX + 1.
GS_FCAT-COL_POS = LV_INDEX.
GS_FCAT-FIELDNAME = &1.
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 = &9.
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
*下面这段需要修改,根据自己要显示的信息
CATALOG:
'ZCODE' '' '' '' TEXT-C01 '' '' '' '',
'ZNAME' '' '' '' TEXT-C02 '' '' '' '',
'SEX' '' '' '' TEXT-C03 '' '' '' '',
'ZSCHOOL' '' '' '' TEXT-C04 '' '' '' '',
'ZSNAME' '' '' '' TEXT-C05 '' '' '' '',
'ZADD' '' '' '' TEXT-C06 '' '' '' ''.
ENDFORM.
定义事件(Reuse_alv_events_get)建立事件清单(Event Catalogs)
设置ALV的用户状态,定义哪些按钮是可用的
*设置程序的用户状态-需要双击创建PF_ALV
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,新建导入模板
"调整模板: SAPLKKBL STANDARD FULLSCREEN
SET PF-STATUS 'PF ALV' EXCLUDING LT_FCODE. "ALV的按钮
ENDFORM. "FRN_FRU_ALY_SAT_STATUS
双击PF_ALV,新建并导入模板
显示ALV调用Alv Function Module
调用函数REUSE_ALV_GRID_DISPLAY_LVC来显示ALV网格,调用标准函数库中的函数REUSE_ALV_GRID_DISPLAY_LVC来显示ALV网格,传递各种参数和表格。
*调用Function显示ALV的数据
*需要确定的是TYPE后面定义的名字是否和程序中的一致
FORM FRM_DISPLAY_ALV USING P_GT_ALV TYPE GTY_T_ALV.
PERFORM FRM_ALV_SET_FIELDS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_DEFAULT = ''
I_CALLBACK_PF_STATUS_SET = 'FRM_ALV_SET_STATUS'"生成一些按钮
IT_FIELDCAT_LVC = GT_FCAT"显示的格式
IS_LAYOUT_LVC = GS_LAYOUT
I_CALLBACK_USER_COMMAND = 'FRM_ALV_USER_COMMAND'"响应用户的按键
TABLES
T_OUTTAB = P_GT_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.
用户事件;定义user按键处理事件
*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,
CL_VALID TYPE C,
LT_FILTERED_ENTRIES TYPE LVC_T_FIDX.
CASE R_UCOMM.
WHEN '&DATA SAVE'.
MESSAGE '功能开发中......' TYPE 'I'.
WHEN '&ICI'."用户在表格上做了操作
WHEN '&ZSHOW'."仅显示通过采购申请创建的订单
WHEN '&ZPRNT'. "打印采购订单
ENDCASE.
ENDFORM."F_FRU_ALY_LSER_COMANL
实现效果
输入
输出