Change colour of individual SAP ALV cells within an ALV grid report
The below abap program shows how to change the colour of individual ALV cells /fields.
Only a small number of changes are required from a basic ALV grid which include adding a new field to ALV data declaration table(it_ekko), populating this field with the field name
identifier and colour attributes and finally adding an entry to layout control work area. These changes are highlighted in bold below.
*&-------------------------------------------------------------* *& Report ZALV_CELLCOLOR *& *&-------------------------------------------------------------* *& Author: SAP Development *& Demonstrates simple ALV GRID report along with setting colour of *& individual cells/fields *&-------------------------------------------------------------* REPORT zdemo_alvgrid . REPORT ZALV_CELLCOLOR. TABLES: ekko. type-pools: slis. "ALV Declarations *Data Declaration *---------------- TYPES: BEGIN OF t_ekko, ebeln TYPE ekpo-ebeln, ebelp TYPE ekpo-ebelp, statu TYPE ekpo-statu, aedat TYPE ekpo-aedat, matnr TYPE ekpo-matnr, menge TYPE ekpo-menge, meins TYPE ekpo-meins, netpr TYPE ekpo-netpr, peinh TYPE ekpo-peinh, CELLCOLOR TYPE LVC_T_SCOL, END OF t_ekko. DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0, wa_ekko TYPE t_ekko. *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 data_retrieval. perform build_fieldcatalog. perform build_layout. perform set_cell_colours. perform display_alv_report. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * Build Fieldcatalog for ALV Report *----------------------------------------------------------------------* form build_fieldcatalog. * There are a number of ways to create a fieldcat. * For the purpose of this example i will build the fieldcatalog manualy * by populating the internal table fields individually and then * appending the rows. This method can be the most time consuming but can * also allow you more control of the final product. * Beware though, you need to ensure that all fields required are * populated. When using some of functionality available via ALV, such as * total. You may need to provide more information than if you were * simply displaying the result * I.e. Field type may be required in-order for * the 'TOTAL' function to work. fieldcatalog-fieldname = 'EBELN'. fieldcatalog-seltext_m = 'Purchase Order'. fieldcatalog-col_pos = 0. fieldcatalog-outputlen = 10. fieldcatalog-emphasize = 'X'. fieldcatalog-key = 'X'. * fieldcatalog-do_sum = 'X'. * fieldcatalog-no_zero = 'X'. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'EBELP'. fieldcatalog-seltext_m = 'PO Item'. fieldcatalog-col_pos = 1. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'STATU'. fieldcatalog-seltext_m = 'Status'. fieldcatalog-col_pos = 2. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'AEDAT'. fieldcatalog-seltext_m = 'Item change date'. fieldcatalog-col_pos = 3. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'MATNR'. fieldcatalog-seltext_m = 'Material Number'. fieldcatalog-col_pos = 4. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'MENGE'. fieldcatalog-seltext_m = 'PO quantity'. fieldcatalog-col_pos = 5. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'MEINS'. fieldcatalog-seltext_m = 'Order Unit'. fieldcatalog-col_pos = 6. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'NETPR'. fieldcatalog-seltext_m = 'Net Price'. fieldcatalog-col_pos = 7. fieldcatalog-outputlen = 15. fieldcatalog-do_sum = 'X'. fieldcatalog-datatype = 'CURR'. append fieldcatalog to fieldcatalog. clear fieldcatalog. fieldcatalog-fieldname = 'PEINH'. fieldcatalog-seltext_m = 'Price Unit'. fieldcatalog-col_pos = 8. 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. gd_repid = sy-repid. call function 'REUSE_ALV_GRID_DISPLAY' exporting i_callback_program = gd_repid i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM * i_callback_user_command = 'USER_COMMAND' * i_grid_title = outtext is_layout = gd_layout it_fieldcat = fieldcatalog[] * it_special_groups = gd_tabgroup * it_events = gt_events * is_print = gd_prntparams i_save = 'X' * is_variant = z_template tables t_outtab = it_ekko 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 DATA_RETRIEVAL *&---------------------------------------------------------------------* * Retrieve data form EKPO table and populate itab it_ekko *----------------------------------------------------------------------* form data_retrieval. select ebeln ebelp statu aedat matnr menge meins netpr peinh up to 10 rows from ekpo into CORRESPONDING FIELDS OF TABLE it_ekko. endform. " DATA_RETRIEVAL *-------------------------------------------------------------------* * Form TOP-OF-PAGE * *-------------------------------------------------------------------* * ALV Report Header * *-------------------------------------------------------------------* Form top-of-page. *ALV Header declarations 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 = 'EKKO Table Report'. 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. * Total No. of Records Selected describe table it_ekko 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 IT_EKKO into wa_ekko. LD_INDEX = SY-TABIX. * Set colour of EBELN field to various colors based on sy-tabix value WA_CELLCOLOR-FNAME = 'EBELN'. 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 wa_ekko-CELLCOLOR. MODIFY it_ekko from wa_ekko INDEX ld_index TRANSPORTING CELLCOLOR. * Set colour of NETPR field to color 4 if gt 0 if wa_ekko-netpr gt 0. WA_CELLCOLOR-FNAME = 'NETPR'. WA_CELLCOLOR-COLOR-COL = 4. "color code 1-7, if outside rage defaults to 7 WA_CELLCOLOR-COLOR-INT = '0'. "1 = Intensified on, 0 = Intensified off WA_CELLCOLOR-COLOR-INV = '0'. "1 = text colour, 0 = background colour APPEND WA_CELLCOLOR TO wa_ekko-CELLCOLOR. MODIFY it_ekko from wa_ekko INDEX ld_index TRANSPORTING CELLCOLOR. endif. * Set colour of AEDAT field text to red(6) WA_CELLCOLOR-FNAME = 'AEDAT'. WA_CELLCOLOR-COLOR-COL = 6. "color code 1-7, if outside rage defaults to 7 WA_CELLCOLOR-COLOR-INT = '0'. "1 = Intensified on, 0 = Intensified off WA_CELLCOLOR-COLOR-INV = '1'. "1 = text colour, 0 = background colour APPEND WA_CELLCOLOR TO wa_ekko-CELLCOLOR. MODIFY it_ekko from wa_ekko INDEX ld_index TRANSPORTING CELLCOLOR. ENDLOOP. ENDFORM. " SET_CELL_COLOURS
|
||||||||