欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

PARAMETERS、SELECTION OPTIONS和SELECTION SCREEN的全部用法

发布时间:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PARAMETERS、SELECTION 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 RAD1R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X'R3 RADIOBUTTON GROUP RAD2R4 RADIOBUTTON GROUP RAD2P1 MODIF ID SC1P2 MODIF ID SC1P3 MODIF ID SC2P4 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 .

(三)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  POSITION  <POS>    定位元素

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

SELECTION-SCREEN END OF BLOCK    <block>

 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的功能,可以对选择屏幕字段进行修改(前面也有说到一些功能要放到这里使用的),在选择运行程序的时候,选择屏幕出来之前就先运行这段,还有就是选择屏幕输入条件之后按下回车或者是执行后,也会进入这个event。

             例如可以判断用户名,然后选择性的输入一些选择屏幕字段:

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的功能,可以对选择屏幕字段进行修改(前面也有说到一些功能要放到这里使用的),在选择运行程序的时候,选择屏幕出来之前就先运行这段,还有就是选择屏幕输入条件之后按下回车或者是执行后,也会进入这个event。

             例如可以判断用户名,然后选择性的输入一些选择屏幕字段:

                      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.

 

                例如可以判断输入的某个字段是某个值的时候添加屏幕字段(注意要按回车):

                例如,当我输入company code为某个值的时候,我需要添加一个选择字段以及部分check box。首先,这些要添加的选择屏幕内容都是一样要预先设定好,然后通过at selection-screen output 设定好逻辑即可:

                定义:      s_bukrs1 FOR t001-bukrs NO INTERVALS MODIF ID m4.

                逻辑:     LOOP AT SCREEN.                         (这里可以用group,也可以用name。关于SCREEN的值如何去定义,参考本博客的另一篇文章:SCREEN的理解)

                                         CASE screen-group1.

                                         WITH 'M4'.

                                                  IF 'SG01' IN s_bukrs.

                                                        MOVE '1' TO screen-active.


 (六) 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.



(八)选择屏幕下拉菜单的实现:



<span style="font-family:Arial;"><span style="font-size: 14px; line-height: 26px;">SELECTION-SCREEN BEGIN OF BLOCK 1. PARAMETERS: zlist(4) type C DEFAULT 'CN03' ASLISTBOX VISIBLE LENGTH 30. SELECTION-SCREEN END OF BLOCK 1.INITIALIZATION.at selection-screen on value-request for zlist.perform selectlist changing zlist. form selectlist changing zlist.data itab_list type vrm_values.data wa_list like line of itab_list.wa_list-key = '01'.wa_list-text = '入库单'.append wa_list to itab_list.wa_list-key = '02'.wa_list-text = '移库单'.append wa_list to itab_list.wa_list-key = '03'.wa_list-text = '出库单'.append wa_list to itab_list.wa_list-key = '04'.wa_list-text = '销售出库单'.append wa_list to itab_list.wa_list-key = '05'.wa_list-text = '销售退货单'.append wa_list to itab_list.call function 'VRM_SET_VALUES'exportingid = 'ZLIST' "屏幕中的下拉菜单的NAME,下拉菜单选择LISTBOXvalues = itab_list.refresh itab_list. endform.标准程序里面是这样的一段代码:这里不用像上面那样的操作,然后就可以直接实现下拉菜单的功能了。 SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-165. PARAMETERS:format LIKE rfpdo1-febformat DEFAULT 'M' ASLISTBOX VISIBLE LENGTH 30 USER-COMMAND bai, SELECTION-SCREEN END OF BLOCK 1.</span><span style="font-size: 14px; line-height: 26px; white-space: normal;"> </span></span> (九)实现屏幕的勾选:


代码如下:Post invoice的代码如下:PARAMETERS: P_CHK1 AS CHECKBOX USER-COMMAND SELECT.SELECTION-SCREEN: COMMENT 3(12) TEXT-073 MODIF ID B4 .confirmed for的代码如下:SELECTION-SCREEN: COMMENT 1(13) TEXT-053 FOR FIELD P_INFO MODIF ID B4.SELECTION-SCREEN: POSITION 14.PARAMETERS: P_INFO(2) TYPE C default '0' MODIF ID B4..SELECTION-SCREEN: COMMENT 19(4) TEXT-054 MODIF ID B4. (十)实现屏幕可以影藏部分选择屏幕字段:


