*第一种 :普通模板
*1.定义程序备注
*---------------------------------------------------------------------*
* 程序名称 : ZPWH_TEMPLATE
* 标 题 : xxxxxxxs报表
* 创 建 者 : xxx
* 创建时间 :
* 请 求 号 :
* 描 述 : 查看XXXXXXX
*---------------------------------------------------------------------*
* 变更记录:
* 修改日期 开发人员 请求号 描述
* -------- -------- ------------- ---------------------------------*
*
*---------------------------------------------------------------------*
REPORT ZPWH_TEMPLATE.
*2.先定义变量常量表
*定义常量
CONSTANTS : C_INT VALUE 1.
*定义类型组 图标
TYPE-POOLS ICON.
DATA FT TYPE SMP_DYNTXT.
*定义类型组 ALV
DATA: I_FIELD_D TYPE SLIS_T_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
*引入表
TABLES : ZAH_VIEW,ZPWH_AZ_DB,SSCRFIELDS.
*定义结构类型
TYPES : BEGIN OF TY_ZAHZPWH,
CARRID TYPE SCARR-CARRID,
CONNID TYPE SPFLI-CONNID,
CARRNAME TYPE SCARR-CARRNAME,
CNAME TYPE ZPWH_AZ_DB-CNAME,
CNSEX TYPE ZPWH_AZ_DB-CNSEX,
CNIDCARD TYPE ZPWH_AZ_DB-CNIDCARD,
CMOBLIE TYPE ZPWH_AZ_DB-CMOBLIE,
END OF TY_ZAHZPWH.
*定义内表
DATA : GT_ZAH_VIEW TYPE TABLE OF ZAH_VIEW,
GT_ZPWH_AZ_DB TYPE TABLE OF ZPWH_AZ_DB,
GT_ZAH_ZPWH type TABLE OF TY_ZAHZPWH.
*定义对应内表结构,如果内表带表头,则此处省略
DATA : wa_GT_ZPWH_AZ_DB TYPE ZPWH_AZ_DB,
wa_GT_ZAH_ZPWH TYPE TY_ZAHZPWH,
wa__ZAH_VIEW TYPE ZAH_VIEW.
*3.画屏幕
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) TEXT-001 FOR FIELD P_CNAME.
PARAMETERS : P_NAME LIKE ZPWH_AZ_DB-CNAME OBLIGATORY.
SELECTION-SCREEN POSITION 40.
SELECTION-SCREEN COMMENT 42(5) TEXT-002.
PARAMETERS : P_RD1 TYPE C RADIOBUTTON GROUP RD.
SELECTION-SCREEN COMMENT 50(2) TEXT-003.
SELECTION-SCREEN POSITION 54.
PARAMETERS : P_RD2 TYPE C RADIOBUTTON GROUP RD.
SELECTION-SCREEN COMMENT 56(2) TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-005.
SELECT-OPTIONS : S_CONNID FOR ZAH_VIEW-CONNID MODIF ID cos.
SELECTION-SCREEN SKIP 1.
* SELECTION-SCREEN COMMENT 2(8) TEXT-006.
PARAMETERS : P_CNAME TYPE C AS CHECKBOX USER-COMMAND A1,
P_CNAME1 TYPE C AS CHECKBOX USER-COMMAND A2.
SELECTION-SCREEN END OF BLOCK BLOCK.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-007.
PARAMETERS : P_ZCID LIKE ZPWH_AZ_DB-CNIDCARD MODIF ID cos,
P_ZMOB TYPE ZPWH_AZ_DB-CMOBLIE MODIF ID ord.
SELECTION-SCREEN END OF BLOCK BLOCK1.
SELECTION-SCREEN : FUNCTION KEY 1,
FUNCTION KEY 2,
FUNCTION KEY 3,
FUNCTION KEY 4,
FUNCTION KEY 5.
*4.屏幕事件流
*初始化(OPTIONS设置必填),FT类型赋值
INITIALIZATION.
P_NAME = ''.
MOVE 'BUT1' TO SSCRFIELDS-FUNCTXT_01.
MOVE 'BUT2' TO SSCRFIELDS-FUNCTXT_02.
MOVE 'BUT3' TO SSCRFIELDS-FUNCTXT_03.
FT-ICON_ID ='@4E@'.
FT-ICON_TEXT ='04'.
FT-QUICKINFO = 'TEST04'.
SSCRFIELDS-FUNCTXT_04 = FT.
*屏幕校验
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM..
WHEN 'FC01'.
P_NAME = '第一个名字'.
WHEN 'FC02'.
P_NAME = '第二个名字'.
WHEN 'FC03'.
MESSAGE E001(ZPWHALLMASSAGE) WITH '1''2'.
WHEN 'FC04'.
MESSAGE 'INPUT EEEOR!!!' TYPE 'I'.
WHEN OTHERS.
.....
ENDCASE.
*监控屏幕输出时 0ture 1flase
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'COS'.
IF P_CNAME = 'X'.
screen-input = 0.
screen-active = 0.
* screen-invisible = 0.
ELSE.
screen-input = 1.
screen-active = 1.
* screen-invisible = 1.
ENDIF.
ENDIF.
IF screen-group1 = 'ORD'.
IF P_CNAME1 = 'X'.
screen-input = 0.
screen-active = 0.
* screen-invisible = 0.
ELSE.
screen-input = 1.
screen-active = 1.
* screen-invisible = 1.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
*点结束数据验证,击执行查询事件
START-OF-SELECTION.
DATA : NANE2 TYPE ZPWH_AZ_DB-CNAME.
CONCATENATE '%' p_name '%' INTO NANE2.
SELECT * FROM ZAH_VIEW INTO TABLE GT_ZAH_VIEW.
SELECT * FROM ZPWH_AZ_DB INTO TABLE GT_ZPWH_AZ_DB WHERE CNAME LIKE NANE2."ORDER BY CONNID ASCENDING.
SORT GT_ZPWH_AZ_DB BY CONNID DESCENDING.
*查询所有数据后,将数据输出页面之前执行
END-OF-SELECTION.
LOOP AT gt_ZAH_VIEW into wa__ZAH_VIEW.
*放入表一数据 直等
wa_GT_ZAH_ZPWH-CARRID = wa__ZAH_VIEW-CARRID.
wa_GT_ZAH_ZPWH-CONNID = wa__ZAH_VIEW-CONNID.
*放入表二数据 read
READ TABLE GT_ZPWH_AZ_DB INTO wa_GT_ZPWH_AZ_DB WITH KEY CONNID = wa__ZAH_VIEW-CONNID.
IF sy-subrc = 0.
wa_GT_ZAH_ZPWH-CNSEX = wa_GT_ZPWH_AZ_DB-CNSEX.
wa_GT_ZAH_ZPWH-CNIDCARD = wa_GT_ZPWH_AZ_DB-CNIDCARD.
wa_GT_ZAH_ZPWH-CMOBLIE = wa_GT_ZPWH_AZ_DB-CMOBLIE.
wa_GT_ZAH_ZPWH-CNAME = wa_GT_ZPWH_AZ_DB-CNAME.
ENDIF.
CLEAR: wa_GT_ZPWH_AZ_DB,wa__ZAH_VIEW.
APPEND wa_GT_ZAH_ZPWH TO GT_ZAH_ZPWH.
CLEAR wa_GT_ZAH_ZPWH.
*READ TABLE gt_ZAH_VIEW FROM wa__ZAH_VIEW into wa__ZAH_VIEW.
ENDLOOP.
*5.ALV输出相关
*ALV 列
PERFORM F_SET_CELL.
*ALV 显示
PERFORM F_ALV_DISPALY.
FORM F_SET_CELL.
DATA : LWA LIKE LINE OF I_FIELD_D.
DATA : LCI TYPE I.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CARRID'.
LWA-SELTEXT_L = '航线代码'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CONNID'.
LWA-SELTEXT_L = '航线连线'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CARRNAME'.
LWA-SELTEXT_L = '航线名称'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CNAME'.
LWA-SELTEXT_L = '乘客姓名'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CNSEX'.
LWA-SELTEXT_L = '乘客性别'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CNIDCARD'.
LWA-SELTEXT_L = '乘客身份证'.
APPEND LWA TO I_FIELD_D.
CLEAR LWA.
LCI = LCI + C_INT.
LWA-COL_POS = LCI.
LWA-FIELDNAME = 'CMOBLIE'.
LWA-SELTEXT_L = '乘客电话'.
APPEND LWA TO I_FIELD_D.
ENDFORM.
*或者将这些字段在se11里定义成结构,然后这里参照结构,结构里字段还可以多语言等,然后调用函数输出即可
**ZSW_DCC001 是定义好的结构 gt_field_d 是alv输出字段的结构
* DATA: lc_structrue TYPE ZSW_DCC001.
*REFRESH gt_field_d.
*CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
*EXPORTING
*i_structure_name = lc_structrue
*CHANGING
* ct_fieldcat = gt_field_d.
*ALV输出
FORM F_ALV_DISPALY.
wa_layout-colwidth_optimize = 'X'.
wa_layout-box_tabname = 'GT_ZAH_ZPWH'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
it_fieldcat = I_FIELD_D[]
is_layout = WA_LAYOUT
i_save = 'X'
i_default = 'X'
TABLES
t_outtab = GT_ZAH_ZPWH.
ENDFORM.
*第二种 INCLUDE 方法
*先复制底下固定代码结构,在双击名创建即可,逻辑就是通过include包含代码(或者理解叫引入,类似java,引入各种类,每个类里有代码实现)。
*1.备注
*---------------------------------------------------------------------*
* Program : ZFI_023 *
* Title : 机台间成本对比表 *
* Type : Manually *
* Created by: WH *
* Created on: 2022-04-01 *
* Change/Transport Number: SFDK901215 *
* Description : 机台间成本对比表 *
*---------------------------------------------------------------------*
* MODIFICATION LOG: *
* VER DD/MM/YY Author DESCRIPTION CHANGE REQUEST *
* --- -------- ------------- ---------------------- ---------------*
* 000 01/04/22 WH Initial release *
*---------------------------------------------------------------------*
REPORT zfi_023.
*INCLUDE里面top 是定义的内容 sel是开始屏幕 f01是引用方法,内可以写写多个方法,也可以建立多个f02,f03。。。每个里写一个方法
*写好名字后,双击名字--是--保存--输入包名(如果有则省略)--保存,即可创建
*下面的perform是自己写的,如果想用别人的代码块,在include下写上别人创建的(类似引用),底下perform写别人的创建 perform即可用别人写的,如果直接perform不写inclue则无法引用
INCLUDE: zfi_023_top, "Defination
zfi_023_sel, "Selection screen
zfi_023_f01. "Subroutines
*---------------------------------------------------------------------*
* INITIALIZATION *
*---------------------------------------------------------------------*
INITIALIZATION.
*---------------------------------------------------------------------*
* START-OF-SELECTION *
*---------------------------------------------------------------------*
*下面的perform双击名字后,可以选择建立在哪里,一般都是选择建立在上面的xxxx_f01里,也可以选择include,新建一个incude放新建的include里,下面就会出现一个新的include包含,
*当然也可以选择建立在top或者se1里,但是不正规
START-OF-SELECTION.
PERFORM f_get_data.
PERFORM f_process_data.
PERFORM f_output_data.
*---------------------------------------------------------------------*
* END-OF-SELECTION *
*---------------------------------------------------------------------*
END-OF-SELECTION. "释放内存
PERFORM f_free_memory.