ABAP_ALV01-选择屏
1、ALV介绍
1.1 ALV:SAP List View 缩写ALV——SAP列表视图
1.2 ALV报表实现方式:面向过程实现(大部分用这个)、面向对象实现(即OOALV)
1.3 ALV报表组成部分:选择屏、工具栏、列表
选择屏:让用户输入参数
工具栏:不管是哪个实现方式(面向过程 or 面向对象)出来都会有默认的工具栏,要增减的需额外配置
列表:展现数据的地方
2、选择屏
屏幕元素:单输入、多输入、单选、复选、文件选择、格式化(选择元素格式化、界面格式化)
2.1 ALV代码格式
REPORT ZCSDN_LION_ALV01.
LOAD-OF-PROGRAM."程序运行开始
INITIALIZATION."初始化
AT SELECTION-SCREEN OUTPUT."调用屏幕时,假如没有屏幕时这里不会执行
AT SELECTION-SCREEN."屏幕输入后点执行后,假如没有屏幕时这里不会执行
START-OF-SELECTION."选择开始事件,点击运行后执行
END-OF-SELECTION."选择结束事件,一般用于输出
2.2 选择屏事件终止
return、stop、exit、check
注意:不能在LOAD-OF-PROGRAM.中使用,否则程序代码不会报错,但运行时会崩溃
3 代码示例
REPORT ZCSDN_LION_ALV01.
*定义变量
*TABLES:ZLION_TEST."定义一个表格变量
DATA TAB1 TYPE ZLION_TEST.
*定义屏幕元素
*单输入
PARAMETERS: P_NAME LIKE ZLION_TEST-NAME."单输入框
*区间输入
SELECT-OPTIONS:S_AGE FOR TAB1-AGE.
*单选,一般是多个单选组成一组
PARAMETERS:C_1 RADIOBUTTON GROUP G1,
C_2 RADIOBUTTON GROUP G1,
C_3 RADIOBUTTON GROUP G2,
C_4 RADIOBUTTON GROUP G2 DEFAULT 'X'.
*checkbox
PARAMETERS:CH1 TYPE C AS CHECKBOX.
LOAD-OF-PROGRAM."程序运行开始
INITIALIZATION."初始化
AT SELECTION-SCREEN OUTPUT."调用屏幕时,假如没有屏幕时这里不会执行
AT SELECTION-SCREEN."屏幕输入后点执行后,假如没有屏幕时这里不会执行
START-OF-SELECTION."选择开始事件,点击运行后执行
END-OF-SELECTION."选择结束事件,一般用于输出
上面截图字段文字描述设置—注意SAP登录中英文
1、激活上面代码
2、转到-内文元素-选择内文
3、输入文本或参考数据元素,最后激活
4、回来再运行,效果就出来了
5、上面的文字区分中英文的,如用英文则用英文登录后进到SE38,跟上面同样的设置即可
登录语言=EN(ZH是简体,ZF是繁体,EN是英文)
然后一直默认
更改后保存激活,页面就会按各语言Text内容显示
4、美化页面
4.1、分块
用以下代码包含页面元素
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN end of BLOCK b1.
text-001:在转到-内文元素-内文符号中维护
优化后代码如下
REPORT ZCSDN_LION_ALV01.
*定义变量
*TABLES:ZLION_TEST."定义一个表格变量
DATA TAB1 TYPE ZLION_TEST.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
*定义屏幕元素
*单输入
PARAMETERS: P_NAME LIKE ZLION_TEST-NAME."单输入框
*区间输入
SELECT-OPTIONS:S_AGE FOR TAB1-AGE.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-TTT.
*单选,一般是多个单选组成一组
PARAMETERS:C_1 RADIOBUTTON GROUP G1,
C_2 RADIOBUTTON GROUP G1,
C_3 RADIOBUTTON GROUP G2,
C_4 RADIOBUTTON GROUP G2 DEFAULT 'X'.
*checkbox
PARAMETERS:CH1 TYPE C AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK B2.
LOAD-OF-PROGRAM."程序运行开始
INITIALIZATION."初始化
AT SELECTION-SCREEN OUTPUT."调用屏幕时,假如没有屏幕时这里不会执行
AT SELECTION-SCREEN."屏幕输入后点执行后,假如没有屏幕时这里不会执行
START-OF-SELECTION."选择开始事件,点击运行后执行
END-OF-SELECTION."选择结束事件,一般用于输出
4.2 默认值:default
4.3 必填项:OBLIGATORY
4.4 加空白行
SELECTION-SCREEN:SKIP 1."要加N空白行就SKIP N
4.5 强制同一行
如一组单选同一行
*单选,一般是多个单选组成一组
SELECTION-SCREEN BEGIN OF LINE.
单选1
单选2
SELECTION-SCREEN end of LINE.
4.6 优化4.5
发现4.5同一行后,有如下问题
4.61、靠太近了
解决如下:中间加空格
*单选,一般是多个单选组成一组
SELECTION-SCREEN BEGIN OF LINE.
单选1
SELECTION-SCREEN POSITION 10."表示是10个空格符
单选2
SELECTION-SCREEN end of LINE.
4.62、单选没有文字描述
即使在内文元素中维护了文本还是显示空白
解决如下:强制显示问题
*单选,一般是多个单选组成一组
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:C_1 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 2(5) TEXT-RI1."2(5):文本在本行第2个位置开始展示,文本占用本行5个位置
SELECTION-SCREEN POSITION 10. "表示是10个空格符
PARAMETERS:C_2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN END OF LINE.
异常
4.621、单选框和文字描述重叠了
调整文字描述的初始显示位置
SELECTION-SCREEN COMMENT 3(5) TEXT-RI1."3(5):文本在本行第3个位置开始展示,文本占用本行5个位置
4.622、把上面3(5)调成3(8),检查代码没错误,运行会崩溃
原因是元素位置冲突:
SELECTION-SCREEN COMMENT 3(8) TEXT-RI1.
SELECTION-SCREEN POSITION 10.
TEXT-RI1:3(8)在第3个位置开始,占用位置8,显示完后位置已到11,所以和position 10位置重复了
position xx 至少 > 3(8),即3+8=11,xx必须>11
*单选,一般是多个单选组成一组
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:C_1 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 3(8) TEXT-RI1."3(5):文本在本行第3个位置开始展示,文本占用本行5个位置
SELECTION-SCREEN POSITION 12. "表示是10个空格符
PARAMETERS:C_2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 14(8) TEXT-RI2."
SELECTION-SCREEN END OF LINE.
5、以上完整代码
*定义变量
*TABLES:ZLION_TEST."定义一个表格变量
DATA TAB1 TYPE ZLION_TEST.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
*定义屏幕元素
*单输入
PARAMETERS: P_NAME LIKE ZLION_TEST-NAME DEFAULT '张三'."单输入框
SELECTION-SCREEN ULINE /1(50).
*区间输入
SELECT-OPTIONS:S_AGE FOR TAB1-AGE OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-TTT.
*单选,一般是多个单选组成一组
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:C_1 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 3(5) TEXT-RI1."3(5):文本在本行第3个位置开始展示,文本占用本行5个位置
SELECTION-SCREEN POSITION 11. "表示是10个空格符
PARAMETERS:C_2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 13(8) TEXT-RI2."
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN:SKIP 1."空白行
PARAMETERS:C_3 RADIOBUTTON GROUP G2,
C_4 RADIOBUTTON GROUP G2 DEFAULT 'X'.
*checkbox
PARAMETERS:CH1 TYPE C AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK B2.
LOAD-OF-PROGRAM."程序运行开始
INITIALIZATION."初始化
AT SELECTION-SCREEN OUTPUT."调用屏幕时,假如没有屏幕时这里不会执行
AT SELECTION-SCREEN."屏幕输入后点执行后,假如没有屏幕时这里不会执行
START-OF-SELECTION."选择开始事件,点击运行后执行
WRITE '成功'.
END-OF-SELECTION."选择结束事件,一般用于输出
6、SELECTION-SCREEN用法
6.1、同一行
让屏幕元素位于同一行。
SELECTION-SCREEN BEGIN OF LINE.
屏幕元素1
屏幕元素2
SELECTION-SCREEN END OF LINE.
6.2、屏幕元素之间用空格隔开
这条语句的作用是将该语句后面的第一个Screen element定位在这一行的XX位置,最大值为79。值得注意的是,如果同一行中多个Position语句因为空间不够或Element所占空间重叠,将导致Screen创建时的错误(如上面4.622),无法激活。此时并无具体的提示。只能仔细观察代码。
SELECTION-SCREEN POSITION n."一个空格n=1,两个空格n=2...
6.3、在指定位置显示文本
这条语句的作用是在当前行的指定列位置处输出一段文本,For field则表示文本与某个element 关联,当此语句使用时,可以不必设定屏幕的Text element,系统会自动关联。XX表示位置,Y表示长度,注意,如果长度不足,超常的文字将被截掉。此处似乎还有一个小BUG,当Y小于5时,输出的文字字体会变大一号。不知道为什么。
SELECTION-SCREEN COMMENT XX(Y) TEXT-XXX FOR FIELD XXX.
SELECTION-SCREEN COMMENT /10(30) comm1.
INITIALIZATION.
comm1 ='Auswahlknopfgruppe 1'.
6.4、跳过n空白行.
类似于用WRITE写Report时的SKIP n.也可以跳过多行。
SELECTION-SCREEN SKIP n.
6.5、屏幕上画横线
SELECTION-SCREEN ULINE /1(50).
6.6、内存记忆 留有上次输入过的记录
parameters test(16) type c memory id rid.
6.7、检查输入值 如果不在表中 不用做代码检查了
PARAMETERS p_carr TYPE spfli-carrid OBLIGATORY VALUE CHECK.
6.8 复选框
PARAMETERS: a AS CHECKBOX,
b AS CHECKBOX DEFAULT 'X'.
6.9 单选框
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'.
6.10 单输入
PARAMETERS: P_NAME LIKE ZLION_TEST-NAME DEFAULT '张三'.
6.11 区间输入/必填
SELECT-OPTIONS:区间输入
OBLIGATORY:必填
SELECT-OPTIONS:S_AGE FOR TAB1-AGE OBLIGATORY.