如何实现按检验单主表体二开增加数量字段以及抽样方案字段计算整体抽样的样本量、允收数、拒收数
需求描述:例如检验单的业务单位是卷,但是实际抽样时是按照单位根去抽样,那此时整体抽样的样本量、允收数、拒收数就不能按照检验数量(对应单位卷)去计算,而是需要把检验数量转换为单位根对应的数量(二开数量字段)去计算才是正确的;
实现方案:具体实现逻辑如下:
1、在检验单主表体增加抽样计算数量字段(数量类型字段)和抽样单位字段(计量单位类型字段),抽样计算数量字段绑定的单位为抽样单位;
2、在物料上质量页签增加抽样单位字段;
3、在下推生成检验单的单据转换插件字段映射中配置携带物料的抽样单位到检验单表体的抽样单位上;
4、如果检验单的单位和抽样单位之间存在单位换算关系,那下推生成检验单的时候,可以在单据转换规则表单服务策略中增加按照检验数量换算抽样计算数量的逻辑(注意:放到标准产品检验数量计算逻辑之后);
5、当检验单的单位与抽样单位之间存在单位换算关系时,检验单手动修改检验数量时可以配置实体服务规则自动计算抽样计算数量;
6、当抽样单位与检验单的单位之间不存在单位换算时,则需要手动在检验单上维护二开增加的抽样计算数量字段值;
7、检验单表单插件中注册python插件按照抽样计算数量以及主表体的抽样方案计算整体抽样的样本量、允收数以及拒收数。
本例以在检验单表体增加数量字段为例讲述怎样注册python插件:
(1)检验单主表体增加数量字段,如下图所示(注意:本例绑定单位为业务单位,这里按照上述解决方案绑定为二开增加抽样单位即可):
(2)检验单表单插件注册python插件,当二开的数量字段值改变时根据该数量字段值以及主表体的抽样方案字段计算整体抽样的样本量、允收数、拒收数;(注意:如果需要修改抽样方案时也自动计算,则需要在插件代码中判断值改变字段标识(fieldkey)的地方将抽样方案增加上即:if (fieldkey=="FTestQty" or fieldkey=="FSampleSchemeId"))
(3)示例代码如下:
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.K3.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.K3.MFG.ServiceHelper')
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.K3.Core import*
from Kingdee.K3.Core.MFG.QM.ParamOption import*
from Kingdee.BOS.ServiceHelper import*
from Kingdee.K3.MFG.ServiceHelper.QM import*
def DataChanged(e):
fieldkey= str(e.Field.Key)
if (fieldkey=="FTestQty"):
qty=this.View.Model.GetValue("FTestQty",e.Row)
if(qty > 0):
sampleId=this.View.Model.GetValue("FSampleSchemeId",e.Row)
if sampleId is None:#没有抽样方案时,样本量、允收数、拒收数都为0
this.View.Model.SetValue("FSampleQty",0,e.Row)
this.View.Model.SetValue("FAcceptQty",0,e.Row)
this.View.Model.SetValue("FRejectQty",0,e.Row)
else:
ssQtys=List[SSQtyOption]()
ssQty = SSQtyOption()
ssQty.SSId =sampleId["Id"]
ssQty.InspectQty = qty
ssQtys.Add(ssQty);
ssInfo = InspectServiceHelper.GetSSInfoByQty(this.Context, ssQtys)
if(ssInfo.Count > 0):
this.View.Model.SetValue("FSampleQty",ssInfo[0]["FSAMPLEQTY"],e.Row)
this.View.Model.SetValue("FAcceptQty",ssInfo[0]["FACCEPTQTY"],e.Row)
this.View.Model.SetValue("FRejectQty",ssInfo[0]["FREJECTQTY"],e.Row)
else:
this.View.Model.SetValue("FSampleQty",0,e.Row)
this.View.Model.SetValue("FAcceptQty",0,e.Row)
this.View.Model.SetValue("FRejectQty",0,e.Row)
else:
this.View.Model.SetValue("FSampleQty",0,e.Row)
this.View.Model.SetValue("FAcceptQty",0,e.Row)
this.View.Model.SetValue("FRejectQty",0,e.Row)
说明:
1、代码中涉及到字段标识说明:
(1) FTestQty:二开数量字段标识;
(2) FSampleSchemeId:主表体抽样方案字段标识;
(3) FSampleQty:主表体样本量字段标识;
(4) FAcceptQty:主表体允收数字段标识;
(5) FRejectQty:主表体拒收数字段标识;
2、上述python插件保存出现类似如下的提示信息时,可以直接点击确定保存即可,不影响使用:
3、由于python对于合格要求比较严格,因此使用Tab键按上图中截图调整代码缩进,避免使用空格键以防缩进不一致;
如何实现按检验单主表体二开增加数量字段以及抽样方案字段计算整体抽样的样本量、允收数、拒收数
本文2024-09-23 03:28:10发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159053.html