如何实现在批号序列号关系单据中录入序列号时自动携带序列号主档的批号到单据上
需求描述:针对物料即启用序列号又启用批号时,在批号序列号关系单据上手动录入成品或者子件的序列号时,希望自动携带对应序列号主档中的批号到当前单据上。
解决方案:一、成品序列号:由于成品是支持在单据上生成新的序列号的,因此对应序列号字段是文本字段,所以无法直接配置携带序列号主档字段值到当前单据字段上(只有基础资料字段才可以配置),需要二开python表单插件实现,详细如下:
示例代码如下:
import clr
clr.AddReference('System')
clr.AddReference('System.Core')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.Bill import*
from System import*
from Kingdee.BOS.Orm.DataEntity import*
from System.Collections import *
from System.Collections.Generic import *
from Kingdee.BOS.App.Data import *
def DataChanged(e):
fieldkey= str(e.Field.Key)
if (fieldkey=="FSerialNo"):
serialNo=e.NewValue
materialObj=this.View.Model.GetValue("FMaterialId")
masterId=materialObj["MsterId"]
sql=str.Format(" select T1.FLOT from T_BD_SERIALMASTEROther T1 inner join T_BD_SERIALMASTER T2 ON T1.FSERIALID=T2.FSERIALID AND T2.FNUMBER='{0}' and T2.FMaterialId={1} ",serialNo,masterId)
srcInfos=DBUtils.ExecuteDynamicObject(this.Context, sql)
lotId=0
for srcInfo in srcInfos:
lotId=(srcInfo["FLOT"])
break;
this.View.Model.SetValue("FLOT",lotId,e.Row)
补充说明:由于python对于格式要求比较严格,粘贴代码可能会导致格式改变,如有报错则需要使用Tab键按上述截图调整代码缩进,不要使用空格键;
二、子件序列号:由于子件是不支持生成新的序列号的,因此子件表体的序列号字段是基础资料字段,所以直接在序列号字段上配置值更新事件即可实现,详细配置如下:
1、子表体序列号字段的引用属性中增加批号,即时触发更新事件属性勾选:
2、序列号字段的值更新事件中配置携带批号字段值到当前表体的批号字段上:
如何实现在批号序列号关系单据中录入序列号时自动携带序列号主档的批号到单据上
本文2024-09-23 03:29:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159142.html