SAP ABAP ALV报表(一)

01 ALV报表功能介绍
02 ALV报表开发步骤
03 ALV报表开发实战

01 ALV报表功能介绍

AVL报表是ABAP最重要的报表工具其英文全称Abap list viewer
其输入结果以行和列展示,集成的功能有排序,求和,过滤,列求和,隐藏等;
输出的格式也有EXCEL,水晶报表,CSV文件等;
然后展现的方式有简单list,连续等级list,树等.

简单list
连续等级list
树形list

系统ALV报表的样例

搜索界面
查询结果界面

ALV报表开发步骤

基本流程:
• 第一步:声明变量定义alv所要用到的类型池:针对ALV的控制信息数据
• 第二步: 定义内表存放自定义数据文件的数据,以及在ALV中显示
• 第三步:读取数据读取数据存放至内表(internal table)
• 第四步:ALV格式控制建立AVL显示样式(layout)和显示字段清单(Field Catalogs) :具体就是整个字体的显示和每个列的显示。
• 第五步: 定义事件(Reuse_alv_events_get)建立事件清单(Event Catalogs)
• 第六步:显示ALV调用Alv Function Module
• 第七步:用户事件;定义user按键处理事件。

ALV报表开发实战

业务背景:

某SAP培训学院为督促与管理学员的正常上课,现要求每位上课学员,通过SAP系统-学员签到平台进行打卡。 实现学员线上打卡,老师线上统计打卡情况;以备管理使用。

功能分析:

1)为实现学员打卡,需要开发一套打卡功能。
2)实现老师线上统计打卡程序,需要开发一查询统计报表。

实现步骤:

准备工作:

