1. 前序
本教程需求您有基础的Python插件或C#插件的开发能力。
2. 背景
目前在差旅费报销单(新政)(后面简称新政报销单)中,行程信息的天数是由插件进行计算的。天数为(结束日期-开始日期)+1天。 但是不同的公司,对于行程天数的计算是不尽相同的。因此,标准产品的天数计算不能满足所有公司需求,这时便需要插件进行天数的重算。
3. 实现思想
我们通过在值更新事件DataChanged(e)里面对天数进行重算,从而实现我们天数计算的调整。我们以计算规则
天数=结束日期-开始日期(当结束日期=开始日期时,天数=1)
为例,通过Python插件和C#插件分别讲解如何实现。特别地,Python插件适用于公有云和私有云客户,而C#插件仅适合私有云客户。
4. 实现步骤
4.1. Python实现
(1)打开BOS设计器,找到差旅费报销单并点击拓展,在表单插件中点击“注册Python插件”。
注册Python插件
(2)在标题写入“天数计算”。并在标题下方写入示例的Python脚本。在这段代码中days=(endDate-startDate).Days是计算天数的公式,并通过判断条件(days==0)进行判断,若等于0则算1天,若不等于0则按实际计算天数。最后通过this.View.Model.SetValue("FTravelDays", 1, e.Row)将天数写入字段中,而e.Row表示发生日期更新的具体行号。
import clr clr.AddReference('mscorlib') clr.AddReference('Kingdee.BOS.Core') from System import * from Kingdee.BOS.Core.Bill.PlugIn import * def DataChanged(e): if (e.Field.Key=='FStartDate' or e.Field.Key=='FFinishDate'): startDate = Convert.ToDateTime(this.Model.GetValue("FStartDate", e.Row)) endDate = Convert.ToDateTime(this.Model.GetValue("FFinishDate", e.Row)) days=(endDate-startDate).Days if(days==0): this.Model.SetValue("FTravelDays", 1, e.Row) else: this.Model.SetValue("FTravelDays", days, e.Row)
Python示例脚本
(3) 点击保存。注意,若在新政报销单中发现这个脚本没有生效,则需要从星空注销用户并清空缓存。
4.2. C#实现
(1)新建.Net Framework 类库项目,并引用Kingdee.BOS.Core.dll和Kingdee.BOS.DataEntity.dll两个动态库
(2)在项目中新建类,我们先命名该类为“TravelDateCalculate”。并将该类继承AbstractBillPlugIn。
(3)重写值更新事件DataChanged(DataChangedEventArgs e)。结果请参考C#代码示例
using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using System; using System.ComponentModel; namespace MyCalculate { [Description("新政报销单天数计算表单插件")] public class TravelDateCalculate : AbstractBillPlugIn { public override void DataChanged(DataChangedEventArgs e) { base.DataChanged(e); if (e.Field.Key == "FStartDate" || e.Field.Key == "FFinishDate") { DateTime startDate = Convert.ToDateTime(this.Model.GetValue("FStartDate", e.Row)); DateTime endDate = Convert.ToDateTime(this.Model.GetValue("FFinishDate", e.Row)); int days = (endDate - startDate).Days; if (days == 0) { this.Model.SetValue("FTravelDays", 1, e.Row); } else { this.Model.SetValue("FTravelDays", days, e.Row); } } } } }
C#示例代码
(4)在星空安装的服务中打开BOS设计器,找到差旅费报销单并点击拓展,在表单插件中点击“注册”。选取到我们制作的组件文件(.dll)并确定即可。
注册C#插件
5. 结语
这样我们就实现了新政报销单行程天数的重新计算。您可以在此基础上尝试较为复杂的天数计算规则。感想您看到最后,更多内容请浏览金蝶云社区。
使用插件调整差旅报销单行程天数.docx(797.26KB)
推荐阅读