第 31 页 / 共 377 页
PERFORM EDIT_REPORT_CLS.
ENDAT.
AT END OF ZZYEAR.
NEW-PAGE.
ENDAT.
ENDLOOP.
ENDFORM. " REPORT_DATA_EXE
*&---------------------------------------------------------------------*
*& Form REPORT_EDIT_END
*&---------------------------------------------------------------------*
* 报表程序终了处理
*----------------------------------------------------------------------*
FORM REPORT_EDIT_END .
CHECK TEST->TEST[] IS NOT INITIAL.
* 当前行号小于88时
IF SY-LINNO < LINE88 .
SKIP TO LINE LINE88 .
PERFORM REPORT_FOOTER_EDIT.
ENDIF.
ENDFORM. " REPORT_EDIT_END
*&---------------------------------------------------------------------*
*& Form REPORT_HEADER_EDIT
*&---------------------------------------------------------------------*
* 报表页眉编辑
*----------------------------------------------------------------------*
FORM REPORT_HEADER_EDIT .
SKIP 1 .
WRITE:/030 TEXT-002. "成绩表
WRITE:/016 TEXT-001 , "学年
020 CNS-COLON,
022 TEST->H_TEST-ZZYEAR.
WRITE: 030 TEXT-003, "班主任
036 CNS-COLON,
038 TEST->ZTNAMEM(6),
045 TEST->ZTNAMES(6).
WRITE:/015 SY-ULINE(052) .
WRITE:/015 SY-VLINE,
017 TEXT-004, "班级
021 SY-VLINE,
025 TEXT-005, "学生
23
第 32 页 / 共 377 页
038 SY-VLINE,
040 TEXT-006, "语文
045 SY-VLINE,
047 TEXT-007, "数学
052 SY-VLINE,
054 TEXT-008, "自然
059 SY-VLINE,
061 TEXT-009, "思品
066 SY-VLINE.
WRITE:/015 SY-VLINE,
021 SY-VLINE,
038 SY-VLINE,
045 SY-VLINE,
052 SY-VLINE,
059 SY-VLINE,
066 SY-VLINE,
015 SY-ULINE(052).
ENDFORM. " REPORT_HEADER_EDIT
*&---------------------------------------------------------------------*
*& Form EDIT_REPORT_DTL
*&---------------------------------------------------------------------*
* 报表明细编辑
*----------------------------------------------------------------------*
FORM EDIT_REPORT_DTL .
WRITE:/015 SY-VLINE,
021 SY-VLINE,
023 TEST->H_TEST-ZZNAME(14), "学生
038 SY-VLINE,
041(4) TEST->H_TEST-ZZTENKOK, "语文
045 SY-VLINE,
048(4) TEST->H_TEST-ZZTENSAN, "数学
052 SY-VLINE,
055(4) TEST->H_TEST-ZZTENRIK, "自然
059 SY-VLINE,
062(4) TEST->H_TEST-ZZTENSHA, "思品
066 SY-VLINE.
IF FLG-CLS_FRST = CNS-ON. "班级开始
WRITE: 017 TEST->H_TEST-ZZCLASS+0(1),
018 CNS-PLUS ,
019 TEST->H_TEST-ZZCLASS+1(1).
ENDFORM. " EDIT_REPORT_DTL
*&---------------------------------------------------------------------*
*& Form EDIT_REPORT_CLS
24
第 33 页 / 共 377 页
*&---------------------------------------------------------------------*
* 报表挂线
*----------------------------------------------------------------------*
FORM EDIT_REPORT_CLS .
* 成绩表挂线
WRITE:/015 SY-VLINE,
021 SY-VLINE,
038 SY-VLINE,
045 SY-VLINE,
052 SY-VLINE,
059 SY-VLINE,
066 SY-VLINE,
015 SY-ULINE(052).
ENDFORM. " EDIT_REPORT_CLS
*&---------------------------------------------------------------------*
*& Form REPORT_FOOTER_EDIT
*&---------------------------------------------------------------------*
* 报表页脚编辑
*----------------------------------------------------------------------*
FORM REPORT_FOOTER_EDIT .
WRITE 030 SY-PAGNO. "页数
ENDFORM. " REPORT_FOOTER_EDIT
文本元素编辑如图1-1所示。
图1-1
选择文本元素编辑如图1-2所示。
25
第 34 页 / 共 377 页
图1-2
1.2.2 程序测试
运行程序结果如图1-3所示。
图1-3
填写相关参数,单击 按钮,运行结果如图1-4所示。
图1-4
1.3 全局类的实现
1.3.1 接口制作
(1)类制作器:第一画面
在“Objekttyp”文本框中输入接口的名称,单击 按钮,图1-5所示。
26
第 35 页 / 共 377 页
图1-5
选中“界面”单选按钮,单击图1-6中的 按钮。
图1-6
填写接口说明栏,单击图1-7中的 按钮。
图1-7
注:当 复选框被勾选时,该接口不能被实例化,只能作为模型。
单击图1-8中的 按钮。
图1-8
27
第 36 页 / 共 377 页
单击图1-9中的 按钮,由于接口初次创建,会弹出如图1-10所示信息。
图1-9
图1-10
(2)类制作器:类编辑画面
单击编辑画面中各标签页,“属性”标签页编辑如图1-11所示。
通用标识
Unicode检查
图1-11
“接口”标签页编辑如图1-12所示。
图1-12
28
第 37 页 / 共 377 页
“Attribute”标签页编辑如图1-13所示。
图1-13
“Methoden”标签页编辑如图1-14所示。
图1-14
选中get_name方法,单击图1-14中的 按钮,方法参数编辑如图1-15所示。
图1-15
单击图1-15中的 按钮,例外编辑如图1-16所示。
图1-16
29
第 38 页 / 共 377 页
“Eregnisse”标签页编辑如图1-17所示。
图1-17
“类型”标签页编辑如图1-18所示。
图1-18
“别名”标签页编辑如图1-19所示。
图1-19
(3)类制作器:类编辑画面(接口的保存、检查及有效化)
单击标准工具栏中的 按钮,效果如图1-20所示。
图1-20
单击标准工具栏中的 按钮,效果如图1-21所示。
图1-21
单击标准工具栏中的 按钮,效果如图1-22所示。
30
第 39 页 / 共 377 页
图1-22
1.3.2 接口的使用)类的创建)
(1)类制作器:第一画面
在“Object type”文本框中输入类的名称,单击 按钮,如图1-23所示。
图1-23
选中“Class”单选按钮,单击图1-24中的 按钮。
图1-24
填写类说明栏,单击图1-25中的 按钮。
一般类
异常类
持续类
测试类
图1-25
31
| 一般类 |
|---|
| 异常类 |
第 40 页 / 共 377 页
单击图1-26中的 按钮。
图1-26
单击图1-27中的 按钮。
图1-27
(2)类制作器:类编辑画面
单击编辑画面中各标签页,“Properties”标签页编辑如图1-28所示。
图1-28
32
第 41 页 / 共 377 页
“Interfaces”标签页编辑如图1-29所示。
图1-29
“Friends”标签页编辑如图1-30所示。
图1-30
“Attributes”标签页编辑如图1-31所示。
图1-31
“Methods”标签页编辑如图1-32所示。
图1-32
33
第 42 页 / 共 377 页
注意:由于上图中NODATA_HANDLE方法要用到NODATA事件,所以这里要先编辑事
件标签页。
单击图1-32中的 按钮,编辑代码如图1-33所示。
图1-33
单击标准工具栏中的 按钮,效果如图1-34所示。
图1-34
单击标准工具栏中的 按钮,回到编辑画面,选中 方法,单击 按钮,打
开图1-35中的窗口。
图1-35
34
第 43 页 / 共 377 页
单击图 1-35 中的 按钮,处理方法会绑定到事件中。“事件”列表框编辑如图 1-36
所示。
图1-36
选中NODATA事件,单击图1-36中的 按钮,编辑参数如图1-37所示。
图1-37
“Typen”标签页编辑如图1-38所示。
图1-38
“别名”标签页编辑如图1-39所示。
图1-39
35
第 44 页 / 共 377 页
注:别名一般用来声明继承类中的方法名。
在“Methoden”标签页中,选中NODATA_HANDLE方法,单击图1-39中的
按钮,编辑参数如图1-40所示。
图1-40
单击图1-40中的 按钮,编辑代码如图1-41所示。
图1-41
(3)类制作器:类编辑画面(类的保存、检查及有效化)
单击标准工具栏中的 按钮,效果如图1-42所示。
图1-42
单击标准工具栏中的 按钮,效果如图1-43所示。
图1-43
点击标准工具栏中的 按钮,效果如图1-44所示。
图1-44
36
第 45 页 / 共 377 页
1.3.3 类的测试
类的测试语句如下:
DATA L_CLS_STUDENT TYPE REF TO ZSTDUDENT_CLASS.
CHECK TBL_TEST[] IS NOT INITIAL.
CREATE OBJECT L_CLS_STUDENT.
* 学生姓名取得
LOOP AT TBL_TEST INTO STR_TEST.
L_CLS_STUDENT->ZTEST_INTERFACE~GET_NAME(
EXPORTING
ID = STR_TEST-ZZSTDNO "学号
IMPORTING
NAME = STR_TEST-ZZNAME "姓名
).
MODIFY TBL_TEST FROM STR_TEST.
ENDLOOP.
37
第 46 页 / 共 377 页
第 2 章 ALV应用
ALV是SAP List Viewer(也作ABAP List Viewer),是SAP中常用的经典报表输出格式。
常用的ALV种类有以下6个:
● ALV表格(ALV Grid)。
● ALV简单列表(ALV Simple List)。
● 多表格的ALV列表。
● 层级显示的ALV列表(Hierarchical-Sequential List)。
● 面向对象ALV。
● ALV树。
下面的内容将根据不同的ALV类型分开介绍。
1.ALV表格
ALV表格是最常用的一种报表输出格式,如图2-1所示。
图2-1
(1)适用范围
● 标准功能强大,且外观上可直接用鼠标拖拽栏位的宽度和顺序,一般无特别要求的报
表均采用此格式。
● 输出格式与Excel文档相似,当客户要求下载Excel文档时,多采用此输出格式。ALV
表格每个格只能显示不多于128个字符,不能多行显示1条数据。
(2)实现方式
● 构建字段目录(Field Catalog)表(输出表的表头栏位),一般采用函数‘REUSE_
ALV_FIELDCATALOG_MERGE’ 取得。
● 设置字段目录表中各栏位的相关属性,一般需修改显示名称、显示长度、锁定、是否
加总、是否显示等。
● 输出报表:Call Function ‘REUSE_ALV_GRID_DISPLAY’。
2.ALV简单列表(Simple List)
与 ALV 表格相比,除了报表自身在显示上的差别外,其他大致相同。ALV 列表更接近
标准的一览输出,如图2-2所示。
38
第 47 页 / 共 377 页
图2-2
(1)适用范围
● 标准功能同ALV表格大致相同,栏位宽度已最优化显示,但不可直接用鼠标拖拽栏位
的顺序,这不符合某些用户习惯,故使用范围不如ALV 表格广泛,但当需要翻页时,
只能采用ALV列表而不能用ALV表格。
● 输出格式一览类似,一般用于执行事务后返回消息的显示,可以多行显示1条数据,
但只能显示不多于90个字段的表的数据,且排序的列相同的值不能被合并。
(2)实现方式
● 构建字段目录(Field Catalog)表,与 ALV 表格实现方法相同,一般采用函数
‘REUSE_ALV_FIELDCATALOG_MERGE’得到。
● 设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、
是否加总、是否显示等。
● 输出报表:Call Function ‘REUSE_ALV_LIST_DISPLAY’。
3.多表格的ALV列表
区别于ALV简单列表只有一个表身,该种ALV可在一个画面上显示多个表格,如图2-3
所示。
表头一
表头二
图2-3
39
第 48 页 / 共 377 页
(1)适用范围
● 当一个报表包含多个表格时,需采用此种输出方式。
● ALV 简单列表需要注意的地方此种列表同样需要注意。
(2)实现方式
● 构建字段目录表,有几个不同的表要输出就构建几次。与ALV表格实现方法相同,一
般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,也可以手动构建。
● 设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、是
否加总、是否显示等;
● 初始化屏幕:调用函数‘REUSE_ALV_BLOCK_LIST_INIT’。添加数据:调用函数
‘REUSE_ALV_BLOCK_LIST_APPEND’,有几个表就要调用几次。输出报表:调用函
数'REUSE_ALV_BLOCK_LIST_DISPLAY’。
4.层级显示的ALV列表
层级显示的ALV List 在SAP中称为层级显示列表,如图2-4所示。
表头
明细
图2-4
(1)适用范围
这种形式的列表、表头和明细是由相关的字段联系起来的,表头和明细数据一对多。当
然可以把表头和明细表分成两个列表在同一屏幕显示,但此种列表看起来更直观。所以当输
出的报表数据有表头和明细的区分时,可以采用此种列表。
(2)实现方式一:Call Method(面向对象)
● 捆绑表头和明细表
SALV_T_HIERSEQ_BINDING(表头和明细相关的字段表类型)
40
第 49 页 / 共 377 页
SALV_S_HIERSEQ_BINDING(表头和明细相关的字段结构体)
● 得到输出表:调用方法 CL_SALV_HIERSEQ_TABLE=>FACTORY,取到的输出表对
象(CL_SALV_HIERSEQ_TABLE)。
● 显示报表:调用方法DISPLAY输出表对象(CL_SALV_HIERSEQ_TABLE)->display( )。
(3)实现方式二:Call Function
● 构建表头和明细的栏位。
可以调用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,表头和明细的栏位分别构建后
再追加到一个表里。也可以手动构建。
● 显示数据:调用函数‘REUSE_ALV_HIERSEQ_LIST_DISPLAY’。
5.ALV树
ALV树形结构可以显示多个层级,每个层级在相同的栏位名下显示;而之前的层级列表
只能显示两个层级,而且两个层级之间要有主键去关联,数据显示在不同栏位名下,如图2-5
所示。
图2-5
(1)适用范围
● 一般在输出物料清单等层级结构比较明显的数据时使用,ALV树每格最多支持128个
字符。
● 不支持格合并,没有数据的过滤功能,系统标准没有下载功能,需要自己写代码。
● 只能显示1000个节点,只支持平面表,不支持多维表。
(2)实现方式(简单的Tree结构,在屏幕的PBO事件中处理)
● 创建并 绘制屏幕和容器:容器可以不手动绘制,直接指定属性 CL_GUI_
41
第 50 页 / 共 377 页
CONTAINER=>SCREEN0,可全屏显示。
● 构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。
● 构建排序表,对输出表进行层级设置。
● 实例化对象:CREATE OBJECT cl_gui_alv_tree_simple。
● 输出数据:CALL METHOD 实例化对象(cl_gui_alv_tree_simple)-> SET_TABLE_
FOR_FIRST_DISPLAY。
6.面向对象ALV
面向对象 ALV 是 SAP 提供的 ALV 的对象模式(Object Model),即用面向对象技术对
ALV进行封装,提供相应的工具和方式,如图2-6所示。。
图2-6
(1)适用范围
面向对象的方式,功能更强大、更灵活。当用普通的ALV表格解决不了某些事件的问题
时,大部分使用面向对象就可以解决。
(2)实现方式
1)框架(带控件)
● 在画面上定义一个定制控件并实例化对象OBJ_WCL_CONTAINER。
● 生成一个CL_GUI_CUSTOM_CONTAINER类实例,在构造器参数中传入定制控件的
名称。
● 构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。
● 显示报表:CALL METHOD 类实例(CL_GUI_CUSTOM_CONTAINER)->set_table_
for_first_display。
2)封装(不带控件)
a.首先要取得类 CL_SALV_FUNCTIONS 的实例,根据类 CL_SALV_TABLE 的方法
get_functions可以取得功能实例。
42
第 51 页 / 共 377 页
lr_functions = gr_table->get_functions( ).
lr_functions->set_all( 'X' ).
b.根据类CL_SALV_TABLE的方法set_screen_status设置功能栏。
gr_table->set_screen_status(
pfstatus = 'SALV_STANDARD'
report = sy-repid
set_functions = gr_table->c_functions_all )
c.自定义功能的实现
ALV的自定义功能的实现动作要通过类的事件来处理。
● 首先定义事件的操作类。
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function.
ENDCLASS. "lcl_handle_events DEFINITION
● 实现事件的操作类。
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_user_command.
DATA l_string TYPE string.
CONCATENATE 'Function is ' e_salv_function
INTO l_string
SEPARATED BY space.
MESSAGE i000(0k) WITH l_string.
ENDMETHOD. "on_user_command
ENDCLASS. "lcl_handle_events IMPLEMENTATION
● 注册事件。
SET HANDLER lcl_handle_events=>on_user_command FOR lr_events.
d.显示列表
gr_table->display( )
总结:以上是ALV 类型的简单介绍,具体每种类型的详细用法,参照如下函数的详细说明。
就ALV的形式和实现总结如下:
a.基于ABAP基本列表的ALV。
● 简单表单实现:调用函数REUSE_ALV_LIST_DISPLAY。
● 多表单实现:调用函数REUSE_ALV_HIERSEQ_LIST_DISPLAY。
● 树形表单实现:调用函数RS_TREE_LIST_DISPLAY。
b.基于SAP控制框架(Control Framework)。
● 函数调用实现(全画面模式):调用函数 REUSE_ALV_GRID_DISPLAY 和
43
第 52 页 / 共 377 页
REUSE_ALV_GRID_DISPLAY_LVC。
● 面向对象实现: 使用类CL_GUI_ALV_GRID及 CL_GUI_ALV_TREE。
c.基于面向对象的封装。
● 通过封装调用以下类中的方法:CL_SALV_TABLE、 CL_SALV_HIERSEQ_TABLE
和CL_SALV_TREE。
注:面向对象的方式创建ALV表格控件,是控制框架(Control Framework)中的一个组
件,另外也可以采用CL_SALV_TABLE、CL_SALV_HIERSEQ_TABLE、CL_SALV_TREE等。
后者创建可以是列表(List)形式,也可以是表格(Grid)形式,是目前SAP推荐的创建方式,
是在NetWeaver 2004以后支持的版本。
全屏幕的表格控件有个对应的函数 REUSE_ALV_GRID_DISPLAY_LVC,支持面向对象
的处理。面向对象的方式功能更强大一些,这种方式支持求最大值、最小值等标准功能。目
前SAP中的组件已经以面向对象方式重写,采用面向对象方式来编写是以后的发展方向。
● 相关类:
CL_GUI_ALV_GRID:ALV表格组件类,ALV List Viewer。
CL_GUI_CUSTOM_CONTAINER:画面中客户化控件的容器类。
● 相关类型:
LVC_T_FCAT:清单观察器控制的字段目录。
LVC_S_FCAT:ALV控制的字段目录。
2.1 函数ALV和面向对象事件
2.1.1 程序设计
1.程序源码设计如下:
*----------------------------------------------------------------------*
*
* Program ID :ZREPO03_ALVOO_ADD
* Program Description :成绩查询ALV显示
* Create User :BCUSER
* Create Date :2011/02/20
*
*----------------------------------------------------------------------*
* Function Overview
* 程序实现以班级,年度,学生为参照进行查询
* 技术点:FM-ALV形式显示,视图应用,ALV内部事件
*
*----------------------------------------------------------------------*
* Change List :
* change NO. Change Date Change User Change Detail
* 0000001 2011/02/20 BCUSER 程序创建
44
第 53 页 / 共 377 页
*----------------------------------------------------------------------*
REPORT ZREPO03_ALVOO_ADD
NO STANDARD PAGE HEADING
LINE-SIZE 120
LINE-COUNT 90(3)
MESSAGE-ID ZTESTMSG.
*----------------------------------------------------------------------*
* INCLUDE
*----------------------------------------------------------------------*
INCLUDE: ZTEST0N, "常量定义
ZTEST0F. "Form定义
*----------------------------------------------------------------------*
* TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLS SLIS.
*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
* 成绩表
TYPES: BEGIN OF TYP_TEST,
SEL, "选择
ZZCLASS LIKE ZTTEST_T-ZZCLASS, "班级
ZZYEAR LIKE ZTTEST_T-ZZYEAR, "学年
ZZSTDNO LIKE ZTTEST_T-ZZSTDNO, "学号
ZZNAME LIKE ZMNUMBER_T-ZZNAME, "姓名
ZZTENKOK LIKE ZTTEST_T-ZZTENKOK, "语文
ZZTENSAN LIKE ZTTEST_T-ZZTENSAN, "数学
ZZTENRIK LIKE ZTTEST_T-ZZTENRIK, "自然
ZZTENSHA LIKE ZTTEST_T-ZZTENSHA, "思想品德
END OF TYP_TEST.
TYPES TYP_ITAB_TEST TYPE STANDARD TABLE OF TYP_TEST.
*----------------------------------------------------------------------*
* TABLES:
*----------------------------------------------------------------------*
TABLES: ZTTEST_T, "考试成绩表
ZMNUMBER_T. "学生信息表
* STATICS
*----------------------------------------------------------------------*
*STATICS: XX TYPE X VALUE XX.
45
| SEL |
|---|
| ZZCLASS |
| ZZYEAR |
| ZZSTDNO |
| ZZNAME |
| ZZTENKOK |
| ZZTENSAN |
| ZZTENRIK |
| ZZTENSHA |
| ZTTEST_T- | ZZCLASS | ||
|---|---|---|---|
| ZTTEST_T- | ZZYEAR, | ||
| ZTTEST_T- | ZZSTDNO | ||
| ZMNUMBER_T | -ZZNAME | ||
| ZTTEST_T | -ZZTENKOK | ||
| ZTTEST_T | -ZZTENSAN | ||
| ZTTEST_T- | ZZTENRIK | ||
| ZTTEST_T | -ZZTENSHA | ||
| TYP_TEST |
第 54 页 / 共 377 页
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS :
BEGIN OF AC,
PROGRAM_NAME TYPE SY-REPID VALUE 'ZREPO03', "程序
* 控制
STRUCTURE_NAME TYPE DD02L-TABNAME VALUE 'ZZTEST_S', "结构体
ZZCLASS TYPE DD03L-FIELDNAME VALUE 'ZZCLASS', "班级
ZZYEAR TYPE DD03L-FIELDNAME VALUE 'ZZYEAR', "学年
ZZSTDNO TYPE DD03L-FIELDNAME VALUE 'ZZSTDNO', "学号
ZZTENKOK TYPE DD03L-FIELDNAME VALUE 'ZZTENKOK', "语文
ZZTENSAN TYPE DD03L-FIELDNAME VALUE 'ZZTENSAN', "数学
ZZTENRIK TYPE DD03L-FIELDNAME VALUE 'ZZTENRIK', "自然
ZZTENSHA TYPE DD03L-FIELDNAME VALUE 'ZZTENSHA', "思品
F2CODE(4) TYPE C VALUE '&IC1', "F2(双击)
X(1) TYPE C VALUE 'X',
H(1) TYPE C VALUE 'H',
S(1) TYPE C VALUE 'S',
A(1) TYPE C VALUE 'A',
END OF AC.
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA:
BEGIN OF TNAME,
NAME1 LIKE ZMTNUMBER_T-ZTNAME, "班主任
NAME2 LIKE ZMTNUMBER_T-ZTNAME, "副班主任
END OF TNAME.
DATA: TBL_TEST TYPE TYP_ITAB_TEST, "成绩表
STR_TEST TYPE TYP_TEST. "表头
DATA: BEGIN OF AW,
FIELDCAT TYPE LVC_T_FCAT,"SLIS_T_FIELDCAT_ALV , "字段属性
FLDCAT_R TYPE SLIS_T_FIELDCAT_ALV , "字段的内容
FLDCAT_H TYPE SLIS_FIELDCAT_ALV,
LAYOUT TYPE LVC_S_LAYO,"SLIS_LAYOUT_ALV, "布局
SORT_REC TYPE LVC_S_SORT, "排序记录
SORTER TYPE LVC_T_SORT, "排序属性
VARIANT TYPE DISVARIANT, "变式
GRID_SET TYPE LVC_S_GLAY, "表格设定
TITLE TYPE LVC_TITLE, "成績表标题
GRID_TITLE TYPE LVC_TITLE, "成绩表行标题
EVENT TYPE SLIS_T_EVENT, "ALV事件
EXIT(1) TYPE C,
46
| PROGRAM_NAME |
| STRUCTURE_NAME |
|---|
| ZZCLASS |
| ZZYEAR |
| ZZSTDNO |
| ZZTENKOK |
| ZZTENSAN |
| ZZTENRIK |
| ZZTENSHA |
| F2CODE |
| H |
| S |
| A |
| DD02L- | TABNAME |
|---|---|
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| DD03L- | FIELDNAME |
| TNAME, | ||||
|---|---|---|---|---|
| NAME1 | LIKE LIKE | ZMTNUMBER_T- | ZTNAME | |
| NAME2 | ZMTNUMBER_T- | ZTNAME | ||
| TNAME |
| AW | |
|---|---|
| FIELDCAT | |
| FLDCAT_R | |
| FLDCAT_H | |
| LAYOUT | |
| SORT_REC | |
| SORTER | |
| VARIANT | |
| GRID_SET | |
| GRID_TITLE | |
| LVC_T_FCAT |
|---|
| SLIS_T_FIELDCAT_ALV |
| SLIS_FIELDCAT_ALV |
| LVC_S_LAYO |
| LVC_S_SORT |
| LVC_T_SORT |
| DISVARIANT |
| LVC_S_GLAY |
| LVC_TITL |
| LVC_TITL |
| SLIS_T_EVENT |
第 55 页 / 共 377 页
END OF AW.
* 声明ALV Grid类
DATA GR_GRID TYPE REF TO CL_GUI_ALV_GRID.
*----------------------------------------------------------------------*
* CLASS CLS_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* 类CLS_EVENT_RECEIVER定义
CLASS CLS_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_MODIFY FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS. "CLS_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS CLS_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
* 类CLS_EVENT_RECEIVER实装
*----------------------------------------------------------------------*
CLASS CLS_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_MODIFY.
DATA STBL TYPE LVC_S_STBL. "刷新稳定性
DATA LWA_CELL LIKE LINE OF ET_GOOD_CELLS.
* 设定初始值
STBL-ROW = 'X'."
STBL-COL = 'X'."
* ALV刷新
CALL METHOD GR_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
* PARAMETERS
*----------------------------------------------------------------------*
PARAMETERS: P_VARI TYPE DISVARIANT-VARIANT. "表示布局(ALV用)
PARAMETERS P_CLASS TYPE ZTTEST_T-ZZCLASS "班级
OBLIGATORY . "必须
PARAMETERS P_YEAR TYPE ZTTEST_T-ZZYEAR OBLIGATORY. "学年
*----------------------------------------------------------------------*
* SELECT-OPTIONS
*----------------------------------------------------------------------*
47
| HANDLE_MODIFY |
| CLS_EVENT_RECEIVER | |
|---|---|
| HANDLE_MODIFY |
| STBL |
|---|
| LWA_CELL |
| STBL- | ROW |
|---|---|
| STBL- | COL |
| IS_STABLE |
| P_VARI | |
|---|---|
| P_CLASS |
| DISVARIANT | -VARIANT | |
|---|---|---|
| ZTTEST_T | -ZZCLASS |
第 56 页 / 共 377 页
SELECT-OPTIONS S_STDNO FOR ZTTEST_T-ZZSTDNO
MATCHCODE OBJECT ZZMCSBID.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* 数据初始化
PERFORM DATA_INIT
USING
P_CLASS "班级
P_YEAR. "学年
*----------------------------------------------------------------------*
* AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 选择画面项目检查-班级
PERFORM CLASS_INPUT_CHECK USING P_CLASS TEXT-003 CHANGING TNAME.
* 选择画面项目检查-学年
PERFORM YEAR_INPUT_CHECK USING P_YEAR TEXT-004.
*----------------------------------------------------------------------*
* AT SELECTION SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI .
* 选择画面项目选择-布局
PERFORM VARIANT_INPUT_SELECT.
*----------------------------------------------------------------------*
*START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
* 报表数据初始化
PERFORM REPORT_DATA_INIT.
* 报表数据选择
PERFORM REPORT_DATA_SELECT.
* 报表数据显示
PERFORM REPORT_DATA_LIST.
*----------------------------------------------------------------------*
* END-OF-SELECTION
48
| S_STDNO | |
|---|---|
| P_CLASS |
| P_YEAR |
第 57 页 / 共 377 页
*----------------------------------------------------------------------*
*END-OF-SELECTION.
* 报表程序终了处理
* PERFORM REPORT_EDIT_END.
*----------------------------------------------------------------------*
* TOP-OF-PAGE
*----------------------------------------------------------------------*
*TOP-OF-PAGE.
* 报表页眉编辑
* PERFORM REPORT_HEADER_EDIT.
*----------------------------------------------------------------------*
* END-OF-PAGE
*----------------------------------------------------------------------*
*END-OF-PAGE.
* 报表页脚编辑
* PERFORM REPORT_FOOTER_EDIT.
*----------------------------------------------------------------------*
* AT LINE-SELECTION
*----------------------------------------------------------------------*
*AT LINE-SELECTION.
* 报表选择处理
* PERFORM REPORT_LIST_SELECT.
*----------------------------------------------------------------------*
* AT USER-COMMAND
*----------------------------------------------------------------------*
*AT USER-COMMAND.
* 用户交互处理
* PERFORM REPORT_USER_COMMAND.
*----------------------------------------------------------------------*
* AT PFNN
*----------------------------------------------------------------------*
* AT PFNN.
* 功能键响应处理
* PERFORM REPORT_PFNN_COMMAND.
*&---------------------------------------------------------------------*
*& Form VARIANT_INPUT_SELECT
*&---------------------------------------------------------------------*
* 选择画面项目选择
*----------------------------------------------------------------------*
49
第 58 页 / 共 377 页
FORM VARIANT_INPUT_SELECT .
AW-VARIANT-REPORT = SY-REPID. "程序名
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = AW-VARIANT
I_SAVE = AC-A
* it_default_fieldcat =
IMPORTING
E_EXIT = AW-EXIT
ES_VARIANT = AW-VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF ( SY-SUBRC = 2 ).
MESSAGE ID SY-MSGID TYPE CNS-MTY_S NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF ( AW-EXIT = SPACE ).
P_VARI = AW-VARIANT-VARIANT.
ENDIF.
ENDIF.
ENDFORM. " VARIANT_INPUT_SELECT
*&---------------------------------------------------------------------*
*& Form REPORT_DATA_INIT
*&---------------------------------------------------------------------*
* 报表数据初始化
*----------------------------------------------------------------------*
FORM REPORT_DATA_INIT .
* 内部表初始化
CLEAR: STR_TEST. "成绩表头
REFRESH: TBL_TEST. "成绩表
MOVE: TEXT-001 TO AW-TITLE , "标题
TEXT-002 TO AW-GRID_TITLE . "行标题
ENDFORM. " REPORT_DATA_INIT
*&---------------------------------------------------------------------*
*& Form REPORT_DATA_SELECT
*&---------------------------------------------------------------------*
* 报表数据选择
*----------------------------------------------------------------------*
FORM REPORT_DATA_SELECT .
* 成绩表数据抽取
SELECT ZZCLASS "班级
ZZYEAR "学年
50
| VARIANT_INPUT_SELECT | |
|---|---|
| AW- | VARIAN |
| IS_VARIANT | |
| I_SAVE |
| AW | -VARIANT |
|---|---|
| AC- | A |
| E_EXIT | |||||||||
| ES_VARIANT | |||||||||
| NOT_FOUND | |||||||||
| SY- | SUBRC = | ||||||||
| SY | -MSGID | CNS | -MTY_S | ||||||
| SY | -MSGV1 SY- | MSGV2 SY- | MSGV3 SY | -MSGV4 |
| AW | |
|---|---|
| AW | -VARIANT |
| P_VARI |
| ZZCLASS | |
|---|---|
| ZZYEAR |
第 59 页 / 共 377 页
ZZSTDNO "学号
ZZNAME "姓名
ZZTENKOK "语文
ZZTENSAN "数学
ZZTENRIK "自然
ZZTENSHA "思品
FROM ZZTEST_V "成绩表
INTO CORRESPONDING FIELDS OF TABLE TBL_TEST "成绩内部表
WHERE ZZCLASS = P_CLASS "班级
AND ZZYEAR = P_YEAR "学年
AND ZZSTDNO IN S_STDNO. "学号
* 无数据情况
IF SY-SUBRC <> 0.
MESSAGE S002.
STOP.
ENDIF.
* 排序
SORT TBL_TEST BY ZZCLASS ASCENDING "班级
ZZYEAR ASCENDING "学年
ZZSTDNO ASCENDING. "学号
ENDFORM. " REPORT_DATA_SELECT
*&---------------------------------------------------------------------*
*& Form REPORT_DATA_LIST
*&---------------------------------------------------------------------*
* 报表数据显示
*----------------------------------------------------------------------*
FORM REPORT_DATA_LIST .
* 声明Field Catalog结构体
DATA LS_FLDCAT_R LIKE LINE OF AW-FLDCAT_R.
DATA LS_FIELDCAT LIKE LINE OF AW-FIELDCAT.
* 声明回调事件结构体
DATA LS_EVENT LIKE LINE OF AW-EVENT.
* 生成Field Catalog,
* 功能
* 用来获得程序中的内表 或者 DDIC表的Field Catalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID"PGMID「ZREPO03」
I_INTERNAL_TABNAME = 'TBL_TEST' "设定内部表名
I_STRUCTURE_NAME = AC-STRUCTURE_NAME "参照结构体「ZZTEST_S」
* I_CLIENT_NEVER_DISPLAY = AC-X "Client隐藏
* I_INCLNAME = "内部表中定义的Include名
I_BYPASSING_BUFFER = AC-X "既存的缓存值无效
51
| ZZSTDNO | |
|---|---|
| ZZNAME | |
| ZZTENKOK | |
| ZZTENSAN | |
| ZZTENRIK | |
| ZZTENSHA | |
| ZZTEST_V | |
| CORRESPONDING | ||||
|---|---|---|---|---|
| ZZCLASS | = P | _CLASS | ||
| ZZYEAR | = | P_YEAR |
| SY- | SUBRC <> 0 | ||
|---|---|---|---|
| S002 | |||
| ZZYEAR |
| ZZSTDNO |
| LS_FLDCAT_R |
|---|
| LS_FIELDCAT |
| AW | -FLDCAT_R |
|---|---|
| AW | -FIELDCAT |
| I_PROGRAM_NAME |
| I_INTERNAL_TABNAME |
| I_STRUCTURE_NAME |
第 60 页 / 共 377 页
* I_BUFFER_ACTIVE = "激活缓存
CHANGING
CT_FIELDCAT = AW-FLDCAT_R "有文本字段的目录
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF ( SY-SUBRC <> 0 ).
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ELSE.
* 编辑Field Catalog
LOOP AT AW-FLDCAT_R INTO LS_FLDCAT_R.
MOVE-CORRESPONDING LS_FLDCAT_R TO LS_FIELDCAT.
IF LS_FIELDCAT-FIELDNAME = AC-ZZTENKOK OR "语文
LS_FIELDCAT-FIELDNAME = AC-ZZTENSAN OR "数学
LS_FIELDCAT-FIELDNAME = AC-ZZTENRIK OR "自然
LS_FIELDCAT-FIELDNAME = AC-ZZTENSHA . "思品.
* 设定编辑和合计属性
LS_FIELDCAT-EDIT = AC-X.
LS_FIELDCAT-DO_SUM = AC-X.
ENDIF.
APPEND LS_FIELDCAT TO AW-FIELDCAT .
ENDLOOP.
ENDIF.
*
* 编辑回调事件内部表
LS_EVENT-NAME = 'CALLER_EXIT'.
LS_EVENT-FORM = 'FRM_CALLER_EXIT_AT_START'.
APPEND LS_EVENT TO AW-EVENT.
*-- 排序字段目录编辑集
* CLEAR FLDCAT_R. FLDCAT_R-KEY = ''.
* MODIFY FIELDCAT FROM FLDCAT_R TRANSPORTING KEY WHERE KEY = 'X'.
52
第 61 页 / 共 377 页
**--默认排序字段设定=> SORTER
*
CLEAR: AW-SORT_REC, AW-SORTER.
AW-SORT_REC-SPOS = '1'. "排序基准「第一」
AW-SORT_REC-FIELDNAME = AC-ZZCLASS. "参照字段名「ZZCLASS」
* AW-SORT_REC-TABNAME = AC-STRUCTURE_NAME."参照结构体「ZZTEST_S」
AW-SORT_REC-UP = AC-X . "升序
* AW-SORT_REC-DOWN = AC-X . "降序
APPEND AW-SORT_REC TO AW-SORTER.
*
AW-SORT_REC-SPOS = '2'. "排序基准「第二」
AW-SORT_REC-FIELDNAME = AC-ZZYEAR. "参照字段名「ZZYEAR」
* AW-SORT_REC-TABNAME = AC-STRUCTURE_NAME. "参照结构体「ZZTEST_S」
AW-SORT_REC-UP = AC-X . "升序
* AW-SORT_REC-DOWN = AC-X . "降序
APPEND AW-SORT_REC TO AW-SORTER.
*
AW-SORT_REC-SPOS = '3'. "排序基准「第三」
AW-SORT_REC-FIELDNAME = AC-ZZSTDNO. "参照字段名「ZZSTDNO」
* AW-SORT_REC-TABNAME = AC-STRUCTURE_NAME."参照结构体「ZZTEST_S」
AW-SORT_REC-UP = AC-X . "升序
* AW-SORT_REC-DOWN = AC-X . "降序
APPEND AW-SORT_REC TO AW-SORTER.
*
*--布局设定=> LAYOUT
CLEAR AW-LAYOUT.
* AW-LAYOUT-F2CODE = AC-F2CODE. "F2机能(双击)「POP」
* AW-LAYOUT-COLWIDTH_OPTIMIZE = AC-X . "列宽属性设定
AW-LAYOUT-STYLEFNAME = 'STYLE'.
AW-LAYOUT-SEL_MODE = 'D'.
AW-LAYOUT-BOX_FNAME = 'SEL'.
AW-LAYOUT-EXCP_LED = 'X'. "ALV 控制: 例外作为 LED
* AW-LAYOUT-EDIT = AC-X . "编集状态设定
*
**--表格设定(TOP-PAGE等输出设定)
* AW-GRID_SET-COLL_END_L = AC-X . "页脚初期输出宽度0%
53
第 62 页 / 共 377 页
* AW-GRID_SET-COLL_TOP_P = AC-X . "页眉初期输出宽度0%
*
**--变式设定
AW-VARIANT-REPORT = SY-REPID. "程序ID.
*
* 功能
*此功能模块把任何结构的内部表 ,
*输出在格式化的单一或多行申请表格。
*
*过程:
*#传递内部表,包含输出信息。
*#传递一个结构,它包含该列表的布局设置的总体布局。
*#内部表中的一个目录项的形式获得通过。
*#项目目录,写一个输出项目清单
*
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '" 接口的一致性检查日志输出
* I_BYPASSING_BUFFER = " 既存的缓存值无效
* I_BUFFER_ACTIVE = AC-X " 激活缓存
I_CALLBACK_PROGRAM = SY-REPID " 本程序的程序名
I_CALLBACK_PF_STATUS_SET = 'STATUS_SET' " GUI Status设定Form
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' " 用户交互Form
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' " 页眉编辑Form
* I_CALLBACK_HTML_TOP_OF_PAGE = ' ' " HTML TOP-OF-PAGE 用 EXIT Form
* I_CALLBACK_HTML_END_OF_LIST = ' ' " HTML END-OF-LIST 用 EXIT Form
I_STRUCTURE_NAME = AC-STRUCTURE_NAME " DDIC结构体
* I_BACKGROUND_ID = ' ' " 图片对象ID
I_GRID_TITLE = AW-GRID_TITLE " 标题
I_GRID_SETTINGS = AW-GRID_SET " 表格设定
IS_LAYOUT_LVC = AW-LAYOUT " 布局样式
IT_FIELDCAT_LVC = AW-FIELDCAT " 字段目录
* IT_EXCLUDING = " 无效的机能代码
* IT_SPECIAL_GROUPS_LVC = "列选择的字段组
IT_SORT_LVC = AW-SORTER " 初期排序设定
* IT_FILTER_LVC = " 过滤器设定
* IT_HYPERLINK = " ALV 超级链接
54
第 63 页 / 共 377 页
* IS_SEL_HIDE = " 隐藏选择按钮
I_DEFAULT = AC-X " 变式初期设定
I_SAVE = AC-A " 变式保存制限
IS_VARIANT = AW-VARIANT " 变式
IT_EVENTS = AW-EVENT " 实行事件内部表
* IT_EVENT_EXIT = " 标准机能代码退出依赖表
* IS_PRINT_LVC = " 印刷
* IS_REPREP_ID_LVC = "Re/Re 接口初期化键值
* I_SCREEN_START_COLUMN = 1 " 弹出式报表坐标
* I_SCREEN_START_LINE = 1 " 弹出式报表坐标
* I_SCREEN_END_COLUMN = 90 " 弹出式报表坐标
* I_SCREEN_END_LINE = 70 " 弹出式报表坐标
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = TBL_TEST "成绩内容
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
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. " REPORT_DATA_LIST
*&---------------------------------------------------------------------*
*& Form STATUS_SET
*&---------------------------------------------------------------------*
* Gui Status设定
*----------------------------------------------------------------------*
55
第 64 页 / 共 377 页
FORM STATUS_SET USING EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZTEST_ALV'.
ENDFORM. "STATUS_SET
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* 用户处理
*----------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM TYPE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
DATA: MSGTXT(90) TYPE C,
MSGIDX(03) TYPE N.
*
* 从ALV实例出来的数据更新ALV对应的内表
CALL METHOD GR_GRID->CHECK_CHANGED_DATA.
CASE RF_UCOMM.
* 双击事件
WHEN AC-F2CODE.
READ TABLE TBL_TEST INTO STR_TEST INDEX SELFIELD-TABINDEX.
MSGIDX = SELFIELD-TABINDEX.
CONCATENATE '行=' MSGIDX
'、项目名=' SELFIELD-FIELDNAME
'、项目内容=' SELFIELD-VALUE
INTO MSGTXT.
MESSAGE S100(ZY) WITH MSGTXT.
SELFIELD-REFRESH = AC-X . "报表刷新
SELFIELD-COL_STABLE = AC-X . "光标位置
SELFIELD-ROW_STABLE = AC-X . "同上
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* 页眉编辑
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.
56
第 65 页 / 共 377 页
DATA:
LISTHEADER TYPE SLIS_T_LISTHEADER,
WA_LISTHEADER TYPE SLIS_LISTHEADER,
H_DATUM(10),
H_UZEIT(10),
EMPTY(3) TYPE C VALUE ' '.
CLEAR WA_LISTHEADER.
* 标题
WA_LISTHEADER-TYP = AC-H."'H'.
WA_LISTHEADER-INFO = AW-TITLE.
IF ( NOT AW-VARIANT-TEXT IS INITIAL ).
CONCATENATE AW-TITLE '(' AW-VARIANT-TEXT ')'
INTO WA_LISTHEADER-INFO.
ENDIF.
APPEND WA_LISTHEADER TO LISTHEADER.
*
CLEAR WA_LISTHEADER.
APPEND WA_LISTHEADER TO LISTHEADER.
* 中标题
WRITE SY-DATUM TO H_DATUM DD/MM/YYYY.
WRITE SY-UZEIT TO H_UZEIT USING EDIT MASK '__:__:__'.
CLEAR WA_LISTHEADER.
WA_LISTHEADER-TYP = AC-S."'S'.
WA_LISTHEADER-KEY = '作成日'.
CONCATENATE 'Today:' H_DATUM EMPTY
'Time:' H_UZEIT
INTO WA_LISTHEADER-INFO .
APPEND WA_LISTHEADER TO LISTHEADER.
CLEAR WA_LISTHEADER.
WA_LISTHEADER-TYP = AC-S."'S'.
WA_LISTHEADER-KEY = '选择基准'.
CONCATENATE '班级:' P_CLASS+0(1) CNS-PLUS P_CLASS+1(1) EMPTY
'学年:' P_YEAR
INTO WA_LISTHEADER-INFO .
APPEND WA_LISTHEADER TO LISTHEADER.
57
第 66 页 / 共 377 页
* 小标题
CLEAR WA_LISTHEADER.
WA_LISTHEADER-TYP = AC-A.
CONCATENATE '作成者:' SY-UNAME INTO WA_LISTHEADER-INFO .
APPEND WA_LISTHEADER TO LISTHEADER.
* 页眉显示
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LISTHEADER.
ENDFORM. "TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form F_CALLER_EXIT_AT_START
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RS_DATA text
*----------------------------------------------------------------------*
FORM FRM_CALLER_EXIT_AT_START USING RS_DATA TYPE SLIS_DATA_CALLER_EXIT.
* 声明事件类
DATA LR_EVENT TYPE REF TO CLS_EVENT_RECEIVER.
* 取得ALV实体
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = GR_GRID.
* 注册ALV事件
CALL METHOD GR_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
ERROR = 1
OTHERS = 2.
* 创建事件实体
CREATE OBJECT LR_EVENT.
* 注册 ALV事件处理程序
SET HANDLER LR_EVENT->HANDLE_MODIFY FOR GR_GRID.
ENDFORM. "F_CALLER_EXIT_AT_START
文本元素编辑如图2-7所示。
58
第 67 页 / 共 377 页
图2-7
选择文本元素编辑如图2-8所示。
图2-8
GUI 状态栏编辑如图2-9所示(由标准程序SAPLKKBL中的STANDARD拷贝而成)。
图2-9
2.1.2 程序测试
运行程序结果如图2-10所示。
图2-10
59
第 68 页 / 共 377 页
填写相关参数,单击按钮 ,运行结果如图2-11所示。
图2-11
2.2 面向对象ALV
2.2.1 Dynpr0控件ALV
1.程序设计
程序源码设计如下:
*----------------------------------------------------------------------*
*
* Program ID :ZREPO03_ALVOO
* Program Description :成绩查询面向对象ALV显示
* Create User :BCUSER
* Create Date :2011/02/20
*
*----------------------------------------------------------------------*
* Function Overview
* 程序实现以班级,年度,学生为参照进行查询
* 技术点:面向对象ALV形式显示,Dynpro作为容器
*
*----------------------------------------------------------------------*
* Change List :
* change NO. Change Date Change User Change Detail
* 0000001 2011/02/20 BCUSER 程序创建
60
第 69 页 / 共 377 页
*----------------------------------------------------------------------*
REPORT ZREPO03_ALVOO
NO STANDARD PAGE HEADING
LINE-SIZE 120
LINE-COUNT 90(3)
MESSAGE-ID ZTESTMSG.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
INCLUDE: ZTEST0N, "常量定义
ZTEST0F. "Form定义
*----------------------------------------------------------------------*
* TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLS SLIS.
*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
* 成绩表
TYPES: BEGIN OF WRK_TEST,
ZZCLASS LIKE ZTTEST_T-ZZCLASS, "班级
ZZYEAR LIKE ZTTEST_T-ZZYEAR, "学年
ZZSTDNO LIKE ZTTEST_T-ZZSTDNO, "学号
ZZNAME LIKE ZMNUMBER_T-ZZNAME, "姓名
ZZTENKOK LIKE ZTTEST_T-ZZTENKOK, "语文
ZZTENSAN LIKE ZTTEST_T-ZZTENSAN, "数学
ZZTENRIK LIKE ZTTEST_T-ZZTENRIK, "自然
ZZTENSHA LIKE ZTTEST_T-ZZTENSHA, "思想品德
ZZSUM TYPE P, "总成绩
END OF WRK_TEST.
TYPES TY_ITAB_TEST TYPE STANDARD TABLE OF WRK_TEST.
*----------------------------------------------------------------------*
* TABLES:
*----------------------------------------------------------------------*
TABLES: ZTTEST_T, "考试成绩表
ZMNUMBER_T. "学生信息表
*----------------------------------------------------------------------*
* STATICS
*----------------------------------------------------------------------*
*STATICS: XX TYPE X VALUE XX.
61
| ZZCLASS |
|---|
| ZZYEAR |
| ZZSTDNO |
| ZZNAME |
| ZZTENKOK |
| ZZTENSAN |
| ZZTENRIK |
| ZZTENSHA |
| ZZSUM |
| ZTTEST_T- | ||||
|---|---|---|---|---|
| ZTTEST_ | T-ZZYEAR, | |||
| ZTTEST_T- | ZZSTDNO, | |||
| ZMNUMBER_T | -ZZNAME, | |||
| ZTTEST_T- | ZZTENKO | |||
| ZTTEST_T- | ZZTENSAN | |||
| ZTTEST_T- | ZZTENRIK | |||
| ZTTEST_T- | ZZTENSH | |||
| P | ||||
| WRK_TEST |