ABAP ALV使用实例---sflight航班表及其效果界面

*&---------------------------------------------------------------------*
*& Report  Z4_ZSD_ALVTEST002
*&
*&---------------------------------------------------------------------*
*& CreatBy ShiQiang
*& 1.使用到的表sflight航班表
*& 2.定义选择屏幕,含有单值参数P_PRICE(PARAMETER)和S_DATE(SELECT-OPTIONS)
*& 3.为价格设定默认值5000,为查询周期设定默认值为当前月,即起止日期分别为当前月的第一天和最后一天
*& 4.查询航班日期(fldate)在指定周期范围内并且航空运费(price)高于指定价格的所有航班记录
*& 5.按航班日期降序排序
*& 6.使用alv方式输出查询结果
*&---------------------------------------------------------------------*

REPORT  Z4_ZSD_ALVTEST002 NO STANDARD PAGE HEADING.

*引用类型组SLIS是系统定义的类型组,ALV相关操作的类型都在其中
TYPE-POOLS:SLIS.

*定义表工作区
TABLES:SFLIGHT.
DATA ITAB_SFLIGHT TYPE TABLE OF SFLIGHT.  "定义内表,存放查询结果

DATA:LD_CURDATE LIKE SY-DATUM,            "定义日期类型变量,记录当前日期
     LD_LASTDATE LIKE SY-DATUM.           "定义日期类型变量,记录当前日期所在月份最后一天的日期

DATA:WA_FIELD TYPE SLIS_FIELDCAT_ALV,
*定义字段属性工作区变量,定义内表中各字段变量在表格中输出的属性
     IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. "定义字段目录组变量,是与wa_field同结构类型的内表

DATA:G_REPID LIKE SY-REPID.               "定义变量,记录当前程序名

*定义选择屏幕,可定义块区域对不同功能的选择条件进行分组显示
*此处注意:代码编辑完成后保存并激活,然后进入:系统菜单-〉转到->文本元素->选择文本
*定义屏幕块区域的文本标题和各相关选择条件的描述文本,完毕后同样需要对选择文本执行激活操作

*---------------------------------------------------------*
*SELECTION-SCREEN
*---------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
  PARAMETER P_PRICE TYPE I OBLIGATORY.  "定义单值输入参数,航班价格,类型为整型且为必选项
  SELECT-OPTIONS S_DATE FOR SFLIGHT-FLDATE.
  "定义选择区间参数,航班日期,可以多值输入,也可以直接定义上下限
SELECTION-SCREEN END OF BLOCK BLK.

*---------------------------------------------------------*
*INITIALIZATION
*---------------------------------------------------------*
INITIALIZATION.

G_REPID = SY-REPID.
P_PRICE = '2000'.
PERFORM INITDATE.      "调用子程序InitDate,指定查询周期为当前月

*选择条件输入后,开始执行查询前,对所输入的条件进行约束性检查
*---------------------------------------------------------*
*AT SELECTION-SCREEN
*---------------------------------------------------------*
IF S_DATE-LOW IS INITIAL.   "没用指定查询日期,则调用MESSAGE方法,提示错误信息,注意MESSAGE方法的使用
   MESSAGE E888(SABAPDOCU) WITH '请输入查询日期'.
ENDIF.

*---------------------------------------------------------*
*START-OF-SELECTION
*---------------------------------------------------------*

START-OF-SELECTION.
  PERFORM GETDATA.        "从数据库中将符合指定日期和航班运费价格的数据取出存放到内表中
END-OF-SELECTION.

PERFORM SETFIELDCAT.      "调用子程序,设置ALV输出的字段目录属性

PERFORM DISPLAYBYALV.     "调用子程序以ALV方式输出查询结果


*---------------------------------------------------------*
*FORM INITDATE
*根据当前月份初始化查询日期区间
*---------------------------------------------------------*
FORM INITDATE.
    LD_CURDATE = SY-DATUM."从系统变量sy-datum中获取当前日期,并赋值给变量ld_curdate
    CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
"调用功能模块RP_LAST_DAY_OF_MONTHS 取得当前月最后一天的日期,输出结果赋值给变量ld_lastdate
        EXPORTING
          DAY_IN = LD_CURDATE
        IMPORTING
          LAST_DAY_OF_MONTH = LD_LASTDATE
        EXCEPTIONS
          DAY_IN_NO_DATE = 1.

    LD_CURDATE+6(2) = '01'.             "修改当前日期为当前月的第一天

    S_DATE-LOW = LD_CURDATE.
    S_DATE-HIGH = LD_LASTDATE.
    APPEND S_DATE.

ENDFORM"INITDATE


*---------------------------------------------------------*
*FORM GETDATA
*从数据库中获取数据
*---------------------------------------------------------*
FORM GETDATA.

*从数据中将符合选择条件的航班记录读取到内表中
SELECT * FROM SFLIGHT
    INTO TABLE ITAB_SFLIGHT
    WHERE FLDATE IN S_DATE AND PRICE > P_PRICE.
*按照航班日期降序排列查询结果
SORT ITAB_SFLIGHT BY FLDATE DESCENDING.
ENDFORM.  "GETDATA

*---------------------------------------------------------*
*FORM SETFIELDCAT
*根据业务需要,设定内表数据在ALV表格中输出的属性
*---------------------------------------------------------*
FORM SETFIELDCAT.
CLEAR WA_FIELD.

*定义宏代码
DEFINE ADDFIELDCAT.
  WA_FIELD-COL_POS = &1.     "字段在表格中对应的列顺序
  WA_FIELD-FIELDNAME = &2.   "内表中的字段名称,注意:必须用大写字母
  WA_FIELD-SELTEXT_L = &3.   "对应的列头文本
  WA_FIELD-JUST = &4.        "列对齐方式,可以取值:L 居左对齐,R 居右对齐, C 居中对齐

*添加字段属性到字段目录表中
  APPEND WA_FIELD TO IT_FIELDCAT.

END-OF-DEFINITION.

*调用预定义的宏代码,逐个将要显示字段的属性设定添加到字段目录组中
ADDFIELDCAT 1 'CARRID' '航线承运人ID' 'L'.
ADDFIELDCAT 2 'CONNID' '航班连接ID' 'L'.
ADDFIELDCAT 3 'FLDATE' '航班日期' 'L'.
ADDFIELDCAT 4 'PRICE' '航空运费' 'R'.
ADDFIELDCAT 5 'PLANETYPE' '飞机类型' 'L'.
ADDFIELDCAT 6 'SEATSMAX' '座位数量' 'C'.

ENDFORM.  "SETFIELDCAT

*---------------------------------------------------------*
*FORM DISPLAYBYALV
*用ALV方式显示查询结果
*---------------------------------------------------------*
FORM DISPLAYBYALV.
  DATA:GS_LAYOUT TYPE SLIS_LAYOUT_ALV.   "定义ALV表格属性变量,设置相关显示属性

  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.     "设置ALV表格输出的时候,列宽根据数据长度自动适应
  GS_LAYOUT-ZEBRA = 'X'.                 "设置aLV表格输出的时候,数据行背景色交替显示
*调用功能模块REUSE_ALV_GRID_DISPLAY完成ALV的显示输出
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "
  EXPORTING
    I_CALLBACK_PROGRAM = G_REPID         "回调的程序名
    IT_FIELDCAT = IT_FIELDCAT            "字段目录组
    IS_LAYOUT = GS_LAYOUT                "
  TABLES
    T_OUTTAB = ITAB_SFLIGHT              "要显示的查询结果内表
  EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2.
ENDFORM.            "DISPLAYBYALV

 

图片1.查询界面

 

图片2.显示效果

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值