function ALV 使用

&---------------------------------------------------------------------
*& Report Z_YY_PRG_002
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT Z_YY_PRG_002.

TABLES: SFLIGHT.

"定义输出内表结构
TYPES: BEGIN OF TY_OUTPUT.
INCLUDE TYPE SFLIGHT.
TYPES: ZBOX TYPE C,
ROW_COLOR TYPE C LENGTH 4, "行颜色
CELL_COLOR TYPE LVC_T_SCOL. "单元格颜色,需要定义一个内表字段,然后在后面的循环中根据条件对这个字段(内表)赋值
TYPES: END OF TY_OUTPUT.

"定义输出内表
DATA: GT_OUTPUT TYPE TABLE OF TY_OUTPUT,
GS_OUTPUT TYPE TY_OUTPUT.

DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. "内表字段属性
DATA: GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV. "内表字段属性

DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV. "ALV全局属性
DATA: GT_SORT TYPE SLIS_T_SORTINFO_ALV. "排序
DATA: GS_SORT TYPE SLIS_SORTINFO_ALV. "
DATA: GT_FILTER TYPE SLIS_T_FILTER_ALV. "过滤器
DATA: GS_FILTER TYPE SLIS_FILTER_ALV. "

DATA: LS_SCOL TYPE LVC_S_SCOL.
DATA: LT_SCOL TYPE LVC_T_SCOL. "设置单元格颜色

DATA: GV_COL TYPE I. "列编号

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
SELECT-OPTIONS: S_CARRID FOR SFLIGHT-CARRID. "航线
SELECTION-SCREEN END OF BLOCK BLK1.

START-OF-SELECTION.

"取数
PERFORM FRM_SELECT_DATA.
"数据处理
PERFORM FRM_DATA_PROCESS.

END-OF-SELECTION.
"ALV显示
PERFORM FRM_SET_ALV.

FORM FRM_SELECT_DATA.
"取值
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_OUTPUT
FROM SFLIGHT
WHERE CARRID IN S_CARRID.
ENDFORM.

FORM FRM_DATA_PROCESS.
LOOP AT GT_OUTPUT ASSIGNING FIELD-SYMBOL(<FW_OUTPUT>).
IF <FW_OUTPUT>-CARRID EQ ‘LH’.
"设置行颜色为C300
<FW_OUTPUT>-ROW_COLOR = ‘C300’.
ENDIF.

IF <FW_OUTPUT>-SEATSOCC EQ 0 .
  "设置单元格颜色
  CLEAR LS_SCOL.
  LS_SCOL-FNAME = 'SEATSOCC'.
  LS_SCOL-COLOR-COL = '3'.  "颜色代码 1、灰蓝色 2、浅灰色 3、黄色 4、蓝色 5、绿色 6、红色 7、橙色
  LS_SCOL-COLOR-INT = '1'.   "颜色是否加重 0 默认 、1 加重
  LS_SCOL-COLOR-INV = '0'.   "是否反色 0 默认(底纹为当前颜色) 、1 反色(字为当前颜色)     注意: 这里设置为1时,颜色不要加重,不然会没效果
  APPEND LS_SCOL TO LT_SCOL.
ENDIF.

IF <FW_OUTPUT>-SEATSOCC_B EQ 0 .
  CLEAR LS_SCOL.
  LS_SCOL-FNAME = 'SEATSOCC_B'.
  LS_SCOL-COLOR-COL = '3'.
  LS_SCOL-COLOR-INT = '1'.
  LS_SCOL-COLOR-INV = '0'.
  APPEND LS_SCOL TO LT_SCOL.
ENDIF.

IF <FW_OUTPUT>-SEATSOCC_F EQ 0.
  CLEAR LS_SCOL.
  LS_SCOL-FNAME = 'SEATSOCC_F'.
  LS_SCOL-COLOR-COL = '3'.
  LS_SCOL-COLOR-INT = '1'.
  LS_SCOL-COLOR-INV = '0'.
  APPEND LS_SCOL TO LT_SCOL.
ENDIF.

IF LT_SCOL IS NOT INITIAL.
  "最后将内表赋值给 CELL_COLOR 字段
  <FW_OUTPUT>-CELL_COLOR = LT_SCOL.
  FREE LT_SCOL.
ENDIF.

ENDLOOP.
ENDFORM.

*** "生成属性内表

方法一 BEGIN
FORM FRM_FIELDCAT USING P_FIELDNAME P_REFTAB P_REFFIELD P_TEXT.

CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = P_FIELDNAME.
GS_FIELDCAT-REF_TABNAME = P_REFTAB.
GS_FIELDCAT-REF_FIELDNAME = P_REFFIELD.
GS_FIELDCAT-SELTEXT_L = P_TEXT.
GV_COL = GV_COL + 1.
GS_FIELDCAT-COL_POS = GV_COL.

IF P_FIELDNAME EQ ‘CARRID’.
GS_FIELDCAT-HOTSPOT = ‘X’. "设置单击
ENDIF.

IF P_FIELDNAME EQ ‘PRICE’.
GS_FIELDCAT-EMPHASIZE = ‘C710’. "设置颜色
ENDIF.

APPEND GS_FIELDCAT TO GT_FIELDCAT.

ENDFORM.

FORM FRM_SET_FIELDCAT.
PERFORM FRM_FIELDCAT USING ‘CARRID’ ‘SFLIGHT’ ‘CARRID’ ‘航线’.
PERFORM FRM_FIELDCAT USING ‘CONNID’ ‘SFLIGHT’ ‘CONNID’ ‘航班’.
PERFORM FRM_FIELDCAT USING ‘FLDATE’ ‘SFLIGHT’ ‘FLDATE’ ‘航班日期’.
PERFORM FRM_FIELDCAT USING ‘PRICE’ ‘SFLIGHT’ ‘PRICE’ ‘航空运费’.
PERFORM FRM_FIELDCAT USING ‘CURRENCY’ ‘SFLIGHT’ ‘CURRENCY’ ‘价格’.
PERFORM FRM_FIELDCAT USING ‘PLANETYPE’ ‘SFLIGHT’ ‘PLANETYPE’ ‘飞机类型’.
PERFORM FRM_FIELDCAT USING ‘SEATSMAX’ ‘SFLIGHT’ ‘SEATSMAX’ ‘经济舱位’.
PERFORM FRM_FIELDCAT USING ‘SEATSOCC’ ‘SFLIGHT’ ‘SEATSOCC’ ‘经济舱占据位’.
PERFORM FRM_FIELDCAT USING ‘PAYMENTSUM’ ‘SFLIGHT’ ‘PAYMENTSUM’ ‘当前预定总数’.
PERFORM FRM_FIELDCAT USING ‘SEATSMAX_B’ ‘SFLIGHT’ ‘SEATSMAX_B’ ‘商务舱位’.
PERFORM FRM_FIELDCAT USING ‘SEATSOCC_B’ ‘SFLIGHT’ ‘SEATSOCC_B’ ‘商务舱占据位’.
PERFORM FRM_FIELDCAT USING ‘SEATSMAX_F’ ‘SFLIGHT’ ‘SEATSMAX_F’ ‘头等舱位’.
PERFORM FRM_FIELDCAT USING ‘SEATSOCC_F’ ‘SFLIGHT’ ‘SEATSOCC_F’ ‘头等舱占据位’.
ENDFORM.

方法一 END

方法二 BEGIN
*FREE GT_FIELDCAT.
*CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’

  • EXPORTING
  • I_PROGRAM_NAME = SY-REPID
    ** I_INTERNAL_TABNAME =
  • I_STRUCTURE_NAME = ‘SFLIGHT’
    ** I_CLIENT_NEVER_DISPLAY = ‘X’
    ** I_INCLNAME =
    ** I_BYPASSING_BUFFER =
    ** I_BUFFER_ACTIVE =
  • CHANGING
  • CT_FIELDCAT = GT_FIELDCAT
  • EXCEPTIONS
  • INCONSISTENT_INTERFACE = 1
  • PROGRAM_ERROR = 2
  • OTHERS = 3
  • .
    *IF SY-SUBRC <> 0.
    ** Implement suitable error handling here
    *ENDIF.

*DESCRIBE TABLE GT_FIELDCAT LINES GV_COL.
*
** PERFORM FRM_FIELDCAT USING ‘SEATSOCC_F’ ‘SFLIGHT’ ‘SEATSOCC_F’ ‘头等舱占据位’.
** PERFORM FRM_FIELDCAT USING ‘SEATSOCC_F’ ‘SFLIGHT’ ‘SEATSOCC_F’ ‘头等舱占据位’.
** PERFORM FRM_FIELDCAT USING ‘SEATSOCC_F’ ‘SFLIGHT’ ‘SEATSOCC_F’ ‘头等舱占据位’.
*
*LOOP AT GT_FIELDCAT ASSIGNING FIELD-SYMBOL(<FW_FIELDCAT>).

  • IF <FW_FIELDCAT>-FIELDNAME EQ ‘CARRID’.
  • "设置单击属性
  • <FW_FIELDCAT>-HOTSPOT = ‘X’.
  • ENDIF.
  • "设置ALV列颜色属性 EMPHASIZE
  • IF <FW_FIELDCAT>-FIELDNAME EQ ‘PRICE’.
  • <FW_FIELDCAT>-EMPHASIZE = ‘C710’.
  • ENDIF.
    *ENDLOOP.
    方法二 END

