程序员干货

ABAP报表设计-报表事件

2018-11-01  本文已影响2人  常威爆打来福

1.事件分类,触发,终止

1事件分类

3 终止

使用STOP, EXIT, CHECK语句。

2.选择屏幕

1 选择屏幕参数

最简单的选择屏幕元素是选择参数,这种形式只能接受用户的单值输入
PARAMETERS name TYPE|LIKE type|dobj.

2 复杂选择标准

使用SELECT-OPTIONS语句可以设定比较复杂的选择标准,选择标准是比选择参数更为复杂的一种用户输入形式。SELECT-OPTIONS seltab FOR f.
该语句将根据定义时的参照类型f(f需为程序中的全局基本类型元素,通常情况下f参照数据字典中的表字段生成,以提供各种帮助,值检查功能)在选择屏幕中生成两个字段,以供用户输入选择的范围。同时还在程序中生成一个包含有四个组件的内表——选择表,该表具体格式如下:

DATA:BEGIN OF seltab OCCURS 0,
       SING(1),
       OPTION(2),
       LOW LIKE f,
       HIGH LIKE f,
      END OF seltab.

该表的所有字段都可以在选择屏幕中由用户进行设置,且可以包含多行,每一行都代表一个逻辑条件,以实习较为复杂的选择标准设定,各字段含义如下:

REPORT z_event_blocks_demo.
DATA: spfli_line TYPE spfli.

SELECT-OPTIONS so_air FOR spfli_line-carrid.

START-OF-SELECTION.
  LOOP AT so_air.
    WRITE: / 'SIGN:', so_air-sign, 'OPTION:', so_air-option,
    'LOW:', so_air-low, 'HIGH:', so_air-high.
  ENDLOOP.
  SELECT * FROM spfli INTO spfli_line WHERE carrid IN so_air.
    WRITE: / spfli_line-cityfrom, spfli_line-cityto.
  ENDSELECT.

3 选择标准文字

Goto->Text elements->Selection texts

4 使用选择变式

Goto->Variants->Save as variant 变式保存
Goto->Variants->Get获取

3.格式化屏幕

在程序中使用PARAMETERS和SELECT-OPTIONS语句定义了它们的同时可以通过一些选项对其输入格式进行进一步的控制,并通过SELECTION-SCREEN语句将选择屏幕的外观进行格式化,比如组合一些元素到一个屏幕行中,或在元素块之间添加空行等。

1 选择参数格式选项

选择参数语句PARAMETERS中可以包含附加格式化项PARAMETERS p ... <options> ...。其中的<options>不是语句关键字,而是代表各种格式化选项:

REPORT z_event_blocks_demo.
PARAMETERS: r1 RADIOBUTTON GROUP rad1,
            r2 RADIOBUTTON GROUP rad1 DEFAULT 'X',
            r3 RADIOBUTTON GROUP rad1,
            s1 RADIOBUTTON GROUP rad2,
            s2 RADIOBUTTON GROUP rad2.
RADIO

2 选择标准格式选项

SELECT-OPTIONS语句也可以使用OBLIGATORY, MATCHCODE OBJECT和MEMORY ID等选项,其意义和用法类似于PARAMETERS语句,除此之外还有一些属于选择标准的特有设定选项:

3 其他选择屏幕

可以使用SELECTION-SCREEN语句添加一些其他的元素。
SELECTION-SCREEN ... <options> ... <options>中包括空行,下划线和注释文字。
SKIP选项可以在屏幕上产生空行。 SELECTION-SCREEN SKIP [n].其中n的值可以是1到9,要产生单个空行,可以省略n选项。
ULINE选项可以在选择屏幕中给一行或行中的一部分加下划线。
SELECTION-SCREEN ULINE [[/]pos(len)] [MODIF ID key].
COMMENT选项可以在选择屏幕中添加一些注释性质的文字
SELECTION-SCREEN COMMENT [/]pos(len) comm [FOR FIELD f] [MODIF ID key].

REPORT z_select_element_grouping.

SELECTION-SCREEN COMMENT /1(50) comm1 MODIF ID mg1. 
SELECTION-SCREEN ULINE. 
SELECTION-SCREEN SKIP. 

