Rabu, 27 Februari 2013
Coloring a cell in an ALV conditionally
Source :
*&---------------------------------------------------------------------*
*& Report ZSBK_COLOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsbk_color.
TABLES: sflight.
TYPE-POOLS: slis. "ALV Declarations
TYPES: BEGIN OF ty_data,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
planetype TYPE sflight-planetype,
cellcolor TYPE lvc_t_scol,
END OF ty_data.
DATA: t_data TYPE STANDARD TABLE OF ty_data WITH HEADER LINE,
w_data TYPE ty_data.
*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid,
gt_events TYPE slis_t_event,
gd_prntparams TYPE slis_print_alv.
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
PERFORM fm_get_data.
CHECK t_data[] IS NOT INITIAL.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM set_cell_colours.
PERFORM display_alv_report TABLES t_data.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
fieldcatalog-fieldname = 'CARRID'.
fieldcatalog-seltext_m = 'Airline'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 5.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CONNID'.
fieldcatalog-seltext_m = 'Flight Number'.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'FLDATE'.
fieldcatalog-seltext_m = 'Date'.
fieldcatalog-col_pos = 2.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PRICE'.
fieldcatalog-seltext_m = 'Airfare'.
fieldcatalog-col_pos = 3.
fieldcatalog-do_sum = 'X'.
fieldcatalog-cfieldname = 'CURRENCY'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CURRENCY'.
fieldcatalog-seltext_m = 'Airline Currency'.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PLANETYPE'.
fieldcatalog-seltext_m = 'Plane Type'.
fieldcatalog-col_pos = 5.
fieldcatalog-datatype = 'CURR'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-totals_text = 'Totals'(201).
gd_layout-coltab_fieldname = 'CELLCOLOR'. "CTAB_FNAME
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
FORM display_alv_report TABLES p_data.
gd_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
i_save = 'X'
TABLES
t_outtab = p_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form fm_get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_get_data.
SELECT carrid connid fldate price currency planetype
INTO CORRESPONDING FIELDS OF TABLE t_data
FROM sflight
UP TO 10 ROWS.
ENDFORM. " DATA_RETRIEVAL
*-------------------------------------------------------------------*
* Form TOP-OF-PAGE *
*-------------------------------------------------------------------*
* ALV Report Header *
*-------------------------------------------------------------------*
FORM top_of_page.
DATA: t_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader,
t_line LIKE wa_header-info,
ld_lines TYPE i,
ld_linesc(10) TYPE c.
* Title
wa_header-typ = 'H'.
wa_header-info = 'SFLIGHT'.
APPEND wa_header TO t_header.
CLEAR wa_header.
* Date
wa_header-typ = 'S'.
wa_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO wa_header-info. "todays date
APPEND wa_header TO t_header.
CLEAR: wa_header.
DESCRIBE TABLE t_data LINES ld_lines.
ld_linesc = ld_lines.
CONCATENATE 'Total No. of Records Selected: ' ld_linesc
INTO t_line SEPARATED BY space.
wa_header-typ = 'A'.
wa_header-info = t_line.
APPEND wa_header TO t_header.
CLEAR: wa_header, t_line.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_header.
* i_logo = 'Z_LOGO'.
ENDFORM. "top-of-page
*&---------------------------------------------------------------------*
*& Form SET_CELL_COLOURS
*&---------------------------------------------------------------------*
* Set colour of individual ALV cell, field
*----------------------------------------------------------------------*
FORM set_cell_colours .
DATA: wa_cellcolor TYPE lvc_s_scol.
DATA: ld_index TYPE sy-tabix.
LOOP AT t_data INTO w_data.
ld_index = sy-tabix.
* Set colour of PLANETYPE field to various colors based on sy-tabix value
wa_cellcolor-fname = 'PLANETYPE'.
wa_cellcolor-color-col = sy-tabix. "color code 1-7, if outside rage defaults to 7
wa_cellcolor-color-int = '1'. "1 = Intensified on, 0 = Intensified off
wa_cellcolor-color-inv = '0'. "1 = text colour, 0 = background colour
APPEND wa_cellcolor TO w_data-cellcolor.
MODIFY t_data FROM w_data INDEX ld_index TRANSPORTING cellcolor.
* Set colour of PRICE field to color 4 if gt 0
IF w_data-price GT 0.
wa_cellcolor-fname = 'PRICE'.
wa_cellcolor-color-col = 4.
wa_cellcolor-color-int = '0'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO w_data-cellcolor.
MODIFY t_data FROM w_data INDEX ld_index TRANSPORTING cellcolor.
ENDIF.
* Set colour of CURRENCY field text to red(6)
wa_cellcolor-fname = 'CURRENCY'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '0'.
wa_cellcolor-color-inv = '1'.
APPEND wa_cellcolor TO w_data-cellcolor.
MODIFY t_data FROM w_data INDEX ld_index TRANSPORTING cellcolor.
ENDLOOP.
ENDFORM. " SET_CELL_COLOURS
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar