【ABAP——ALV报表开发】

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

实现效果

输入在这里插入图片描述
输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值