Skip to content
关注公众号,可咨询工作中遇到的问题、获取学习资料、掌握行业资讯

程序结构—定义

一、简单介绍

  报表程序大致可分为如卜所示的三种结构。
① 数据定义部分和査洵选择画面(SELECTION-SCREEN)
② 直到运行时刻的触发事件
③ 显示数据的列表事件
在10.3节中介绍关于数据定义部分及SELECTION-SCREEN
1.程序及数据定义

abap
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.事件

abap
INITIALIZATION.
AT SELECTION-SCREEN. "( OUTPUT, ON VALUE REQUEST ) 
SIART-OF-SELECTION.
*( SELECT * FROM ~ 或者 GET <TABLE> ...) 
END-OF-SELECT1ON.

3.报表程序事件流程

abap
TOP-OF-PAGE. 
END-OF-PAGE.
AT LINE-SELECTION. 
AT PF<NN>
AT USER-COMMAND.

二、定义程序语句

  定义程序的语句中存在REPORT v程序名》基本结构的附加选项。

1.指定程序 LIST Heading

  决定在执行程序的报表画面上是否以程序名作为基本标题。利用下列语句会删除基本 标题。

abap
REPORT Z12_02 NO STANDARD PAGE HEADING.
WRITE 'List Heading Test'.

  若要添加用户所需的标题,则在报表控制流事件的TOP-OF-PAGE中追加代码即可。 详细内容在后面继续介绍。[图12-3]比较显示将程序名作为基本标题和没有使用此方法的 情况。 alt text

2. Line-Size

指定输出报表的宽度。宽度设置成0或者删除LINE-SIZE语句,则会使用标准宽度。具体使用效果请参照图[12-4].

abap
REPORT Z12_03 LINE-SIZE30.
WRITE 'Tine Size Test'.

alt text

3.Message ID

定义ABAP程序中要使用的MESSAGE ID

abap
REPORT Z12_04 MESSAGE-ID <message-id>.

三、DATA 定义

定义程序中要使用的表及数据。复杂的程序一般包含于INCLDUE (程序名)TOP中。

abap
REPORT pgm_id 
INCLUDE pgm_idTOP.

  INCLUDE程序主要在模块池程序中使用,是存储于R/3存储器中的对象,因此是不能独立运行的程序。这部分内容将在第13章再次进行说明。数据类型和其定义方法己经在第2,中 洋细介绍,因此在这里省略此部分。TABLES iS句也已经在前面讲述并做过练习,因此不再细 讲。当需要与表的结构相同的结构体时,为了便利,可以使用此TABLES语句。   "SELECT * FROM SFLIGHT WHERE~~"语句中的 SFLIGHT 就可以当作结构体使用。

abap
TABLES : sflight.
DATA :l carrid TYPE sflight-carrid.

四、选择画面

  此部分要讲述的是在程序中可以输入查询条件的选择画面部分。当运行报表程序时,会自动生成选择画面(1000)。选择画面提供如INPUT字段可以与用户相互作用的(可以输入选择条件)的画面。在报表程序中选择画面最好包含在INCLUDE程序名SEL(或者TOP)中。选择画面不需要程序员定义,就会自动生成1000和处理逻辑。

abap
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,因此此类型不能定义成参数。

abap
PARAMETERS <p>[(<length>)] <type> [<decimals>].

  PARAMETERS变量如果不指定TYPE类型,则默认定义为基本CHAR1类型。PARAMETERS 中输入的值用在查询数据的SELECT语句的条件中使用。此参数只能接收一个值,且能追加如复选框按钮等选项。参照[表12-1]和[例12-4]学习PARAMETERS 的多种选项。 alt text [例12-4]

abap
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旁边的冒号“:”是相同语句多次重复使用时为了简化代码而使用的语句,以逗号“,”区分,句号“,”结束。 alt text

  上图是执行[例 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 的多种选项。

abap
SELECT-OPTIONS <seltab> FOR <Ã>.

  [图 12-5]是 SELECT-OPTIONS 中可以输入的 Multiple Selection输入弹出窗口 。在这里可以输入多个单值或者范围值。以这种方法构成的SELECTION TABLE用在OPEN SOL的WHERE 条件中。

abap
SELECT * FROM SPFLI WHERE CARRID IN <seltab>.

alt textalt text [例12-5]

abap
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] alt text

3.SELECTION-SCREEN

  使用PARAMETERSELECTION-OPTION,ABAP程序会自动调节字段描述与长度生成画面(SELECTION SCREEN)。若想调节系统自动生成的画面,则可以利用SELECTIONSCREEN 语句。通过[表12-3]和[例12-6]来了解 SELECTION-SCREEN 选项。 alt text [结果12-6]

abap
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] alt text   [图 12-6]是在[结果 12-6]中单击alt text按钮时执行的调试代码画面。从中可以确认 ATSELECTION-SCREEN的字段SSCRFIELDS-UCOMM 中被分配命令语的结果。单击alt text也会显示相同的结果。 alt text

4.Message ID

  若想在 ABAP 程序信息栏中显示信息,则需要在报表第一行中记述 MESSAGE-ID。

abap
SELECT* FROM SPFLI WHERE CARRID IN <seltab>.
abap
REPORT <Reportname> MESSAGE-ID <message-id>.
MESSAGE Ennn WTH <fled1>...<field4>.

信息类型如[表 12-4]所示。 alt text 下面联系创建MESSAGE ID alt text