2024-12-05 15:39:19 +08:00
|
|
|
|
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 *
|
|
|
|
|
|
|
2025-01-01 08:21:58 +08:00
|
|
|
|
# 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;
|
2024-12-05 15:39:19 +08:00
|
|
|
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
|
|
|
|
|