ABAP选择屏幕

本文详细介绍了ABAP编程中的选择屏幕,包括基本概念、常用语法如PARAMETERS、SELECT-OPTIONS等,以及字体加亮、字体加密、函数键、下拉框等实用功能,旨在帮助开发者更好地理解和应用选择屏幕进行交互设计。

文章目录

前言

一、选择屏幕的基本概念和用途

二、选择屏幕常用语法

1.PARAMETERS 参数说明

2.SELECT-OPTIONS参数说明

3.SCREEN参数说明

4.AT SELECTION-SCREEN参数说明

5.SELECTION-SCREEN用法

三、选择屏幕常用功能

1.字体加亮

​2.字体加密

3.增加FUNCTION KEY按钮

4.设置下拉框

5.控制屏幕字段显示与否

6.选择屏幕搜索帮助

7.选择屏幕做窗口被调用

8.选择屏幕假必输

9.选择屏幕同一行显示复选框或单选按钮

10.选择屏幕多页签

11.选择屏幕写入备注

12.选择屏幕做子屏幕嵌入


前言

ABAP语言是SAP系统中最重要和最常用的编程语言之一,而选择屏幕是ABAP程序中常用的一种交互式屏幕类型。在本文中,我们将介绍基于ABAP的选择屏幕以及相关知识点。


一、选择屏幕的基本概念和用途

选择屏幕是ABAP程序中一种常见的交互式屏幕类型,通过该屏幕可以方便用户进行输入,并获取所需的数据信息。选择屏幕通常由一个或多个参数组成,每个参数都与一个输入域相关联,用户可以在该域中输入需要的值。

选择屏幕通常用于以下场景:

  • 需要从用户那里获取输入数据的时候;
  • 需要对某些特定条件进行筛选,以获取相关的数据信息;
  • 需要对数据进行排序或分组操作。

二、选择屏幕常用语法

1.PARAMETERS 参数说明

单选参数说明
语法说明
DEFAULT 'A'

设置初始值

LENGTH N

定义长度,只适用于C,N,X,P

DECIMALS des

指定小数点位数

MEMORY ID pid

指定SAP内存参数ID

MATCHCODE OBJECT mobj

设定使用Search Help (SE11定义搜索帮助)

MODIF ID        

通过screen-group1为屏幕元素分组

NO-DISPLAY

不显示在画面上

LOWER CASE

区分大小写(默认大写)

OBLIGATORY必须输入
AS CHECKBOX以复选框形式
RADIOBUTTON GROUP以单选按钮形式
VISIBLE LENGTH vlen

设置显示长度

AS LISTBOX VISIBLE LENGTH vlen 

作为下拉框显示
VALUE CHECK 开启系统自动检查

2.SELECT-OPTIONS参数说明

多选参数说明
语法说明
DEFAULT 'A'

初始值

MEMORY ID pid

指定SAP内存参数ID

MATCHCODE OBJECT mobj

设定使用的Search Help

OBLIGATORY

设定必输项

VISIBLE LENGTH vlen

设置显示长度

NO-EXTENSION

隐藏多值输入按钮

NO INTERVALS

隐藏HIGH 输入部分

NO-DISPLAY

不显示在画面上

LOWER CASE

区分大小写(默认大写)

DEFAULT val1 [TO val2] [OPTION opt] [SIGN sgn]

指定默认值

3.SCREEN参数说明

Screen参数说明
字段说明
Name字段名称,如果参数是select-options类型参数,则参数名以LOW与HIGH后缀来区分。
Gruop

选择屏幕元素通过MODIF ID 选项设置GROUP1(对话屏幕通过属性设置),将屏幕元素分为一组,方便屏幕的元素的批量修改

Required

控制文本框、下拉列表屏幕元素的必输性,使用此属性后会忽略OBLIGATORY选项。取值如下:

0:不必输,框中前面也没有钩

1:必输,框中前面有钩,系统会自动检验是否已输入,相当于OBLIGATORY选项

2:不必输,但框中前面有钩,系统不会检查是否已输入,此时需要手动检验

Input

控制屏幕元素(包括复选框、单选框、文本框)的可输性

Active

控制屏幕元素的可见性

4.AT SELECTION-SCREEN参数说明

AT SELECTION-SCREEN参数说明
参数说明
. ... ON field

对SELECTION SCREEN具体的字段进行校验,若错误则重新输入,其他字段变灰

... ON END OF sel

SELECT-OPTION触发的事件,用于整个选择表输入结束后各行的检查

. ... OUTPUT

设置屏幕上画面布局

. ... ON HELP-REQUEST FOR psel_low_high

当光标位于某屏幕字段时,选择的帮助(F1)