1.SE11 创建要用到的数据库表( “ZHY01_XYXX”学员信息表和“ZHY01_XYKQ”学员考勤表)
(创建表步骤:https://www.jianshu.com/p/c1d111f2969b)
2.SE38 创建程序

输入【标题】和【类型】,点击【保存】

保存在自己创建的包和请求号下

然后就进入到了自己的开发程序界面。

3.SE38程序开发规约一——注释的添加

*&---------------------------------------------------------------------*
*& Report ZHY01_HY101_20220624_01
*&---------------------------------------------------------------------*
*& Program Name         <程序名称>: ZHY01_HY101_20220624_01
*& Purpose              <程序用途>: 学习ALV报表
*& Project Name         <项目名称>: SAP_ABAP_学习
*& Created by           <创 建 人>: 鼠小倩
*& Created on           <创建日期>: 20220624
*& FC Consultant        <功能顾问>: 鼠小倩
*& Description          <功能描述>: 学员考勤查询报表
*&---------------------------------------------------------------------*
*              Modification Log<程序修改日志>
*<日期>        <开发者>       <功能顾问>            <修改描述>
* 20220624     鼠小倩           鼠小倩               S4HK909677
*&---------------------------------------------------------------------*

4.SE38程序开发规约二——程序的框架(函数组)

(一个完整的程序,最少包含五个include文件,即把一部分程序放在具有相同意义的地方,include文件相当于代码的集合)

函数组的物理视图

代码如下

REPORT ZHY01_HY101_20220624_01.

*&-----------------------------------------------------------------*
*    DESC: INCLUDES 文件-变量定义
*&-----------------------------------------------------------------*
INCLUDE ZHY01_HY101_20220624_01_TOP.

**&-----------------------------------------------------------------*
**    DESC: INCLUDES ALV相关定义
**&-----------------------------------------------------------------*
INCLUDE ZHY01_HY101_20220624_01_ALV.

*&-----------------------------------------------------------------*
*    DESC: INCLUDES 文件-选择界面
*&-----------------------------------------------------------------*
INCLUDE ZHY01_HY101_20220624_01_SCREEN.

*&-----------------------------------------------------------------*
*    DESC: INCLUDES 文件-子程序
*&-----------------------------------------------------------------*
INCLUDE ZHY01_HY101_20220624_01_FORM.

*&-----------------------------------------------------------------*
*    DESC: INCLUDES 文件-主程序
*&-----------------------------------------------------------------*
INCLUDE ZHY01_HY101_20220624_01_MAIN.

双击创建各include程序,搭建程序框架
如下:

自动显示“include”标题和类型,可修改

点击保存,创建成功

同理,创建其他include程序。

报表“ZHY01_HY101_20220624_01”创建完后,点击保存,激活

激活包含子程序

总结:

SE38程序开发步骤——01定义选择界面

INCLUDES 程序文件-选择界面“INCLUDE ZHY01_HY101_20220624_01_SCREEN.”
1.代码示例

*&---------------------------------------------------------------------*
*& 包含               ZHY01_HY101_20220624_01_SCREEN
*&---------------------------------------------------------------------*
TABLES: ZHY01_XYXX,
        zhy01_xykq.
*&---------------------------------------------------------------------*
*& DESC: 定义初始屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK sb01 WITH FRAME TITLE text-001."定义sb01块,抬头text文本
  PARAMETERS: p_zxh LIKE zhy01_xyxx-zxh. "单值选择,引入数据库表zhy01_xyxx 字段 学号

  SELECT-OPTIONS: s_zkqrq FOR zhy01_xykq-zrq."范围选择,引入数据库表zhy01_xykq 字段考勤日期

SELECTION-SCREEN END OF BLOCK sb01.

  PARAMETERS: p_zhy RADIOBUTTON GROUP gp01,   "单选框
              p_zqt RADIOBUTTON GROUP gp01.

  PARAMETERS: p_zzs AS CHECKBOX,        "复选框
              p_zjf AS CHECKBOX.

2.text文本描述修改

输入文本符号

输入【选择文本】

image.png

3.效果展示

总结:

SE38程序开发步骤——02 数据获取

(下面介绍)

SE38程序开发步骤——03 报表显示

INCLUDES 程序文件-主程序 “INCLUDE ZHY01_HY101_20220624_01_MAIN.”

通过事件触发,调用报表的数据,一般有

  • 初始化:START-OF-SELECTION
  • 选择事件:AT SELECTION-SCREEN
  • 事件:AT SELECTION-SCREEN OUTPUT
1.测试事件

(1)测试事件“START-OF-SELECTION”

*&---------------------------------------------------------------------*
*& 包含               ZHY01_HY101_20220624_01_MAIN
*&---------------------------------------------------------------------*

START-OF-SELECTION.
  MESSAGE '测试' TYPE 'I'.

测试结果

(2)测试事件“AT SELECTION-SCREEN”和“START-OF-SELECTION”触发状态

*&---------------------------------------------------------------------*
*& 包含               ZHY01_HY101_20220624_01_MAIN
*&---------------------------------------------------------------------*

AT SELECTION-SCREEN.
  MESSAGE '测试:AT SELECTION-SCREEN' TYPE 'I'.
  
START-OF-SELECTION.
  MESSAGE '测试' TYPE 'I'.

点击回车触发“AT SELECTION-SCREEN”

点击执行,先触发“AT SELECTION-SCREEN”,后触发“START-OF-SELECTION”

2.显示ALV报表
  • 获取数据
  • 处理数据
  • 显示数据
首先定义局部变量

INCLUDES 程序文件-变量定义“INCLUDE ZHY01_HY101_20220624_01_TOP.”

  • 定义结构
  • 定义内表
*&---------------------------------------------------------------------*
*& 包含               ZHY01_HY101_20220624_01_TOP
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& DESC:结构
*&---------------------------------------------------------------------*
DATA: BEGIN OF gs_item, "定义结构
               sel(1),  "定义单值,选择条件被选中
               zxm LIKE zhy01_xyxx-zxm, "学员姓名
               zqdqj(4).      "签到期间
      INCLUDE STRUCTURE zhy01_xykq.

DATA END OF gs_item.

*&---------------------------------------------------------------------*
*& DESC:内表
*&---------------------------------------------------------------------*

DATA: gt_item LIKE TABLE OF gs_item.

获取数据

(1)“main”文件代码

**获取数据
  PERFORM frm_get_data.

(2)创建对象“ frm_get_data ”

(3)放入“form”文件中

(4)保存,然后返回

处理数据

“main”文件代码

**处理数据
  PERFORM frm_edit_data.

同理,创建对象“frm_edit_data”,放入“from”文件中;保存

显示数据

“main”文件中利用if条件判断语句

  IF gt_item[] IS NOT INITIAL.
    PERFORM frm_show_data.
    ELSE.
      MESSAGE '无学员考勤记录' TYPE 'I'.
  ENDIF.

同理,创建对象“frm_show_data”,放入“from”文件中;保存

(1)“main”程序执行,查看效果( 直接运行)

内表为空,输出“无学员考勤记录”.

(2)“main”程序执行,查看效果(在“form”文件处理数据——进行赋虚假的值: 插入假数据 '功能正在开发中')
FORM frm_edit_data .
  gs_item-zxh = 'HY101'.
  gs_item-zxm = '鼠小倩'.
  APPEND gs_item TO gt_item.
ENDFORM.

FORM frm_show_data .
  MESSAGE '功能正在开发中' TYPE 'I'.
ENDFORM.

结果展示

(3)“main”程序执行,查看效果(在“form”文件处理数据——显示数据:调用function函数)
FORM frm_show_data .
** 调用function显示ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING     "传入参数
      i_callback_program = sy-repid "当前程序名
      i_default = ''
* 
    TABLES
      t_outtab = gt_item[].
  IF sy-subrc<>0."abap语句返回码
    MESSAGE id sy-msgid
            type sy-msgty "消息类型
            NUMBER sy-msgno "消息编号
            WITH sy-msgv1
                 sy-msgv2
                 sy-msgv3
                 sy-msgv4.
  ENDIF.
endform.

执行显示“没有可用字段”

接下来填入列的显示字段,子例程“frm_show_data”下,子例程“frm_show_data”下
创建新的子例程 “frm_alv_set_fields”,放入“form”程序文件中

在“ALV”程序文件中定义变量

*&---------------------------------------------------------------------*
*& 包含               ZHY01_HY101_20220624_01_ALV
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& DESC: ALV定义变量
*&---------------------------------------------------------------------*
TYPE-POOLS:
               ABAP,
               OLE2,
               SLIS.

DATA:   GS_LAYOUT   TYPE  LVC_S_LAYO, "SLIS_LAYOUT_ALV
        GS_FCAT     TYPE  LVC_S_FCAT,
        GT_FCAT     LIKE TABLE OF GS_FCAT.

在“form”程序文件中写入

在“form”程序文件中填写信息

FORM frm_alv_set_fields .
***定义表中添加的内容
  DATA: lv_index LIKE sy-index.

  CLEAR: gs_fcat,
         gt_fcat,
         gs_layout.

**ALV全局设置
  gs_layout-cwidth_opt = 'X'.
  gs_layout-box_fname     = 'SEL'.

**ALV字段处理宏
  DEFINE catalog.
    CLEAR gs_fcat.
    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.

**          &1       &2        &3              &4     &5       &6      &7      &8     &9
  catalog 'ZBJ'    'X'        ''             ''     '班级'       ''      ''      ''     ''.
  catalog 'ZXH'    'X'        'ZTKT_XYXX'         ''     '学号'       'ZXH'      ''      'C510'     'X'.
  catalog:'ZXM'    'X'        ''             ''     '姓名'       ''      ''      ''     '',
          'ZRQ'    ''        'BKPF'             'X'     '考勤日期'       'BUDAT'      ''      ''     '',
          'ZKQSJ'    ''        ''             'X'     '签到时间'       ''      ''      ''     '',
          'ZKQCS'    ''        ''             ''     '考勤次数'       ''      ''      ''     ''.

ENDFORM.

保存并进行激活
点击执行,结果展示

一个基本路径展示的ALV创建成功(这里还没有使用选择屏幕)

总结:

你可能感兴趣的:(SAP ABAP ALV报表(一))