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创建成功(这里还没有使用选择屏幕)

总结:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容