aa
This commit is contained in:
298
07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品还原过滤2.py
Normal file
298
07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品还原过滤2.py
Normal file
@@ -0,0 +1,298 @@
|
||||
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.Util import *
|
||||
from Kingdee.BOS.Core import *
|
||||
from Kingdee.BOS.Core.DependencyRules import *
|
||||
from Kingdee.BOS.Core.Metadata.EntityElement import *
|
||||
from Kingdee.BOS.Orm.DataEntity import*
|
||||
from Kingdee.BOS.Orm.Metadata.DataEntity import*
|
||||
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
|
||||
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
|
||||
from Kingdee.BOS.Core.CommonFilter import *
|
||||
from System import *
|
||||
from System.ComponentModel import*
|
||||
from System.Collections.Generic import*
|
||||
from System.Text import*
|
||||
from Kingdee.BOS.ServiceHelper import *
|
||||
from Kingdee.BOS.KDThread import *
|
||||
|
||||
# showParameter = None
|
||||
_whereSql = ""
|
||||
def BarItemClick(e):
|
||||
# 新增过滤窗口
|
||||
if e.BarItemKey == "tbShowFilterForm":
|
||||
# global showParameter
|
||||
# if showParameter == None:
|
||||
showParameter = FilterShowParameter();
|
||||
showParameter.FormId = "POSH_CB_PROCOSTRESULTREC_FILTER";
|
||||
showParameter.ParentPageId = this.View.PageId;
|
||||
|
||||
this.View.ShowForm(showParameter,lambda x:ShowReturnData(x));
|
||||
|
||||
def ShowReturnData(result):
|
||||
global _whereSql
|
||||
_whereSql = "";
|
||||
if result.ReturnData is None:
|
||||
return
|
||||
else:
|
||||
whereSql = "";
|
||||
MoBills = List[str]()
|
||||
BatchFilterRows = result.ReturnData.BatchFilterRows;
|
||||
if BatchFilterRows != None and BatchFilterRows.Count > 0:
|
||||
for item in BatchFilterRows:
|
||||
if item.Value.find("[") == -1:
|
||||
MoBills.Add(item.Value)
|
||||
else:
|
||||
vals = JsonUtil.DeserializeObject[List[str]](item.Value)
|
||||
MoBills.AddRange(vals)
|
||||
|
||||
FilterRows = result.ReturnData.FilterRows
|
||||
if FilterRows != None and FilterRows.Count > 0:
|
||||
for item in FilterRows:
|
||||
MoBills.Add(item.Value)
|
||||
|
||||
if MoBills.Count > 0:
|
||||
whereSql = " AND t0.FBILLNO IN ('{0}') ".format("','".join(MoBills))
|
||||
|
||||
_whereSql = whereSql
|
||||
ShowProgressBar();
|
||||
# DoSetData(whereSql)
|
||||
|
||||
def DoSetData(whereSql):
|
||||
date = DateTime.Now;
|
||||
dateVal = (str(date)[0:7]).replace("-","")
|
||||
# raise Exception(str(date))
|
||||
if whereSql == "":
|
||||
whereSql = " AND CONVERT(INT, CONVERT(VARCHAR(6),t0.FDATE,112)) = @period "
|
||||
|
||||
moSqlL = """/*dialect*/
|
||||
DECLARE @period int
|
||||
DECLARE @dbName varchar(100)
|
||||
DECLARE @ACCTGORGID int
|
||||
|
||||
SET @ACCTGORGID = 100039
|
||||
SET @period = 201801
|
||||
SELECT @dbName = DB_NAME()
|
||||
|
||||
IF @dbName != 'AIS20231110222743'
|
||||
BEGIN
|
||||
SET @period = 202406
|
||||
SET @ACCTGORGID = 1
|
||||
END
|
||||
|
||||
;WITH #初始数据 AS (
|
||||
SELECT t0.FPRODUCTNO
|
||||
,t0.FPRODUCTID
|
||||
,t0.FBILLID
|
||||
,t0.FBILLENTRYID
|
||||
,t0.FFORMID
|
||||
,t0.FPRODUCTDIMEID
|
||||
,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD'
|
||||
FROM T_CB_PROORDERDIME t0
|
||||
INNER JOIN V_CB_PROORDERINFO t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
||||
INNER JOIN V_HS_OUTACCTG t2 on t2.FID = t1.FACCTGID
|
||||
WHERE 1=1
|
||||
AND (t2.FYEAR * 100 + t2.FPERIOD) = @period
|
||||
AND t2.FACCTGORGID = @ACCTGORGID
|
||||
AND t2.FCOMPUTEID != ''
|
||||
AND t0.FFORMID = 'PRD_MO'
|
||||
AND t1.FENDINITKEY = 1 --期末标识
|
||||
)
|
||||
, #成本数据 AS (
|
||||
SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID
|
||||
,t1.FCOSTITEMID
|
||||
,(CASE WHEN t1.FEXPENSESITEMID = 4655037 AND t1.FCOSTITEMID = 20523 THEN 4655093 ELSE t1.FEXPENSESITEMID END) AS 'FEXPENSESITEMID'
|
||||
,t1.FEXPTYPE
|
||||
,t1.FQUALIFIEDINAMOUNT
|
||||
,t1.FCURRINPUTAMOUNT
|
||||
FROM #初始数据 t0
|
||||
CROSS APPLY (
|
||||
SELECT t1.FPRODUCTDIMEID
|
||||
,t3d.FCOSTITEMID
|
||||
,t3d.FEXPENSESITEMID
|
||||
,t3.FEXPTYPE
|
||||
,SUM(t3d.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINAMOUNT'
|
||||
,SUM(t3d.FCURRINPUTAMOUNT) 'FCURRINPUTAMOUNT'
|
||||
FROM V_CB_PROORDERINFO t1
|
||||
INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID
|
||||
AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD
|
||||
INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID
|
||||
INNER JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID
|
||||
WHERE 1 = 1
|
||||
AND t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
|
||||
AND t1.FENDINITKEY = 1
|
||||
GROUP BY t1.FPRODUCTDIMEID
|
||||
,t3d.FCOSTITEMID
|
||||
,t3d.FEXPENSESITEMID
|
||||
,t3.FEXPTYPE
|
||||
) t1
|
||||
)
|
||||
, #成本转换 AS (
|
||||
SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID
|
||||
,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15,t1.O16
|
||||
FROM (
|
||||
SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID
|
||||
,t0.FQUALIFIEDINAMOUNT,t1.fieldName
|
||||
FROM #成本数据 t0
|
||||
LEFT JOIN V_BD_COST_RESTORE_EXPENSE t1 on t0.FEXPENSESITEMID = t1.FEXPID
|
||||
WHERE NOT (t0.FCOSTITEMID = 20522 AND t0.FEXPENSESITEMID = 20045)
|
||||
)t0
|
||||
PIVOT
|
||||
(
|
||||
SUM(t0.FQUALIFIEDINAMOUNT) FOR
|
||||
t0.fieldName IN (O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15,O16)
|
||||
) AS t1
|
||||
)
|
||||
SELECT t0.*
|
||||
,ISNULL(t1.O1,0) AS 'O1'
|
||||
,ISNULL(t1.O2,0) AS 'O2'
|
||||
,ISNULL(t1.O3,0) AS 'O3'
|
||||
,ISNULL(t1.O4,0) AS 'O4'
|
||||
,ISNULL(t1.O5,0) AS 'O5'
|
||||
,ISNULL(t1.O6,0) AS 'O6'
|
||||
,ISNULL(t1.O7,0) AS 'O7'
|
||||
,ISNULL(t1.O8,0) AS 'O8'
|
||||
,ISNULL(t1.O9,0) AS 'O9'
|
||||
,ISNULL(t1.O10,0) AS 'O10'
|
||||
,ISNULL(t1.O11,0) AS 'O11'
|
||||
,ISNULL(t1.O12,0) AS 'O12'
|
||||
,ISNULL(t1.O13,0) AS 'O13'
|
||||
,ISNULL(t1.O14,0) AS 'O14'
|
||||
,ISNULL(t1.O15,0) AS 'O15'
|
||||
,ISNULL(t1.O16,0) AS 'O16'
|
||||
,ISNULL(t1.O1,0) +ISNULL(t1.O2,0) + ISNULL(t1.O3,0) + ISNULL(t1.O4,0)
|
||||
+ ISNULL(t1.O5,0) + ISNULL(t1.O6,0) + ISNULL(t1.O7,0) + ISNULL(t1.O8,0)
|
||||
+ ISNULL(t1.O9,0) + ISNULL(t1.O10,0) + ISNULL(t1.O11,0) + ISNULL(t1.O12,0)
|
||||
+ ISNULL(t1.O13,0) + ISNULL(t1.O14,0) + ISNULL(t1.O15,0) + ISNULL(t1.O16,0) AS 'CostAll'
|
||||
,t2.FNUMBER
|
||||
,t2_l.FNAME
|
||||
,t2_l.FDESCRIPTION
|
||||
FROM #初始数据 t0
|
||||
LEFT JOIN #成本转换 t1 on t0.FBILLID = t1.FBILLID
|
||||
AND t0.FBILLENTRYID = t1.FBILLENTRYID
|
||||
INNER JOIN T_BD_MATERIAL t2 on t0.FPRODUCTID = t2.FMATERIALID
|
||||
INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052
|
||||
|
||||
""".format(str(dateVal),whereSql)
|
||||
|
||||
# raise Exception(moSqlL);
|
||||
datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL);
|
||||
if datas != None and datas.Count > 0:
|
||||
# raise Exception(str(datas.Count));
|
||||
proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity")
|
||||
proRows = this.View.Model.GetEntityDataObject(proEntity)
|
||||
|
||||
this.View.Session["ProcessRateValue"] = 1
|
||||
this.View.Model.BeginIniti();
|
||||
proRows.Clear()
|
||||
num = 0;
|
||||
count = datas.Count
|
||||
for data in datas:
|
||||
row = DynamicObject(proEntity.DynamicObjectType)
|
||||
costQ = 0
|
||||
costT = 0
|
||||
billno = data["FPRODUCTNO"]
|
||||
|
||||
num = num + 1
|
||||
|
||||
this.View.Session["ProcessRateValue"] = int(num * 100/ count);
|
||||
this.View.Session["ProcessTips"] = "共{0}条数据,已处理{1}条数据,正在处理{2}".format(count,(num-1),billno);
|
||||
resCost = GetExecCost(data["FPRODUCTNO"])
|
||||
|
||||
if resCost != None and resCost.Count > 0:
|
||||
resCostRow = resCost[0]
|
||||
costQ = resCostRow["costQ"]
|
||||
costT = resCostRow["costT"]
|
||||
|
||||
row["FMoBillNo"] = data["FPRODUCTNO"]
|
||||
row["FProMaterialNumber"] = data["FNUMBER"]
|
||||
row["FProMaterialName"] = data["FNAME"]
|
||||
row["FQUALIFIEDINQTY"] = data["FSTOCKINQUASELAUXQTY"]
|
||||
row["FMaterialCostQ"] = costQ
|
||||
row["FLaborCostS"] = data["O1"]
|
||||
row["FProcessCostO"] = data["O"] + costT
|
||||
row["FQ_O_S_T_R"] = data["R"] + costQ + costT
|
||||
row["FSysCostP"] = data["P"]
|
||||
# row["FO1"] = data["O1"]
|
||||
row["FMaterialCostT"] = costT
|
||||
row["FO2"] = data["O2"]
|
||||
row["FO3"] = data["O3"]
|
||||
row["FO4"] = data["O4"]
|
||||
row["FO5"] = data["O5"]
|
||||
row["FO6"] = data["O6"]
|
||||
row["FO7"] = data["O7"]
|
||||
row["FO8"] = data["O8"]
|
||||
row["FO9"] = data["O9"]
|
||||
row["FO10"] = data["O10"]
|
||||
row["FO11"] = data["O11"]
|
||||
row["FO12"] = data["O12"]
|
||||
row["FO13"] = data["O13"]
|
||||
row["FO14"] = data["O14"]
|
||||
row["FO15"] = data["O15"]
|
||||
row["FO16"] = data["O16"]
|
||||
|
||||
proRows.Add(row)
|
||||
|
||||
this.View.UpdateView("FEntity")
|
||||
this.View.Model.EndIniti();
|
||||
|
||||
def DoComputeData(billNo):
|
||||
|
||||
|
||||
|
||||
return { "CostQ" : 0,"CostT": 0 ,"CostA": 0 }
|
||||
|
||||
def GetExecCost(billNo):
|
||||
sqlL = """/*dialect*/
|
||||
EXEC PROC_CB_PRODUCT_COST_SELECT_SINGLE '{0}'
|
||||
""".format(billNo)
|
||||
res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL)
|
||||
return res;
|
||||
|
||||
# 检查批号是否符合类型
|
||||
def CheckLotText(lotText):
|
||||
if len(lotText) < 12:
|
||||
return False
|
||||
|
||||
lotFlag = lotText[:2]
|
||||
if lotFlag == "WO" or lotFlag == "RO" or lotFlag == "TO" or lotFlag == "RT" :
|
||||
return True
|
||||
|
||||
return False;
|
||||
|
||||
def showRslt(asynResult):
|
||||
if (asynResult != None and asynResult.Exception != None):
|
||||
this.View.ShowErrMessage(asynResult.Exception.Message);
|
||||
#进度条达到100%之后,关闭进度条弹窗,回调此方法,弹出提示信息
|
||||
def showFinishMsg(formResult):
|
||||
this.View.ShowMessage("数据加载完成!");
|
||||
|
||||
def ShowProgressBar():
|
||||
#调试执行任务时,可以先通过这两行调试任务执行代码
|
||||
#因为启用进度条之后,是在子线程中运行,不方便分析代码问题。调试成功之后,再屏蔽这两行,启用进度条
|
||||
# setData();
|
||||
# return;
|
||||
progressFormParameter = DynamicFormShowParameter();
|
||||
progressFormParameter.PageId = Guid.NewGuid().ToString();
|
||||
progressFormParameter.FormId = "BOS_ReportProgressMsg";
|
||||
progressFormParameter.OpenStyle.ShowType = ShowType.Modal;
|
||||
progressFormParameter.Caption = "正在加载数据...";
|
||||
progressFormParameter.HiddenCloseButton = True;
|
||||
#true表示使用真实进度,在执行任务的方法中更新进度值:代码示例,this.View.Session["ProcessRateValue"] =10
|
||||
progressFormParameter.CustomParams.Add("UseTruePro", "true");
|
||||
this.View.ShowForm(progressFormParameter,Action[FormResult](showFinishMsg));
|
||||
MainWorker.QuequeTask(this.Context,Action(setData),Action[AsynResult](showRslt));
|
||||
#自定义方法,在这里实现加载数据的任务,需要根据自己的个性化编写代码
|
||||
def setData():
|
||||
DoSetData(_whereSql)
|
||||
#根据代码执行过程大致估算出进度值,整数,最后一定要有100%,否则进度弹窗无法自动关闭
|
||||
this.View.Session["ProcessRateValue"] = 100;
|
||||
#本案例是通过值更新事件,选择年份或者月份的时候,动态加载出对应的数据
|
||||
Reference in New Issue
Block a user