即时库存明细显示到期天数并做颜色标记原创
26人赞赏了该文章
1,695次浏览
编辑于2022年05月26日 15:39:55
一、【需求问题】
1、想要实现即时库存明细中显示到期天数字段的值。将该字段在BOS中放出可见性,同时设置字段名后,在即时库存明细中该字段值依然为空
2、到期天数的计算同保质期预警报表的计算逻辑,到期天数 = 有效期至 - 当前日期的天数差
二、【功能分析】
1、即时库存明细中"到期天数"目前未设置实体字段名,为虚拟字段,虚拟字段即时修改了可见性页面业务不会进行显示
2、即时库存明细列表返回数据并未针对该字段做赋值处理,所以映射实体字段名后,字段显示值为空
3、需要二开列表插件,在列表显示时进行时动态计算,格式化处理
【实现】
1、"到期天数"映射实体字段名FExpiryDays, 设置列表可见性
2、列表插件重写格式化方法FormatCellValue,动态计算到期天数
3、重写OnFormatRowCondition方法,颜色格式化
import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.DataEntity")、 from System import * from System import StringComparison from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Core.List.PlugIn import * from Kingdee.BOS.Core.List.PlugIn.Args import * def FormatCellValue(e): if e.Header.Key.Equals("FExpiryDays", StringComparison.OrdinalIgnoreCase): expiryDate = Convert.ToDateTime(e.DataRow["FExpiryDate"]) if Convert.ToString(expiryDate) != "0001-01-01 00:00:00": systemDate = DateTime.Now e.FormateValue = Convert.ToString((expiryDate - systemDate).Days + 1) def OnFormatRowConditions(args): if args.DataRow.DynamicObject.DynamicObjectType.Properties.ContainsKey("FExpiryDays") == False: return if args.DataRow.DynamicObject.DynamicObjectType.Properties.ContainsKey("FExpiryDate") == False: return expiryDate = Convert.ToDateTime(args.DataRow["FExpiryDate"]) if Convert.ToString(expiryDate) == "0001-01-01 00:00:00": return systemDate = DateTime.Now day = Convert.ToInt64((expiryDate - systemDate).Days + 1) if day >= 0 and day < 5: fc = FormatCondition() fc.Key = "FExpiryDays" fc.ForeColor = "#FF0000" # 前景色 fc.BackColor = "#FFFF00" # 背景色 fc.ApplayRow = False # 格式化整行 args.FormatConditions.Add(fc) if day >= 5 and day < 9: fc = FormatCondition() fc.Key = "FExpiryDays" fc.ForeColor = "#FFB6C1" # 前景色 fc.BackColor = "#FFFF00" # 背景色 fc.ApplayRow = True # 格式化整行 args.FormatConditions.Add(fc) if day >= 9: fc = FormatCondition() fc.Key = "FExpiryDays" fc.ForeColor = "#00FFFF" # 前景色 fc.BackColor = "#FFFF00" # 背景色 fc.ApplayRow = False # 格式化整行 args.FormatConditions.Add(fc)
实现效果:
参考:
代码示例.rar(0.71KB)
推荐阅读