文章转自 http://blog.csdn.net/wangjolly/article/details/10716015

SAP-ABAP SELECT-SCREEN 的几个用法

实例1:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETER P_FLEX RADIOBUTTON GROUP ways TYPE c.
SELECTION-SCREEN COMMENT 3(20) text-s30 for field P_FLEX.
SELECTION-SCREEN COMMENT 25(10) text-s31 for field P_PAYM_B.
SELECTION-SCREEN POSITION 38.
PARAMETER P_PAYM_B LIKE PA0015-PABRP MODIF ID wty.
parameters P_PAYY_B LIKE PA0015-pabrj MODIF ID wty.
SELECTION-SCREEN POSITION 57.
SELECTION-SCREEN COMMENT 57(5) text-s32 for field P_PAYM_E.
parameters P_PAYM_E LIKE PA0015-pabrp MODIF ID wty.
parameters P_PAYY_E LIKE PA0015-pabrj MODIF ID wty.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(9) text-s18 for field S_LGART.
SELECT-OPTIONS S_LGART FOR p0014-LGART MODIF ID wty.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
本程序中涉及到几个SELECTION-SCREEN的用法:

1 SELECTION-SCREEN BEGIN OF LINE. ....END OF LINE.
这条语句的作用是让Begin of line 与End of line之间的部分位于同一行。

2 SELECTION-SCREEN POSITION XX.
这条语句的作用是将该语句后面的第一个Screen element定位在这一行的XX位置,最大值为79。值得注意的是,如果同一行中多个Position语句因为空间不够或Element所占空间重叠,将导致Screen创建时的错误,无法激活。此时并无具体的提示。只能仔细观察代码。

3 SELECTION-SCREEN COMMENT XX(Y) TEXT-XXX FOR FIELD XXX.
这条语句的作用是在当前行的指定列位置处输出一段文本,For field则表示文本与某个element 关联,当此语句使用时,可以不必设定屏幕的Text element,系统会自动关联。XX表示位置,Y表示长度,注意,如果长度不足,超常的文字将被截掉。此处似乎还有一个小BUG,当Y小于5时,输出的文字字体会变大一号。不知道为什么。

SELECTION-SCREEN COMMENT /10(30) comm1.

INITIALIZATION.

comm1 ='Auswahlknopfgruppe 1'.

4 SELECTION-SCREEN SKIP 1.
跳过一行。类似于用WRITE写Report时的SKIP 1.也可以跳过多行。

以下是 屏幕上画横线

SELECTION-SCREEN ULINE /1(50).

5.内存记忆 留有上次输入过的记录

parameters test(16) type c memory id rid.

6.检查输入值 如果不在表中 不用做代码检查了

PARAMETERS p_carr TYPE spfli-carrid OBLIGATORY VALUE CHECK.

7.复选框

PARAMETERS: a AS CHECKBOX,
b AS CHECKBOX DEFAULT 'X'.

8.单选框

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'.

9.屏幕动作变化 引起屏幕变化: modif id 起作用

举例:

report a.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME title TEXT-003.
PARAMETERS:
P_1 TYPE C RADIOBUTTON GROUP DATE
DEFAULT 'X'
USER-COMMAND FLAG,"重要*
P_2 TYPE C RADIOBUTTON GROUP DATE,
P_3 TYPE C RADIOBUTTON GROUP DATE,
P_4 TYPE C RADIOBUTTON GROUP DATE
.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME title TEXT-004.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 6(10) TEXT-001.
PARAMETERS: GP_IPDAT TYPE SY-DATUM MODIF ID BL1, "重要*
GP_2 TYPE SY-DATUM MODIF ID BL2 . "重要*
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP 2.

SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 8(60) TEXT-005,
END OF LINE,
BEGIN OF LINE,
COMMENT 8(60) TEXT-006,
END OF LINE.
SELECTION-SCREEN END OF BLOCK BL2.
"在AT SELECTION-SCREEN中循环SCREEN系统变量,把需要修改的画面元素的属性进行相应的修改
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_1 = 'X' AND SCREEN-GROUP1 = 'BL1'.
SCREEN-INPUT = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_2 = 'X' AND SCREEN-GROUP1 = 'BL1'.
SCREEN-INPUT = '1'.
ENDIF.
IF P_3 = 'X' AND SCREEN-GROUP1 = 'BL2'.
SCREEN-ACTIVE = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_4 = 'X' AND SCREEN-GROUP1 = 'BL2'.
SCREEN-ACTIVE = '1'.
ENDIF.

MODIFY SCREEN.
ENDLOOP.

10.ranges 使用方法

ranges s_carrid1 for spfli-carrid.

s_carrid1-sign = 'I'.
s_carrid1-option = 'EQ'.
s_carrid1-low = 'LH'.

append s_carrid1.

11. options限制 输入

SELECT-OPTIONS airline FOR wa_spfli-carrid NO INTERVALS
NO-EXTENSIONdefault g obligatory.”

12. 一行中的若干元素

DATA wa_spfli TYPE spfli.

SELECT-OPTIONS airline FOR wa_spfli-carrid.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION pos_high.
PARAMETERS field(5) TYPE c.
SELECTION-SCREEN END OF LINE.

13 屏幕元素事件 按钮 及 new window USER-COMMAND

TABLES sscrfields.

DATA flag(1) TYPE c.

SELECTION-SCREEN:
BEGIN OF SCREEN 500 AS WINDOW TITLE tit,
BEGIN OF LINE,
PUSHBUTTON 2(10) but1 USER-COMMAND cli1,
PUSHBUTTON 12(10) text-020 USER-COMMAND cli2,
END OF LINE,
BEGIN OF LINE,
PUSHBUTTON 2(10) but3 USER-COMMAND cli3,
PUSHBUTTON 12(10) text-040 USER-COMMAND cli4,
END OF LINE,
END OF SCREEN 500.

AT SELECTION-SCREEN.

MESSAGE i888(sabapdocu) WITH text-001 sscrfields-ucomm.
CASE sscrfields-ucomm.
WHEN 'CLI1'.
flag = '1'.
WHEN 'CLI2'.
flag = '2'.
WHEN 'CLI3'.
flag = '3'.
WHEN 'CLI4'.
flag = '4'.
ENDCASE.

START-OF-SELECTION.

tit = 'Four Buttons'.
but1 = 'Button 1'.
but3 = 'Button 3'.

CALL SELECTION-SCREEN 500 STARTING AT 10 10.

CASE flag.
WHEN '1'.
WRITE / 'Button 1 was clicked'.
WHEN '2'.
WRITE / 'Button 2 was clicked'.
WHEN '3'.
WRITE / 'Button 3 was clicked'.
WHEN '4'.
WRITE / 'Button 4 was clicked'.
WHEN OTHERS.
WRITE / 'No Button was clicked'.
ENDCASE.

14 执行按钮旁边加触点 点击改变屏幕

REPORT demo_sel_screen_function_key.

TABLES sscrfields.

PARAMETERS: p_carrid TYPE s_carr_id,
p_cityfr TYPE s_from_cit.

SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2. “此为两个触点定义

INITIALIZATION.
sscrfields-functxt_01 = 'LH'.
sscrfields-functxt_02 = 'UA'. ”此为两个触点的文本

AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN'FC01'. “默认的 返回key
p_carrid = 'LH'.
p_cityfr = 'Frankfurt'.
WHEN 'FC02'.
p_carrid = 'UA'.
p_cityfr = 'Chicago'.
ENDCASE.

START-OF-SELECTION.
WRITE / 'START-OF-SELECTION'.

15.关于修改 标准status (有待研究)

REPORT demo_sel_screen_status .

DATA itab TYPE TABLE OF sy-ucomm.

PARAMETERS test(10) TYPE c.