SELECTION-SCREEN COMMENT /1(30) comm2. 
SELECTION-SCREEN ULINE /1(50). 
PARAMETERS: r1 RADIOBUTTON GROUP rad1, 
            r2 RADIOBUTTON GROUP rad1, 
            r3 RADIOBUTTON GROUP rad1. 
SELECTION-SCREEN ULINE /1(50). 

AT SELECTION-SCREEN OUTPUT. 
  comm1 = 'Selection Screen'. 
  comm2 = 'Select one'. 
  LOOP AT SCREEN INTO DATA(screen_wa). 
    IF screen_wa-group1 = 'MG1'. 
       screen_wa-intensified = '1'. 
      MODIFY SCREEN FROM screen_wa. 
    ENDIF. 
  ENDLOOP.
其他选择屏幕元素

4 组合选择屏幕

选择屏幕是通过ABAP语句由系统生成的屏幕,不是程序员绘制的,因而元素位置较为固定。SELECTION-SCREEN语句提供进行一些格式化功能,用于部分的改善选择屏幕的外观。SELECTION-SCREEN ... <options> ...
如果需要将选择屏幕中的多个不同元素,集中在选择屏幕的一行输出,可在BEGIN OF LINE和END OF LINE附加项之间的语句块间声明各元素,这些元素将出现在屏幕的同一行中

SELECTION-SCREEN BEGIN OF LINE.
   ... 
SELECTION-SCREEN END OF LINE.

当把几个元素定位在一行中时,可以在SELECT-SCREEN语句的pos(len)中省略位置说明pos,对象元素将定位在行中的当前位置,此时不可以把 / 选项与格式选项pos(len)一起使用。
将多个元素集中在一行输出之后,可以通过POSITION附加项,把选择屏幕中的元素按照指定的位置输出SELECTION-SCREEN POSITION pos.
只能在SELECTION-SCREEN语句的BEGIN OF LINE和END OF LINE之间使用POSITION选项定位元素。对于pos,可以指定数字或POS_LOW和POS_HIGH。
如果需要将一组选择屏幕组合在一个区域中,可以使用BEGIN OF BLOCK和END OF BLOCK附加项定义选择块组合屏幕元素

SELECTION-SCREEN BEGIN OF BLOCK block
                        [WITH FRAME [TITLE title]]
                        [NO INTERVALS].
       ...
SELECTION-SCREEN END OF BLOCK block.

5 选择屏幕事件

通过一系列事件块的代码实现对运行时选择屏幕处理过程中各种事件的响应。与其他事件块相同,选择屏幕中各个事件在程序中出现的位置是任意的,与其调用顺序无关。对于系统自动调用额报表程序默认的选择屏幕1000,该选择屏幕事件将出现在INITIALIZATION事件和START-OF-SELECTION事件中间,对于使用CALL SELECTION-SCREEN调用的自定义选择屏幕,这些选择屏幕将垂涎在当前处理块中。具体在何事件块中,可以通过系统变量SY-DYNNR来判断当前选择屏幕序号。当选择屏幕中所有的处理结束,系统将触发START-OF-SELECTION事件或者继续执行CALL SELECTION-SCREEN语句后面的代码。
所有选择屏幕事件都使用AT SELECTION SCREEN语句引导,除去选择屏幕的PBO事件之外,大多的选择屏幕事件都用于在不同的状态下给用户提供输入帮助,检查甚至结束当前选择屏幕的处理,并给出错误提示。

REPORT z_select_element_grouping.
PARAMETERS: p_carrid TYPE spfli-carrid,
            p_connid TYPE spfli-connid,
            p_cityfr LIKE spfli-cityfrom DEFAULT 'Singapore' MODIF ID scl,
            p_cityto LIKE spfli-cityto MODIF ID sc2.

AT SELECTION-SCREEN.
  IF p_carrid IS INITIAL.
    MESSAGE e888(abapdocu) WITH 'Please input some value'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'SC1'.
      screen-input = '0'.
      MODIFY SCREEN.
      CONTINUE.
    ENDIF.
  ENDLOOP.
SCREE
上一篇 下一篇

猜你喜欢

热点阅读