ABAP 报表

这篇博文将对报表开发中一些小点进行总结,涉及到的内容不太全面。后续会更新采购订单报表的开发过程来演示整个完整流程,会涉及到全局类型定义、结构体、报表开发、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-SELECTIONEND-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这么说。可以看看,增加了解。后续涉及到的报表开发会涉及到这些东西,可以关注一下博主,马上更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值