https://dxldev.blog.csdn.net/article/details/121419141?spm=1001.2014.3001.5502
我们要实现的功能有:
1.单值选择
2.区间选择
3.复选框
4.单选框
第一种方法: 定义框架
SELECTION-SCREEN BEGIN OF BLOCK blc_001 WITH FRAME TITLE TEXT-001.
parameters: p_bukrs LIKE ekko-bukrs. "单值输入,参照数据表字段
SELECT-OPTIONS s_ebeln for ekko-ebeln. "区间输入 需要提前声明表TABLES:ekko.
SELECTION-SCREEN END OF BLOCK blc_001.
* 定义不用框架
SELECTION-SCREEN BEGIN OF BLOCK blc_002 WITH FRAME TITLE TEXT-002.
PARAMETERS: p_flag as CHECKBOX DEFAULT 'X' . "复选框 DEFAULT 'X' 默认勾选
SELECTION-SCREEN SKIP.
PARAMETERS: p_flag1 RA
选择屏幕开发
SAP的屏幕开发一般分为两种
一种是通过SAP ABAP语法创建屏幕元素,称之为选择屏幕(我们现在学习这种)
第二种是通过SAP的屏幕编辑器开发,同构屏幕编辑器可以实现多种展现模式。(暂时不学)
屏幕基本输入域对象的创建以及相关属性
SAP中可以通过ABAP来创建屏幕元素,共分为两种模式,一种是通过SELECT-OPTIONS语法来建议数据输入域,另一种则是通过PARAMETERS语法来创建数据输入域。
即一种是定义框架,另一种是不定义框架
屏幕元素创建的基本语法
SELECT-OPTIONS 与PARAMETERS 的属性有很多相似之处,但是SELECT-OPTIONS创建的是一个输入的区间,其定义时必须指定参考表及参考字段,SELECT-OPTIONS <对象名> FOR <参考对象>
PARAMETERS 通常用于简历一个单一的屏幕输入对象,其参考对象比较灵活,可以参考数据表的字段,也可以参考具体的数据元素。 PARAMETERS<对象名> LIKE/TYPE<参考对象>
例如下面例子:
tables: mara. "参考表
SELECT-OPTIONS : s_matnr FOR mara-matnr. "参考字段
PARAMETERS : s_matnr1 LIKE mara-matnr.
PARAMETERS: s_matnr2 TYPE matnr.
可以看到结果如下
SELECT-OPTIONS : 代表选择范围
而parameters 则代表单选框 ,且分别有LIKE 和 TYPE
屏幕输入域显示参数控制
SELECT-OPTIONS 和 PARAMETERS 的显示参数控制机制基本类似。
1.OBLIGATORY 必输项控制
控制该屏幕元素是否为必输项,SELECTIONS-OPTIONS一般只对下限值字段(LOW字段)有效。
2.NO-DISPLAY 显示控制
程序运行后不显示该对象,SELECT-OPTIONS 与PARAMETERS属性一致。
3. VISIBLE LENGTH vlen显示长度控制
控制对象的显示长度,其取值范围为1-18
4. NO-EXTENSION多行输入控制
SELECT-OPTIONS 和 PARAMETERS 所定义的对象都可以输入多行数值,加上该参数后,限制只能输入单一行,在屏幕对象后面的多行输入控制按钮将隐藏
5.NO-INTERVALS 输入范围值控制
该属性针对于SELECTION-OPTIONS 所定义的对象是输入范围值,上限值到下限值,在内表中分别为 “LOW” 和 “HIGH” 两个字段,加上该参数后,在屏幕上只会显示上限值输入字段。
6. MODIFY ID modid 编辑组控制
该参数可以将定义的屏幕对象进行分组,以方便在程序运行中对分组的对象属性进行统一修改以及控制,例如控制某组对象为不可输入,如下代码中将G2中的对象在屏幕输入中设置为不可输入(即将input属性设置为0),该属性在SELECT-OPTIONS 和PARAMETERS中的操作基本一致。
REPORT ZALVTEST051.
TABLES : mara.
SELECT-OPTIONS: p1 FOR mara-matnr MODIF ID g1,
p2 FOR mara-matnr MODIF ID g1,
p3 FOR mara-matnr MODIF ID g2,
p4 FOR mara-matnr MODIF ID g2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF NOT screen IS INITIAL.
IF SCREEN-GROUP1 = 'G2'.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
SAP输入值的控制
SAP提供数据输入控制参数来控制屏幕对象的输入值,包括如下。
1. 控制输入默认值
DEFAULT vall [TO val2] [OPTION opt][SIGN sgn]控制输入默认值范围
该参数针对 SELECTI-OPTIONS 所定义对象屏幕加载后所显示的默认值,其中vall [TO val2]为输入值的上下限,OPTION 代表数据关系,SIGN 代表输入类型,具体如下表:
栏目名 参考值 描述
SIGN I 或者 E 输入类型, I表示包括,E表示排除
OPTION NB或者 BT 表示前后输入栏关系,NB(不包括),BT(包括)
default vall 即默认值,
控制PARAMETERS所对应输入对象的默认值范围:该参数定义对象在屏幕加载后所显示的默认值,输入默认值范围也可以在程序加载时进行更改
2.LOWER CASD 允许输入小写字母
SAP所有屏幕字段输入后都会将字母默认转换为大写,加上该参数允许输入小写字母。
3.MATCHCODE OBJECT search help 屏幕对象F4帮助
为屏幕对象加上指定的F4帮助,F4帮助功能会在数据字典章节做具体介绍,系统也提供了很多已经定义好的F4帮助对象,如下图所示。
4.MEMORY ID pid 定义 SELECT-OPTIONS 内存参数
可以将屏幕对象输入的值保存到指定的内存参数 ,通过 GET PARAMETERS的方法可以直接从内读取该对象的值,如以下代码,将内存值取到指定字段并输出。
输入默认值范围也可以在程序加载时进行更改,代码如下:
TABLES: syst.
DATA: s_date TYPE d.
SELECT-OPTIONS : dl for syst-datum default s_date to sy_datum option bt sign I .
*以上代码的意思即默认选择框中的日期为dl 到 sy-datum
INITIALIZATION.
s_date = sy-datum - 1.
dl-low = s_date.
MODIFY dl INDEX 1.
SAP屏幕框架的创建
SAP页面设计中的框架不但可以保证SAP程序外观设计的美观大方,并且可以提供诸如按钮,页签等功能组件。
基本框架的创建语法如下:
SELECTION-SCREEN BEGIN OF BLOCK block [WITH FRAME[TITLE title][NO INTERVALS]]
- 限制所创建的框架只有一个输入项
SELEDTION-SCREEN END OF BLOCK block.
案例:
SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE mytitle. "定义为字符串变量
PARAMETERS : name TYPE syuname.
SELECTION-SCREEN END OF BLOCK 100.
INITIALIZATION.
mytitle = '输入用户编号:'.
实现屏幕元素质检的换行
通过在框架结构中嵌入代码: SELECTION-SCREEN SKIP[n],能实现屏幕元素间的换行,n表示换行数目
在屏幕上输出直线
通过语句SELECTION-SCREEN ULINE 1(79)[/] [pos] (len) 可以实现在屏幕上画出一条直长度直线,其中[/]表示换行,[pos] 表示直线起始的位置,(len) 表示长度。
SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE mytitle.
SELECTION-SCREEN ULINE1(79).
SELECTION-SCREEN ULINE /1(50).
SELECTION-SCREEN END OF BLOCK 100.
PARAMETERS : name LIKE sv-uname.
在屏幕中实现按钮功能
很多桌面程序的设计习惯通过按钮来实现与用户动作的交互。在SAP选择开发中也可以实现按钮功能。
SELECTION-SCREEN PUSHBUTTON [ \ ] [ pos ] ( len ) button_text "按钮的位置
USER-COMMAND fcode "为按钮分配事件功能代码
[ VISIBLE LENGTH vlen ] "输出长度
[ MODIFY ID modid ] "编辑组ID号码
在屏幕上创建页签,实现分页功能
SAP允许直接通过ABAP代码在屏幕上创建一个页签。
语法: SELECTION-SCREEN BEGIN OF TABBED BLOCK FOR n lines
每个页签都是由一个单独的子屏幕控制,n代表分页控件的高度,屏幕载入时必须先通过INITIALIZATION事件对其初始化。
TABLES : mara.
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. "定义子屏幕100
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : mat1 FOR mara-matnr NO INTERVALS.
SELECTION-SCREEN SKIP 1.
PARAMETERS chk1 AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN END OF SCREEN 100.
*定义子屏幕200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
PARAMETERS : mat2 LIKE mara-matnr.
SELECTION-SCREEN END OF SCREEN 200.
*定义一个TAB空间,取名为MYTAB,空间高度为5,共分为两个页签,BUTTON1,BUTTON2.
*两个也签的功能代码分别为PUSH1,PUSH2
SELECTION-SCREEN : BEGIN OF TABBED BLOCK mytab FOR 5 LINES,
TAB (20) button1 USER-COMMAND push1,
TAB (20) button2 USER-COMMAND push2,
END OF BLOCK mytab.
*为TAB控件分配初始化值,引用TEXT element定义为本
INITIALIZATION.
button1 = TEXT-010.
button2 = TEXT-020.
mytab-prog = sy-repid.
mytab-dynnr = 100.
*为TAB控件页签单击事件,选择不同的页签显示不同的子屏幕
AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'PUSH1'.
mytab-dynnr = 100.
mytab-activetab = 'BUTTON1'.
WHEN 'PUSH2'.
mytab-dynnr = 200.
mytab-activetab = 'BUTTON2'.
ENDCASE.