FORM FRM_SET_LAYO.
"设置ALV全局属性
CLEAR GS_LAYOUT.

  • GS_LAYOUT-KEY_HOTSPOT = ‘X’. ”主键单击
    GS_LAYOUT-COLWIDTH_OPTIMIZE = ‘X’. "自动列宽
    GS_LAYOUT-ZEBRA = ‘X’. "斑马纹
    GS_LAYOUT-BOX_FIELDNAME = ‘ZBOX’. "选择块
    GS_LAYOUT-INFO_FIELDNAME = ‘ROW_COLOR’. "行颜色
    GS_LAYOUT-COLTAB_FIELDNAME = ‘CELL_COLOR’. "单元格颜色
  • GS_LAYOUT-NO_COLHEAD = ‘X’.
    GS_LAYOUT-NO_HOTSPOT = ‘X’.
  • GS_LAYOUT-CELL_MERGE = ‘X’.
    GS_LAYOUT-EDIT_MODE = ‘X’.
    GS_LAYOUT-NUMC_SUM = ‘X’.

ENDFORM.

FORM FRM_SET_SORT.
"设置排序
CLEAR GS_SORT.
GS_SORT-SPOS = ‘1’. "排序顺序 1优先级最高
GS_SORT-FIELDNAME = ‘FLDATE’. "排序的字段
GS_SORT-DOWN = ‘X’. "升序或降序 UP 升序 、、DOWN 降序
APPEND GS_SORT TO GT_SORT.

CLEAR GS_SORT.
GS_SORT-SPOS = ‘2’.
GS_SORT-FIELDNAME = ‘CONNID’.
GS_SORT-UP = ‘X’.
APPEND GS_SORT TO GT_SORT.
ENDFORM.

*FORM FRM_SET_FILTER.

  • CLEAR GS_FILTER.
  • GS_FILTER-FIELDNAME = ‘PRICE’.
  • GS_FILTER-SIGN0 = ‘E’.
  • GS_FILTER-OPTIO = ‘BT’.
  • GS_FILTER-VALUF = 0.
  • GS_FILTER-VALUT = 1000.
  • APPEND GS_FILTER TO GT_FILTER.
    *ENDFORM.

FORM FRM_SET_ALV.

PERFORM FRM_SET_LAYO.
PERFORM FRM_SET_FIELDCAT.
PERFORM FRM_SET_SORT.

  • PERFORM FRM_SET_FILTER.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING

  • I_INTERFACE_CHECK           = ' '
    
  • I_BYPASSING_BUFFER          = ' '
    
  • I_BUFFER_ACTIVE             = ' '
    I_CALLBACK_PROGRAM          = SY-CPROG
    I_CALLBACK_PF_STATUS_SET    = 'FRM_PF_STATUS'
    
  •  I_CALLBACK_USER_COMMAND     = 'FRM_USER_COMMAND'
    
  • I_CALLBACK_TOP_OF_PAGE      = 'FRM_TOP_OF_PAGE'
    
  •  I_CALLBACK_HTML_TOP_OF_PAGE = 'FRM_HTML_TOP_OF_PAGE'
    
  • I_CALLBACK_HTML_END_OF_LIST = ' '
    
  • I_STRUCTURE_NAME            = 'SFLIGHT'
    
  • I_BACKGROUND_ID             = ' '
    
  • I_GRID_TITLE                = '今日航班表'
    
  • I_GRID_SETTINGS             =
    IS_LAYOUT                   = GS_LAYOUT
    IT_FIELDCAT                 = GT_FIELDCAT
    
  • IT_EXCLUDING                =
    
  • IT_SPECIAL_GROUPS           =
    IT_SORT                     = GT_SORT
    IT_FILTER                   = GT_FILTER
    
  • IS_SEL_HIDE                 =
    I_DEFAULT                   = 'X'
    I_SAVE                      = 'A'
    
  • IS_VARIANT                  =
    
  • IT_EVENTS                   =
    
  • IT_EVENT_EXIT               =
    
  • IS_PRINT                    =
    
  • IS_REPREP_ID                =
    
  • I_SCREEN_START_COLUMN       = 0
    
  • I_SCREEN_START_LINE         = 0
    
  • I_SCREEN_END_COLUMN         = 0
    
  • I_SCREEN_END_LINE           = 0
    
  • I_HTML_HEIGHT_TOP           = 0
    
  • I_HTML_HEIGHT_END           = 0
    
  • IT_ALV_GRAPHICS             =
    
  • IT_HYPERLINK                =
    
  • IT_ADD_FIELDCAT             =
    
  • IT_EXCEPT_QINFO             =
    
  • IR_SALV_FULLSCREEN_ADAPTER  =
    
  • IMPORTING
  • E_EXIT_CAUSED_BY_CALLER     =
    
  • ES_EXIT_CAUSED_BY_USER      =
    
    TABLES
    T_OUTTAB = GT_OUTPUT
    EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2.
    IF SY-SUBRC <> 0.
  • Implement suitable error handling here
    ENDIF.
    ENDFORM.

