
程序结构—定义
一、简单介绍
报表程序大致可分为如卜所示的三种结构。
① 数据定义部分和査洵选择画面(SELECTION-SCREEN)
② 直到运行时刻的触发事件
③ 显示数据的列表事件
在10.3节中介绍关于数据定义部分及SELECTION-SCREEN
。
1.程序及数据定义
REPORT pgm_id
TABLES : sflight.
DATA : l_carrid type sflight-canid.
* SELECTION SCREEN
SELECT-OPTIONS: SEL_CARR FOR sfliglit-CARRID.
PRAMETERS : P_CARR LIKE sflight-carrid.
2.事件
INITIALIZATION.
AT SELECTION-SCREEN. "( OUTPUT, ON VALUE REQUEST )
SIART-OF-SELECTION.
*( SELECT * FROM ~ 或者 GET <TABLE> ...)
END-OF-SELECT1ON.
3.报表程序事件流程
TOP-OF-PAGE.
END-OF-PAGE.
AT LINE-SELECTION.
AT PF<NN>
AT USER-COMMAND.
二、定义程序语句
定义程序的语句中存在REPORT v程序名》基本结构的附加选项。
1.指定程序 LIST Heading
决定在执行程序的报表画面上是否以程序名作为基本标题。利用下列语句会删除基本 标题。
REPORT Z12_02 NO STANDARD PAGE HEADING.
WRITE 'List Heading Test'.
若要添加用户所需的标题,则在报表控制流事件的TOP-OF-PAGE中追加代码即可。 详细内容在后面继续介绍。[图12-3]比较显示将程序名作为基本标题和没有使用此方法的 情况。
2. Line-Size
指定输出报表的宽度。宽度设置成0或者删除LINE-SIZE语句,则会使用标准宽度。具体使用效果请参照图[12-4].
REPORT Z12_03 LINE-SIZE30.
WRITE 'Tine Size Test'.
3.Message ID
定义ABAP程序中要使用的MESSAGE ID
。
REPORT Z12_04 MESSAGE-ID <message-id>.
三、DATA 定义
定义程序中要使用的表及数据。复杂的程序一般包含于INCLDUE (程序名)TOP中。
REPORT pgm_id
INCLUDE pgm_idTOP.
INCLUDE程序主要在模块池程序中使用,是存储于R/3存储器中的对象,因此是不能独立运行的程序。这部分内容将在第13章再次进行说明。数据类型和其定义方法己经在第2,中 洋细介绍,因此在这里省略此部分。TABLES iS句也已经在前面讲述并做过练习,因此不再细 讲。当需要与表的结构相同的结构体时,为了便利,可以使用此TABLES语句。 "SELECT * FROM SFLIGHT WHERE~~"语句中的 SFLIGHT 就可以当作结构体使用。
TABLES : sflight.
DATA :l carrid TYPE sflight-carrid.
四、选择画面
此部分要讲述的是在程序中可以输入查询条件的选择画面部分。当运行报表程序时,会自动生成选择画面(1000)。选择画面提供如INPUT字段可以与用户相互作用的(可以输入选择条件)的画面。在报表程序中选择画面最好包含在INCLUDE程序名SEL(或者TOP)中。选择画面不需要程序员定义,就会自动生成1000和处理逻辑。
SELECT-OPTIONS: sel carr FOR sflight-CARRID,
PRAMETERS :p carr LIKE sflight-carrid.
SELECTION-SCREEN BEGIN OF BLOCK b1
WITH FRAME TITLE TEXT-010
SELECTION-SCREEN END OF BLOCK b1.
1.PARAMETERS
PARAMETERS 定义用户可以输入值的输入字段。用下面语句定义变量。SELECTION-SCREEN 不支持 DataTypeF,因此此类型不能定义成参数。
PARAMETERS <p>[(<length>)] <type> [<decimals>].
PARAMETERS
变量如果不指定TYPE类型,则默认定义为基本CHAR1类型。PARAMETERS 中输入的值用在查询数据的SELECT
语句的条件中使用。此参数只能接收一个值,且能追加如复选框按钮等选项。参照[表12-1]和[例12-4]学习PARAMETERS 的多种选项。 [例12-4]
REPORT z12_04.
DATA:l_fname(20)TYPE c.
PARAMETERS:p_1 DEFAULT'A',
p_2 TYPE char10,
p_3 TYPE C LENGTH 3 DEFAULT '123',
p_4 TYPE P DECIMALS 2 DEFAULT '123.456789',
p_5 LIKE sflight-carrid,
p_6 MEMORY ID scl,
p_7 MATCHCODE OBJECT zcarrid,
p_8 MODIF ID mid,
p_9 NO-DISPLAY,
p_10 DEFAULT 'a' LOWER CASE.
p_11 OBLIGATORY.
P_12 AS CHECKBOX.
p_13 RADIOBUTTON GROUP radi,
P_13_2 RADIOBUTTON GROUP radi,
P_14(10) VISIBLE LENGTH 3 DEFAULT'1234567890'
p_15 LIKE sflight-carrid VALUE CHECK.
P_16 LIKE(l_fname),
p_17 LIKE sflight-carrid AS LISTBOX VISIBLE LENGTH 3.
p_18 AS CHECKBOX USER-COMMAND abc.
*下面是在Logical Datagbase 中使用
* P_19 for table sflight,
* P_20 FOR NODE sfight,
* P_21 AS SEARCH PATTERN
* P_22 VALUE-REOUEST
* P_23 HELP-REOUEST,
[例 12-4]是关于参数的所有属性进行整理的代码。复制代码到程序中运行会有助于理解。P19~P23是在LDB中使用的参数属性,且生成LDB时自动生成。PARAMETERS旁边的冒号“:”是相同语句多次重复使用时为了简化代码而使用的语句,以逗号“,”区分,句号“,”结束。
上图是执行[例 12-4]的选择画面的结果。报表程序只定义PARAMETERS 语句也会自动生成如[结果 12-4]所示的选择画面。
2.SELECT-OPTIONS
PARAMETERS 是只能接收一个值的INPUT字段,与之相反,SELECT-OPTIONS可以通过2个INPUT字段接收多种条件值(SelectionCriteria)。拥有与RANGE 变量相同的结构(内表)。RANGES变量在“第7章ABAP数据字典”中已经介绍。SELECT-OPTIONS始终要与 FOR 语句并行使用。此时FOR语句后面的值只能是以 TABLES语句定义的表字段名或者是以 DATA语句定义的变量。参照表12-2]与[例12-51学习SELECT-OPTIONS 的多种选项。
SELECT-OPTIONS <seltab> FOR <Ã>.
[图 12-5]是 SELECT-OPTIONS 中可以输入的 Multiple Selection输入弹出窗口 。在这里可以输入多个单值或者范围值。以这种方法构成的SELECTION TABLE用在OPEN SOL的WHERE 条件中。
SELECT * FROM SPFLI WHERE CARRID IN <seltab>.
[例12-5]
REPORT z12_05.
TABLES : sflight.
DATA : gs scarr TYPE scarr.
DATA:gv_val TYPE char20.
SELECT-OPTIONS :s_1 FOR sflight-carrid DEFAULT 'AC'
s_2 FOR gs_scarr-carrid DEFAULT 'AA*'
OPTION EO SIGN I,
s_3 FOR gv_val DEFAULT '1111' TO '9999',
s_4 FOR gv_val DEFAULT 'AAAA' TO'ZZZZ'
OPTION BT SIGN E,
s_5 FOR sflight-carrid MEMORY ID scl,
s_6 FOR gv_val MATCHCODE OBJECT zcarrid,
s_7 FOR sflight-carrid MODIF ID car,
s_8 FOR sflight-carrid NO-DISPLAY,
s_9 FOR sflight-carrid LOWER CASE.
s_10 FOR sflight-carrid OBLIGATORY
s_11 FOR sflight-carrid NO-EXTENSION,
s_12 FOR sflight-carrid NO INTERVALS,
s_13 FOR sflight-carrid VISIBLE LENGTH 1.
[结果12-5]
3.SELECTION-SCREEN
使用PARAMETER
和SELECTION-OPTION
,ABAP程序会自动调节字段描述与长度生成画面(SELECTION SCREEN)。若想调节系统自动生成的画面,则可以利用SELECTIONSCREEN 语句。通过[表12-3]和[例12-6]来了解 SELECTION-SCREEN 选项。 [结果12-6]
REPORT Z12_06.
TABLES : scarr, sscrfields.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10)text-001 FOR FIELD p_1
PARAMETERS :p_1 LIKE scarr-carrid.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS:p_2 LIKE scarr-carrname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN ULINE /1(10).
SELECTION-SCREEN ULINE pos_low(10).
SELECTION-SCREEN ULINE pos_high(10).
SELECTION-SCREEN PUSHBUTTON /pos_low(10) text-002 USER-COMMAND btn01.
SELECTION-SCREEN BEGIN OF BLOCK block WITH FRAME TITLE text-003
PARAMETERS : p_3 TYPE c.
SELECT-OPTIONS :s_1 FOR scarr-carrid.
SELECTION-SCREEN END OF BLOCK block.
SELECTION-SCREEN BEGIN OF BLOCK bock2 WITH FRAME TITLE text-004
NO INTERVALS.
PARAMETERS : P_4 TYPE c.
SELECT-OPTIONS :s_2 FOR scarr-carrid.
SELECTION-SCREEN END OF BLOCK bock2.
SELECTION-SCREEN FUNCTION KEY 1.
INITIALIZATION.
MOVE 'Function key 1' TO sserfields-funetxt 01.
AT SELECTION-SCREEN.
IF sscrfields-ucomm ='FC01'.
MESSAGE 'You clicked Function Key 1' TYPE 'T'.
ENDIF.
IF sscrfields-ucomm ='BTNO1'.
MESSAGE "You clicked Fuction Key button' TYPE 'I'
ENDIF.
[结果12-6]
[图 12-6]
是在[结果 12-6]中单击按钮时执行的调试代码画面。从中可以确认
ATSELECTION-SCREEN
的字段SSCRFIELDS-UCOMM
中被分配命令语的结果。单击也会显示相同的结果。
4.Message ID
若想在 ABAP 程序信息栏中显示信息,则需要在报表第一行中记述 MESSAGE-ID。
SELECT* FROM SPFLI WHERE CARRID IN <seltab>.
REPORT <Reportname> MESSAGE-ID <message-id>.
MESSAGE Ennn WTH <fled1>...<field4>.
信息类型如[表 12-4]所示。 下面联系创建MESSAGE ID