如何实现库存单据在提交时校验序列号必录
问题描述:目前星空系统中针对启用序列号管理的物料,库存单据保存时针对序列号必录的校验是交互式的,可以选择是跳过这个校验继续保存单据,只有在单据审核的时候才会强制校验序列号必录。但是很多情况下,在企业操作流程上并不想走到审核的时候才提示,需要在审核前也就是提交的时候校验序列号必录;
解决方法:单据的提交操作上注册python插件校验器,针对启用序列号管理的物料分录提交时校验序列号是否全部录入,未全部录入则不允许提交。
此处以生产入库单为例介绍:
1、 生产入库单提交操作上注册python插件,增加校验器,如下图所示:
2、python插件代码如下(注意格式:通过tab调整,不要使用空格):
import clr clr.AddReference("System") clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee.BOS.Core') from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Metadata.EntityElement import* from Kingdee.BOS.Core.Validation import* def OnPreparePropertys(e): e.FieldKeys.Add("FSerialNo") e.FieldKeys.Add("FSNQty") def OnAddValidators(e): validator=ValidateSN() validator.EntityKey="FBillHead" validator.AlwaysValidate=True e.Validators.Add(validator) class ValidateSN(AbstractValidator): def Validate(self,dataEntities,validateContext,ctx): for bill in dataEntities: billEntrys=bill.DataEntity["Entity"] billId=bill["Id"] for entry in billEntrys: mseq=(entry["Seq"]) snQty=(entry["SNQty"]) material=entry["MaterialId"] stocdate = material["MaterialStock"][0] snm=stocdate["IsSNManage"] if (snm==True and snQty > 0): snEntrys=entry["PRD_INSTOCKMTRLSERIAL"] snCount=0 for snentry in snEntrys: serialNo=(snentry["SerialNo"]) if (len(serialNo) > 0): snCount=snCount+1 if(snCount != snQty ): msg="生产入库单第"+str(mseq)+"行分录对应序列号表体序列号未全部录入,不允许提交" info=ValidationErrorInfo("",str(billId),bill.DataEntityIndex,mseq,str(billId),msg,"",ErrorLevel.Error)validateContext.AddError(None,info)
如何实现库存单据在提交时校验序列号必录
问题描述:目前星空系统中针对启用序列号管理的物料,库存单据保存时针对序列号必录的校验是交互式的,可以选择是跳过这个校验继续保存单据...
点击下载文档
本文2024-09-23 03:22:27发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-158445.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章