如何将将单据体分录的金额累加合计到单据头中原创
金蝶云社区-范老师加油
范老师加油
12人赞赏了该文章 4,692次浏览 未经作者许可,禁止转载编辑于2023年03月24日 09:50:10
summary-icon摘要由AI智能服务提供

本文介绍了在苍穹系统中,通过配置业务规则或编写插件来实现单据体中金额合计到单据头中的需求。业务规则方式适用于4.0及以上版本,但存在版本限制和删除分录不更新总金额的问题。插件方式通过监听值更新和行删除事件来计算并更新总金额,提供了更灵活的解决方案。最后还提及了开发环境版本和参考资料。

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
12人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!