如何实现检验单针对启用辅助属性的物料保存校验辅助属性必录

需求描述:标准产品检验单只有在检验单单据类型启用检验单确定辅助属性时才会按照单据类型参数设置在保存或者质检完成的时候校验使用决策表体的辅助属性必录(不校验明细分录的),但是某些类型的检验单不支持启用检验单确定辅助属性且一行明细分录的辅助属性都是一个值不需要在检验单使用决策表体分开维护也不需要将辅助属性反写回上游单据(例如其他检验单),因此也就不需要启用检验单确定辅助属性,只需要把检验单明细表体的辅助属性字段放出来显示维护即可,因此需要在保存的时候针对启用辅助属性管理的物料校验明细分录启用的辅助属性必录;
解决方法1:检验单单据类型不启用检验单确定辅助属性,修改检验单的实体服务规则将明细分录的辅助属性放开显示,在检验单的保存操作上二开python插件增加校验器实现辅助属性必录校验,详细逻辑如下:(适用于非来料检验且非产品检验)
(1)修改如下实体服务规则的条件使对应检验类型时明细表体的辅助属性显示;

(2)修改明细表体的辅助属性字段的锁定性,不勾选新增锁定和修改锁定即可;
(3)检验单的保存操作上注册python插件上增加校验器校验物料启用辅助属性时,明细表体的辅助属性值必录:

(4)示例代码如下:
import clr
clr.AddReference("System")
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.BusinessEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.App.Core')
from System import*
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.App import *
from Kingdee.BOS.App.Core import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Contracts import *
from System.Collections.Generic import *
from Kingdee.BOS.Core.Metadata.EntityElement import*
from Kingdee.BOS.Core.Validation import*
def OnPreparePropertys(e):
e.FieldKeys.Add("FAuxPropId")
e.FieldKeys.Add("FMaterialId")
def OnAddValidators(e):
validator=ValidateAuxMustInput()
validator.EntityKey="FBillHead"
validator.AlwaysValidate=True
e.Validators.Add(validator)
class ValidateAuxMustInput(AbstractValidator):
def Validate(self,dataEntities,validateContext,ctx):
fieldKey = "FMaterialId"
baseDataField = validateContext.BusinessInfo.GetField(fieldKey)
for bill in dataEntities:
businessType=bill.DataEntity["BusinessType"]
if(businessType !="20"):
continue
billEntrys=bill.DataEntity["Entity"]
billId=bill["Id"]
for entry in billEntrys:
bEntryNotVal='0'
mseq=(entry["Seq"])
mtrlObj=entry["MaterialId"]
mtrlId=entry["MaterialId_Id"]
auxObj = entry["AuxPropId"]
listAuxId = baseDataField.Controller.GetFlexEnableList(mtrlObj)
if (listAuxId.Count <= 0):
cont
如何实现检验单针对启用辅助属性的物料保存校验辅助属性必录
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



