Files
GateDge2023_ljy/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.py
PastSaid 3d15fd4b7e a
2025-01-01 08:21:58 +08:00

204 lines
8.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import clr
clr.AddReference("System")
clr.AddReference('System.Data')
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference('Kingdee.BOS.App')
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS.Core import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn import *
from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import *
from System import *
from System.Data import *
from System.Collections.Generic import *
from Kingdee.BOS.ServiceHelper import *
# python已生成条码的数据不能重复生成!
def OnParseFilter(e):
# raise Exception(e.FilterPolicySQL)
fromId = e.SourceBusinessInfo.GetForm().Id;
e.FilterPolicySQL = e.FilterPolicySQL + """
AND NOT EXISTS (
SELECT 1 FROM T_PRD_MOASSEMBLE_LK uwbc
WHERE uwbc.FSID = t0.FID
AND uwbc.FSTableName = 'T_PLN_FORECAST1'
)
"""
e.PlugFilterDesc = "已生成组装单的数据不能重复生成!";
return;
# def OnParseFilter(e):
# raise Exception(e.FilterPolicySQL)
def FirstOrDefault(collection, func):
"""仿Linq的FirstOrDefault
Args:
collection (_type_): 数据集
func (_type_): lambda公式
Returns:
_type_: 获取数据集第一个或null
"""
result = filter(func, collection)
if len(result) == 0: return None
return result[0]
# 数据转换完毕后触发事件
def AfterConvert(e):
# 选单
# if this.OperationNumber == "Draw":
# # 下推
# if this.OperationNumber == "Push":
# raise Exception(JsonUtil.Serialize(e.TargetBusinessInfo))
billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity
# raise Exception(JsonUtil.Serialize(billHead))
srcBillEntryId = billHead["FPSrcBillEntryId"]
# raise Exception(str(FPSrcBillEntryId))
# 来源类型
srcBillType = billHead["FSrcBillType"]
if srcBillType == 'PLN_FORECAST':
sqlL = """/*dialect*/
DECLARE @EntryId int
SET @EntryId = {0}
;WITH #预测单数据 AS (
--套件子项
SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID
,t0e.FROWID,t0e.FPARENTROWID,t0e.FBOMID,t0e.FBOMENTRYID,t0e.FOWNERID,t0e.FOWNERTYPEID
,t0e.FPRODUCTTYPE,t0e.FSEQ,t0e.F_UHIK_TEXT8 AS '标签货号'
,t0e.F_UHIK_QTY2 AS '父项数量',t0e.F_UHIK_TEXT2 AS '标签规格_Note'
,t0e.FSTOCKORGID AS '库存组织',t0e.F_HUOHAO AS '货号'
,t0e.F_UHIK_DATE AS '标签生产日期'
,t0e.F_UHIK_LOT AS '标签批号'
FROM T_PLN_FORECAST t0
INNER JOIN T_PLN_FORECASTENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_PLN_FORECASTENTRY t2e on t2e.FROWID = t0e.FPARENTROWID
WHERE 1 = 1
AND t0e.FPRODUCTTYPE = 2
AND t2e.FENTRYID = @EntryId
)
SELECT t1.FNUMBER,t1_l.FNAME,t0.*,t2.*
FROM #预测单数据 t0
INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID
INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052
CROSS APPLY (
SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId'
,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY
,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID
,t2e.F_UHIK_DATE '生产日期',t2e.F_UHIK_DATE1 '有效期至'
FROM T_PRD_MO t2
INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID
INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID AND t2e_a.FREQSRC = 2
WHERE 1 = 1 AND t2e.FSALEORDERENTRYSEQ = t0.FSEQ AND t2e.FSALEORDERNO = t0.FBILLNO
) t2
""".format(srcBillEntryId)
# raise Exception(sqlL)
dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL)
if dataList != None and dataList.Count > 0:
entrys = billHead["FEntity"]
# ea = e.TargetBusinessInfo.Entrys[0].DynamicObjectType.Name
entityType = entrys[0].DynamicObjectType
# raise Exception(firstEntry.DynamicObjectType.Name)
#! 物料
matFld = e.TargetBusinessInfo.GetField("FMaterialId");
#! 货主
ownerFId = e.TargetBusinessInfo.GetField("FOwnerId");
#! 批号
lotFId = e.TargetBusinessInfo.GetField("FLot");
#! 单据类型
moBillTypeFId = e.TargetBusinessInfo.GetField("FMoBillTypeId");
#! 计量单位
unitFId = e.TargetBusinessInfo.GetField("FUnitID")
FPStockOrgObj = billHead["FPStockOrgId"]
FPStockOrgId_Id = billHead["FPStockOrgId_Id"]
entrys.Clear()
for idx,item in enumerate(dataList):
entry = DynamicObject(entityType)
entry["Seq"] = idx + 1;
# 物料
matId = item["FMATERIALID"]
entry["FMaterialId_Id"] = matId
matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType)
entry["FMaterialId"] = matObj
# 产品类型
entry["FProductType"] = item["FPRODUCTTYPE"]
# 来源单据
entry["FSrcBillId"] = item["FID"]
entry["FSrcBillEntryId"] = item["FENTRYID"]
# 生产订单数据
moBillTypeId = item["MoBillType"]
entry["FMoId"] = item["MoId"]
entry["FMoEntryId"] = item["MoEntryId"]
entry["FMoBillTypeId_Id"] = moBillTypeId
moBillTypeObj = BusinessDataServiceHelper.LoadSingle(this.Context, moBillTypeId, moBillTypeFId.RefFormDynamicObjectType)
entry["FMoBillTypeId"] = moBillTypeObj
if billHead["FPMoId"] == 0:
billHead["FPMoId"] = item["MoId"]
billHead["FPMOBillNo"] = item["MOBIllNo"]
billHead["FPMoBillTypeId_Id"] = moBillTypeId
billHead["FPMoBillTypeId"] = moBillTypeObj
# 货主类型
entry["FOwnerTypeId"] = item["FOWNERTYPEID"]
# 货主
ownerId = item["FOWNERID"]
if ownerId > 0 :
ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType)
entry["FOwnerId_Id"] = ownerId
entry["FOwnerId"] = ownerObj
# 批号
lotId = item["FLOT"]
if lotId > 0:
lotObj = BusinessDataServiceHelper.LoadSingle(this.Context, lotId, lotFId.RefFormDynamicObjectType)
entry["FLot_Id"] = lotId
entry["FLot"] = lotObj;
entry["FLot_Text"] = item["FLOT_TEXT"]
# 计量单位
unitId = item["FUNITID"]
if unitId > 0:
unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType)
entry["FUnitID_Id"] = unitId
entry["FUnitID"] = unitObj
# 库存组织
entry["FStockOrgId_Id"] = FPStockOrgId_Id
entry["FStockOrgId"] = FPStockOrgObj
entry["FLabHuoHao"] = item["标签货号"]
entry["FGZLQty"] = item["F_GZQty"]
entry["FLabSpec"] = item["标签规格_Note"]
entry["FZGSQty"] = item["F_GS_QTY"]
entry["FHuoHao"] = item["货号"]
entry["FProducedDate"] = item["生产日期"]
entry["FExpiryDate"] = item["有效期至"]
# entry[""] = item["标签生产日期"]
# 富余量
entry["FFYLQty"] = item["F_FYL_QTY"]
entry["FQty"] = item["FQTY"]
entry["FRptQty"] = item["FQTY"]
entry["FNoInStockQty"] = item["FQTY"]
entrys.Add(entry)