工序转移单中新增的数量字段,反写到工序计划数量的二开方案

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

工序转移单中新增的数量字段,反写到工序计划数量的二开方案

【应用场景】

工序转移单中需要记录损耗数量,因此二开新增了该数量字段,需要反写到工序计划的合格数量,作为完工数量的一部分。


【实现步骤】

由于上游单据工序计划是“单据头-单据体-子单据体”结构,而BOS不支持对子单据体的反写规则配置,因此需要通过操作服务插件来反写。在审核操作中用插件实现数量的累加反写,并在反审核操作中用插件实现数量的累减反写,审核与反审核操作一定要成对配置。

<1>在审核操作中注册服务插件Python脚本,累加反写到工序计划的合格数量中。

由于审核是批量操作,因此需要将批量的工序转移单以来源的工序计划子分录内码为主键进行数量合并,以便一次性反写;同时,由于界面显示的字段为工序单位数量,因此需要分别计算出生产单位数量和基本单位数量,累加反写到工序计划的相应数量上;

此处假定工序转移单中二开的损耗数量字段标识为FWasteQty,绑定实体属性为WasteQty,关联单位为工序单位数量。

参考Python如下:

clr.AddReference("Kingdee.K3.MFG.App")
clr.AddReference("Kingdee.K3.MFG.Contracts")
clr.AddReference("Kingdee.BOS.App")
from Kingdee.K3.MFG.App import *
from Kingdee.K3.MFG.Contracts import *
from Kingdee.BOS.App import *
from Kingdee.BOS.App.Data import *
def OnPreparePropertys(e):
	e.FieldKeys.Add("FSrcOptPlanOptId")
	e.FieldKeys.Add("FProductId")
	e.FieldKeys.Add("FProUnitID")
	e.FieldKeys.Add("FBaseUnitID")
	e.FieldKeys.Add("FUnitTransHeadQty")
	e.FieldKeys.Add("FUnitTransOperQty")
	e.FieldKeys.Add("FWasteQty")
def EndOperationTransaction(e):
	sqlStrs = []
	wasteQtyDic={}
	materialIdDic={}
	unitDic={}
	baseUnitDic={}
	transHeadQtyDic={}
	transOperQtyDic={}
	for dataEntity in e.DataEntitys:
		detailId = dataEntity["SrcOptPlanOptId"]
		if (wasteQtyDic.has_key(detailId)):
			wasteQtyDic[detailId]=wasteQtyDic[detailId]+dataEntry["WasteQty"]
		else:
			wasteQtyDic[detailId]=dataEntity["WasteQty"]
			materialIdDic[detailId]=dataEntity["ProductId_Id"]
			unitDic[detailId]=dataEntity["ProUnitID"]
			baseUnitDic[detailId]=dataEntity["BaseUnitID"]
			transHeadQtyDic[detailId]=dataEntity["UnitTransHeadQty"]
			transOperQtyDic[detailId]=dataEntity["UnitTransOperQty"]
	if(wasteQtyDic!=None and wasteQtyDic.Count>0):
		for detailId in wasteQtyDic.keys():
			wasteQty = wasteQtyDic[detailId]
			materialId = materialIdDic[detailId]
			unit = unitDic[detailId]
			baseunit = baseUnitDic[detailId]
			unitId = unit["Id"]
			transHeadQty = transHeadQtyDic[detailId]
			transOperQty = transOperQtyDic[detailId]
			iservice = MFGServiceFactory.GetOperUnitConvertService(this.Context)
			baseQty = iservice.CalcBaseQty(this.Context,materialId,unitId,transHeadQty,transOperQty,wasteQty,baseunit)
			prdQty = iservice.CalcProQtyByOper(transHeadQty,transOperQty,wasteQty,unit)
			sqlStr="UPDATE T_SFC_OPERPLANNINGDETAIL_B SET FQualifiedBaseQty=FQualifiedBaseQty+"+baseQty.ToString()+",FQualifiedHeadQty=FQualifiedHeadQty+"+prdQty.ToString()+",FQualifiedQty=FQualifiedQty+"+wasteQty.ToString()+" WHERE FDETAILID="+detailId.ToString()
			sqlStrs.append(sqlStr)
			DBUtils.Execute(this.Context, sqlStr)


<2>在反审核操作中注册服务插件Python脚本,累减反写到工序计划的合格数量中,Python脚本与上面基本相同,只需要将最后的sql修改为累减的形式:

sqlStr="UPDATE T_SFC_OPERPLANNINGDETAIL_B SET FQualifiedBaseQty=FQualifiedBaseQty-"+baseQty.ToString()+",FQualifiedHeadQty=FQualifiedHeadQty-"+prdQty.ToString()+",FQualifiedQty=FQualifiedQty-"+wasteQty.ToString()+" WHERE FDETAILID="+detailId.ToString()



【金蝶云星空BOS二次开发案例演示】

https://vip.kingdee.com/article/94751030918525696



工序转移单中新增的数量字段,反写到工序计划数量的二开方案

【应用场景】工序转移单中需要记录损耗数量,因此二开新增了该数量字段,需要反写到工序计划的合格数量,作为完工数量的一部分。【实现步骤...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息