SAP小技巧 ALV颜色过滤

点击蓝字 关注我们

前言

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

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

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

SAP颜色

1)颜色含义

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

  • 首位 为主颜色;

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

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

19600099f0870261c9fc4c9c39b60eb1.png

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

76fd635eac8d31a592efc5d1c7d51166.png

COLOR字段存在如下结构

2bf8ac99574fc2e33c203faee0228c2a.png

示例程序

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

3946eab7c49b9f11b01fdbc7e7758c17.png

颜色过滤

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

关于行专列,详见链接

无峰,公众号:ABAP 技巧与实战SAP工具箱 通用ALV行转列

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

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

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

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

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

再次双击后,取消过滤.

b480110f72023aaadadee232feed5272.png

图一

e723d802e1758b79e0579723204a6235.png

图二

d1c8a9e9766b874702e2a1a4dd165ed4.png

图三

颜色过滤的实现

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

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

SET_FRONTEND_FIELDCATALOG 

重置ALV抬头即可.

64472f6bddd270838339edc1190390fa.png

对于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    清单观察器控制的字段目录(计算后的字段目录)

50367c0061afca172e0ab4f5b9162a0c.png

总结

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

THE

END

约定

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

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

57cad328eea7ade14c8007dd07b99707.png

公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值