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

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

网上有一段简单的代码可以实现:

SELECTION-SCREEN  BEGIN OF BLOCK 1.
PARAMETERS:     zlist(4)       type C DEFAULT 'CN03' AS
                LISTBOX 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'
    exporting
      id     = 'ZLIST'  "屏幕中的下拉菜单的NAME,下拉菜单选择LISTBOX
      values = itab_list.
  refresh itab_list.
endform.

标准程序里面是这样的一段代码:这里不用像上面那样的操作,然后就可以直接实现下拉菜单的功能了。

SELECTION-SCREEN  BEGIN OF BLOCK 1 WITH FRAME TITLE text-165.
PARAMETERS:
                format       LIKE rfpdo1-febformat DEFAULT 'M' AS
                LISTBOX VISIBLE LENGTH 30 USER-COMMAND bai,
SELECTION-SCREEN  END OF BLOCK 1.

(九)实现屏幕的勾选:

代码如下:

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

(十六)

史上接近最完整的选择屏幕开发知识(针对初学者)(还有下拉菜单的实现)相关推荐

  1. 选下拉框的的值对应上传相应的图片_如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?(excel表格制作选择数据)...

    怎样从多个excel表格中提取数据,做数据分析图呢 1. 数据的.录入.表格的设置,效果如示. 2.如图所示,选进行分析的图据范围 3.如图所示,点击菜单栏目上的"插入",选择&q ...

  2. 标星 2.7w+ 堪称史上最全的微信小程序开发资源汇总

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 2017 年 1 月,微信小程序一夜成名. 微信小程序成名后,各大厂开始效仿,相继出现了支付宝.百度.今日头条.QQ.抖音 ...

  3. 选下拉框的的值对应上传相应的图片_excel表格下拉菜单调用对应数据,如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?...

    如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据? 选中这几列 打开菜单"数据"-"筛选"-"自动筛选"就是了. 另 ...

  4. excel图表配合下拉菜单_在下拉列表中选择Excel仪表盘图表

    excel图表配合下拉菜单 You can make an interactive dashboard in Excel, even if you can't use macros, or prefe ...

  5. 开发一个出生年份的下拉选择框供用户选择_你的下拉式菜单设计对了吗?

    追波范儿(dribbbledesign)------------------------------------------- 下拉菜单主要有两种类型:1. 用于导航的下拉菜单:2. 用于表单的下拉菜 ...

  6. 开发一个出生年份的下拉选择框供用户选择_关于下拉式菜单,这一篇足够了

    下拉菜单主要有两种类型: 1.用于导航的下拉菜单: 2.用于表单的下拉菜单. 在本文中,我们将对以下内容进行介绍: 01 结构剖析 下拉菜单的解剖结构与文本输入字段的解剖结构非常相似. 02 下拉菜单 ...

  7. CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单

     水平&垂直对齐 元素居中对齐 .center {margin: auto;width: 50%;border: 3px solid green;padding: 10px; } 文本居中对齐 ...

  8. vue 下拉框筛选列表_vue下拉菜单选择输入框_带有下拉菜单的Vue搜索输入可提供更多过滤条件...

    vue下拉菜单选择输入框 @ tillhub / vue-search-filter (@tillhub/vue-search-filter) Vue search input with dropdo ...

  9. html选择弹出列表实例,CSS3制作炫酷的下拉菜单及弹起式选单的实例分享

    下拉菜单先直接来看效果是怎样: 当鼠标移到选单之后,下方会展开并有其它说明内容,我这边是把展开的部份加上图片内容,让它有其它不同的变化.因为这样的动作就像人家庙会时会有舞狮从嘴里丢下贺联一样,所以我才 ...

最新文章

  1. Eric Lippert对C#的评论和展望
  2. 用计算机制作演示文稿教案博客,制作演示文稿 教学反思
  3. java两个日期之间的日期_获取两个日期之间的日期形成一个集合
  4. 关于ST02看到SWAP红色的讨论
  5. SAP MM 用户不希望采购订单一旦Release就自动打印输出,如何控制?
  6. 为什么线粒体DNA突变率高?
  7. python手机自动化截图_python UI自动化截图对比
  8. Docker 概念解析
  9. qtcreator下拉列表怎么制作_设置EXCEL动态下拉菜单,只需要一个组合键,新手也能快速掌握...
  10. 无尽包围html5游戏在线玩,小团体激发潜能小游戏突破自我
  11. Linux进阶之路————用户管理
  12. JavaScript学习总结(14)——12个令人惊叹的JavaScript技巧
  13. python抖音涨粉代码_抖音最火表白代码
  14. 6.0 增加京东支付
  15. 计算机职业访谈ppt,大学职业生涯人物访谈.ppt
  16. dva处理_关于dva框架的二三事
  17. 少儿编程c语言 难度,c语言很难学吗
  18. Java Web基础面试题
  19. OSSH免费版华为Portal
  20. 选用pg的优点和缺点

热门文章

  1. 软件测试周刊(第39期):我们必须全力以赴,同时又不抱持任何希望。
  2. 计算机网络 蔡开裕 PDF,浅议《计算机网络技术与应用》课程教学法论文.doc
  3. 14、Spring Clou14——路由配置细节
  4. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
  5. 自建一个网站要多少钱
  6. Word 如何从任意页开始显示页码
  7. 计算机监控系统软件设计,计算机监控软件设计.doc
  8. lisp 河道水面线计算_美国工程兵团河道水面线计算CAD(HEC-RAS)
  9. Get the 1,000- Foot View
  10. oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件