1、定义展开按钮 SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON 1(4) but1 USER-COMMAND button1 VISIBLE LENGTH 2. SELECTION-SCREEN COMMENT 6(20) com1. SELECTION-SCREEN END OF LINE.2、定义展开的selection-screen SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001. SELECT-OPTIONS:s_lvorm FOR marc-lvorm MODIF ID bl1,s_mstae FOR mara-mstae MODIF ID bl1,s_mmsta FOR marc-mmsta MODIF ID bl1,s_beskz FOR marc-beskz MODIF ID bl1,s_sobsl FOR marc-sobsl MODIF ID bl1,s_mtart FOR mara-mtart MODIF ID bl1. SELECTION-SCREEN END OF BLOCK b2 .3、点击那个展开button的时候赋值 AT SELECTION-SCREEN. CASE sy-ucomm.WHEN 'BUTTON1'.IF but1 = '@K1@'.WRITE icon_data_area_collapse AS ICON TO but1.com1 = ''.ELSE.WRITE icon_data_area_expand AS ICON TO but1.com1 = 'Material Fields'.ENDIF.ENDCASE.4、展开屏幕 AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.IF but1 = '@K1@' AND screen-group1 = 'BL1'.screen-active = 0.MODIFY SCREEN.ENDIF.ENDLOOP.

(十一)调用选择屏幕

我们另外定义一个选择屏幕500

   SELECTION-SCREEN BEGIN OF SCREEN 500.

  SELECTION-SCREEN BEGIN OF LINE.

  SELECT-OPTIONS:S_BUKRS6 FOR BKPF-BUKRS NO INTERVALS .

  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN END OF SCREEN 500.

修改START-OF-SELECTION事件为:

  CALL SELECTION-SCREEN 500.

调用了这个选择屏幕之后,点击按钮,这里不是用user_command或者是在屏幕500里面再去设一个module,直接在call selection-screen 500后面添加执行代码,当输入选择屏幕只会,点击执行就会执行后面的代码。


(十二)调用子屏幕call subscreen

(十三)选择屏幕放多个tab:

本例实现如上图效果,示例代码如下: REPORT Z_LPF_SCREEN_TAB. TABLES: MARA,SSCRFIELDS. selection-screen function key 1. SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. 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.SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.PARAMETERS: MAT2 LIKE MARA-MATNR.SELECTION-SCREEN END OF SCREEN 200.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.INITIALIZATION.MOVE 'BUTTON' TO SSCRFIELDS-FUNCTXT_01.BUTTON1 = 'TAB1'.BUTTON2 = 'TAB2'.MYTAB-PROG = SY-REPID.MYTAB-DYNNR = 100.AT SELECTION-SCREEN.CASE SY-UCOMM.WHEN 'PUSH1'.MYTAB-DYNNR = 100.MYTAB-ACTIVETAB = 'BUTTON1'.WHEN 'PUSH2'.MYTAB-DYNNR = 200.MYTAB-ACTIVETAB = 'BUTTON2'.WHEN OTHERS.ENDCASE. (十四)实现下面这个功能:


在AT SELECTION-SCREEN OUTPUT.加入这段代码: CASE 'X'.WHEN R_RFC.SET_SCREEN 'MD1'. WHEN R_PROG.SET_SCREEN 'MD2'.WHEN R_JOB.SET_SCREEN 'MD3'.WHEN R_HTTP.SET_SCREEN 'MD4'.WHEN OTHERS.ENDCASE.其中MD1是这样定义的: SELECT-OPTIONS :S_FUNC FOR ZRFCSRVR-FUNC_NAME NO INTERVALS MODIF ID MD1. (十五)跟上面这个类似的实现:



代码: 屏幕设计: SELECTION-SCREEN BEGIN OF BLOCK BLK_1 WITH FRAME TITLE TEXT-001. PARAMETERS: B_DIS RADIOBUTTON GROUP OPT DEFAULT 'X' user-command uc_udp,B_UDP RADIOBUTTON GROUP OPT . SELECTION-SCREEN END OF BLOCK BLK_1.SELECTION-SCREEN BEGIN OF BLOCK BLK_2 WITH FRAME TITLE TEXT-002. PARAMETERS:P_U01 AS CHECKBOX MODIF ID UDP,P_U02 AS CHECKBOX MODIF ID UDP,P_U03 AS CHECKBOX MODIF ID UDP,P_U04 AS CHECKBOX MODIF ID UDP, SELECTION-SCREEN END OF BLOCK BLK_2.具体在AT-SELECTION-SCREEN 里面的实现: AT SELECTION-SCREEN OUTPUT.PERFORM AT_SELECTION.FORM AT_SELECTION .LOOP AT SCREEN.CASE screen-group1.WHEN 'UDP'.IF B_UDP EQ 'X'.screen-active = 1.screen-invisible = 0.ELSE.screen-active = 0.screen-invisible = 1.ENDIF.ENDCASE.modify screen.ENDLOOP. ENDFORM. " AT_SELECTION































































总结

以上是生活随笔为你收集整理的PARAMETERS、SELECTION OPTIONS和SELECTION SCREEN的全部用法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。