原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
ALV是SAP ABAP语句中很重要的清单展示方式.
ALV中的颜色可以基于行/列/单元格设置.
**本文主要介绍基于单元格设置颜色时,通过双击特定颜色的单元格实现该颜色的过滤(只显示包含该颜色单元格的列)**
二
SAP颜色
1)颜色含义
1:海蓝;2:浅清;3:黄色;4:浅蓝;5:青色;6:红色;7:橙色。
• 首位 为主颜色;
• 次位 为辅助位 0 浅色 1 深色
• 末位 0表示底色 1 表示字体颜色
三
ALV颜色设置
• 基于列设置颜色
• 基于行设置颜色
• 基于单元格设置颜色
_**01** _
**列颜色**
通过FIELDCAT LVC_S_FCAT-EMPHASIZE 内容控制列颜色.
比如设置C110:表示列背景为深蓝
_**02** _
**行颜色**
在内表itab定义一个字段(比如LINE_COLOR 类型CHAR 长度 4)来存储颜色.
设置ALV显示layout属性:INFO_FNAME = 'LINE_COLOR'.
_**03** _
**单元格颜色**
内表中定义一个存放单元格颜色的字段(比如COLTAB), 该字段使用表类型 LVC_T_SCOL定义.
设置ALV LAYOUT属性 CTAB_FNAME 设置该字段名 COLTAB .
每一行在字段COLTAB(嵌套的内表)中存放该行特定字段的颜色)
表类型LVC_T_SCOL存在如下的结构
COLOR字段存在如下结构
四
示例程序
BCALV_TEST_COLORS 该示例程序使用的是单元格颜色的方式.示例程序中可以找到对ALV颜色的设置方式
五
颜色过滤
最近在项目中做一个复杂ALV功能时.涉及到把需要处理的数据按日期行转成列显示.
> 关于行专列, 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用ALV行转列
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486272&idx=1&sn=fbe7f87870f668231894feb7c425934b&chksm=cf5dd676f82a5f600e2aeb297058391b2e539427d0606715a1ef2f3f442850a08230e396d41f#rd)
单元格会根据不同的条件设置不同的颜色, 如图一
• 比如工作日天数行,如果列标题日期是周一, 则使用浅蓝显示.
• 比如产能比,如果不满足特定条件,红色显示
因为横向显示的日期列很多.用户需要横向拖动才能看到所有内容,如果用户只想关注特定颜色的列.可以通过ALV的列隐藏功能可以实现(但是操作太麻烦了).
基于上述念头,设计了ALV颜色列过滤功能.通过双击某个单元格,只显示存在双击单元格颜色的列 如图二/图三
再次双击后,取消过滤.
图一
图二
图三
六
颜色过滤的实现
ALV颜色过滤基于单元格颜色设置.暂不支持列颜色设置.
因为内表中需要字段(COLTAB)存放颜色信息,所以双击单元格时,可以通过比对,获取所有存在该颜色的列, 对于其它列设置 NO_OUT属性.
然后调用ALV对象方法
SET_FRONTEND_FIELDCATALOG
重置ALV抬头即可.
对于FIELDCAT的处理整合在类
ZCL_ALV_FILTER_COL_BY_COLOR
方法 FILTER_COL 中,通过传递的参数 来识别相关信息
• IC_GRID CL_GUI_ALV_GRID ALV 对象
• IT_DATA STANDARD TABLE ALV 显示的内表
• IV_FIELDNAME FIELDNAME 字段名,用于识别行的字段(允许为空)
• IV_COLTAB FIELDNAME 颜色字段名
• IT_FCAT_FIX LVC_T_FCAT 固定的字段(不参与过滤的字段)
• CT_FCAT LVC_T_FCAT 清单观察器控制的字段目录(计算后的字段目录)
七
总结
ALV颜色过滤只是一个ALV处理中的小技巧,整合到一个类中,方便在不同的程序中调用. 如果特定程序使用了单元格颜色并且有很多的列.
启用颜色过滤可以让用户更好的关注特定颜色的列.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论