选择屏幕是报表程序的一部分,可以设计选择屏幕以便交互输入字段选择标准。在报表程序启动之后,用户在该屏幕中输入值。
可以使用下列语句设计选择屏幕:
PARAMETERS: 为变量定义输入字段
SELECT-OPTIONS:为选择标准定义输入字段
SELECTION-SCREEN:格式化选择屏幕
一、给参数分配缺少值:
PARAMETERS<p> ...... DEFAULT <f> ...... "<f>可以是文字或字段名。如果指定字段名,则系统将按缺省值处理该字段内容。报表用户可以在选择屏幕中更改缺少值。
二、禁止参数显示
语法:
PARAMETERS <p> ...... NO-DISPLAY......
创建参数,并通过DEFAULT选项在时间事件INITIALIZATION中内部赋值,或者,如果报表是用SUBMIT启动的,则由调用程序进行外部赋值。
如果想只在某种条件下才显示参数 ,例如,根据报表用户在选择屏幕的其它输入字段中输入的值决定是否显示参数 ,则请您不要使用 NO-DISPLAY 选项。如果使用了这个选项,参数就不是选择屏幕的元素 ,而且您
也不能用 MODIFY SCREEN 语句使它可见 。要使参数成为选择屏幕的隐藏元素 ,请不带NO-DISPLAY 选项声明该参数,并通过使用 MODIFY SCREEN 语句禁止显示它。
三、允许参数接受大小写
语法:
PARAMETERS <p> ...... LOWER CASE ......
如果没有LOWER CASE选项,系统将所有输入值更改为大写。
如果没用LIKE选项从ABAP/4词典中引用字段,参数将接受ABAP/4字段的所有属性。不能更改这些属性,也不能使用LOWER CASE选项。必须在ABAP/4词典中定义是否可以输入大写或小写值。
四、制作需要的输入字段的参数
PARAMETERS <p> ...... OBLIGATORY ......
五、在选择屏幕上创建复选框
语法:
PARAMETERS <p> ...... AS CHECKBOX ......
参数<p>按长度为1的类型C创建。在这种情况下,不允许使用附加选项TYPE和LIKE。<p>的有效值是''和'X'。当用户单击这些复选框时,值‘X’和‘’将分配给相应的参数。
六、在选择屏幕上创建单选按钮组
语法
PARAMETERS <p> ...... RADIOBUTTON GROUP <radi> ......
参数<p>按类型C,长度1创建,并分配到组<radi>。字符串<radi>的最大长度是4。允许使用附加的LIKE选项,从早是必须参阅类型为C,长度为1的字段。
必须为每个<radi>组分配至少两个参数。每个组中只有一个参数可以用DEFAULT选项分配的缺省值。该值必须是'X'。
当用户单击选择屏幕中的单选按钮时,相应的参数被激活(分配值‘X’),同时同组的其它参数被设为非活动的(赋值‘’)。
PARAMETERS: R1 RADIOBUTTON GROUP RAD1,
R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X',
R3 RADIOBUTTON GROUP RAD1,
S1 RADIOBUTTON GROUP RAD2,
S2 RADIOBUTTON GROUP RAD2,
S3 RADIOBUTTON GROUP RAD2 DEFAULT 'X'.
如果没有使用 DEFAULT 选项,每个组的第一个参数(即 R1 和 S1 )将被激活并分配值‘ X’。
七、从SAP内存中使用缺省值
PARAMETERS语句的MEMORY-ID选项允许您从全局SAP内存使用缺省值。
语法:
PARAMETERS <p> ...... MEMORY ID <pid> ...
使用该选项时,以名称<pid>存储全局用户相关的SAP内存中的值将作为<p>的缺省值出现在选择屏幕上。<pid>最长3个字符,并且不能用引号封闭。
可以使用全局SAP内存在程序间传递保留在事务限制以外的值。用户在整个终端进程期都可利用该内存,并且所有并行进程使用相同的内存。因此SAP内存包含的内容要比局限于事务的ABAP/4内存更广泛。
八、给参数分配匹配代码对象
要给参数分配匹配代码对象,语法如下:
PARAMETERS <p> ...... MATCHCODE OBJECT <obj> ......
匹配代码对象<obj>的名称必须是4字符的变量名,并且不能引号封闭。
九、给修改组分配参数
要将参数分配给修改组,请使用PARAMTERS语句的MODIFID选项
语法:
PARAMETERS <p> ... MODIF ID <key> ...“修改组<key>的名称必须是不带引号的3字符变量名。MODIF ID选项总是把<key>分配到内表SCREEN的SCREEN-GROUP1列。在AT SELECTION-SCREEN OUTPUT事件中,分配给修改组的参数可以用LOOP AT SCREEN/MODIFY SCREEN语句按整个组进行处理。
PARAMETERS: TEST1(10) MODIF ID SC1,
TEST2(10) MODIF ID SC2,
TEST3(10) MODIF ID SC1,
TEST4(10) MODIF ID SC2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'SC1'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
CONTINUE.
ENDIF.
IF SCREEN-GROUP1 = 'SC2'.
SCREEN-INTENSIFIED = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
在 PARAMETERS 语句中,参 数 TEST1 和 TEST3 被分配给组 SC1,而 TEST2 和 TEST4 被分配给组SC2。在 AT SELECTION-SCREEN OUTPUT 事件中,按照 GROUP1 字段的内容 ,内表 SCREEN 的字段INTENSIFIED 被设置为 1 或 0。在选择屏幕中,TEST1 和 TEST3 所在行被设置为高亮度,而 TEST2 和 TEST4 则不是.
十、选择表
系统为每个SELECT-OPTIONS语句创建选择表。选择表的目的是按标准化的方式保存复合选择限制。它们可按多种方式使用。它们的主要目的是使用OPEN SQL语句的WHERE子句把选择标准直接传输到数据库表。选择表是一个带表头行的内表。它的行结构是字段字符串,由四个组件构成,即SIGN,OPTION,LOW和HIGH.
SIGN: SIGN的数据类型是C,长度为1.SIGN是标志,表示保存在OPTION中的运算符是否需要翻转。允许值是I和E.
I:表示“包含” E:表示“排除”
OPTION:OPTION的类型是C,长度为2。OPTION包含选择运算符。如果SIGN包含E,运算符的作用就像它的前面有NOT一样。
如果HIGH是空的,可以使用EQ,NE,GT,LE,LT,CP和NP,这些运算符在编程逻辑表达式中描述。运算符CP和NP没有它们在通常逻辑表达式中所具有的范围。只有当在输入字段中使用了通配符(“*”或“+”)时它们才是有效的。
如果HIGH已被填充,则可以使用BT(位于)和NB(不位于)。这些运算符的功能与BETWEEN和NOT BETWEEN一样。
LOW:LOW的数据类型与数据库表的列类型相同,该表与选择标准相连接。
如果HIGH为空,LOW的内容定义单值选择。它与OPTION中的运算符相结合,为数据库选择指定了条件。
如果HIGH已填充,LOW和HIGH中的内容为间隔选择指定上界和下界。与OPTION中的运算符相结合,该间隔为数据库选择指定了条件。
HIGH:数据与数据库表的列类型相同,该表与选择标准相连接。HIGH中的内容为间隔选择指定了上界。
十一、RANGES语句
要用与选择表相同的结构创建内表,可使用RANGES语句
RANGES <seltab> FOR <f>."该语句创建选择表<seltab>,该表参考数据库表的列<f>或内部字段<f>。选择表<seltab>必须在程序中填充。不必在程序中再用TABLES语句声明数据库表。
例:
DATA: BEGIN OF <seltab> OCCURS 10,
SIGN(1),
OPTION(2),
LOW LIKE <f>,
HIGH LIKE <f>,
END OF <seltab>.
用RANGES语句创建的选择表不是选择屏幕的一部分,它们在程序<prog>中不能用于数据传递,该程序由下列语句启动:SUBMIT <prog> WITH <seltab> IN <table>.表<table>可以在调用程序中用RANGES创建。
十二、SELECT-OPTIONS语句的基本格式
SELECT-OPTIONS <seltab> FOR <f>.
例:
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FOR SPFLI-CARRID.
LOOP AT AIRLINE.
WRITE: / 'SIGN:', AIRLINE-SIGN,
'OPTION:', AIRLINE-OPTION,
'LOW:', AIRLINE-LOW,
'HIGH:', AIRLINE-HIGH.
ENDLOOP.
输出:(1和8为手工在输入界面输入的)
SIGN: I OPTION: BT LOW:1 HIGH:8
十三、给选择标准分配缺省值
SELECT-OPTIONS <seltab> FOR <f> DEFAULT <g> [TO <h>] ....
"<g>和<h>的缺省值可以是实际值或是字段名,该字段的值将用做缺省值。系统在时间事件INITIALIZATION之前把缺省值传递给选择标准。因此,只有那些在用户启动程序时已被填充的字段才可以用字段名而不用文字。
对于每一个SELECT-OPTIONS语句,可以指定DEFAULT附加部分。这意味着只能用缺省值填充选择表<seltab>的第一行。选择表行的第一行的所有组件可以用DEFAULT选项预先设置:
要只设置LOW字段(单值选择),请使用
...... DEFAULT <g>.
要设置LOW和HIGH字段(选择运算符),请增加TO,如下所示:
......DEFAULT <g> TO <h>.
要设置OPTION字段(选择运算符),请增加 OPTION<op>,如下所示:
......DEFAULT <g> [to <h>] OPTION <op>.
对于单值选择,<op>可以是EQ,NE,GE,GT,LE,LT,CP或NP。缺省值是EQ。
对于期间选择,<op>可以是BT或NB.缺省值是BT.
要设置SIGN域(包括/排除),请增加SIGN(s),如下所示:
...... DEFAULT <g> [to <h>] [OPTION <op>] SIGN<s>.
SIGN<s>可以是I(包括)和E(排除)。缺省值是I.
十四、把选择表限制在一行
SELECT-OPTIONS <seltab> FOR <f> ... NO-EXTENSION ...
如果指定该选项,则选择屏幕上不出现右箭头,并且用户不能访问“复杂选择”窗口。
十五、把选择表限制为单值选择
SELECT-OPTIONS <seltab> FOR <f> ... NO INTERVALS ...
"要将选择屏幕上选择为单个输入框
十六、格式化选择屏幕
1、指定空行、下划线和注释
SELECTION-SCREEN SKIP [<n>]."该语句产生<n>个空行,其中<n>的值可以是1到9。要产生单个空行,可省略<n>.
SELECTION-SCREEN ULINE [[/]<pos(len)>][MODIF ID <key>]."该语句创建下划线。如果不使用格式选项<pos(len)>,则在当前行下面创建新行。如果使用格式选项<pos(len)>,下划线将从当前行的位置<pos>处开始,连续<len>个字符。通过一行中的几个元素,也可以不通过<pos>来指定(<len>).可以使用可选的斜杠(/)请求换行。对于<pos>,可以指定一个数,POS_LOW或POS_HIGH。是使用SELECT-OPTIONS语句时“从”和“到”字段在选择屏幕上的显示位置。和PARAMETERS语句一样,可以使用MODIF ID<key>选项把下划线分配修改组<key>,该修改组可以用在AT SELECTION-SCREEN OUTPUT事件中以修改屏幕。
SELECTION-SCREEN COMMENT [/]<pos(len)><name> [FOR FIELD <f>][MODIF ID<key>].使用该选项时必须定义格式(开始位置和长度,只有一行上具有几个元素时才可以省略<pos>).对于<name>,可以指定文本符号,或指定最大长度为8个字符的字段名。该字符字段不能用DATA语句声明,而是通常自动地按长度<len>生成。必须在INITIALIZATION事件中动态地填充该字符字段。将显示文本<name>,从列<pos>开始,长度为<len>。如果不使用斜杠(/),注释将写到当前行,否则,将创建新行。要把文本标签分配给参数或选择选项,请使用FOR FIELD<f>选项。 <f>可以是参数或选择标准的名称。因此,如果用户在选择屏幕的注释上请求帮助,则显示分配给字段<f>的帮助文本。
十七、将几个元素放在一行上
SELECTION-SCREEN BEGIN OF LINE.
...
SELECTION-SCREEN END OF LINE.
十八、定位元素
要在选择屏幕上定位下一个参数或注释,请和POSITION选项一起使用SELECTION-SCREEN语句。
SELECTION-SCREEN POSITION <pos>.
对于<pos>,可以指定数字POS_LOW或POS_HIGH。
十九、创建元素块
SELECTION-SCREEN BEGIN OF BLOCK <block>
[WITH FRAME [TITLE<title>]]
[NO INTERVALS].
...
SELECTION-SCREEN END OF BLOCK <block>.
必须为每个块定义名称<block>。可以嵌套块。如果增加WITH FRAME选项,在块的周围将画外框。最多可嵌套5层不同的块。可以使用TITLE选项给每个外框增加标题。就像COMMENT选项中的<name>,<title>可以是文本符号或字符文字。该字符字段的长度是外框的宽度,该宽度自动按照外框的嵌套深度进行设置。
二十、在应用工具条中创建按钮
在选择屏幕的应用工具条中最多可以创建5个按钮。这些按钮自动与功能键相连接。
SELECTION-SCREEN FUNCTION KEY<i>. "<i>必须在1到5之间。必须在ABAP/4词典字段SSCRFIELDS-FUNCTXT_0<i>中指定要在运行时间出现在按钮上的文本。必须用TABLES语句声明SSCRFIELDS.当用户单击该按钮时,FCO<i>输入到字段SSCRFIELDS-UCOMM中,可以在事件AT SELECTION-SCREEN中检查该字段。
REPORT ZJESSE02.
TABLES SSCRFIELDS.
DATA FLAG.
PARAMETERS TEST.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
INITIALIZATION.
SSCRFIELDS-FUNCTXT_01 = 'button 1'.
SSCRFIELDS-FUNCTXT_02 = 'button 2'.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'.
FLAG = '1'.
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
FLAG = '2'.
ENDIF.
START-OF-SELECTION.
IF FLAG = '1'.
WRITE / 'BUTTON 1 WAS CLICKED'.
ELSEIF FLAG = '2'.
WRITE / 'BUTTON 2 WAS CLICKED'.
ENDIF.
二十一、在选择屏幕上创建按钮
SELECTION SCREEN PUSHBUTTON [/]<pos(len)><name> USER-COMMAND <ucom> [MODIF ID <key>].
<name>是按钮文本。对于<ucom>,必须指定最多为4字符的代码。当用户在选择屏幕上单击按钮时,<ucom>被输入词典字段SSCRFIELDS-UCOMM.必须使用TABLES语句声明SSCRFIELDS.
REPORT ZJESSE02.
TABLES SSCRFIELDS.
DATA FLAG.
PARAMETERS TEST.
SELECTION-SCREEN PUSHBUTTON /20(10) BUT1
USER-COMMAND CLI1.
SELECTION-SCREEN PUSHBUTTON /20(10) TEXT-020
USER-COMMAND CLI2.
INITIALIZATION.
BUT1 = 'Button 1'.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'CLI1'.
FLAG = '1'.
ELSEIF SSCRFIELDS-UCOMM = 'CLI2'.
FLAG = '2'.
ENDIF.
START-OF-SELECTION.
IF FLAG = '1'.
WRITE / 'Button 1 was clicked'.
ELSEIF FLAG = '2'.
WRITE / 'Button 2 was clicked'.
ENDIF.