ABAP开发学习小记——REPORT程序相关事件

多表取数

1. A表从数据库取数,到内表
B表从数据库取数,到内表
2. 循环A表内表,根据对应关键字读取B表
读取成功
        赋值
不成功
3. 赋值到总表

SELECT zcode zname sex zschool weight
         FROM zstudent_qb_02
         INTO CORRESPONDING FIELDS OF TABLE gt_student
         WHERE zcode IN s_zcode
         AND zschool IN s_school
         AND zname IN s_ZNAME
         AND sex IN r_sex.
IF gt_student IS NOT INITIAL.
    SELECT zschool zsname
           FROM ZSCHOOL_qb_01
           INTO CORRESPONDING FIELDS OF TABLE gt_SCHOOL
              FOR ALL ENTRIES IN gt_student
           WHERE zschool = gt_student-zschool.
    SORT gt_school BY zschool.
ENDIF.
LOOP AT gt_student INTO gs_student.
    CLEAR gs_TOTAL.
    MOVE-CORRESPONDING gs_student TO gs_total.
    MOVE gs_student-weight TO gs_total-zweight.
    "WEIGHT 字段不同只能单独传,
    "或者在定义时就将total表的字段定义成引用的数据库表中的字段
    READ TABLE gt_SCHOOL INTO gs_school
         WITH KEY zschool = gs_total-zschool BINARY SEARCH.
    IF sy-subrc = 0."读取到
      gs_total-zsname = gs_school-zsname.
    ELSE."读取失败
      CONTINUE."终止当前循环,并执行下一次
    ENDIF.
    APPEND gs_total TO gt_total.
  ENDLOOP.

程序模块化

INCLUDE 
包含程序。包含程序不能被单独调用,必须被其他程序包含,相
当于此程序代码完全复制在当前程序中。
- 注意声明部分与包含程序的位置。
INCLUDE...TOP
INCLUDE..FORM.
PERFORM/FORM
- Subroutines,子程序,子例程,在程序中形成重用模块,可以进
行多次重复调用
- 对子程序的调用
 PERFORM<子程序名称>TABLES... USING....CHANGING....
- 子程序代码块
FORM<子程序名称>TABLES ...[TYPEtype] USING...[TYPE type] CHANGING...
[TYPE type].
ENDFORM.

表头事件

TOP-OF-PAGE
这个事件是在报表程序里输出自定义的表头用的,在新的一页刚开始遇到write语句的时候这个事件块就会执行一次
第一次执行:遇到程序中的第一个write语句时,跳转到TOP-OF-PAGE事件执行,执行完毕后返回执行write语句
隐藏默认表头,在REPORT程序第一行进行设置:
REPORT program NO STANDARD PAGE HEADING

定义子例程

TOP-OF-PAGE.
  PERFORM top_of_page.

FORM top_of_page .
  FORMAT COLOR 3 ON.
  WRITE: /(92) '学生信息表' CENTERED.
  FORMAT COLOR 3 OFF.
  WRITE: /1(92) sy-uline.
  FORMAT COLOR 6 INVERSE ON.
  WRITE: /1 sy-vline NO-GAP, (10) '学号' NO-GAP CENTERED,"有输出长度CENTERED才有用
            sy-vline NO-GAP, (20) '姓名' NO-GAP CENTERED,
            sy-vline NO-GAP, (5)  '性别' NO-GAP CENTERED,
            sy-vline NO-GAP, (20) '体重(KG)' NO-GAP CENTERED,
            sy-vline NO-GAP, (10) '学校' NO-GAP CENTERED,
            sy-vline NO-GAP, (20) '校名' NO-GAP CENTERED,
            sy-vline NO-GAP.
  WRITE: /1(92) sy-uline.
  FORMAT COLOR 6 INVERSE OFF.
ENDFORM.

次级表单的表头

TOP-OF-PAGE DURING LINE-SELECTION.
  CASE sy-ucomm.
    WHEN 'SORTUP' OR 'SORTDOWN'.
      PERFORM top_of_page.
    WHEN OTHERS.
      FORMAT COLOR 3 ON.
      WRITE:/ '详细信息'.
      FORMAT COLOR 3 OFF.
  ENDCASE.

设置按钮和标题

END-OF-SELECTION."输出
  GT_STATUS = 'DOWNLOAD'.
  APPEND GT_STATUS.

  SET PF-STATUS 'STATUS' EXCLUDING GT_STATUS."使用GUI STATUS
                        "  EXCLUDING GT_STATUS可以不包含...
  SET TITLEBAR 'TITLE' WITH ' 学生信息' '学校信息'.

鼠标点击事件

AT LINE-SELECTION.
  PERFORM line_select.

FORM line_select.
  DATA: lv_field(30),
        lv_value(30).
*  获取光标位置
  GET CURSOR FIELD lv_field "字段名GS_TOTAL-ZSCHOOL
             VALUE lv_value."字段值
  "判断是否是学校id字段
  CONDENSE lv_value.
  IF lv_field = 'GS_TOTAL-ZSCHOOL'
    OR lv_field = 'GS_TOTAL-ZSNAME'.
    "取数从学校表
    SELECT SINGLE *
      FROM zschool_qb_01
    "INTO ... 默认取到table语句结构体中
      WHERE zschool = lv_value
        OR zsname = lv_value.
    "取数是否成功
    IF sy-subrc = 0."成功
      "显示学校的详细信息
      WRITE: / '学校编号:', zschool_qb_01-zschool,
             / '学校名称:', zschool_qb_01-zsname,
             / '学校地址:', zschool_qb_01-zadd.
    ELSE."不成功
      "消息
      MESSAGE i003 WITH '该学校信息不完善!'.
    ENDIF.
  ELSEIF
    lv_field = 'GS_TOTAL-ZCODE'
    OR lv_field = 'GS_TOTAL-ZNAME'
    OR lv_field = 'GS_TOTAL-SEX'
    OR lv_field = 'GS_TOTAL-WEIGHT'.
    SELECT SINGLE *
      FROM ZSTUDENT_qb_02
    "INTO ... 默认取到table语句结构体中
      WHERE zcode = lv_value
        OR zname = lv_value.
    "取数是否成功
    IF sy-subrc = 0."成功
      "显示学生的详细信息
      WRITE: / '学生编号:', zstudent_qb_02-zcode,
             / '学生姓名:', zstudent_qb_02-zname,
             / '学生体重:', (5) zstudent_qb_02-weight,'KG',
             / '学生性别:', zstudent_qb_02-sex.
    ELSE."不成功
      "消息
      MESSAGE i003 WITH '不存在可用信息'.
    ENDIF.
  ENDIF.

初始化事件

LOAD-OF-PROGRAM
用于执行程序加载
当执行一个1类型(可执行程序),M类型(Module Pool),F类型(Function Group),S类型 (Subroutine Pool)程序时,SAP系统自动将程序加载至内存中时,自动调用这个事件
默认执行,不需coding,执行完毕后执行INITIALIZATION

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值