SAP ABAP开发详解与高端应用 (第2页)

第 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
返回ABAP参考资料列表