... ON RADIOBUTTON GROUP radi单选按钮事件,必须进行整体输入检查
 ... ON BLOCK block

抑制块内输入值

 ... ON VALUE-REQUEST FOR psel_low_high

当光标位于某屏幕字段时,选择的帮助(F4)

5.SELECTION-SCREEN用法

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

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

语法3SELECTION-SCREEN COMMENT XX(Y) TEXT-XXX FOR FIELD XXX.
说明3

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

 

语法4SELECTION-SCREEN SKIP 1.
说明4跳过一行
语法5

SELECTION-SCREEN ULINE /1(50).

说明5屏幕上画横线,第一个参数表示屏幕开始的位置,第二个参数表示长度

参考链接:https://blog.csdn.net/feijibin/article/details/11682725

三、选择屏幕常用功能

1.字体加亮

代码如下:

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  SELECTION-SCREEN COMMENT /2(75) t10 MODIF ID m1.
  PARAMETERS:p_werks LIKE t001w-werks.

SELECTION-SCREEN END OF BLOCK b1.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'M1'.
      screen-intensified = 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

INITIALIZATION.
  t10 = '字体加亮测试'.

 效果示意图:

2.字体加密

代码如下:

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  PARAMETERS: p_pass(45) LOWER CASE OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_PASS'.
      screen-invisible = '1'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

INITIALIZATION.

 效果示意图:

3.增加FUNCTION KEY按钮

代码如下:

TABLES:sscrfields.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  PARAMETERS: p_pass(45) LOWER CASE OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_PASS'.
      screen-invisible = '1'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN.
  IF sscrfields-ucomm = 'FC01'.
    MESSAGE '这是一个按钮' TYPE 'I'.
  ENDIF.

INITIALIZATION.
  CONCATENATE icon_doc_position_proposal: '按钮测试' INTO sscrfields-functxt_01.

 效果示意图:


4.设置下拉框

代码如下:

DATA:gt_vrmval TYPE vrm_values.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  PARAMETERS: p_name TYPE char10 AS LISTBOX VISIBLE LENGTH 15 OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
  gt_vrmval = VALUE #( ( key = '1' text  = '张三' )
                       ( key = '2' text  = '李四' )
                       ).

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_NAME'
      values = gt_vrmval.

 效果示意图:


5.控制屏幕字段显示与否

ABAP选择屏幕字段动态显示是一种非常有用的技术,它可以根据用户的输入或其他条件,动态决定选择屏幕上显示的字段列表,从而实现更加灵活和便捷的数据录入和查询。如在在物流系统中,经常需要根据用户输入或其他条件,动态显示订单管理中的各个字段,以便快速地查询、浏览和编辑订单信息;在人力资源管理系统中,通过动态显示员工管理模块中的字段列表,可以快速地浏览、查询和修改员工的个人信息,如岗位、薪资等。

代码如下:

DATA:gt_vrmval TYPE vrm_values.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  PARAMETERS: p_name TYPE char10 AS LISTBOX VISIBLE LENGTH 15 OBLIGATORY USER-COMMAND usr1.

  PARAMETERS: p_text TYPE char50 MODIF ID m1 DEFAULT '选择屏幕控件显示/隐藏测试'.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'M1'.
      IF p_name = '1'.
        screen-active = '1'.
      ELSE.
        screen-active = '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.


INITIALIZATION.
  gt_vrmval = VALUE #( ( key = '1' text  = '张三' )
                       ( key = '2' text  = '李四' )
                       ).

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_NAME'
      values = gt_vrmval.

 效果示意图:



6.选择屏幕搜索帮助

参考链接:ABAP选择屏幕搜索帮助


7.选择屏幕做窗口被调用

ABAP选择屏幕作为窗口被调用可以实现将一个屏幕作为子屏幕嵌入到另一个屏幕中,从而在视觉上形成一个弹出式的界面。这种方法提供了一个非常方便的方式来修改或增加选择屏幕的布局,同时也提高了程序的用户体验。

代码如下:

*选择屏幕窗口定义
SELECTION-SCREEN BEGIN OF SCREEN 7000 AS WINDOW TITLE TEXT-t01.

  PARAMETERS: p_text TYPE char50 MODIF ID m1.

SELECTION-SCREEN END OF SCREEN 7000.

*屏幕窗口调用
CALL SELECTION-SCREEN 7000 STARTING AT 20 5.
IF sy-subrc <> 0.
  LEAVE SCREEN.
ENDIF.

 效果示意图:


 注:此种调用方式当存在选择屏幕时,会和选择屏幕的标准变式按钮等相互影响。