AT SELECTION-SCREEN OUTPUT.

APPEND: 'PRIN' TO itab,
'SPOS' TO itab.

CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
TABLES
p_exclude = itab.

16.选择屏幕 事件何时触发(有待研究)实例2

REPORT demo_selection_screen_events MESSAGE-ID sabapdocu.

DATA field1(10) TYPE c.

SELECT-OPTIONS sel_opt1 FOR field1.
SELECTION-SCREEN BEGIN OF BLOCK block1.
PARAMETERS: test1(10) TYPE c,
test2(10) TYPE c.
SELECTION-SCREEN END OF BLOCK block1.

PARAMETERS: r1 RADIOBUTTON GROUP rad1 DEFAULT 'X',
r2 RADIOBUTTON GROUP rad1.

AT SELECTION-SCREEN.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'.

AT SELECTION-SCREEN OUTPUT.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'OUTPUT'.

AT SELECTION-SCREEN ON sel_opt1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON SEL_OPT1'.

AT SELECTION-SCREEN ON test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON TEST1'.

AT SELECTION-SCREEN ON test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON TEST2'.

AT SELECTION-SCREEN ON END OF sel_opt1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON END OF SEL_OPT1'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR sel_opt1-low.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR SEL_OPT1-LOW'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR sel_opt1-high.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR SEL_OPT1-HIGH'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR TEST1'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR TEST2'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_opt1-low.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR SEL_OPT1-LOW'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_opt1-high.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR SEL_OPT1-HIGH'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR TEST1'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR TEST2'.

AT SELECTION-SCREEN ON BLOCK block1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON BLOCK BLOCK1'.

AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON RADIOBUTTON GROUP RAD1'.

选择屏幕的开发知识无非就是围绕这3个点:PARAMETERS SELECT-OPTIONS SELECTION-SCREEN

(一)PARAMETERS:为变量定义输入字段

1、PARAMETERS的全部用法:
P_BUDAT LIKE BKPF-BUDAT OBLIGATORY,
P_CX AS CHECKBOX DEFAULT 'X',

P_BUDAT LIKE BKPF-BUDAT NO DISPLAY,
P_CX AS CHECKBOX,

R1 RADIOBUTTON GROUP RAD1

R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X'

R3 RADIOBUTTON GROUP RAD2

R4 RADIOBUTTON GROUP RAD2

P1 MODIF ID SC1

P2 MODIF ID SC1

P3 MODIF ID SC2

P4 MODIF ID SC2

每种用法的解释:

OBLIGATORY 设定该项伟必输项

CHECKBOX 设为打钩的(复选框),如果没有设定default的值,那么当这个被勾上的时候才为X,有default的话,即默认为勾上的。

NO DISPLAY 设定该项为不显示状态。

RADIOBUTTON 设定单选,有default的,默认这个是选上的,同一个RAD1和RAD2,每个RAD只能选一个值,选中则变量变为X,如果没有设定default,每个组的第一个参数将被激活并分配‘X’。

MODIF ID 将参数分配给修改组,通过在SELECTION-SCREEN OUTPUT事件中进行处理:

AT SELECTION-SCREEN OUTPUT. 结合上面的定义,P1和P2放在一组,P3和P4放在一组,然后P1和P2的INTENSIFIED字段被设为1,效果是高亮度,

LOOP AT SCREEN. 这个可以这样使用。

IF SCREEN-GROUP1 = 'SC1'

SCREEN-INTENSIFIED = '1'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

还有一些不常用的例如: LOWER CASE,有这个lower case,系统就不会把输入值更改为大写。(还没有使用过)

MEMORY-ID 允许你从全局SAP内存使用缺省值。

MATCHCODE OBJECT 匹配代码对象,obj的名称必须是4字符的变量名

(二)SELECT-OPTIONS:选择表

1、SELECT-OPTIONS的全部用法:

S_EBLEN FOR VBRK-EBLEN DEFAULT

