配置案例:套打核算维度,针对某个维度不打印(动态字段)原创
金蝶云社区-_Tmp
_Tmp
7人赞赏了该文章 2185次浏览 未经作者许可,禁止转载编辑于2021年06月15日 19:03:11

<0>场景:套打核算维度,针对某个维度不打印

<1>效果:过滤掉费用项目维度不进行打印(支持的补丁版本:20210513 PT-146876 [7.6.0.202105]

image.png

备注:如果不了解怎么配置核算维度组合值的显示样式,参照 套打实体动态字段,常用表达式,搜索 弹性域字段格式化函数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('/')))

image.png


<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('/'))))

赞 7