【ABAP】ALV 指定单元格染色

【ABAP】ALV 指定单元格染色 在 ALV GRID 中可以修改想强调的单元格染色。但是这相比强调行染色功能更注重系统资源因此注重速度的程序中要考虑一下是否使用此功能。在 ALV 报表开发中为关键数据单元格设置醒目的颜色标识如异常数值标红能大幅提升报表的可读性和实用性。一、内表结构定义在内表中追加 lvc_t_scol 类型的颜色内表该内表用于存储每个单元格的颜色配置信息。TYPES:BEGIN OF ty_alv, category TYPE string, 物料类别 werks TYPE werks_d, 工厂 ... zmenge9 TYPE menge_d, 前月差异核心染色字段 ... cellcolor TYPE lvc_t_scol, 单元格颜色字段必须 END OF ty_alv. DATA: gt_alv TYPE TABLE OF ty_alv, gs_alv TYPE ty_alv, gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat, gs_layout TYPE lvc_s_layo, gs_stbl TYPE lvc_s_stbl, go_grid TYPE REF TO cl_gui_alv_grid.二、ALV 布局绑定颜色字段在设置 ALV 布局 lvc_s_scol 时需通过 ctab_fname 参数指定颜色字段名称让 ALV 控件识别并加载颜色配置。*----------------------------------------------------------------- * 程序结束处理 *----------------------------------------------------------------- END-OF-SELECTION. PERFORM frm_set_fieldcat . PERFORM frm_set_layout . PERFORM frm_sort_field. PERFORM frm_alv_show. *---------------------------------------------------------------------* * Form frm_set_layout *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_set_layout . gs_layout-cwidth_opt X. gs_layout-zebra X. gs_layout-sel_mode A. * gs_layout-no_merging X. * gs_layout-box_fname SEL. gs_layout-ctab_fname CELLCOLOR.单元格颜色名称 gs_layout-info_fname CLR.行颜色名称 PERFORM setting_cell . 设置单元格颜色 ENDFORM.三、指定单元格颜色根据需求编写单元格颜色赋值逻辑构造 lvc_s_scol 类型的颜色配置内表。这里我写的是当 zmenge9 这个字段大于0的时候标记为红色。另ALV 常用颜色代码① col1灰色② col3黄色③ col5蓝色④ col6红色本文用⑤ col7橙色FORM setting_cell. DATA: lt_color TYPE lvc_t_scol, 颜色配置内表 ls_color TYPE lvc_s_scol, 单单元格颜色配置 ls_field TYPE lvc_s_fcat, 字段目录 index TYPE i. 循环ALV数据行逐行配置颜色 LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(ls_alv). CLEAR: lt_color[]. index index 1. 循环字段目录定位目标字段 LOOP AT gt_fieldcat INTO ls_field. CLEAR: ls_color. ls_color-fname ls_field-fieldname. 绑定目标字段名 1. 定位需要染色的字段如ZMENGE9前月差异 IF ls_color-fname EQ ZMENGE9. 2. 业务规则差异值0时标红 IF ls_alv-zmenge9 0. 3. 颜色参数配置核心 ls_color-color-col 6. 颜色代码6红色关键 ls_color-color-int 0. 强度0普通1高亮 ls_color-color-inv 0. 反色0不反色1反色 4. 将颜色配置插入内表 INSERT ls_color INTO TABLE lt_color. ENDIF. ENDIF. ENDLOOP. 5. 将颜色配置赋值给当前行的cellcolor字段 CLEAR:ls_alv-cellcolor[]. INSERT LINES OF lt_color INTO TABLE ls_alv-cellcolor. ENDLOOP. ENDFORM.四、ALV 显示与刷新*---------------------------------------------------------------------* * Form frm_alv_show *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -- p1 text * -- p2 text *---------------------------------------------------------------------* FORM frm_alv_show . DATA: lv_handle TYPE slis_handl, gs_alv_variant LIKE disvariant. CLEAR gs_alv_variant. DATA:lt_event_exit TYPE slis_t_event_exit, ls_event_exit TYPE slis_event_exit. * gs_events-name CALLER_EXIT. * gs_events-form FRM_CALLER_EXIT. * APPEND gs_events TO gt_events . ls_event_exit-ucomm SAL. ls_event_exit-after X. * ls_event_exit-before X. APPEND ls_event_exit TO lt_event_exit . ls_event_exit-ucomm ALL. ls_event_exit-after X. * ls_event_exit-before X. APPEND ls_event_exit TO lt_event_exit. lv_handle 0100. gs_alv_variant-handle lv_handle. gs_alv_variant-report sy-repid. gs_alv_variant-username sy-uname. CALL FUNCTION REUSE_ALV_GRID_DISPLAY_LVC EXPORTING i_callback_program sy-cprog i_callback_pf_status_set SUB_STATUS_SET i_callback_user_command SUB_USER_COMMAND is_layout_lvc gs_layout it_fieldcat_lvc gt_fieldcat * it_sort_lvc gt_sort i_save A is_variant gs_alv_variant it_events gt_events it_event_exit lt_event_exit TABLES t_outtab gt_alv EXCEPTIONS program_error 1 OTHERS 2. IF sy-subrc 0. * Implement suGT_OUTle error handling here ENDIF. ENDFORM.这样就完成单元格的颜色标注了 END。