S_EBLEN FOR VBRK-EBLEN DEFAULT A TO B

S_EBLEN FOR VBRK-EBLEN OBLIGATORY

S_EBLEN FOR VBRK-EBLEN NO DISPLAY

S_EBLEN FOR VBRK-EBLEN NO-EXTENSION

S_EBLEN FOR VBRK-EBLEN NO-INTERVALS

DEFAULT OBLIGATORY NO-DISPLAY的功能和之前的PARAMETERS的一样。

DEFAULT A TO B 设置里面的LOW 和HIGH字段,例如我要设置默认公司代码从0001到0020。

选择表的里面的字段有:SIGN OPTION LOW HIGH

SIGN 可以是I 和 E I是包括, E是排除的意思

OPTION 可以是:EQ NE GT LE LT CP NP 这个可以查看我的帖子(select-option作为select的条件使用)

NO-EXTENSION,把选择表限制在一行

NO INTERVALS ,把选择表限制伟单值选择

(三)SELECTION-SCREEN: 格式化选择屏幕

1、SELECTION-SCREEN 的全部使用方法:

SELECTION-SCREEN SKIP <N> 该语句产生N个空行,如果只产生一个,可以省略<N>。

SELECTION-SCREEN ULINE <POS(LEN)> 该语句创建下划线,入过没有POS(LEN),则在当前下面创建新行。如果有POS(LEN),则从POS处开始,连续<LEN>个字符。

SELECTION-SCREEN COMMENT 用该选项是必须定义格式(还没有使用过,后续有用到再更新)

SELECTION-SCREEN BEGIN OF LINE 把选择屏幕的几个元素放在一行上。

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN POSITION <POS> 定位元素

SELECTION-SCREEN BEGIN OF BLOCK <block> 创建元素块,里面放选择屏幕语句,block的名字可以在initialization里面维护。

SELECTION-SCREEN END OF BLOCK <blokc>

SELECTION-SCREEN FUNCTION KEY <I> 在选择屏幕的应用工具栏创建按钮,I为1-5,最多只有5个按钮。具体要怎么实现,可以参考另一篇文章(给选择屏幕添加按钮)

SELECTION-SCREEN PUSHBUTTON <pos(len)> <name> USER-COMAND <ucom> [MODIF ID <keyt>] 在选择屏幕上创建按钮,其中<name >是按钮的文本, <ucom>为输入词典字段SSCRFIELDS-UCOMM,必须使用TABLES语句声明表SSCRFIELDS。(后续有用到把具体例子贴上来)

(四) INITIALIZATION : 用于屏幕初始化,例如屏幕的block的名字,屏幕默认字段的一些初始值的填充,工具栏按钮的一些字段的值的填充等等。

(五) AT SELECTION-SCREEN OUTPUT 这个就相当于PBO的功能,可以对选择屏幕字段进行修改(前面也有说到一些功能要放到这里使用的),在选择运行程序的时候,选择屏幕出来之前就先运行这段。例如可以判断用户名,然后选择性的输入一些选择屏幕字段:

at selection-screen output.
if sy-uname ne 'LIUJC_CN'.
loop at screen.
if screen-name+0(7) eq 'S_AUFNR' or
screen-name+2(7) eq 'S_AUFNR'.
screen-invisible = '1'.
screen-active = '0'.
modify screen.
endif.
endloop.
endif.

(六) AT SELECTION-SCREEN ON VALUE-REQUEST FOR <NAME> 这个最常见的就是对upload文件的文件名进行检查的使用:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
field_name = 'C:\'
mask = ',Excel Files,*.xls,*.XLS,'
* STATIC = 'X'
CHANGING
file_name = filename
EXCEPTIONS
mask_too_long = 1
OTHERS = 2.

(七) AT SELECTION-SCREEN 这个比较常用的是在工具栏里面添加了按钮,然后对这个按钮进行操作。

AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM FRM_DOWNLOAD_DATA.
ENDCASE.

