如何利用Python 实现单据体字段简单计算?

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

如何利用Python 实现单据体字段简单计算?

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


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


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


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


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

单据体标识:FA_DEPRADJUSTENTRY;

累计折旧:FACCUMDEPR;

本期折旧额:FDEPR;

已累计折旧:F_TH_YLJZJ;


【操作步骤】

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

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

1.webp


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

2.webp

#引入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.webp


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


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


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


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

Python案例汇总 (kingdee.com)

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

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

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



表单属性-菜单集合里面加个按钮,里面写公式,手工点一下按钮也可以实现计算明细所有行

我按照这个操作,保存插件时提示错误,计算的结果也没有

unexpected token ' '

   在 Microsoft.Scripting.Hosting.ErrorListenerProxySink.Add(SourceUnit sourceUnit, String message, SourceSpan span, Int32 errorCode, Severity severity)

   在 IronPython.Compiler.Parser.ReportSyntaxError(Int32 start, Int32 end, String message, Int32 errorCode)

   在 IronPython.Compiler.Parser.ReportSyntaxError(Token t, IndexSpan span, Int32 errorCode, Boolean allowIncomplete)

   在 IronPython.Compiler.Parser.ReportSyntaxError(TokenWithSpan t, Int32 errorCode)

   在 IronPython.Compiler.Parser.ReadName()

   在 IronPython.Compiler.Parser.ReadNames()

   在 IronPython.Compiler.Parser.ParseModuleName()

   在 IronPython.Compiler.Parser.ParseImportStmt()

   在 IronPython.Compiler.Parser.ParseSimpleStmt()

   在 IronPython.Compiler.Parser.ParseFileWorker(Boolean makeModule, Boolean returnValue)

   在 IronPython.Compiler.Parser.ParseFile(Boolean makeModule, Boolean returnValue)

   在 IronPython.Runtime.PythonContext.ParseAndBindAst(CompilerContext context)

   在 IronPython.Runtime.PythonContext.CompilePythonCode(SourceUnit sourceUnit, CompilerOptions options, ErrorSink errorSink)

   在 IronPython.Runtime.PythonContext.CompileSourceCode(SourceUnit sourceUnit, CompilerOptions options, ErrorSink errorSink)

   在 Microsoft.Scripting.Hosting.ScriptSource.CompileInternal(CompilerOptions compilerOptions, ErrorListener errorListener)

   在 Kingdee.BOS.DomainModelDesigner.PropertyEditor.frmPythonScriptEdit.GenerateCompiledPython()

   在 Kingdee.BOS.DomainModelDesigner.PropertyEditor.frmPythonScriptEdit.InitializeScope()

   在 Kingdee.BOS.DomainModelDesigner.PropertyEditor.frmPythonScriptEdit.ButtonItem_Click(Object sender, EventArgs e)



公有云多租房python插件不生效,是什么原因


请教下这种为什么实体服务规则,只能实现首行更新,其他行不能,需要点击事件才能触发


这种用值更新事件也可以



学习打卡



学习啦


如何利用Python 实现单据体字段简单计算?

【业务场景】:前段时间,财务提了一个需求,想要在折旧调整单中显示资产本期发生额和累计折旧的和,来显示当期累计折旧。因为折旧调整单显...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息