如何利用Python 实现单据体字段简单计算?原创
金蝶云社区-陈sir身份
陈sir
62人赞赏了该文章 3,551次浏览 未经作者许可,禁止转载编辑于2021年11月24日 14:42:45
summary-icon摘要由AI智能服务提供

本文介绍了通过Python脚本解决金蝶云星空财务系统中折旧调整单显示问题的方法。因系统原有功能不足,作者在单据体新增字段“已累计折旧”,并编写Python脚本计算该字段值,通过遍历单据体行计算每期折旧与累计折旧之和。还探讨了解决打印时字段显示空值的问题,并分享了社区中Python实现功能的多个案例。

【业务场景】:前段时间,财务提了一个需求,想要在折旧调整单中显示资产本期发生额和累计折旧的和,来显示当期累计折旧。因为折旧调整单显示的为上期累计折旧值,觉得不够全面。


经分析后认为,可以在单据体新建字段“已累计折旧”=本期发生额+累计折旧,来显示当期累计折旧。


首先我想到的是用BOS中实体服务规则来解决,但熟悉BOS的朋友会发现,用用实体服务规则,可以实现首行计算,但不能遍历单据体,导致只有第一行“已累计折旧”字段有值,其他行是空白的。那就只能二开插件了,可是又觉得有些麻烦,写完还要部署,明明很简单的功能嘛。


忽然我想到了经常在社区看到的Python实现功能的帖子,虽然对Python也不懂,可是社区举到了很多例子,经过摸索,功能最终得以实现。分享如下:


方法分享】脚本中用到的字段示例:

单据体标识:FA_DEPRADJUSTENTRY;

累计折旧:FACCUMDEPR;

本期折旧额:FDEPR;

已累计折旧:F_TH_YLJZJ;


【操作步骤】

1、在折旧汇总页签下,新增字段“已累计折旧”,标识为F_TH_YLJZJ。

2、在表单属性中找到【表单插件】,选择【注册Python脚本】。

1.png


输入脚本名后,输入代码如下:

2.png

#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from Kingdee.BOS.Core import *
def BeforeBindData(e):
rows=this.Model.GetEntryRowCount("FA_DEPRADJUSTENTRY");#获取单据体行数
    for i in range(0,rows,1):
        a = this.Model.GetValue("FDEPR",i) + this.Model.GetValue("FACCUMDEPR",i);
        this.Model.SetValue("F_TH_YLJZJ",a,i);
    this.View.UpdateView("FA_DEPRADJUSTENTRY");


依次保存后退出,重新登陆云星空客户端。


3、实现效果如下:

3.png


用Python比较简单的语言实现了此功能。


此外打印时,新增的已累计折旧字段会显示空值,这是因为,脚本计算后未将最终值存储到数据库,可以在打印按钮下,打印操作之前增加一个保存操作,来解决此问题。


社区是一个大宝藏,深入挖掘,才能让我们更加善于用社区的知识来解决实际中遇到的问题。


【分享】分享社区Python实例:

Python案例汇总 (kingdee.com)

实施过程中动态控制枚举项加载的方法(Python) (kingdee.com)

Python脚本实现单据体首行过滤【分享】 (kingdee.com)

Python脚本实现单据体背景色及字段前景色设置【分享】 (kingdee.com)


赞 62