ABAP中SELECTION-SCREEN用法相关推荐

  1. ABAP中 PERFORM USING与CHANGING的用法

    ABAP中FORM参数的传递有以下几种方式. 1.引用传递(CALL BY REFERENCE) 传递参数时将参数的地址(ADDRESS)传至子程序中,也就是子程序中的参数变量与外部程序的参数变量共享 ...

  2. SAP ABAP 中一些常用函数

    函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...

  3. sap ABAP中常用函数

    函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...

  4. ABAP中使用浏览器打开网页

    在SAP ABAP中可以在Screen中嵌入Html control打开网页,也可以通过调用本地的IE浏览器打开. 1.在Screen中嵌入Html control的例子,在系统中有,se38:SAP ...

  5. ABAP中的F4帮助怎么用?

    ABAP中的F4帮助怎么用? 当我们在sap的界面上,焦点放到一个字段上的时候,按F4,会出现选择或者搜索的界面,这就是abap中的f4帮助. 有多种实现f4帮助的方法,现在就把我指导的一点点说出来: ...

  6. VB中KeyCode常数用法 VB 按键

    VB中KeyCode常数用法 可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbKeyLButton 0x1 鼠标左键 vbKeyRButton 0x2 鼠标右键 vbKeyCancel ...

  7. ABAP中的F4帮助怎么用

    ABAP中的F4帮助怎么用?  当我们在sap的界面上,焦点放到一个字段上的时候,按F4,会出现选择或者搜索的界面,这就是abap中的f4帮助.    有多种实现f4帮助的方法,现在就把我指导的一点点 ...

  8. VB中KeyCode常数用法

    可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbKeyLButton 0x1 鼠标左键 vbKeyRButton 0x2 鼠标右键 vbKeyCancel 0x3 CANCEL 键 v ...

  9. 【ABAP系列】SAP ABAP中关于commit的一点解释

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP中关于commi ...

最新文章

  1. 关于生成随机数的疑点
  2. 全文检索工具迅搜的安装和体验(可用于自建中文全文搜索引擎)
  3. Oracle中的NULL(一、问题引入)
  4. 个性化背词软件 更新ing(9-4)
  5. C++ Primer 5th笔记(chap 19 特殊工具与技术)两种不可移植的特性之“位域”
  6. 通过实验取证:TCP三次握手的过程
  7. 面试官:前端跨页面通信,你知道哪些方法?
  8. Matlab数理统计工具箱应用简介
  9. c mysql timeout_mysqltimeout知多少
  10. linux服务器怎么连接
  11. 一元线性回归 R语言
  12. 中兴e9000服务器,ZXCTN 9000-E设备系列_ZXCTN 9000-E系列中兴传输设备_中兴设备 - 诺深达华为光端机...
  13. flink-cdc 同步mysql数据到ES时间格式问题。
  14. 问卷调查系统的设计与实现【源码:文档:教程】
  15. web前端——div和span标签
  16. java中写定时任务
  17. iOS 15.1即将上线,iPhone13的“苹果手表解锁”Bug已被修复
  18. 一台电脑上安装两个Tomcat服务器
  19. 文本生成图像简述4——扩散模型、自回归模型、生成对抗网络的对比调研
  20. 在Xcode7中搭建python开发环境

热门文章

  1. asp.net2.0学习指导 菜鸟到中级程序员的飞跃
  2. 【微信测试号实战——01】注册一个属于你自己的微信测试号
  3. 高德地图开发:英文地图的实现方式
  4. 建网站,买域名和虚拟空间总共要多少钱?
  5. 购买腾讯云服务器流程
  6. 服务器安全策略、密码策略、服务器审计
  7. 电脑无法连接mysql_本地电脑无法连接到MySQL
  8. Myeclipse链接sql server 2005是出现Error while performing database login with the sql2005 driver:
  9. 联想微型计算机怎么拆开,联想昭阳e42g拆机步骤
  10. Python3 queue队列类