如何将将单据体分录的金额累加合计到单据头中原创
金蝶云社区-范老师加油
范老师加油
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();
          }
    }
}

四、效果图

 13123.png

 

图1

 

五、开发环境版本

COSMICV4.0.014.0

六、参考资料

【开发平台】指导手册

学习成长中心

赞 12