如何将将单据体分录的金额累加合计到单据头中原创
12人赞赏了该文章
4,238次浏览
编辑于2023年03月24日 09:50:10
5.0发版后已经可以通过配置实现了,具体可参考这个文章
https://developer.kingdee.com/article/319855402978970880?productLineId=29&isKnowledge=2
关键词:单据体分录、累加合计
一、需求
实际开发中,经常有这样一个需求,将分录(单据体)里的金额合计放到单据头中.
二、思路与方案
在苍穹系统中有两种方式都可以实现,
一种是通过业务规则配置.
一种是通过插件来实现.
三、实现过程
方案一:
在苍穹4.0版本及以上是可以通过配置业务规则实现,
在单据头业务规则配置函数,
kded_totalamout =sum( kded_amout ) ;
其中kded_totalamout 代表的是单据头汇总金额标识,
kded_amout 代表的是单据体金额标识.
方案一这种配置虽然是可以实现,但是却有两个问题
1 4.0版本以下版本不可以;
2 总金额的值是通过值更新事件来触发更新的,但是现在的版本是删除分录却不会更新总金额,所以现在这样配,还是有点瑕疵.下面就是如何通过插件实现。
方案二:
在费用模块的一些常用单据都有这个功能,它们都是通过插件来实现,这里抽取其中的主要功能.插件代码如下:
public class TestAmountCoutPlugin extends AbstractBillPlugIn { @Override public void propertyChanged(PropertyChangedArgs e) { //通过值更新事件来触发 String propertyName = e.getProperty().getName(); if (StringUtils.equals("kded_amount", propertyName)) { calcAmountMethod(); } super.propertyChanged(e); } private void calcAmountMethod() { EntryGrid entry = this.getControl("entryentity");//目标单单据体数据,采购订单的单据体标识 BigDecimal sum = entry.getSum("kded_amount");//合计单据体的金额字段 this.getModel().setValue("kded_totalamount", sum);//设置合计字段到单据头的总金额字段(kded_amount) } @Override public void afterDeleteRow(AfterDeleteRowEventArgs e) { //通过单据体行删除事件来触发 String entryName = e.getEntryProp().getName(); if ("entryentity".equals(entryName)) { calcAmountMethod(); } } }
四、效果图
图1
五、开发环境版本
COSMICV4.0.014.0
六、参考资料
推荐阅读