本文介绍了通过Python脚本解决金蝶云星空财务系统中折旧调整单显示问题的方法。因系统原有功能不足,作者在单据体新增字段“已累计折旧”,并编写Python脚本计算该字段值,通过遍历单据体行计算每期折旧与累计折旧之和。还探讨了解决打印时字段显示空值的问题,并分享了社区中Python实现功能的多个案例。
【业务场景】:前段时间,财务提了一个需求,想要在折旧调整单中显示资产本期发生额和累计折旧的和,来显示当期累计折旧。因为折旧调整单显示的为上期累计折旧值,觉得不够全面。
经分析后认为,可以在单据体新建字段“已累计折旧”=本期发生额+累计折旧,来显示当期累计折旧。
首先我想到的是用BOS中实体服务规则来解决,但熟悉BOS的朋友会发现,用用实体服务规则,可以实现首行计算,但不能遍历单据体,导致只有第一行“已累计折旧”字段有值,其他行是空白的。那就只能二开插件了,可是又觉得有些麻烦,写完还要部署,明明很简单的功能嘛。
忽然我想到了经常在社区看到的Python实现功能的帖子,虽然对Python也不懂,可是社区举到了很多例子,经过摸索,功能最终得以实现。分享如下:
【方法分享】脚本中用到的字段示例:
单据体标识:FA_DEPRADJUSTENTRY;
累计折旧:FACCUMDEPR;
本期折旧额:FDEPR;
已累计折旧:F_TH_YLJZJ;
【操作步骤】
1、在折旧汇总页签下,新增字段“已累计折旧”,标识为F_TH_YLJZJ。
2、在表单属性中找到【表单插件】,选择【注册Python脚本】。
输入脚本名后,输入代码如下:
#引入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、实现效果如下:
用Python比较简单的语言实现了此功能。
此外打印时,新增的已累计折旧字段会显示空值,这是因为,脚本计算后未将最终值存储到数据库,可以在打印按钮下,打印操作之前增加一个保存操作,来解决此问题。
社区是一个大宝藏,深入挖掘,才能让我们更加善于用社区的知识来解决实际中遇到的问题。
【分享】分享社区Python实例:
实施过程中动态控制枚举项加载的方法(Python) (kingdee.com)
Python脚本实现单据体首行过滤【分享】 (kingdee.com)
Python脚本实现单据体背景色及字段前景色设置【分享】 (kingdee.com)
推荐阅读