点击蓝字 关注我们
一
前言
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行转列
单元格会根据不同的条件设置不同的颜色, 如图一
比如工作日天数行,如果列标题日期是周一, 则使用浅蓝显示.
比如产能比,如果不满足特定条件,红色显示
因为横向显示的日期列很多.用户需要横向拖动才能看到所有内容,如果用户只想关注特定颜色的列.可以通过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
申请进入公众号讨论群提问或者参与话题讨论