如何实现在检验单的上游单据上体现检验过程花费的时长
需求描述:以来料检验为例,设置了收料单审核自动生成检验单,但是由于质检过程比较长,需要在收料通知单列表可以体现出检验过程花费的时长(即收料单单审核到检验单审核之间的时长)。
解决方案:1、检验单表体增加长日期字段--收料通知单审核日期:
2、收料通知单到检验单单据转换字段映射增加收料单审核日期到该字段的映射:
3、 收料通知单明细表体增加文本字段-检验时长:
4、检验单操作列表的审核操作上的服务插件中注册python插件,实现审核后计算审核日期与收料单审核日期时间差反写回收料通知单的检验时长字段上:
5、示例代码如下:
import clr
clr.AddReference("System")
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
from System import*
from Kingdee.BOS import*
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Metadata.EntityElement import*
from Kingdee.BOS.App.Data import*
from System import DateTime
def OnPreparePropertys(e):
e.FieldKeys.Add("FBillNo")
e.FieldKeys.Add("FSId")
e.FieldKeys.Add("FRecieveDatetime")
def AfterExecuteOperationTransaction(e):
for head in e.DataEntitys:
auditDate=head["ApproveDate"]
entrys=head["Entity"]
for entry in entrys:
receivedate=entry["RecieveDatetime"]
ss=auditDate-receivedate
diff1=ss.Days#时间差:天
diff2=ss.Hours#时间差:小时
diff=ss.Minutes#时间差:分钟
linkEntrys=entry["FEntity_Link"]
for linkentry in linkEntrys:
srcId=linkentry["SId"]
#更新检验时间格式:01天01小时01分钟
#sql=str.Format("UPDATE T_PUR_RECEIVEENTRY SET FTEXT='{0}' WHERE FENTRYID={1} ",str(diff1)+"天"+str(diff2)+"小时"+str(diff)+"分钟",str(srcId))
#更新检验时间格式:01小时
sql=str.Format("UPDATE T_PUR_RECEIVEENTRY SET FTEXT='{0}' WHERE FENTRYID={1} ",str(diff1*24+diff2+round(float(diff)/60,2))+"小时",str(srcId))
count=DBUtils.Execute(this.Context, sql)
6、二开说明:
(1)本示例写的时间差格式是:01小时,通过#注释掉的有01天01小时01分钟的格式,可以按需选择使用哪种格式;
(2)相关二开字段说明:FRecieveDatetime为检验单增加的收料通知单审核日期字段的标识;RecieveDatetime为检验单增加的收料通知单审核日期字段的绑定实体属性;Update语句中的FTEXT为收料通知单增加的文本字段-检验时长的字段名;
(3) 该二开方式是直接更新上游单据的数据库字段值,因此需要重新打开单据才会看到更新值,列表需要重新刷新才可以看到;
(4) python对于合格要求比较严格,粘贴代码后格式可能会改变,因此需要使用Tab键按上图中截图调整代码缩进,不要使用空格键,以防缩进不一致;
(5)上查二开方案是检验单审核时更新上游单据字段值的,因此还需要参考上述示例代码处理检验单反审核时清空审核时更新回去的值;
如何实现在检验单的上游单据上体现检验过程花费的时长
本文2024-09-23 03:27:39发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159000.html