<0>场景:套打核算维度,针对某个维度不打印
<1>效果:过滤掉费用项目维度不进行打印(支持的补丁版本:20210513 PT-146876 [7.6.0.202105])
备注:如果不了解怎么配置核算维度组合值的显示样式,参照 套打实体动态字段,常用表达式,搜索 弹性域字段格式化函数FlexFormat
<2>实现细则:
(a)FlexFormat:
使用核算维度格式化,得到各维度的类型Type——类型(核算维度用),假设得到结果 类型1:编码1,名称1/类型2:编码2,名称2;
(b)拆分split:
针对核算维度格式化的值,按照维度进行拆分(要求维度分隔符在其他内容中不包含此字符),拆分后得到各维度的单个值原表;
(c)过滤filter(x: (x.find()<0), array):
根据各维度值判断其类型,如果字符串中包含类型的名称,那么就认为是需要过滤的类型
(d)拼接join(array):
将集合结果拼接得到一个字符串显示输出
最终表达式
"/".join(filter(lambda x:(x.find('费用项目')<0),FlexFormat('FDetailID','Type:Code,Name','/')[0].GetString(2052).split('/')))
<3>备注,格式化分隔符必须在内容中不存在,同时拆分符与分隔符一致
<4>进阶
兼容核算维度为空的场景,输出空
'' if FDetailID==0 else "/".join(filter(lambda x:(x.find('费用项目')<0),FlexFormat('FDetailID','Type:Code,Name','/')[0].GetString(2052).split('/')))
由于利用了维度类型过滤,但是最终不需要显示类型,可以使用字符串截断
'' if FDetailID==0 else "/".join(map(lambda x:(x[x.find(':')+1:] if (x.find(':')>0) else x), filter(lambda x:(x.find('费用项目')<0),FlexFormat('FDetailID','Type:Code,Name','/')[0].GetString(2052).split('/'))))
推荐阅读