SAP 小技巧 ALV 颜色过滤

作者:ABAP技巧与实战 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

ALV是SAP ABAP语句中很重要的清单展示方式.

ALV中的颜色可以基于行/列/单元格设置.

**本文主要介绍基于单元格设置颜色时,通过双击特定颜色的单元格实现该颜色的过滤(只显示包含该颜色单元格的列)**

SAP颜色

1)颜色含义

1:海蓝;2:浅清;3:黄色;4:浅蓝;5:青色;6:红色;7:橙色。

• 首位 为主颜色;

• 次位 为辅助位 0 浅色 1 深色

• 末位 0表示底色 1 表示字体颜色

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

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存在如下的结构

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

COLOR字段存在如下结构

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

示例程序

BCALV_TEST_COLORS 该示例程序使用的是单元格颜色的方式.示例程序中可以找到对ALV颜色的设置方式

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

颜色过滤

最近在项目中做一个复杂ALV功能时.涉及到把需要处理的数据按日期行转成列显示.

> 关于行专列, 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用ALV行转列

> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486272&idx=1&sn=fbe7f87870f668231894feb7c425934b&chksm=cf5dd676f82a5f600e2aeb297058391b2e539427d0606715a1ef2f3f442850a08230e396d41f#rd)

单元格会根据不同的条件设置不同的颜色, 如图一

• 比如工作日天数行,如果列标题日期是周一, 则使用浅蓝显示.

• 比如产能比,如果不满足特定条件,红色显示

因为横向显示的日期列很多.用户需要横向拖动才能看到所有内容,如果用户只想关注特定颜色的列.可以通过ALV的列隐藏功能可以实现(但是操作太麻烦了).

基于上述念头,设计了ALV颜色列过滤功能.通过双击某个单元格,只显示存在双击单元格颜色的列 如图二/图三

再次双击后,取消过滤.

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

图一

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

图二

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

图三

颜色过滤的实现

ALV颜色过滤基于单元格颜色设置.暂不支持列颜色设置.

因为内表中需要字段(COLTAB)存放颜色信息,所以双击单元格时,可以通过比对,获取所有存在该颜色的列, 对于其它列设置 NO_OUT属性.

然后调用ALV对象方法

SET_FRONTEND_FIELDCATALOG

重置ALV抬头即可.

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 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 清单观察器控制的字段目录(计算后的字段目录)

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

总结

ALV颜色过滤只是一个ALV处理中的小技巧,整合到一个类中,方便在不同的程序中调用. 如果特定程序使用了单元格颜色并且有很多的列.

启用颜色过滤可以让用户更好的关注特定颜色的列.

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

SAP 小技巧 ALV 颜色过滤 - 封面图
SAP 小技巧 ALV 颜色过滤 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP小技巧ALV颜色过滤.md」整理生成,仅用于内部技术分享与学习交流。