FORM FRM_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS ‘ZSTANDARD_FULLSCREEN’.
ENDFORM.

FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.

DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’ "获得数据

IMPORTING

e_grid = lr_grid.

CALL METHOD lr_grid->check_changed_data.

DATA: LV_MSG TYPE STRING.

CASE R_UCOMM.
WHEN ‘&IC1’.
READ TABLE GT_OUTPUT ASSIGNING FIELD-SYMBOL(<FW_OUTPUT>) INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC EQ 0.
CONCATENATE ‘您选择了’ <FW_OUTPUT>-FLDATE <FW_OUTPUT>-CARRID ‘航线’ <FW_OUTPUT>-CONNID ‘号航班’ INTO LV_MSG SEPARATED BY SPACE.
MESSAGE LV_MSG TYPE ‘S’.
ENDIF.

WHEN ''.
WHEN OTHERS.

ENDCASE.

RS_SELFIELD-COL_STABLE = ‘X’.
RS_SELFIELD-ROW_STABLE = ‘X’.
RS_SELFIELD-REFRESH = ‘X’.
ENDFORM.

FORM FRM_TOP_OF_PAGE.

DATA: LT_HEADER TYPE SLIS_T_LISTHEADER.
DATA: LS_HEADER TYPE SLIS_LISTHEADER.

DATA: LV_DATE TYPE C LENGTH 14.

CLEAR LS_HEADER.
LS_HEADER-TYP = ‘H’.

  • LS_HEADER-TYP = ‘H’.
    LS_HEADER-INFO = ‘今日航班表’.
    APPEND LS_HEADER TO LT_HEADER.

WRITE SY-DATUM TO LV_DATE USING EDIT MASK ‘____年__月__日’.
CLEAR LS_HEADER.
LS_HEADER-TYP = ‘S’.
LS_HEADER-KEY = ‘当前日期’.
LS_HEADER-INFO = LV_DATE.
APPEND LS_HEADER TO LT_HEADER.

CLEAR LS_HEADER.
LS_HEADER-TYP = ‘A’.

  • LS_HEADER-KEY = ‘当前日期’.
    LS_HEADER-INFO = ‘感谢您的光临’.
    APPEND LS_HEADER TO LT_HEADER.

CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
IT_LIST_COMMENTARY = LT_HEADER

  • I_LOGO             =
    
  • I_END_OF_LIST_GRID =
    
  • I_ALV_FORM         =
    
    .

ENDFORM.

FORM FRM_HTML_TOP_OF_PAGE USING PR_DOCUMENT TYPE REF TO CL_DD_DOCUMENT…
CALL METHOD PR_DOCUMENT->ADD_TEXT
EXPORTING
TEXT = ‘今日航班表’
SAP_FONTSIZE = CL_DD_DOCUMENT=>LARGE
SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING.

CALL METHOD PR_DOCUMENT->NEW_LINE.
CALL METHOD PR_DOCUMENT->NEW_LINE.

CALL METHOD PR_DOCUMENT->ADD_TEXT
EXPORTING
TEXT = ‘LINK’
SAP_FONTSIZE = CL_DD_DOCUMENT=>MEDIUM.

CALL METHOD PR_DOCUMENT->ADD_GAP
EXPORTING
WIDTH = 5.

CALL METHOD PR_DOCUMENT->ADD_LINK
EXPORTING
NAME = ‘123’
TOOLTIP = ‘百度’
URL = ‘https://www.baidu.com/’
TEXT = ‘BAIDU’.

ENDFORM.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值