这篇博文将对报表开发中一些小点进行总结,涉及到的内容不太全面。后续会更新采购订单报表的开发过程来演示整个完整流程,会涉及到全局类型定义、结构体、报表开发、SMARTFORMS有关内容。
一、MESSAGE消息类。
1、通过事务码SE91创建消息类。
输入消息类名称,点击创建。后续输入必输项(每个系统配置可能不一样,有些没有必输项)点击保存,选择分配包就行。
2、添加MESSAGE。
选择消息页签,在对应的号后面填写消息。完成后保存即可。
3、使用消息类。
a、在REPORT里添加声明,后续可不再声明。
b、在使用消息的时候进行声明。缺点:每次使用的时候都需要进行声明。
c、使用。这里只说明底部提示,还有弹窗、程序报错等形式可以去进行了解。按照自己需要进行组合。
S-成功信息 E-失败信息 S/E+消息编号 为消息最后的样式
d、不是每次都先准备好消息类再进行使用的,这个时候可以先输入代码,双击消息类名/编号进行创建。点击是即可。
e、带参数的消息——with。
在消息设置里面,在所需要的位置添加&n。程序代码中用WITH 参数的形式进行传参。
1)消息000:
运行后结果:
2)消息001:
运行后结果:
二、获取用户输入。
1、PARAMETERS获取单值。
定义变量。在添加OBLIGATORY关键字后,该字段为必输的,添加DEFAULT关键字后为该变量定义默认值,添加MATCHCODE OBJECT+搜索帮助名之后可为该字段添加搜索帮助(若在数据库定义表时为该字段添加过搜索帮助,则可直接使用)。
PARAMETERS :
p_1 TYPE string,
p_2 TYPE c LENGTH 15 OBLIGATORY,"必输
p_3 TYPE c LENGTH 20 DEFAULT 'VIA',"默认值VIA
*搜索帮助 系统自带了很多搜索帮助*
p_4 TYPE zvia_stu-schid, "表名-字段名(需要添加过搜索帮助的)
p_5 TYPE zde_via_schid MATCHCODE OBJECT zhp_via_schid, "数据元素+MATCHCODE OBJECT+搜索帮助名
p_6 TYPE string NO-DISPLAY,"若需要使用变量,但是不需要用户进行输入,可用NO-DISPLAY屏幕不会进行显示
p_7 TYPE string DEFAULT '不会显示值' NO-DISPLAY.
运行后:
2、SELECT-OPTIONS获取多值。
定义变量。需要先声明所涉及到的表。变量名 FOR 表名-字段名。在添加OBLIGATORY关键字后,该字段为必输的,添加NO INTERVALS关键字后不可以添加HIGH值,添加NO-EXTENSION之后表示没有复选框,不可以添加额外条件。
TABLES :
zvia_sch.
SELECT-OPTIONS :"定义的都是内表 MATCHCODE OBJECT 可增加搜索帮助
s_1 FOR zvia_sch-schid,"for 表名-字段
s_2 FOR zvia_sch-schid OBLIGATORY,"OBLIGATORY在末尾表示必输
s_3 FOR zvia_sch-schid NO INTERVALS,"不显示HIGH值
s_4 FOR zvia_sch-schid NO-EXTENSION."不显示复选框即不可以添加额外的限制条件
运行后:
3、CHECKBOX选择框。
变量名 TYPE C AS CHECKBOX.
变量名 TYPE C RADIOBUTTON GROUP 组别 (DEFAULT 'X'),
变量名 TYPE C RADIOBUTTON GROUP 组别,
变量名 TYPE C RADIOBUTTON GROUP 组别.
与HTML中的radio和checkbox有相似之处都可以用作选择。其中若需要多个选项但是单选则使用RADIOBUTTON GROUP,若是需要多选的话可以使用多个AS CHECKBOX。选中的时候为'X'。DEFAULT可以规定默认值。
*CHECKBOX*
PARAMETERS :
"可选可不选
c_1 TYPE c AS CHECKBOX,
"单选 RADIOBUTTON
c_2 TYPE c RADIOBUTTON GROUP g1 DEFAULT 'X', "默认值 只能是X
c_3 TYPE c RADIOBUTTON GROUP g1,
c_4 TYPE c RADIOBUTTON GROUP g1.
运行后:
三、INITIALIZATION赋初值。
因为INITIALIZATION一定出现在定义变量之后,所以就算在定义变量的时候赋过初值,也会被覆盖掉,变成INITIALIZATION赋的值。请注意这里如何给SELECT-OPTIONS定义的s_1赋值的。SELECT-OPTIONS定义的是带表头的内表,可以在调试的时候加断点看它的结构。
*给PARAMETER定义的p_1赋值 INITIALIZATION语句一定出现在定义变量之后*
*给SELECT-OPTIONS定义的s_1赋值 SELECT-OPTIONS定义的是带表头的内表 需要看结构(可以通过调试看)进行定义*
*所以最初定义变量用VALUE赋的初值就无效了*
PARAMETERS : p_1 TYPE string.
TABLES : zvia_sch.
SELECT-OPTIONS : s_1 FOR zvia_sch-schid.
INITIALIZATION.
p_1 = 'Peter'.
* s_1的结构: sign[C(1)] option[C(2) low[N(4)] high[N(4)]] *
s_1-sign = 'I'.
s_1-option = 'BT'.
s_1-low = 0001.
s_1-high = 0004.
APPEND s_1.
运行结果:
四、SELECTION-SCREEN划分屏幕。
SELECTION-SCREEN BEGIN OF BLOCK xx WITH FRANE TITLE TEXT-xxx.
屏幕中所用的字段定义.
SELECTION-SCREEN END OF BLOCK xx .
双击TEXT-xxx可以改变屏幕的标题,不定义是空白,自行尝试。
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS : p_1 TYPE C.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS : p_2 TYPE C.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
PARAMETERS : p_3 TYPE C.
SELECTION-SCREEN END OF BLOCK b3.
运行结果:
五、AT SELECTION-SCREEN屏幕检查。
AT SELECTION-SCREEN.
判断条件/子例程.
选择屏幕输入值有变化的时候触发,后面接判断语句或者子例程,在出现输入有问题的时候可以使用消息类来显示提示信息。
举个例子,后续的博文中会进行更新。
AT SELECTION-SCREEN.
*检查性别 只能是M/F或者初始值否则报错*
IF p_g <> 'F' AND p_g <> 'M' AND p_g IS NOT INITIAL.
MESSAGE e002 WITH p_g.
ENDIF.
六、START-OF-SELECTION & END-OF-SELECTION读取数据事件。
START-OF-SELECTION.
SELECT语句/子例程.
END-OF-SELECTION.
输出显示语句/子例程.
举个例子,后续的博文中会进行更新。
START-OF-SELECTION.
DATA lt_stu TYPE TABLE OF zvia_stu.
IF p_g IS INITIAL.
SELECT *
FROM zvia_stu
INTO TABLE lt_stu.
ELSE.
SELECT *
FROM zvia_stu
INTO TABLE lt_stu
WHERE gender = p_g.
ENDIF.
*读取完毕,输出数据*
END-OF-SELECTION.
cl_demo_output=>display( lt_stu ).
七、总结
本来对于各种事件的意义不太理解,明明按照顺序编写代码就可以了,为什么要多一些检查、输入输出的事件。GPT这么说。可以看看,增加了解。后续涉及到的报表开发会涉及到这些东西,可以关注一下博主,马上更新。