针对这个问题,我们可以采取以下解决方案:

  1. 使用独立的功能按钮:我们可以在选择屏幕窗口中添加一个独立的功能按钮,用于触发窗口的关闭或其他操作。这样就能够避免和主界面的变式按钮冲突。

  2. 修改变式按钮的代码:我们可以修改主程序中与变式按钮相关的代码,使其在选择屏幕窗口弹出时隐藏或者禁用,待窗口关闭后再显示或启用。

8.选择屏幕假必输

在实际开发过程中,使用选择屏幕假必输的主要目的是为了防止用户漏输入一些必需的参数或信息,从而导致程序出现错误。因此,将某些字段标记为必输字段可以帮助开发人员更好地控制用户输入,并保证程序的正确性和稳定性。

同时,假必输的功能也可以提升用户体验,使用户更加清楚地知道哪些参数是必须输入的,哪些参数是可选的,从而提高界面的友好性和易用性。

假必输和真必输的区别在于,用户是否真正需要输入该字段。

假必输是指设置某个字段为“必输”状态,但实际上该字段并不是用户必须输入的。开发人员可以通过编码逻辑或者其他手段来避免空值或其他异常情况的出现,从而确保程序正常运行。在这种情况下,开发人员更加关注用户对该字段的输入进行了哪些限制,而并非要求必须有数据输入。

真必输则表示该字段必须由用户输入数据,否则不能继续执行下去。当用户没有输入数据或者数据输入不符合规定,系统会提示并阻止用户进一步操作。通常,真必输用于确保程序执行的正确性和完整性,并避免可能导致系统崩溃或错误的用户输入。

总之,在选择屏幕中,假必输更多用于提升用户友好交互体验,真必输用于确保系统稳定性和程序的正常执行。

代码如下:

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

  PARAMETERS: p_werks TYPE werks_d  MODIF ID m1.

SELECTION-SCREEN END OF BLOCK b1.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'M1'.
      screen-required = '2'.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.


START-OF-SELECTION.
  IF p_werks IS INITIAL.
    MESSAGE '工厂必输!' TYPE  'S' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

 效果示意图:



9.选择屏幕同一行显示复选框或单选按钮

 代码如下: 

SELECTION-SCREEN BEGIN OF BLOCK pd1 WITH FRAME TITLE TEXT-001 .
  SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS: p_cb1 RADIOBUTTON GROUP rab1 USER-COMMAND usr1 DEFAULT 'X'.
    SELECTION-SCREEN COMMENT (30) t01.
    PARAMETERS: p_cb2 RADIOBUTTON GROUP rab1.
    SELECTION-SCREEN COMMENT (30) t02.
    PARAMETERS: p_cb3 RADIOBUTTON GROUP rab1.
    SELECTION-SCREEN COMMENT (30) t03.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK pd1 .

INITIALIZATION.
  t01 = '按钮1'.
  t02 = '按钮2'.
  t03 = '按钮3'.

 效果示意图:


10.选择屏幕多页签

 代码如下: 

TABLES: mara,marc.
"定义子屏幕 100
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
  SELECT-OPTIONS: s_matnr FOR mara-matnr.
SELECTION-SCREEN END OF SCREEN 100.

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
  SELECT-OPTIONS: s_werks FOR marc-werks.
SELECTION-SCREEN END OF SCREEN 200.

SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
  SELECT-OPTIONS: s_matkl FOR mara-matnr.
SELECTION-SCREEN END OF SCREEN 300.

"定义一个TAB空间, 取名为MYTAB, 控件高2行, 共分为三个页签.
"三个页签的功能代码分别为push1, push2, push3.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 2 LINES,
TAB (25) button1 USER-COMMAND push1,
TAB (25) button2 USER-COMMAND push2,
TAB (25) button3 USER-COMMAND push3,
END OF BLOCK mytab.

"为TAB控件分配初始化值

INITIALIZATION.
  button1 = '页签1'.
  button2 = '页签2'.
  button3 = '页签3'.
  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 'PUSH3'.
      mytab-dynnr = 300.
      mytab-activetab = 'BUTTON3'.
  ENDCASE.

  "处理各个屏幕的触发

START-OF-SELECTION.
  IF mytab-dynnr = 100.

  ELSEIF mytab-dynnr = 200.

  ELSEIF mytab-dynnr = 300.

  ENDIF.

 效果示意图:




11.选择屏幕写入备注

参考链接https://blog.csdn.net/fengxin_/article/details/107121465


12.选择屏幕做子屏幕嵌入

  代码如下: 

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
  PARAMETERS:p_werks TYPE mard-werks OBLIGATORY.
  SELECT-OPTIONS: s_matnr FOR mard-matnr.
SELECTION-SCREEN END OF SCREEN 100.



 效果示意图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖子写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值