AT SELECTION-SCREEN OUTPUT 用法实例详解编程语言

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

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

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

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

这里写图片描述

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

最后是一个其他属性。这里有一个checkbox,默认是没有勾选的,我们勾选一下:

这里写图片描述

勾选后,显示出一个隐藏的输入框。

我们简单输入一些信息看一下效果:
这里写图片描述

这里写图片描述

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

这个程序的实现用到的两个关键属性:
MODIF ID 表示:哪个画面组件需要改变。
USER-COMMAND 表示:哪个组件改变时发出事件信息。

*&------------------------------------------------------------- 
*& 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.

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/17933.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论