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

Tidak ada komentar:

Posting Komentar