五十一、SAP中使程序结构化,模块化

 一、我们创建3个引用单元,这3个单元里面分别存放定义相关,执行相关和子程序相关的内容

二、将程序中的各部分都拆分到INCLUDE文件中,DEF文件内容如下

三、INC文件内容

四、MAIN文件中写程序执行的逻辑

五、运行程序时,需要激活对应的3个文件,需要选中3个后再点对勾 

六、运行程序

七、效果如下

代码如下:

*&---------------------------------------------------------------------*
*& Report Z_TIANPAN_20190717_HELLO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_TIANPAN_20190717_HELLO LINE-SIZE 76.


* 此程序引用其他单元
*此INCLUDE用于定义变量
INCLUDE Z_TIANPAN_20190717_DEF.
*此INCLUDE用于执行
INCLUDE Z_TIANPAN_20190717_MAIN.
*此INCLUDE用于各种函数
INCLUDE Z_TIANPAN_20190717_INC.
*&---------------------------------------------------------------------*
*& 包含               Z_TIANPAN_20190717_DEF
*&---------------------------------------------------------------------*

*定义数据类型
DATA it_spfli TYPE TABLE OF spfli.
DATA wa_spfli TYPE spfli.

*定义选择屏幕,connid表示航班连接编号
DATA connid TYPE spfli-connid.

SELECTION-SCREEN BEGIN OF BLOCK basic_select WITH FRAME TITLE text-005 .
  SELECT-OPTIONS so_car FOR connid.
SELECTION-SCREEN END OF BLOCK basic_select.

SELECTION-SCREEN BEGIN OF BLOCK other_select WITH FRAME TITLE text-006.
  PARAMETERS pa_int TYPE c AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK other_select.
*&---------------------------------------------------------------------*
*& 包含               Z_TIANPAN_20190717_INC
*&---------------------------------------------------------------------*
FORM GET_DATA USING Apa_int Aso_car TYPE TABLE CHANGING Ait_spfli TYPE TABLE.
*如果选中了,表示国内国际都显示
   IF Apa_int = 'X'.
*   读取数据库中的内容
     SELECT * FROM spfli INTO TABLE Ait_spfli WHERE connid IN Aso_car.
   ELSE.
     SELECT * FROM spfli INTO TABLE Ait_spfli WHERE connid IN Aso_car AND spfli~countryfr = spfli~countryto.
   ENDIF.
ENDFORM.


FORM SHOW_DATA USING Ait_spfli TYPE TABLE.
   FORMAT RESET.
   LOOP AT Ait_spfli INTO wa_spfli.
     IF wa_spfli-countryfr = wa_spfli-countryto.
       WRITE: / sy-vline,AT 2(10) wa_spfli-carrid ,
                sy-vline,AT 14(10) wa_spfli-connid ,
                sy-vline,AT 26(20) wa_spfli-countryfr,
                sy-vline,AT 48(20) wa_spfli-countryto,
                sy-vline,AT 70(5) ICON_CHECKED AS ICON,
                AT 76 sy-vline.
     ELSE.
       WRITE: / sy-vline,AT 2(10) wa_spfli-carrid ,
                sy-vline,AT 14(10) wa_spfli-connid ,
                sy-vline,AT 26(20) wa_spfli-countryfr,
                sy-vline,AT 48(20) wa_spfli-countryto,
                sy-vline,AT 70(5) ICON_INCOMPLETE AS ICON,
                AT 76 sy-vline.
     ENDIF.
   ENDLOOP.
*输出一条线
   ULINE.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               Z_TIANPAN_20190717_MAIN
*&---------------------------------------------------------------------*
*在选择屏幕时候判断
AT SELECTION-SCREEN.
  IF so_car IS INITIAL.
    MESSAGE w000(Z_TIANPAN_201907_MSG).
  ENDIF.

*一个事件,程序加载时执行,相当于初始化
LOAD-OF-PROGRAM.
pa_int = 'X'.

*冻结第一行表头
TOP-OF-PAGE.
*输出一条线
ULINE.
*输出一条横线 Format表示格式化颜色,COL_HEADING颜色可以在F1中对比
FORMAT COLOR COL_HEADING .
*输出数据库内容,sy-vline表示把内容当成字段来输出,左边线占用1个字符,从2开始
WRITE: / sy-vline,AT 2(10) text-001,
         sy-vline,AT 14(10) text-002,
         sy-vline,AT 26(20) text-003,
         sy-vline,AT 48(20) text-004,
         sy-vline,AT 70(5) '国际',
         AT 76 sy-vline.
*输出一条线
ULINE.

*程序执行选择屏幕时被A触发的事件
START-OF-SELECTION.

*调用函数
PERFORM GET_DATA USING pa_int so_car[] CHANGING it_spfli.
PERFORM SHOW_DATA USING it_spfli.
原文地址:https://www.cnblogs.com/tianpan2019/p/11217895.html