AT SELECTION-SCREEN OUTPUT 用法实例

在SAP中,报表程序基本离不开画面程序设计,也就是屏幕设计。

简单来说,SAP屏幕中的各种button都有类似于控件的属性,这里我们简单介绍一下如何通过单选按钮radio button来控制其他组件是否显示或者可否输入等。

下面是一个简单的小例子程序。

首先我们默认的单选按钮是自制生产,这时下面的物料信息框中的两个输入框都是可以输入的,而后面的采购信息框中的采购订单号则无法输入(如图所示)。
在SAP中,报表程序基本离不开画面程序设计,也就是屏幕设计。

简单来说,SAP屏幕中的各种button都有类似于控件的属性,这里我们简单介绍一下如何通过单选按钮radio button来控制其他组件是否显示或者可否输入等。

下面是一个简单的小例子程序。

首先我们默认的单选按钮是自制生产,这时下面的物料信息框中的两个输入框都是可以输入的,而后面的采购信息框中的采购订单号则无法输入(如图所示)。

在这里插入图片描述
–然后我们选择外部采购,这时对应的采购订单号可以输入,但是物料信息则无法输入。

在这里插入图片描述
最后是一个其他属性。这里有一个checkbox,默认是没有勾选的,我们勾选一下:
!
](https://img-blog.csdnimg.cn/20190628151445198.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ZlbkppdVhpYW5n,size_16,color_FFFFFF,t_70)

简单的控制效果就是这样,基本上我们可以根据不同的逻辑控制各个屏幕组件的属性,常用的的是输入输出,显示隐藏的等等,下面我们贴出这个小例子程序的代码:

这个程序的实现用到的两个关键属性:
MODIF ID 表示:哪个画面组件需要改变。
*&-------------------------------------------------------------
*& Report …
*&
*&-------------------------------------------------------------

REPORT xxx NO STANDARD PAGE HEADING.

“选择屏幕设计,第一个框架:”
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN COMMENT 1(20) TXT01.

PARAMETERS:
PA TYPE C RADIOBUTTON GROUP G1 DEFAULT ‘X’ USER-COMMAND FLAG ,“这里很关键,user-command xxx 表示这个组件改变时发出事件信息。”
PB TYPE C RADIOBUTTON GROUP G1.
SELECTION-SCREEN END OF BLOCK B1.

“第二个框架”
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN:BEGIN OF LINE ,
COMMENT 1(8) TXT02 FOR FIELD P1 .
PARAMETER P1 TYPE C LENGTH 20 MODIF ID IN2.
“这里是第二个关键,使用modif id xxx,注意这里不是modify 不要混淆,还有id名最多为三位,比如inp,如果超过三位会报错。P1即物料号,这里ID IN2。”
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN:BEGIN OF LINE,
COMMENT 1(8) TXT03.
PARAMETER P2 TYPE C LENGTH 30 MODIF ID IN2.
“P2也就是物料描述,和P1一样modif id 为IN2”
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.

“第三个框架”
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TXT04 FOR FIELD P3.
PARAMETER P3 TYPE C LENGTH 20 MODIF ID IN3.“这里ID 为IN3。”
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B3.

“第四个框架”
SELECTION-SCREEN BEGIN OF BLOCK B4 WITH FRAME TITLE TEXT-004.
PARAMETER PC AS CHECKBOX USER-COMMAND MARK.“选择框”
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TXT05.
PARAMETER P4(20) TYPE C MODIF ID IN4 .“ID:IN4”
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B4.

INITIALIZATION.
TXT01 = ‘请选择物料类型:’.
TXT02 = ‘物料号:’.
TXT03 = ‘物料描述:’.
TXT04 = ‘采购订单号:’.
TXT05 = ‘备注’.

“如果说上面是给控制和被控制组件打上标记,这里就是逻辑控制实现控制组件改变被控制组件的属性。”

AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.“SCREEN为SAP系统结构,可以在se11中查看”
IF SCREEN-GROUP1 = ‘IN2’ AND PA <> ‘X’.
SCREEN-INPUT = 0.“input属性为1是可输入,0是无法输入。”
CLEAR: P1,P2.
ENDIF.

IF SCREEN-GROUP1 = 'IN3' AND PB <> 'X'.
  SCREEN-INPUT = 0.
  CLEAR: P3.
ENDIF.

IF SCREEN-GROUP1 = 'IN4' AND PC <> 'X'.
  SCREEN-ACTIVE = 0."同理,ACTIVE为1显示,为0隐藏。"
  CLEAR:P4.
ENDIF.

MODIFY SCREEN."提交修改后的属性"

ENDLOOP.
“at selection-screen output,是一个动态的内容,也就是说当我们改变屏幕元素的时候,这里相应跟着改变。”

AT SELECTION-SCREEN.“提交错误消息”
CASE SY-UCOMM.

WHEN 'ONLI'. "当点击执行时。"

  IF PA = 'X' .
    IF P1 IS INITIAL OR P2 IS INITIAL.
      MESSAGE '请填写相关物料信息!' TYPE  'E'.
    ENDIF.
  ELSEIF PB = 'X'.
    IF P3 IS INITIAL.
      MESSAGE '请填写采购订单号!' TYPE  'E'.
    ENDIF.

  ELSEIF PC = 'X'.
    IF P4 IS INITIAL.
      MESSAGE '请填写备注内容!' TYPE   'E'.
    ENDIF.
  ENDIF.

ENDCASE.

START-OF-SELECTION.

PERFORM DISPLAY.

END-OF-SELECTION.

“这是简单的一个展示表格,不多赘述。”
FORM DISPLAY.
DATA:STR1 TYPE STRING,
STR2 TYPE STRING,
STR3 TYPE STRING,
STR4 TYPE STRING.

IF PA = ‘X’ .
STR1 = P1.
STR2 = P2.
STR3 = ’ 无’.
STR4 = P4.
ELSEIF PB = ‘X’.
STR1 = ‘WG0000000001’.
STR2 = ‘外购物料’.
STR3 = P3.
STR4 = P4.

ENDIF.

write:/30(20) ‘物料信息表’ centered .
uline:/10(100)."画横线
write:/1(9) ‘’ intensified color = 0, at 10 sy-vline,
11(20) ‘物料号’ , at 31 sy-vline,
32(30) ‘物料描述’, at 63 sy-vline,
64(20) ‘采购订单’, at 85 sy-vline,
86(20) ‘备注’, at 109 sy-vline.

uline:/10(100).

write:/1(9) ‘’ intensified color = 0, at 10 sy-vline,
11(20) str1, at 31 sy-vline,
32(30) str2, at 63 sy-vline,
64(20) str3, at 85 sy-vline,
86(20) str4, at 109 sy-vline.

uline:/10(100).

ENDFORM.

这样基本的逻辑控制我们可以经常用到,以此为基础再深入研究。分享给大家互相学习进步,有不对的地方希望各位博友指正。有更好的建议或写法也可以分享出来。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值