Files
GateDge2023_ljy/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.py
梁骏愉 2306c8b7cf 1
2025-03-15 15:03:34 +08:00

143 lines
5.6 KiB
Python

from math import fabs
import clr
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Metadata.EntityElement import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
from System import *
from System.ComponentModel import *
from System.Collections.Generic import *
from System.Text import*
from Kingdee.BOS.ServiceHelper import *
def DataChanged(e):
if str(e.Field.Key).upper() == "FDATE":
if DoDetection():
stockDirectObj = this.View.Model.GetValue("FStockDirect")
stockDirectVal = "" if stockDirectObj == None else stockDirectObj
if stockDirectVal == "GENERAL":
details = this.View.BusinessInfo.GetEntity("FEntity")
if details != None:
entrys = this.View.Model.GetEntityDataObject(details)
if entrys != None and entrys.Count > 0:
dateValue = "" if e.NewValue == None else e.NewValue
if dateValue == "":
return;
tableSqlL = List[str]();
for entry in entrys:
rowIndex = this.View.Model.GetRowIndex(details, entry)
materialObjValue = entry["MaterialId_Id"];
materialValue = 0 if materialObjValue == None else materialObjValue
tableSqlL.Add(" SELECT {0} AS 'FMATERIALID',{1} rowIdx ".format(materialValue,rowIndex))
if tableSqlL.Count() > 0:
GetPrdLot(dateValue, " UNION ".join(tableSqlL))
return;
if str(e.Field.Key).upper() == "FMATERIALID":
# this.View.Model.SetValue("FLOT", "", e.Row);
# raise Exception("A")
dateObj = this.View.Model.GetValue("FDate")
dateValue = "" if dateObj == None else str(dateObj)
materialId = 0;
if is_number(e.NewValue) == True:
materialId = int(e.NewValue)
else:
# raise Exception(JsonUtil.Serialize(e.NewValue))
raise Exception("A")
if materialId > 0 and dateValue != "":
GetPrdLot(dateValue," SELECT {0} AS 'FMATERIALID',{1} rowIdx ".format(materialId,e.Row))
return;
def is_number(s):
if s == None:
return False;
if s == "":
return False
try:
int(s) # 尝试转换为浮点数
return True
except ValueError:
return False
def DoDetection():
orgObj = this.View.Model.GetValue("FStockOrgId")
if orgObj["Id"] == 1:
return True
return False
# return True
def GetPrdLot(dateTime,tableSql):
sqlL = """/*dialect*/
DECLARE @date datetime
SET @date = '{0}'
;WITH #基础数据 AS (
{1}
)
SELECT tt.*,t1.*
FROM #基础数据 tt
INNER JOIN T_BD_MATERIALSTOCK t0s on tt.FMATERIALID = t0s.FMATERIALID AND t0s.FISBATCHMANAGE = 1
CROSS APPLY (
SELECT TOP 1 tt.FBILLNO,tt.FMATERIALID,tt.FREALQTY,tt.FLOT,tt.FLOT_TEXT,tt.Seq,ROW_NUMBER()OVER (ORDER BY tt.FREALQTY DESC,tt.FCREATEDATE DESC) RN
FROM (
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t1.FBILLNO FLOT_TEXT,0 Seq,t0.FCREATEDATE
FROM T_PRD_INSTOCK t0
INNER JOIN T_PRD_INSTOCKENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_PRD_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 'T_PRD_MOENTRY'
INNER JOIN T_PRD_MO t1 on t1.FID = t0e_lk.FSBILLID
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '2'
WHERE 1=1 AND t0e.FLOT != 0
AND t0e.FMATERIALID = tt.FMATERIALID
AND t0.FCREATEDATE <= @date
ORDER BY t0.FCREATEDATE DESC
UNION ALL
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t2.FBILLNO,0 Seq,t0.FCREATEDATE
FROM T_STK_INSTOCK t0
INNER JOIN T_STK_INSTOCKENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_STK_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 't_PUR_POOrderEntry'
INNER JOIN T_PUR_POORDERENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SUB_REQORDERENTRY'
INNER JOIN T_SUB_REQORDER t2 on t2.FID = t1e_lk.FSBILLID
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '3'
WHERE 1=1
AND t0.FBUSINESSTYPE = 'WW'
AND t0e.FLOT != 0
AND t0e.FMATERIALID = tt.FMATERIALID
AND t0.FCREATEDATE <= @date
ORDER BY t0.FCREATEDATE DESC
UNION ALL
SELECT '',0,0,0,RIGHT(CONVERT(varchar(100),CONVERT(int, CONVERT(VARCHAR(6),@date,112)) * 100 + DATEPART(ISO_WEEK, @date)),6),1 Seq,@date
) tt
--ORDER BY tt.FREALQTY DESC,tt.Seq ASC
) t1
""".format(dateTime,tableSql)
res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
if res != None and res.Count > 0:
field = this.View.Model.BillBusinessInfo.GetField("FLOT")
for item in res:
# if field.InputModel == LotField.Enum_InputModel.OnlySelect:
# this.View.Model.SetValue("FLOT", item["FLOT"], item["rowIdx"])
# else:
this.View.Model.SetValue("FLOT", item["FLOT_TEXT"], item["rowIdx"])
# raise Exception("AAA")
# this.View.UpdateView("FLOT", item["rowIdx"]);