diff --git a/00.未分类/UnitTestProject3/UnitTestProject3.csproj b/00.未分类/UnitTestProject3/UnitTestProject3.csproj index b5d7313..6af45f2 100644 --- a/00.未分类/UnitTestProject3/UnitTestProject3.csproj +++ b/00.未分类/UnitTestProject3/UnitTestProject3.csproj @@ -138,6 +138,21 @@ + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\UNW.MOM.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\UNW.MOM.ServicesStub.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\UNW.WMS.BusinessPlugIn.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\UNW.WMS.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\UNW.WMS.ServicePlugIn.dll + diff --git a/01.扩展/Extensions.zip b/01.扩展/Extensions.zip new file mode 100644 index 0000000..d4a9532 Binary files /dev/null and b/01.扩展/Extensions.zip differ diff --git a/01.扩展/HandleUtils/HandleUtils.csproj b/01.扩展/HandleUtils/HandleUtils.csproj index d16d81c..e4cb2d8 100644 --- a/01.扩展/HandleUtils/HandleUtils.csproj +++ b/01.扩展/HandleUtils/HandleUtils.csproj @@ -54,6 +54,7 @@ + diff --git a/01.扩展/HandleUtils/sql/仓库仓位值.sql b/01.扩展/HandleUtils/sql/仓库仓位值.sql new file mode 100644 index 0000000..bfbac5e --- /dev/null +++ b/01.扩展/HandleUtils/sql/仓库仓位值.sql @@ -0,0 +1,20 @@ +SELECT t0.FSTOCKID,t0_l.FNAME 'ֿ',t0.FNUMBER 'λ',t0f.FENTRYID,t0f.FFLEXID,t0f.FSEQ + ,t1.FNUMBER,t1.FFLEXNUMBER,t1e.FENTRYID,t1e.FSEQ,t1e.FNUMBER,t1e_l.FNAME + ,t2.* +FROM T_BD_STOCK t0 + INNER JOIN T_BD_STOCK_L t0_l on t0.FSTOCKID = t0_l.FSTOCKID AND t0_l.FLOCALEID = 2052 + INNER JOIN T_BD_STOCKFLEXITEM t0f on t0.FSTOCKID = t0f.FSTOCKID + INNER JOIN T_BAS_FLEXVALUES t1 on t1.FID = t0f.FFLEXID + INNER JOIN T_BAS_FLEXVALUESENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_BAS_FLEXVALUESENTRY_L t1e_l on t1e.FENTRYID = t1e_l.FENTRYID AND t1e_l.FLOCALEID = 2052 + CROSS APPLY ( + SELECT t2.FID 'StocklocId' + FROM T_BAS_FLEXVALUESDETAIL + UNPIVOT ( + T_BAS_FLEXVALUESDETAIL FOR FFLEXNUMBER IN (FF100001, FF100003, FF100004, FF100005,FF100007,FF100008,FF100009,FF100010,FF100013,FF100014) + ) AS t2 + WHERE 1 = 1 + --AND t2.FID = 100280 + AND t2.FFLEXNUMBER = t1.FFLEXNUMBER AND t1e.FENTRYID = t2.T_BAS_FLEXVALUESDETAIL + ) t2 +WHERE t0.FSTOCKID = 128343 \ No newline at end of file diff --git a/02.珠海市供水有限公司/ZHSW/STK_MisDelivery/sql/视图_物料期初余额结存.sql b/02.珠海市供水有限公司/ZHSW/STK_MisDelivery/sql/视图_物料期初余额结存.sql index 9baada5..49f24ce 100644 --- a/02.珠海市供水有限公司/ZHSW/STK_MisDelivery/sql/视图_物料期初余额结存.sql +++ b/02.珠海市供水有限公司/ZHSW/STK_MisDelivery/sql/视图_物料期初余额结存.sql @@ -1,5 +1,5 @@ ---IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='V_MATERIAL_INIVSTOCKDIMENSION') --Ϊͼ --- DROP VIEW V_MATERIAL_INIVSTOCKDIMENSION --ͼ +--IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='V_MATERIAL_INIVSTOCKDIMENSION') --单引号里面为视图名称 +-- DROP VIEW V_MATERIAL_INIVSTOCKDIMENSION --视图名称 --GO CREATE VIEW V_MATERIAL_INIVSTOCKDIMENSION AS @@ -10,10 +10,10 @@ SELECT ,CONVERT(nvarchar(10),FYEAR)+'.'+CONVERT(nvarchar(10),FPERIOD) AS FDATE ,FYEAR * 100 + FPERIOD AS DateNum ,ROW_NUMBER() over (ORDER BY FYEAR DESC,FPERIOD DESC) RN - --INTO #TMP_浥 + --INTO #TMP_结存单价 FROM (SELECT THO.FYEAR ,THO.FPERIOD,THIB.FAMOUNT,THIB.FQTY,THS.FSTOCKID,THS.FMATERIALID,t4.FMASTERID - FROM T_HS_INIVSTOCKDIMENSION THS --άʵ - INNER JOIN T_HS_INIVBALANCE THIB --ʱڳ ڱ + FROM T_HS_INIVSTOCKDIMENSION THS --库存维度实体对象 + INNER JOIN T_HS_INIVBALANCE THIB --即时库存期初余额 当期表 ON (THS.FENTRYID = THIB.FDIMEENTRYID AND THIB.FENDINITKEY = '0') INNER JOIN T_HS_OUTACCTG THO ON THIB.FID = THO.FID INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID = THO.FDIMENSIONID @@ -23,8 +23,8 @@ FROM (SELECT THO.FYEAR ,THO.FPERIOD,THIB.FAMOUNT,THIB.FQTY,THS.FSTOCKID,THS.FMAT --AND t4.FMASTERID in (SELECT DISTINCT FMASTERID FROM #TMP_HAS_PARENT_MIS WHERE newReferPrice !=0) UNION ALL SELECT THO.FYEAR ,THO.FPERIOD, THIB.FAMOUNT,THIB.FQTY,THS.FSTOCKID,THS.FMATERIALID,t4.FMASTERID - FROM T_HS_INIVSTOCKDIMENSION THS --άʵ - INNER JOIN T_HS_INIVBALANCE_H THIB --ʱڳ ʷ + FROM T_HS_INIVSTOCKDIMENSION THS --库存维度实体对象 + INNER JOIN T_HS_INIVBALANCE_H THIB --即时库存期初余额 历史表 ON (THS.FENTRYID = THIB.FDIMEENTRYID AND THIB.FENDINITKEY = '0') INNER JOIN T_HS_OUTACCTG THO ON THIB.FID = THO.FID INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID = THO.FDIMENSIONID diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py index a1c64b7..51b16c9 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py @@ -45,7 +45,8 @@ def ButtonClick(e): proStrList = List[str](); for row in proRows: - proStrList.Add("SELECT {0} AS 'MATERIALID' ,{1} needNum".format(row["FAnalyzeProId"]["Id"],row["FAnalyzeProQty"])) + if row["FAnalyzeProId"] != None: + proStrList.Add("SELECT {0} AS 'MATERIALID' ,{1} needNum".format(row["FAnalyzeProId"]["Id"],row["FAnalyzeProQty"])) sql = """/*dialect*/ DECLARE @needNum DECIMAL(23,6) diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx.zip b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx.zip new file mode 100644 index 0000000..7bd8d01 Binary files /dev/null and b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx.zip differ diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj index 490624e..40850a1 100644 --- a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj @@ -113,6 +113,9 @@ + + + copy $(TargetPath) "D:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin" diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/FIN.Business.PlugIn.Match/AutoWriteOffWizardEditEx.cs b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/FIN.Business.PlugIn.Match/AutoWriteOffWizardEditEx.cs index 2b6dcb6..ace6fcc 100644 --- a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/FIN.Business.PlugIn.Match/AutoWriteOffWizardEditEx.cs +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/FIN.Business.PlugIn.Match/AutoWriteOffWizardEditEx.cs @@ -38,6 +38,7 @@ using Kingdee.K3.FIN.Core.Object.ARAP; using Kingdee.K3.FIN.Core.Parameters; using Kingdee.K3.FIN.ServiceHelper; using System.ServiceModel; +using Kingdee.K3.Core.Mobile.Utils; namespace CYG.AutoWriteOffWizardEditPlugInEx.FIN.Business.PlugIn.Match { diff --git a/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py index f633d1a..e9551b9 100644 --- a/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py +++ b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py @@ -24,50 +24,60 @@ def BarItemClick(e): # raise Exception("没有此功能的操作权限!") # 销售合同计算 # 1.更新销售合同合同类型 - sql1 = """/*dialect*/ - UPDATE T_CRM_CONTRACT SET F_CYG_CONTRACTTYPE = '664cd624468638' WHERE F_CYG_CONTRACTTYPE = '' - - """ - - num = DBServiceHelper.Execute(this.Context, sql1) - - # 2.更新销售合同关联关系 - sqlL2 = """/*dialect*/ -WITH #查询数据 AS ( - SELECT t0.FBILLNO,t0.FID,t0.FSALES,t1.FBILLNO '合同单据编号' - ,t0.FCREATEDATE,t1.FID 'CONTRACT_ID',t0.FCRMCONTRACTID - ,t0.FBILLTYPEID - ,ISNULL(t2.FID,0) AS Old_CRM_ID - FROM T_SAL_ORDER t0 - INNER JOIN T_CRM_CONTRACT t1 on t0.FSALES = t1.F_CYG_YSALESNUMBER - AND t0.FCUSTID = t1.FBDCUSTID - LEFT JOIN T_CRM_CONTRACT t2 on t2.FID = t0.FCRMCONTRACTID AND t2.FDOCUMENTSTATUS = 'C' - WHERE 1=1 - --AND t0.FCRMCONTRACTID = 0 - AND t0.FDOCUMENTSTATUS = 'C' - AND t1.FDOCUMENTSTATUS = 'C' - AND t0.FBILLTYPEID = 'eacb50844fc84a10b03d7b841f3a6278' --标准销售订单 - AND t1.F_CYG_CONTRACTTYPE = '664cd624468638' -) -,#单一数据 AS ( - SELECT t0.FBILLNO,t0.FID - FROM #查询数据 t0 - WHERE t0.Old_CRM_ID = 0 - GROUP BY t0.FBILLNO,t0.FID - HAVING COUNT(1) = 1 -) -UPDATE t1 SET t1.FCRMCONTRACTID = t0.CONTRACT_ID -FROM #查询数据 t0 - INNER JOIN T_SAL_ORDER t1 on t1.FID = t0.FID - INNER JOIN #单一数据 tt on tt.FID = t0.FID -WHERE 1 = 1 - - """ - - num = DBServiceHelper.Execute(this.Context, sqlL2) - + whereSql = ""; + selectedRows = this.ListView.SelectedRowsInfo; + if selectedRows == None or selectedRows.Count == 0: + billNos = List[str](); + for row in selectedRows: + billNos.Add(row.BillNo); + + whereSql = " AND FBILLNO IN ('{0}')".format("','".join(billNos)); # 3.销售合同数据计算 sqlL = """/*dialect*/ +;WITH #销售订单 AS ( + SELECT t1.FSALES + ,SUM(t1e_f.FALLAMOUNT_LC) '累计销售订单本位币' + ,SUM(t1e.F_CYG_OPENTOTAL) AS '公开价小计' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '外购价小计' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS '安装费小计' + ,SUM(t1e.F_CYG_COSTTOTAL) AS '成本小计' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID + WHERE 1=1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.F_CYG_CHECKBALANCE != '1' + AND t1e.F_CYG_CHECKBALANCE1 != '1' + AND t1.FBILLTYPEID != 'a300e2620037435492aed9842875b451' + AND t1e.FMRPTERMINATESTATUS != 'B' + GROUP BY t1.FSALES +) +SELECT t1.* + ,t2.累计发货本位币 + ,t3.累计开票金额 + INTO #销售订单计算 +FROM #销售订单 t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS '累计发货本位币' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '2'--立账类型:暂估 + AND t3.FDOCUMENTSTATUS = 'C' + AND t3.FBYVERIFY = '0' + GROUP BY t3.FSALES + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS '累计开票金额' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '3'--立账类型:财务 + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY t3.FSALES + ) t3 + ;WITH #合同变更 AS ( SELECT t4.FOldFId ,CAST(t4.FJSONDATA AS nvarchar(4000)) AS 'FJSONDATA' @@ -78,96 +88,58 @@ WHERE 1 = 1 AND t4.FACTIVESTATUS != 'A' ) ,#销售合同计算 AS ( - SELECT t0.FID,t0.FBILLNO + SELECT t0.FID,t0.FBILLNO,t0.F_CYG_SALESNUMBER ,t0.FNAME as FName ,t0.FDOCUMENTSTATUS ,t0.F_CYG_ContractNoDL ,'A' AS 'FFORBIDSTATUS' - ,t0f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT' - ,ISNULL(t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE) AS 'FCONTRACTAMOUNT_X' - ,ISNULL(t1.SAL_ORDER_AMOUNT,0) AS 'SAL_ORDER_AMOUNT' + ,t0f.FCONTRACTAMOUNT_LC AS '合同金额' + ,t0.F_CYG_ORIGINAL_AMOUNT AS '原始合同金额' + --,ISNULL(t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE) AS '合同变化金额' + ,t0f.FCONTRACTAMOUNT_LC - t0.F_CYG_ORIGINAL_AMOUNT AS '合同变化金额' + ,ISNULL(t1.累计销售订单本位币,0) AS '累计销售订单本位币' ,ISNULL(t1.公开价小计,0) AS '公开价小计' ,ISNULL(t1.外购价小计,0) AS '外购价小计' ,ISNULL(t1.安装费小计,0) AS '安装费小计' ,ISNULL(t1.成本小计,0) AS '成本小计' - ,ISNULL(t2.AR_RECEIVABLE_AMOUNT,0) AS 'AR_RECEIVABLE_AMOUNT' - ,ISNULL(t3.AR_RECEIVABLE_AMOUNT2,0) AS 'AR_RECEIVABLE_AMOUNT2' + ,ISNULL(t1.累计发货本位币,0) AS '累计发货本位币' + ,ISNULL(t1.累计开票金额,0) AS '累计开票金额' FROM T_CRM_CONTRACT t0 INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID - OUTER APPLY ( - SELECT t0.FID AS 'CONTRACT_ID' - ,SUM(t1e_f.FALLAMOUNT_LC) SAL_ORDER_AMOUNT - ,SUM(t1e.F_CYG_OPENTOTAL) AS '公开价小计' - ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '外购价小计' - ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS '安装费小计' - ,SUM(t1e.F_CYG_COSTTOTAL) AS '成本小计' - FROM T_SAL_ORDER t1 - INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID - INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID - WHERE t1.FCRMContractId = t0.FID - AND t1.FDOCUMENTSTATUS = 'C' - GROUP BY t1.FCRMContractId - ) t1 - OUTER APPLY ( - SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT,tt.FCRMContractId - FROM T_SAL_ORDER tt - INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS - INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID - WHERE tt.FCRMContractId = t0.FID - AND tt.FDOCUMENTSTATUS = 'C' - AND t3.FSETACCOUNTTYPE = '2'--立账类型:暂估 - AND t3.FDOCUMENTSTATUS = 'C' - AND CHARINDEX('-',t3.FBILLNO) = 0 - GROUP BY tt.FCRMContractId - ) t2 - OUTER APPLY ( - SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT2,tt.FCRMContractId - FROM T_SAL_ORDER tt - INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS - INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID - WHERE tt.FCRMContractId = t0.FID - AND tt.FDOCUMENTSTATUS = 'C' - AND t3.FSETACCOUNTTYPE = '3'--立账类型:财务 - AND t3.FDOCUMENTSTATUS = 'C' - AND CHARINDEX('-',t3.FBILLNO) = 0 - GROUP BY tt.FCRMContractId - ) t3 - OUTER APPLY ( - SELECT CAST(JSON_VALUE(t4.FJSONDATA,'$.CRM_ContractFIN[0].FCONTRACTAMOUNT_LC') AS decimal(23,10)) - t0f.FCONTRACTAMOUNT_LC 'FCONTRACTAMOUNT_X' - FROM #合同变更 t4 - WHERE t4.FOLDFID = t0.FID AND t4.RN = 2 - ) t4 + LEFT JOIN #销售订单计算 t1 on t1.FSALES = t0.F_CYG_YSALESNUMBER WHERE 1=1 AND t0.FDOCUMENTSTATUS = 'C' AND t0.F_CYG_CONTRACTTYPE = '664cd624468638' + {1} ) -, #最终数据 AS ( - SELECT t0.FID,t0.FBILLNO - ,t0.FCONTRACTAMOUNT AS '合同金额' - ,t0.FCONTRACTAMOUNT_X AS '合同变化金额' - ,t0.SAL_ORDER_AMOUNT AS '累计销售订单本位币' - ,t0.FCONTRACTAMOUNT - t0.SAL_ORDER_AMOUNT AS '未下单销售订单本位币' - ,t0.AR_RECEIVABLE_AMOUNT AS '累计发货本位币' - ,t0.SAL_ORDER_AMOUNT - t0.AR_RECEIVABLE_AMOUNT AS '剩余未发货本位币' - ,0 AS '合同收款金额' - ,0 AS '合同发货未收款金额' - ,t0.AR_RECEIVABLE_AMOUNT2 AS '累计开票金额' - ,t0.AR_RECEIVABLE_AMOUNT - t0.AR_RECEIVABLE_AMOUNT2 AS '未开票金额' - ,t0.公开价小计 - ,t0.外购价小计 - ,t0.安装费小计 - ,t0.成本小计 - FROM #销售合同计算 t0 -) ---SELECT * ---FROM #最终数据 t0 ---WHERE 1=1 +SELECT tt.FID,tt.FBILLNO,tt.F_CYG_SALESNUMBER,tt.FName + --,tt.FDOCUMENTSTATUS,tt.F_CYG_CONTRACTNODL,tt.FFORBIDSTATUS + ,tt.合同金额,tt.合同变化金额,tt.累计销售订单本位币,tt.合同金额 - tt.累计销售订单本位币 AS '未下单销售订单本位币' + ,tt.累计发货本位币,tt.累计开票金额 + ,tt.累计销售订单本位币 - tt.累计发货本位币 AS '剩余未发货本位币' + ,tt.累计发货本位币 - tt.累计开票金额 AS '未开票金额' + ,tt.安装费小计,tt.成本小计,tt.公开价小计,tt.外购价小计 + INTO #最终数据 +FROM #销售合同计算 tt + INNER JOIN T_CRM_CONTRACTFIN t0 on t0.FID = tt.FID +WHERE NOT ( t0.F_CYG_CUMSALESORDERS = tt.累计销售订单本位币 + AND t0.F_CYG_NOORDERSALES = tt.合同金额 - tt.累计销售订单本位币 + AND t0.F_CYG_CUMSHIPMENT = tt.累计发货本位币 + AND t0.F_CYG_REMAINSHIPMENT = tt.累计销售订单本位币 - tt.累计发货本位币 + AND t0.F_CYG_CONTRACTCHANGE = tt.合同变化金额 + AND t0.F_CYG_ACCUMULATEDINVOIC = tt.累计开票金额 + AND t0.F_CYG_UNINVOICEDAMOUNT = tt.累计发货本位币 - tt.累计开票金额 + AND t0.F_CYG_OPENPRICE = tt.公开价小计 + AND t0.F_CYG_OUTSOURCINGPRICE = tt.外购价小计 + AND t0.F_CYG_MOUNTINGCOST = tt.安装费小计 + AND t0.F_CYG_COST = tt.成本小计) + UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.累计销售订单本位币 ,t0.F_CYG_NOORDERSALES = tt.未下单销售订单本位币 ,t0.F_CYG_CUMSHIPMENT = tt.累计发货本位币 ,t0.F_CYG_REMAINSHIPMENT = tt.剩余未发货本位币 - ,t0.F_CYG_CONTRACTCOLLECTION = tt.合同收款金额 - ,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.合同发货未收款金额 + --,t0.F_CYG_CONTRACTCOLLECTION = tt.合同收款金额 + --,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.合同发货未收款金额 ,t0.F_CYG_CONTRACTCHANGE = tt.合同变化金额 ,t0.F_CYG_ACCUMULATEDINVOIC = tt.累计开票金额 ,t0.F_CYG_UNINVOICEDAMOUNT = tt.未开票金额 @@ -177,6 +149,15 @@ UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.累计销售订单本位币 ,t0.F_CYG_COST = tt.成本小计 FROM T_CRM_CONTRACTFIN t0 INNER JOIN #最终数据 tt on t0.FID = tt.FID - """ + +UPDATE t0 SET t0.FMODIFYDATE = GETDATE() + ,t0.FMODIFIERID = {0} +FROM T_CRM_CONTRACT t0 + INNER JOIN #最终数据 tt on t0.FID = tt.FID + +DROP TABLE #销售订单计算 +DROP TABLE #最终数据 + + """.format(this.Context.UserId,whereSql) num = DBServiceHelper.Execute(this.Context, sqlL) \ No newline at end of file diff --git a/05.长园/CYG.Python/CYG.Python.pyproj b/05.长园/CYG.Python/CYG.Python.pyproj index f958dfb..c9e4281 100644 --- a/05.长园/CYG.Python/CYG.Python.pyproj +++ b/05.长园/CYG.Python/CYG.Python.pyproj @@ -22,6 +22,7 @@ false + @@ -29,6 +30,7 @@ + diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdateSubFORECAST.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdateSubFORECAST.sql index 70448fa..29c4d0a 100644 --- a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdateSubFORECAST.sql +++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdateSubFORECAST.sql @@ -1,6 +1,9 @@ CREATE PROCEDURE P_UpdateSubFORECAST + @billnoStr varchar(8000) AS BEGIN + EXEC PROC_SELECT_UPDATE_BOMLEVEL2 @billnoStr + --ίⶩί ,ԴΪίⶩ UPDATE t0e SET FFORECASTGROUP = ISNULL( cast( t1.FBILLNO as nvarchar(100))+'-'+ cast(dbo.GetBomSeq(t1e.fbomid,t0e.fmaterialid) as nvarchar(100)) ,'') diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower.zip b/07.珠海英搏尔/GZ.LJY000.Enpower.zip new file mode 100644 index 0000000..a9432c2 Binary files /dev/null and b/07.珠海英搏尔/GZ.LJY000.Enpower.zip differ diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/20250302.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/20250302.sql new file mode 100644 index 0000000..a609d71 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/20250302.sql @@ -0,0 +1,231 @@ +CREATE PROCEDURE [dbo].[PROC_SELECT_UPDATE_BOMLEVEL2] + @billnoStr varchar(8000) +AS +BEGIN + CREATE TABLE #TMP_MO --ʱ#TMP + ( + FID INT + ,FBILLNO VARCHAR(255) + ,FDATE DATE + ,FENTRYID INT + ,FMATERIALID INT + ,OMATERAILID int + ,MOBOMID INT + ,FSRCFORMID VARCHAR(255) + ,FSRCBILLNO VARCHAR(255) + ,FSRCINTERID INT + ,FSRCENTRYID INT + ,FSEQ INT + ,FBOMID INT + ,BOMLEVEL VARCHAR(255) + ,TOPBILLNO VARCHAR(255) + ,FFORECASTGROUP varchar(255) + ); + + CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID); + + --INSERT INTO #TMP_MO + /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */ + SELECT + t0e.FID + ,t0.FBILLNO + ,t0.FDATE + ,t0e.FENTRYID + ,t0e.FMATERIALID + ,t0e.FBomId MOBomId + ,t1.FSRCFORMID --'Դ' + ,t1.FSRCBILLNO --'Դ' + ,t1.FSRCINTERID /*Դ*/ + ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ + ,t2e.FSEQ + ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/ + ,t2e.FMATERIALID OMATERAILID + ,t0e.FFORECASTGROUP + --,t0_lk.FSTABLENAME + --,t0_lk.FSTABLEID + --,t0_lk.FSBILLID + --,t0_lk.FSID + --,t0e_Q.FSRCSPLITID + ,'' BOMLevel + INTO #TMP_MO_PART + FROM T_SUB_REQORDER t0 --ͷ + INNER JOIN T_SUB_REQORDERENTRY t0e ON t0e.FID=t0.FID -- + --INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID + --LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID + INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ + INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ + INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ + WHERE 1 = 1 + --t0.FBILLNO='WO2401100002' /**/ + --AND t0e.FFORECASTGROUP='' /*Ϊ*/ + --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043' + AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/ + --AND t0e_Q.FSRCSPLITID = 0 + AND t0.FBILLNO in (SELECT b.billno FROM (SELECT CAST(''+REPLACE(@billnoStr,',','')+'' AS xml) billno ) a OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b ) --Ų + + + INSERT INTO #TMP_MO + SELECT + tt.FID + ,tt.FBILLNO + ,tt.FDATE + ,tt.FENTRYID + ,tt.FMATERIALID + ,tt.OMATERAILID + ,tt.MOBomId + ,tt.FSRCFORMID --'Դ' + ,tt.FSRCBILLNO --'Դ' + ,tt.FSRCINTERID /*Դ*/ + ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ + ,tt.FSEQ + ,CASE tt.FBomId WHEN 0 THEN ISNULL(t0.MOBomId,0) ELSE tt.FBomId END /*ԤⶩFBomIdȡƥBOM༶չײ ȴԤⵥȡֵԤⵥΪʱȡ*/ + ,tt.BOMLevel + ,ISNULL(t0.FBILLNO,'޶') FBILLNO + ,tt.FFORECASTGROUP + --into #TMP_MO + FROM + #TMP_MO_PART tt + LEFT JOIN ( + SELECT + FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID + ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID + FROM + #TMP_MO_PART + WHERE FMATERIALID = OMATERAILID + ) t0 ON 1=1 + AND tt.FBOMID = t0.FBOMID + AND tt.FSEQ = t0.FSEQ + AND tt.FSRCINTERID = t0.FSRCINTERID + AND tt.FSRCENTRYID = t0.FSRCENTRYID + AND tt.FDATE = t0.FDATE + --AND t0.ROWID =1 + AND tt.OMATERAILID = t0.FMATERIALID + AND t0.Billnolen = len(tt.FBILLNO) + --AND tt.fsid = t0.FSID + WHERE 1 = 1 + --AND tt.FFORECASTGROUP = '' + + CREATE TABLE #TMP_TOP_BOM_SET( + FID int + ,FNUMBER varchar(80) + ,FMATERIALID int + ,FSEQ int + ,BOMLEVEL int + ,TOPID int + ,showlevel varchar(80) + ,oId int + ) + CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID); + + INSERT INTO #TMP_TOP_BOM_SET + SELECT + t0.FID + ,t0.FNUMBER + ,t0.FMATERIALID + ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid) + ,1 'BOMLEVEL' + ,t0.FID AS 'TOPID' + ,'' + ,t0.FID + FROM + T_ENG_BOM t0 + INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID + WHERE 1 = 1 + AND t3.FMATERIALID = t3.OMATERAILID + GROUP BY + t0.FID + ,t0.FNUMBER + ,t0.FMATERIALID + + + DECLARE @num INT,@level int,@LoopCount int + SET @num = 1 + SET @level =1 + SET @LoopCount = 0; + WHILE (@num <> 0 AND @LoopCount < 30) + BEGIN + INSERT INTO #TMP_TOP_BOM_SET + SELECT + t3.FID + ,t3.FNUMBER + ,t3.FMATERIALID + ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq) + ,t0.BOMLEVEL + 1 + ,t0.TOPID + ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR)) + ,t0.FID + FROM + #TMP_TOP_BOM_SET t0 + INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID + INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID + INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID + WHERE 1 = 1 + AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 ) + AND t0.BOMLEVEL = @level + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 + END + + SELECT + * + INTO #TMP_TOP_BOM_GROUP + FROM #TMP_TOP_BOM_SET + WHERE 1 = 1 + GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId + + SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP + INTO #TMP_MO_GROUP + FROM #TMP_MO + GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP + + ----ʱ + --UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'') + --FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID + + --ʱ 2024-01-23 + UPDATE t0 SET t0.BOMLEVEL = (CASE t0.TOPBILLNO WHEN '޶' THEN '' ELSE ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'') END) + FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID + + --µݿ + UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO + FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID + WHERE t0e.FFORECASTGROUP = '' + --SELECT t0.*,t1.fnumber + + --FROM #TMP_TOP_BOM_GROUP t0 + --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid + + ----WHERE t0.TOPID = 8062230 + --order by t0.FSEQ,t0.BOMLEVEL + --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043' + --SELECT t0.* + -- ,t0_lk.FSTABLENAME + -- ,t0_lk.FSTABLEID + -- ,t0_lk.FSBILLID + -- ,t0_lk.FSID + -- ,t0e_Q.FSRCSPLITBILLNO + -- ,t0e_Q.FSRCSPLITID + -- ,t0e_Q.FSRCSPLITSEQ + -- ,t0e_Q.FSRCSPLITENTRYID + -- --INTO #TMP_MO_PART + -- FROM #TMP_MO_GROUP t0 + -- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID + -- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID + -- WHERE 1 = 1 + --AND FBOMID =8237478 AND MOBOMID =8237478 + --AND topbillno='WO2311080183' + --SELECT * FROM #TMP_MO WHERE 1 = 1 + --AND FBOMID <> MOBOMID + --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ + DROP TABLE #TMP_MO_GROUP + DROP TABLE #TMP_MO_PART + DROP TABLE #TMP_TOP_BOM_SET + DROP TABLE #TMP_TOP_BOM_GROUP + DROP TABLE #TMP_MO --ɾʱ#TMP +END + +--SET STATISTICS TIME ON +--EXEC PROC_UPDATE_BOMLEVEL +--SET STATISTICS TIME OFF \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj b/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj index 816c8fe..6f006b8 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj @@ -54,6 +54,9 @@ ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.WebApi.FormService.dll + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.BD.Contracts.dll @@ -104,18 +107,23 @@ + + + + + + - diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs index 641ab88..0383631 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs @@ -26,12 +26,13 @@ namespace GZ.LJY000.Enpower.POSH_N3_Forecast.BillConvertPlugInEx { var sqlL = $@"/*dialect*/ -WITH #年度预测 AS ( +;WITH #N3预测 AS ( SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID,t1.FCUSTID ,t1.FQTY,t1.FYEAR '年份' ,t1.FMONTH '月份' ,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FN','') + t1.FMONTH 周期 ,CONVERT(int,t1.FYEAR * 10000 + REPLACE(T1.DATEM,'FN','') *100 + t1.FMONTH * 100 + 1) AS '日期' ,CONVERT(datetime,DATEFROMPARTS(t1.FYEAR,CONVERT(int,REPLACE(T1.DATEM,'FN',''))+ t1.FMONTH,1)) 'startDate' + ,t1.FYEAR FROM ( SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSEQ,t0e.FYEAR,t0e.FMONTH,t0e.FMATERIALID,t0e.FUNITID,t0e.FCUSTID,t0e.FN0,t0e.FN1,t0e.FN2,t0e.FN3 FROM T_PLN_FORECAST2N3 t0 --表头 @@ -45,7 +46,9 @@ WITH #年度预测 AS ( SELECT tt.* ,DATEADD(SECOND,-1,DATEADD(MONTH, 1, tt.startDate)) AS 'endDate' ,CASE WHEN ISNULL(t0.FQTY,0) > tt.FQTY THEN 0 ELSE tt.FQTY - ISNULL(t0.FQTY,0) END '最终数量' -FROM #年度预测 tt + ,tt.FQTY 'F_OriginalQty',t0.FQTY 'W5Qty' + INTO #table1 +FROM #N3预测 tt OUTER APPLY ( SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY FROM ( @@ -64,7 +67,38 @@ FROM #年度预测 tt GROUP BY t1.FMATERIALID,t1.FCUSTID--,t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) ) t0 -ORDER BY tt.startDate,tt.FSEQ +declare @startDate date,@endDate date +SELECT @startDate = MIN(t0.startDate),@endDate = MAX(t0.endDate) +FROM #table1 t0 + +;WITH #发货通知单 AS ( + SELECT t0.FBILLNO,t0.FDATE,t0.FCUSTOMERID,t0e.FMATERIALID,t0e.FQTY,t0e.F_PNDR_BASEQTY3 '2次调拨' + FROM T_SAL_DELIVERYNOTICE t0 + INNER JOIN T_SAL_DELIVERYNOTICEENTRY t0e on t0.FID = t0e.FID + WHERE t0.FDOCUMENTSTATUS = 'C' + AND t0.FDATE between @startDate AND @endDate +) +,#最终数据 AS ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR,t0.FCUSTID,t0.startDate,t0.endDate,t0.FSEQ,ISNULL(t1.FQTY,0) 'F_DelivQty',ISNULL(t1.[2次调拨],0) 'F_Direct2Qty' + ,t0.F_OriginalQty,t0.W5Qty + ,CASE WHEN t0.最终数量 < (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) THEN 0 ELSE t0.最终数量 - (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) END AS '最终数量' + ,t0.年份,t0.周期 - (t0.年份 * 100) 月份 + FROM #table1 t0 + OUTER APPLY ( + SELECT SUM(t1.FQTY) FQTY ,SUM(t1.[2次调拨]) [2次调拨] + FROM #发货通知单 t1 + WHERE 1 = 1 AND t1.FMATERIALID = t0.FMATERIALID + AND t0.FCUSTID = t1.FCUSTOMERID + AND t1.FDATE BETWEEN t0.startDate AND t0.endDate + ) t1 +) +SELECT t0.* +FROM #最终数据 t0 +WHERE t0.最终数量 > 0 +ORDER BY t0.startDate,t0.FSEQ + +DROP TABLE #table1 + "; //throw new Exception(sqlL); var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); @@ -108,19 +142,15 @@ ORDER BY tt.startDate,tt.FSEQ var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); var qty = decimal.Parse(item["最终数量"].ToString()); entity["Qty"] = qty; + entity["F_DelivQty"] = decimal.Parse(item["F_DelivQty"].ToString()); + entity["F_Direct2Qty"] = decimal.Parse(item["F_Direct2Qty"].ToString()); + entity["F_OriginalQty"] = decimal.Parse(item["F_OriginalQty"].ToString()); + entity["F_W5Qty"] = decimal.Parse(item["W5Qty"].ToString()); entity["StartDate"] = item["startDate"]; entity["EndDate"] = item["endDate"]; - - ////# 货主类型 - //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; - ////# 货主 - //var ownerId = item["FOWNERID"].Long2Int(); - //if (ownerId > 0) - //{ - // var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); - // entity["FOwnerId_Id"] = ownerId; - // entity["FOwnerId"] = ownerObj; - //} + entity["F_Year"] = item["年份"]; + entity["F_Month"] = item["月份"]; + entity["FCloseStatus"] = "A"; var custId = item["FCUSTID"].Long2Int(); if (custId > 0) diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/OperationEventPlugIn/Audit.py b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/OperationEventPlugIn/Audit.py new file mode 100644 index 0000000..5b461ca --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/OperationEventPlugIn/Audit.py @@ -0,0 +1,108 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +clr.AddReference('Kingdee.BOS.WebApi.FormService') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * +from Kingdee.BOS.WebApi.FormService import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FVersions"); + e.FieldKeys.Add("FBillNo"); + +def EndOperationTransaction(e): + # raise Exception("A") + if this.FormOperation.OperationId == 1: + DoClosePLN_FORECAST(e); +def DoClosePLN_FORECAST(e): + for entity in e.DataEntitys: + billNo = entity["BillNo"] + billId = entity["Id"] + + sqlL = """/*dialect*/ + +SELECT t0.FBILLNO,t0.FID,t0.FCONVERTBILLNO,t0e.FENTRYID,t0e.FCLOSESTATUS,t0.FBILLTYPEID +FROM ( + SELECT top 1 t0.FID + FROM T_PLN_FORECAST t0 + WHERE 1= 1 AND t0.FCONVERTBILLNO != '{0}' + --AND t0.FBILLTYPEID = '67707a90214919' --年度 + --AND t0.FBILLTYPEID = '6771142c2149d1' --w+5 + AND t0.FBILLTYPEID = '6771142c2149d1' --N+3 + ORDER BY t0.FBILLNO DESC,t0.FDATE DESC + ) tt INNER JOIN T_PLN_FORECAST t0 on t0.FID = tt.FID + INNER JOIN T_PLN_FORECASTENTRY t0e on t0e.FID = t0.FID +WHERE 1= 1 + AND (t0e.FCLOSESTATUS = 'A' OR t0e.FCLOSESTATUS = '') + + """.format(billNo) + # raise Exception(sqlL); + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + if dataList.Count == 0: + return; + # 请求参数 + + id = dataList[0]["FID"] + pkEntryIds = List[str]() + para = {"CreateOrgId":this.Context.UserId,"Numbers":[],"Ids":"","PkEntryIds":[],"UseOrgId":this.Context.CurrentOrganizationInfo.ID,"NetworkCtrl":"","IgnoreInterationFlag":""} + for item in dataList: + # pkEntryIds.Add(str(item["FENTRYID"])) + para["PkEntryIds"].Add({"Id":str(item["FID"]),"EntryIds":str(item["FENTRYID"])}) + + + # raise Exception(JsonUtil.Serialize(para)) + # 业务对象标识 + formId = "PLN_FORECAST" + # 操作接口编码 + operateNumber = "BillClose" + resultJson = WebApiServiceCall.Execute(this.Context, formId, operateNumber, JsonUtil.Serialize(para)); + # raise Exception(JsonUtil.Serialize(resultJson)) + if resultJson !=None : + IsSuccess = resultJson["Result"]["ResponseStatus"]["IsSuccess"] + if IsSuccess==False: + raise Exception(JsonUtil.Serialize(resultJson)) + updSql = """/*dialect*/ +WITH #上版本 AS ( + SELECT TOP 1 t1.* + FROM T_PLN_FORECAST2N3 t0 + INNER JOIN T_PLN_FORECAST2N3 t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR + WHERE t0.FBILLNO = '{0}' + AND t1.FBILLNO != '{0}' + ORDER By t1.FBILLNO DESC +) +UPDATE T_PLN_FORECAST2N3 SET FIsClose = 'B' +FROM T_PLN_FORECAST2N3 t0 + INNER JOIN #上版本 t1 on t1.FID = t0.FID +WHERE t1.FIsClose != 'B' + """.format(billNo) + + res = DBServiceHelper.Execute(this.Context, updSql) + + return; \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_PRODUCTCOSTQUICKQUERY2/BillEventPlugInEx.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_PRODUCTCOSTQUICKQUERY2/BillEventPlugInEx.cs index 7db1656..e1684d7 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_PRODUCTCOSTQUICKQUERY2/BillEventPlugInEx.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_PRODUCTCOSTQUICKQUERY2/BillEventPlugInEx.cs @@ -93,7 +93,7 @@ namespace GZ.LJY000.Enpower.POSH_PRODUCTCOSTQUICKQUERY2 /// private void ShowProgressBar(string whereSql) { - // + var progressFormParameter = new DynamicFormShowParameter(); progressFormParameter.PageId = Guid.NewGuid().ToString(); progressFormParameter.FormId = "BOS_ReportProgressMsg"; diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs index 63366c9..bb9c3dc 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs @@ -85,17 +85,26 @@ FROM #table1 t0 WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FDATE between @startDate AND @endDate ) -SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR,t0.FCUSTID,t0.minDate,t0.maxDate - ,CASE WHEN t0.最终数量 < (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) THEN 0 ELSE t0.最终数量 - (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) END AS '最终数量' -FROM #table1 t0 - OUTER APPLY ( - SELECT SUM(t1.FQTY) FQTY ,SUM(t1.[2次调拨]) [2次调拨] - FROM #发货通知单 t1 - WHERE 1 = 1 AND t1.FMATERIALID = t0.FMATERIALID - AND t0.FCUSTID = t1.FCUSTOMERID - AND t1.FDATE BETWEEN t0.minDate AND t0.maxDate - ) t1 +,#最终数据 AS ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR,t0.FCUSTID,t0.minDate,t0.maxDate + ,CASE WHEN t0.最终数量 < (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) THEN 0 ELSE t0.最终数量 - (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) END AS '最终数量' + ,ISNULL(t1.FQTY,0) 'F_DelivQty',ISNULL(t1.[2次调拨],0) 'F_Direct2Qty' + ,t0.最终数量 'F_OriginalQty' + FROM #table1 t0 + OUTER APPLY ( + SELECT SUM(t1.FQTY) FQTY ,SUM(t1.[2次调拨]) [2次调拨] + FROM #发货通知单 t1 + WHERE 1 = 1 AND t1.FMATERIALID = t0.FMATERIALID + AND t0.FCUSTID = t1.FCUSTOMERID + AND t1.FDATE BETWEEN t0.minDate AND t0.maxDate + ) t1 + --ORDER BY t0.minDate ASC +) +SELECT t0.* +FROM #最终数据 t0 +WHERE t0.最终数量 > 0 ORDER BY t0.minDate ASC + DROP TABLE #table1 "; //throw new Exception(sqlL); @@ -140,9 +149,16 @@ DROP TABLE #table1 var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); var qty = decimal.Parse(item["最终数量"].ToString()); entity["Qty"] = qty; + + entity["F_DelivQty"] = decimal.Parse(item["F_DelivQty"].ToString()); + entity["F_Direct2Qty"] = decimal.Parse(item["F_Direct2Qty"].ToString()); + entity["F_OriginalQty"] = decimal.Parse(item["F_OriginalQty"].ToString()); + entity["F_W5Qty"] = 0; + entity["StartDate"] = item["minDate"]; entity["EndDate"] = item["maxDate"]; - + entity["F_Year"] = item["FYEAR"]; + entity["FCloseStatus"] = "A"; ////# 货主类型 //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; ////# 货主 diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/OperationEventPlugIn/Audit.py b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/OperationEventPlugIn/Audit.py new file mode 100644 index 0000000..9962997 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/OperationEventPlugIn/Audit.py @@ -0,0 +1,108 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +clr.AddReference('Kingdee.BOS.WebApi.FormService') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * +from Kingdee.BOS.WebApi.FormService import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FVersions"); + e.FieldKeys.Add("FBillNo"); + +def EndOperationTransaction(e): + # raise Exception("A") + if this.FormOperation.OperationId == 1: + DoClosePLN_FORECAST(e); +def DoClosePLN_FORECAST(e): + for entity in e.DataEntitys: + billNo = entity["BillNo"] + billId = entity["Id"] + + sqlL = """/*dialect*/ + +SELECT t0.FBILLNO,t0.FID,t0.FCONVERTBILLNO,t0e.FENTRYID,t0e.FCLOSESTATUS,t0.FBILLTYPEID +FROM ( + SELECT top 1 t0.FID + FROM T_PLN_FORECAST t0 + WHERE 1= 1 AND t0.FCONVERTBILLNO != '{0}' + --AND t0.FBILLTYPEID = '67707a90214919' --年度 + AND t0.FBILLTYPEID = '67707ab6214975' --w+5 + --AND t0.FBILLTYPEID = '6771142c2149d1' --N+3 + ORDER BY t0.FBILLNO DESC,t0.FDATE DESC + ) tt INNER JOIN T_PLN_FORECAST t0 on t0.FID = tt.FID + INNER JOIN T_PLN_FORECASTENTRY t0e on t0e.FID = t0.FID +WHERE 1= 1 + AND (t0e.FCLOSESTATUS = 'A' OR t0e.FCLOSESTATUS = '') + + """.format(billNo) + # raise Exception(sqlL); + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + if dataList.Count == 0: + return; + # 请求参数 + + id = dataList[0]["FID"] + pkEntryIds = List[str]() + para = {"CreateOrgId":this.Context.UserId,"Numbers":[],"Ids":"","PkEntryIds":[],"UseOrgId":this.Context.CurrentOrganizationInfo.ID,"NetworkCtrl":"","IgnoreInterationFlag":""} + for item in dataList: + # pkEntryIds.Add(str(item["FENTRYID"])) + para["PkEntryIds"].Add({"Id":str(item["FID"]),"EntryIds":str(item["FENTRYID"])}) + + + # raise Exception(JsonUtil.Serialize(para)) + # 业务对象标识 + formId = "PLN_FORECAST" + # 操作接口编码 + operateNumber = "BillClose" + resultJson = WebApiServiceCall.Execute(this.Context, formId, operateNumber, JsonUtil.Serialize(para)); + # raise Exception(JsonUtil.Serialize(resultJson)) + if resultJson !=None : + IsSuccess = resultJson["Result"]["ResponseStatus"]["IsSuccess"] + if IsSuccess==False: + raise Exception(JsonUtil.Serialize(resultJson)) + updSql = """/*dialect*/ +WITH #上版本 AS ( + SELECT TOP 1 t1.* + FROM T_PLN_FORECAST2W5 t0 + INNER JOIN T_PLN_FORECAST2W5 t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR + WHERE t0.FBILLNO = '{0}' + AND t1.FBILLNO != '{0}' + ORDER By t1.FBILLNO DESC +) +UPDATE T_PLN_FORECAST2W5 SET FIsClose = 'B' +FROM T_PLN_FORECAST2W5 t0 + INNER JOIN #上版本 t1 on t1.FID = t0.FID +WHERE t1.FIsClose != 'B' + """.format(billNo) + + res = DBServiceHelper.Execute(this.Context, updSql) + + return; \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs index ac53f7a..62d7108 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs @@ -4,6 +4,7 @@ using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; +using Kingdee.BOS.WebApi.FormService; using System; using System.Collections.Generic; using System.ComponentModel; @@ -26,7 +27,8 @@ namespace GZ.LJY000.Enpower.POSH_Year_Forecast.BillConvertPlugInEx { var sqlL = $@"/*dialect*/ -WITH #年度预测 AS ( + +;WITH #年度预测 AS ( SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID,t1.FCUSTID ,t1.FQTY,t1.FYEAR '年份' ,REPLACE(T1.DATEM,'FMONTH','') '月份' ,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FMONTH','') 周期 @@ -45,6 +47,8 @@ SELECT tt.* ,DATEADD(SECOND,-1,DATEADD(MONTH, 1, tt.startDate)) AS 'endDate' --,t0.FQTY AS 'W5数量' ,CASE WHEN ISNULL(t0.FQTY,0) > tt.FQTY THEN 0 ELSE tt.FQTY - ISNULL(t0.FQTY,0) END '最终数量' + ,tt.FQTY 'F_OriginalQty',t0.FQTY 'W5Qty' + INTO #table1 FROM #年度预测 tt OUTER APPLY ( SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY @@ -64,7 +68,39 @@ FROM #年度预测 tt GROUP BY t1.FMATERIALID,t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) ) t0 WHERE tt.FBILLNO = '{convertBillNo.ToString()}' -ORDER BY tt.startDate,tt.FSEQ + +declare @startDate date,@endDate date +SELECT @startDate = MIN(t0.startDate),@endDate = MAX(t0.endDate) +FROM #table1 t0 + +;WITH #发货通知单 AS ( + SELECT t0.FBILLNO,t0.FDATE,t0.FCUSTOMERID,t0e.FMATERIALID,t0e.FQTY,t0e.F_PNDR_BASEQTY3 '2次调拨' + FROM T_SAL_DELIVERYNOTICE t0 + INNER JOIN T_SAL_DELIVERYNOTICEENTRY t0e on t0.FID = t0e.FID + WHERE t0.FDOCUMENTSTATUS = 'C' + AND t0.FDATE between @startDate AND @endDate +) +,#最终数据 AS ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FCUSTID,t0.startDate,t0.endDate,t0.FSEQ + ,CASE WHEN t0.最终数量 < (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) THEN 0 ELSE t0.最终数量 - (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) END AS '最终数量' + ,t0.年份,t0.月份 + ,ISNULL(t1.FQTY,0) 'F_DelivQty',ISNULL(t1.[2次调拨],0) 'F_Direct2Qty' + ,t0.F_OriginalQty,t0.W5Qty + FROM #table1 t0 + OUTER APPLY ( + SELECT SUM(t1.FQTY) FQTY ,SUM(t1.[2次调拨]) [2次调拨] + FROM #发货通知单 t1 + WHERE 1 = 1 AND t1.FMATERIALID = t0.FMATERIALID + AND t0.FCUSTID = t1.FCUSTOMERID + AND t1.FDATE BETWEEN t0.startDate AND t0.endDate + ) t1 +) +SELECT t0.* +FROM #最终数据 t0 +WHERE t0.最终数量 > 0 +ORDER BY t0.startDate,t0.FSEQ + +DROP TABLE #table1 "; //throw new Exception(sqlL); var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); @@ -103,14 +139,22 @@ ORDER BY tt.startDate,tt.FSEQ entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"]; //均化周期 entity["AveraCycle"] = 1; - var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject; + var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0]; var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); var qty = decimal.Parse(item["最终数量"].ToString()); entity["Qty"] = qty; + + entity["F_DelivQty"] = decimal.Parse(item["F_DelivQty"].ToString()); + entity["F_Direct2Qty"] = decimal.Parse(item["F_Direct2Qty"].ToString()); + entity["F_OriginalQty"] = decimal.Parse(item["F_OriginalQty"].ToString()); + entity["F_W5Qty"] = decimal.Parse(item["W5Qty"].ToString()); + entity["StartDate"] = item["startDate"]; entity["EndDate"] = item["endDate"]; - + entity["F_Year"] = item["年份"]; + entity["F_Month"] = item["月份"]; + entity["FCloseStatus"] = "A"; ////# 货主类型 //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; ////# 货主 @@ -163,6 +207,23 @@ ORDER BY tt.startDate,tt.FSEQ idx++; } } + else + { + + } + + string jsonData = @" +{{ + ""CreateOrgId"": ""{fileName}"", + ""Numbers"": [], + ""Ids"": """", + ""PkEntryIds"": [], + ""UseOrgId"": {InterId}, + ""NetworkCtrl"": ""{formBillNo}"", + ""IgnoreInterationFlag"": """", +}}"; + + WebApiServiceCall.Execute(this.Context, "PLN_FORECAST", "BillClose", jsonData); } } diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/Audit.py b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/Audit.py new file mode 100644 index 0000000..c93e43a --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/Audit.py @@ -0,0 +1,116 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +clr.AddReference('Kingdee.BOS.WebApi.FormService') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * +from Kingdee.BOS.WebApi.FormService import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FVersions"); + e.FieldKeys.Add("FBillNo"); + e.FieldKeys.Add("FForecastYear"); + +def EndOperationTransaction(e): + # raise Exception("A") + if this.FormOperation.OperationId == 1: + DoClosePLN_FORECAST(e); +def DoClosePLN_FORECAST(e): + for entity in e.DataEntitys: + billNo = entity["BillNo"] + billId = entity["Id"] + + sqlL = """/*dialect*/ + +;WITH #年度预测单 AS ( + SELECT t1.FBILLNO,t1.FISCLOSE,t0.FFORECASTYEAR,t0.FBILLNO 'thisBillNo' + ,ROW_NUMBER() OVER (ORDER BY t1.FBILLNO DESC) RN + ,CASE WHEN t1.FBILLNO = t0.FBILLNO THEN 1 ELSE 0 END A + FROM T_PLN_FORECAST2YEAR t0 + INNER JOIN T_PLN_FORECAST2YEAR t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR + WHERE t0.FBILLNO = '{0}' + --AND t1.FISCLOSE != 'B' +) +SELECT t0.FBILLNO,t0.FID,t0.FCONVERTBILLNO,t0e.FENTRYID,t0e.FCLOSESTATUS,t0.FBILLTYPEID +FROM ( SELECT TOP 1 t2.* + FROM #年度预测单 t2 + INNER JOIN #年度预测单 t1 on t1.A = 1 + WHERE t2.RN > t1.RN + ORDER BY t2.RN + ) tt + INNER JOIN T_PLN_FORECAST t0 on t0.FCONVERTBILLNO = tt.FBILLNO + INNER JOIN T_PLN_FORECASTENTRY t0e on t0e.FID = t0.FID +WHERE 1 = 1 + AND t0.FBILLTYPEID = '67707a90214919' --年度 + AND (t0e.FCLOSESTATUS = 'A' OR t0e.FCLOSESTATUS = '') + + """.format(billNo) + # raise Exception(sqlL); + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + if dataList.Count == 0: + return; + # 请求参数 + + id = dataList[0]["FID"] + pkEntryIds = List[str]() + para = {"CreateOrgId":this.Context.UserId,"Numbers":[],"Ids":"","PkEntryIds":[],"UseOrgId":this.Context.CurrentOrganizationInfo.ID,"NetworkCtrl":"","IgnoreInterationFlag":""} + for item in dataList: + # pkEntryIds.Add(str(item["FENTRYID"])) + para["PkEntryIds"].Add({"Id":str(item["FID"]),"EntryIds":str(item["FENTRYID"])}) + + # raise Exception(JsonUtil.Serialize(para)) + # 业务对象标识 + formId = "PLN_FORECAST" + # 操作接口编码 + operateNumber = "BillClose" + resultJson = WebApiServiceCall.Execute(this.Context, formId, operateNumber, JsonUtil.Serialize(para)); + # raise Exception(JsonUtil.Serialize(resultJson)) + if resultJson !=None : + IsSuccess = resultJson["Result"]["ResponseStatus"]["IsSuccess"] + if IsSuccess==False: + raise Exception(JsonUtil.Serialize(resultJson)) + updSql = """/*dialect*/ +WITH #上版本 AS ( + SELECT TOP 1 t1.* + FROM T_PLN_FORECAST2YEAR t0 + INNER JOIN T_PLN_FORECAST2YEAR t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR + WHERE t0.FBILLNO = '{0}' + AND t1.FBILLNO != '{0}' + ORDER By t1.FBILLNO DESC +) +UPDATE T_PLN_FORECAST2YEAR SET FIsClose = 'B' +FROM T_PLN_FORECAST2YEAR t0 + INNER JOIN #上版本 t1 on t1.FID = t0.FID +WHERE t1.FIsClose != 'B' + """.format(billNo) + + res = DBServiceHelper.Execute(this.Context, updSql) + + return; \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs index 586d65d..bc333b1 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs @@ -65,6 +65,9 @@ namespace GZ.LJY000.Enpower.STK_MISCELLANEOUS var dateObj = this.View.Model.GetValue("FDate"); var dateValue = dateObj == null ? "" : dateObj.ToString(); //this.View.Model.SetValue("FLOT", "002", 0); + + LotField field = this.View.Model.BillBusinessInfo.GetField("FLOT") as LotField; + this.View.Model.SetValue("FLOT", "", e.Row); var materialId = e.NewValue.Long2Int(); if (materialId > 0 && !dateValue.IsNullOrEmptyOrWhiteSpace()) GetPrdLot(dateValue, string.Join(" UNION ", $" SELECT {materialId} AS 'FMATERIALID',{e.Row} rowIdx ")); @@ -162,9 +165,9 @@ FROM #基础数据 tt //this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int()); this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int()); } + //this.View.UpdateView("FLOT", item["rowIdx"].Long2Int()); } - //this.View.UpdateView("FLOT"); } } } diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.py b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.py index db42675..328de32 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.py +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.py @@ -1,3 +1,4 @@ +from math import fabs import clr clr.AddReference("System") clr.AddReference("Kingdee.BOS") @@ -21,7 +22,7 @@ from System.Text import* from Kingdee.BOS.ServiceHelper import * def DataChanged(e): - if str(e.Field.Key).upper() == "FDate": + if str(e.Field.Key).upper() == "FDATE": if DoDetection(): stockDirectObj = this.View.Model.GetValue("FStockDirect") @@ -49,13 +50,33 @@ def DataChanged(e): 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 = int(e.NewValue) + 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: @@ -117,4 +138,6 @@ FROM #基础数据 tt # 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"]) \ No newline at end of file + this.View.Model.SetValue("FLOT", item["FLOT_TEXT"], item["rowIdx"]) + # raise Exception("AAA") + # this.View.UpdateView("FLOT", item["rowIdx"]); \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_SUBREQORDER/ListEventPlugInEx.py b/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_SUBREQORDER/ListEventPlugInEx.py index 7f0c343..0282068 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_SUBREQORDER/ListEventPlugInEx.py +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_SUBREQORDER/ListEventPlugInEx.py @@ -22,6 +22,15 @@ from Kingdee.BOS.Orm.DataEntity import* def AfterDoOperation(e): if e.Operation.Operation == "DoUpdateSubFORECAST": - sql = "/*dialect*/ exec P_UpdateSubFORECAST "; + selectedRows = this.ListView.SelectedRowsInfo; + if selectedRows == None or selectedRows.Count == 0: + this.View.ShowMessage("当前没有行被选中!"); + return; + + billNos = List[str](); + for row in selectedRows: + billNos.Add(row.BillNo); + + sql = "/*dialect*/ exec P_UpdateSubFORECAST '{0}'".format(",".join(billNos)); dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/专用料判断报表_202501241649.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/专用料判断报表_202501241649.sql index e368d73..989f22f 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/专用料判断报表_202501241649.sql +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/专用料判断报表_202501241649.sql @@ -40,7 +40,7 @@ ) t1 WHERE (t1.RN = 1 OR t1.RN IS NULL) AND t0.FNUMBER != '' --AND t0.lv < 2 -) +) --ݹչ SELECT t0.RN,t0.MPath,t1.FNUMBER 'ϱ',t1_l.FNAME '',t1_l.FSPECIFICATION 'ͺ',t2.FCAPTION '','' 'Ӧ',t0.FNUMBER 'BOM汾' ,t3_l.FNAME 'λ',t0.׼,CAST('' AS nvarchar(4)) 'רϱʶ','' 'L/T' ,0 ,0 Ԥ,0 δPR,0 ѷ,0 ƻ,'' ƻԱ,'' ɹԱ diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/预测需求变更履历表_20250120._V1.0sql.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/预测需求变更履历表_20250120._V1.0sql.sql index e529e8d..940d5b1 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/预测需求变更履历表_20250120._V1.0sql.sql +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/预测需求变更履历表_20250120._V1.0sql.sql @@ -8,7 +8,8 @@ WITH # WHERE t0.FDOCUMENTSTATUS = 'C' ) ,#Ԥⵥ AS ( - SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '',t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' + SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '' + ,t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' FROM # t0 INNER JOIN # t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR AND t1.RN = 2 AND t0.FMATERIALID = t1.FMATERIALID @@ -24,7 +25,8 @@ WITH # WHERE t0.FDOCUMENTSTATUS = 'C' ) ,#N_3Ԥⵥ AS ( - SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '',t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' + SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '' + ,t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' FROM #N_3 t0 INNER JOIN #N_3 t1 on t1.RN = 2 AND t0.FFORECASTYEAR = t1.FFORECASTYEAR AND t0.FFORECASTMONTH = t1.FFORECASTMONTH @@ -41,7 +43,8 @@ WITH # WHERE t0.FDOCUMENTSTATUS = 'C' ) ,#W_5Ԥⵥ AS ( - SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '',t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' + SELECT t0.,t0.FDATE '',t0.FMATERIALID,t0.FCUSTID,t1.FDATE '' + ,t1.FVERSIONS 'ǰ汾',t1.QTY 'ǰ',t0.FVERSIONS '汾',t0.QTY '', t1.QTY - ISNULL(t0.QTY, 0) '' FROM #W_5 t0 INNER JOIN #W_5 t1 on t1.RN = 2 AND t0.FFORECASTYEAR = t1.FFORECASTYEAR diff --git a/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj b/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj index 427d8d5..57f1f23 100644 --- a/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj +++ b/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj @@ -139,15 +139,28 @@ - + + + + + + + + + + + + + + @@ -165,11 +178,14 @@ - + + + + @@ -178,26 +194,36 @@ + + + + + + + + + + diff --git a/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/BillEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/BillEventPlugInEx.py index e09b9e6..b2e9bb1 100644 --- a/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/BillEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/BillEventPlugInEx.py @@ -47,4 +47,21 @@ def BarItemClick(e): this.View.ShowForm(listShowParameter); return; - \ No newline at end of file + +def DataChanged(e): + if e.Field.Key == "FQty": + rowType = this.View.Model.GetValue("FProductType", e.Row); + # raise Exception(rowType); + if rowType == '1': + pRowId = this.View.Model.GetValue("FRowId",e.Row) + + details = this.View.BusinessInfo.GetEntity("FEntity") + entrys = this.View.Model.GetEntityDataObject(details) + for entry in entrys: + parentRowId = entry["ParentRowId"] + if parentRowId != None and parentRowId == pRowId: + rowIndex = this.View.Model.GetRowIndex(details, entry) + this.View.Model.SetValue("F_UHIK_Qty2", e.NewValue,rowIndex) + this.View.UpdateView("F_UHIK_Qty2",rowIndex); + this.View.InvokeFieldUpdateService("F_UHIK_Qty2",rowIndex); + # this.View.UpdateView("FCountQty",rowIndex); \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/OperationEventPlugIn/保存后更新预测单套数.py b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/OperationEventPlugIn/保存后更新预测单套数.py index e69de29..c29d1ee 100644 --- a/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/OperationEventPlugIn/保存后更新预测单套数.py +++ b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/OperationEventPlugIn/保存后更新预测单套数.py @@ -0,0 +1,45 @@ +#clrп +import clr +#Ӷcloudij +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +#dairycloudеijʵ󣨷ռ䵼룬ݹ鵼룩 +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * + + +def OnPreparePropertys(e): + e.FieldKeys.Add("FProductType"); + e.FieldKeys.Add("F_UHIK_Text"); + e.FieldKeys.Add("FParentMtrlId"); + +def BeforeDoSaveExecute(e): + for entity in e.DataEntities: + entries = entity["PLN_FORECASTENTRY"] + + + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_INSTOCK/OperationEventPlugIn/生产入库单审核后更新组装单信息.py b/14.宝锐/GZ.LJY000.Biori/PRD_INSTOCK/OperationEventPlugIn/生产入库单审核后更新组装单信息.py index fd0f0d0..9bad403 100644 --- a/14.宝锐/GZ.LJY000.Biori/PRD_INSTOCK/OperationEventPlugIn/生产入库单审核后更新组装单信息.py +++ b/14.宝锐/GZ.LJY000.Biori/PRD_INSTOCK/OperationEventPlugIn/生产入库单审核后更新组装单信息.py @@ -82,7 +82,7 @@ def EndOperationTransaction(e): if data.Count > 0: packService = PrdPackService(this.Context) msg = ""; - flag = packService.DoComputePackgeQty(data[0]["FBILLNO"],strockid,stocklocid, -pieceCount,True ,msg); + flag = packService.DoComputePackgeQty(data[0]["FBILLNO"],strockid,stocklocid, pieceCount,False ,msg); if flag == False: raise Exception(msg) diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs index 855ce2a..72ee570 100644 --- a/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs @@ -96,8 +96,8 @@ FROM T_PLN_FORECAST t0 WITH #基础数据 AS( {string.Join(" UNION ALL ", sqlL)} ) -UPDATE t1e SET t1e.F_UHIK_TEXT8 = t0.存储条件 - ,t1e.F_UHIK_TEXT_RE5 = t0.标签货号 +UPDATE t1e SET t1e.F_UHIK_TEXT8 = t0.标签货号 + ,t1e.F_UHIK_TEXT_RE5 = t0.存储条件 ,t1e.F_UHIK_TEXT2 = t0.标签规格 ,t1e.F_UHIK_DATE = t0.生产日期 ,t1e.F_UHIK_DATE1 = t0.有效期至 diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugIn/下推赋值.py b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugIn/下推赋值.py new file mode 100644 index 0000000..c8fb49b --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugIn/下推赋值.py @@ -0,0 +1,39 @@ +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 * + +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): + billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity + # raise Exception(JsonUtil.Serialize(billHead)) + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugIn/值更新事件.py b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugIn/值更新事件.py new file mode 100644 index 0000000..8ec1753 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugIn/值更新事件.py @@ -0,0 +1,93 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Xml") +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.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Util import * +from System import * +from System.Xml import * +from System.ComponentModel import * +from System.Collections.Generic import * +from System.Text import* +from Kingdee.BOS.ServiceHelper import * + +def DataChanged(e): + if e.Field.Key == "FRealQty": + rowType = this.View.Model.GetValue("FRowType", e.Row); + if False and rowType == "Parent": + bom = this.View.Model.GetValue("FBomID", e.Row); + if bom != None: + # raise Exception(JsonUtil.Serialize(bom)) + bomEntity = bom["TreeEntity"]; + pRowId = this.View.Model.GetValue("FRowId",e.Row) + details = this.View.BusinessInfo.GetEntity("FEntity") + entrys = this.View.Model.GetEntityDataObject(details) + + for entry in entrys: + parentRowId = entry["ParentRowId"] + if parentRowId != None and parentRowId == pRowId: + rowIndex = this.View.Model.GetRowIndex(details, entry) + materialObj = this.View.Model.GetValue("FMaterialId", rowIndex) + materialId = materialObj["Id"] + bomMaterials = filter(lambda x: x["MATERIALIDCHILD_Id"] == materialId, bomEntity) + if bomMaterials != None and len(bomMaterials) > 0: + # raise Exception(JsonUtil.Serialize(bomMaterial[0])) + bomMaterial= bomMaterials[0] + unitObj = this.View.Model.GetValue("FSalUnitID", rowIndex) + unitId = unitObj["Id"] + unitCon = bomMaterial["CHILDUNITID_Id"] == unitId + this.View.Model.SetValue("FBomUnitId", bomMaterial["CHILDUNITID_Id"], rowIndex) + this.View.Model.SetValue("FUnitCon", unitCon, rowIndex) + # raise Exception(JsonUtil.Serialize(materialObj)) + + if rowType == "Son": + bomUnitId = this.View.Model.GetValue("FBomUnitId", e.Row) + if False and bomUnitId == 0: + billObj = this.View.Model.DataObject; + billObjId = billObj["Id"] + # raise Exception(JsonUtil.Serialize(billObj)) + # return; + entrys = billObj["SAL_OUTSTOCKENTRY"] + + pRowId = this.View.Model.GetValue("FParentRowId",e.Row) + parentMaterials = filter(lambda x: x["RowId"] == pRowId, entrys) + if parentMaterials != None and len(parentMaterials) > 0: + parentMaterial = parentMaterials[0] + + materialObj = this.View.Model.GetValue("FMaterialId", e.Row) + materialId = materialObj["Id"] + bom = parentMaterial["BomID"]; + bomEntity = bom["TreeEntity"]; + + bomMaterials = filter(lambda x: x["MATERIALIDCHILD_Id"] == materialId, bomEntity) + if bomMaterials != None and len(bomMaterials) > 0: + bomMaterial= bomMaterials[0] + unitObj = this.View.Model.GetValue("FSalUnitID", e.Row) + unitId = unitObj["Id"] + unitCon = bomMaterial["CHILDUNITID_Id"] == unitId + this.View.Model.SetValue("FBomUnitId", bomMaterial["CHILDUNITID_Id"], e.Row) + this.View.Model.SetValue("FUnitCon", unitCon, e.Row) + # raise Exception(JsonUtil.Serialize("ASSS")) + # this.View.Model.SetValue("FBomUnitId", parentMaterial["FBomUnitId"], e.Row) + + return; + + return; + + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Audit.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Audit.cs new file mode 100644 index 0000000..ec7b531 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Audit.cs @@ -0,0 +1,159 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.K3.Core.MFG.EntityHelper; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Core; +using Kingdee.K3.BD.NewCode.Core.Utils; + +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn +{ + [HotUpdate, Description("审核_销售出库单操作")] + public class Audit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + + e.FieldKeys.Add("FMaterialID"); + + e.FieldKeys.Add("FRealQty"); + + e.FieldKeys.Add("FStockID"); + e.FieldKeys.Add("FStockLocID"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 1) + { + var validator = new SubmitVaildator();//新增的校验器 + validator.EntityKey = "FEntity"; + e.Validators.Add(validator);//添加校验器 + } + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + //因启用审批流,导致提交后撤销时会默认反审核操作,故停用 + if (this.FormOperation.OperationId == 1) + { + foreach (var entity in e.DataEntitys) + { + var entry = ((DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"])[0]; + var dataList = new List(); + foreach (var item in (DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"]) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["StockID_Id"].Long2Int(), + stockLocId = item["StockLocID_Id"].Long2Int(), + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + var packBillNo = p.packBillNo; + var strockId = p.stockId; + var stocklocId = p.stockLocId; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + var flag = packService.DoComputePackgeQty(packBillNo, strockId, stocklocId, pieceCount, false, ref msg); + if (!flag) + throw new Exception($"明细行【{p.seq}】,{msg}"); + } + } + + } + + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Save.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Save.cs new file mode 100644 index 0000000..0370c01 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Save.cs @@ -0,0 +1,45 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn +{ + /// + /// 保存8 提交9 审核1 反审核26 删除3 + /// + [HotUpdate, Description("保存_销售出库单操作")] + public class Save : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FMaterialId"); + e.FieldKeys.Add("FRealQty"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FStockID"); + e.FieldKeys.Add("FStockLocID"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FRowId"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 8) + { + var validator = new SaveVaildator();//新增的校验器 + validator.EntityKey = "FEntity"; + e.Validators.Add(validator);//添加校验器 + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/VaildatorEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SaveVaildator.cs similarity index 60% rename from 14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/VaildatorEventPlugInEx.cs rename to 14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SaveVaildator.cs index 4e48627..aa55133 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/VaildatorEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SaveVaildator.cs @@ -8,16 +8,17 @@ using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Globalization; using System.Linq; using System.Text; -namespace GZ.LJY000.Biori.SAL_OUTSTOCK +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn { /// /// 销售出库单审核时校验对应组装单是否有足够数量 /// - [Description("销售出库单审核时校验对应组装单是否有足够数量")] - public class VaildatorEventPlugInEx : AbstractValidator + [Description("销售出库单保存校验")] + public class SaveVaildator : AbstractValidator { /// /// 校验器初始化 @@ -48,87 +49,51 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK if (dataEntities == null || dataEntities.Length <= 0) return;// 传入数据包为空 - var dataEntityList = new List(); - var sqlL = new List(); - var stockIds = new Dictionary(); var stockLocIds = new Dictionary(); + foreach (var data in dataEntities) { var item = data.DataEntity; - var packBillNo = item["FPackBillNo"].ToString(); var rowType = item["RowType"].ToString(); - - //if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent")) - //{ - // sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY "); - //} - - if (rowType.Equals("Parent")) + if (!rowType.Equals("Son", StringComparison.OrdinalIgnoreCase)) continue; + + var parentRowId = item["ParentRowId"].ToString(); //仓库id var stockId = item["StockID_Id"].Long2Int(); //仓位id var stockLocId = item["StockLocID_Id"].Long2Int(); - if (!packBillNo.IsNullOrEmptyOrWhiteSpace()) + + if (!parentRowId.IsNullOrEmptyOrWhiteSpace()) { - if (!stockIds.ContainsKey(packBillNo)) - stockIds.Add(packBillNo, stockId); + if (!stockIds.ContainsKey(parentRowId)) + stockIds.Add(parentRowId, stockId); - if (!stockLocIds.ContainsKey(packBillNo)) - stockLocIds.Add(packBillNo, stockLocId); + if (!stockLocIds.ContainsKey(parentRowId)) + stockLocIds.Add(parentRowId, stockLocId); - if (stockIds[packBillNo] != stockId || stockLocIds[packBillNo] != stockLocId) + if (stockIds[parentRowId] != stockId || stockLocIds[parentRowId] != stockLocId) { var seq = item["Seq"].Long2Int(); - var msg = $"第[{seq}]行明细,组装单号:{packBillNo},与套件的仓库、仓位信息不匹配!"; - ValidatorWholeSet(validateContext, data, data.DataEntity["Id"].ToString(), msg); + var msg = $"第[{seq}]行明细,与套件的仓库、仓位信息不匹配!"; + validateContext.AddError(data + , new ValidationErrorInfo( + "StockLocID" // 出错的字段Key,可以空 + , data.DataEntity["Id"].ToString() // 数据包内码,必填,后续操作会据此内码避开此数据包 + , data.DataEntityIndex // 出错的数据包在全部数据包中的顺序 + , 0 // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 + , "REF"// 错误编码,可以任意设定一个字符,主要用于追查错误来源 + , msg // 错误的详细提示信息 + , "套件组分仓库、仓位信息需要统一!"// 错误的简明提示信息 + , ErrorLevel.Error // 错误级别:警告、错误... + ) + ); } } - - } - if (sqlL.Any()) - { - var selectSql = $@"/*dialect*/ -WITH #基础数据 AS ( - {string.Join(" UNION ALL ", sqlL)} -) -SELECT t0.FBILLNO,t0.FMATERIALID,t0.FQTY,t0.FINSTOCKQTY,t0.FNOINSTOCKQTY,t0.FOUTSTOCKQTY - ,t0.FQTY - t1.QTY AS 'surplusQty' -FROM T_PRD_PACKAGEINSTOCK t0 - INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO -WHERE 1 = 1 - AND t0.FDOCUMENTSTATUS = 'C' - -"; - - var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, selectSql); - if (dataList != null && dataList.Any()) - { - foreach (var data in dataEntities) - { - var item = data.DataEntity; - var packBillNo = item["FPackBillNo"].ToString(); - var rowType = item["RowType"].ToString(); - if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent")) - { - var res = dataList.FirstOrDefault(w => w["FBILLNO"].ToString() == packBillNo); - if (res != null) - { - var surplusQty = Convert.ToDecimal(res["surplusQty"]); - if (surplusQty < 0) - { - ValidatorUnique(validateContext, data, data.DataEntity["Id"].ToString()); - } - } - } - } - } - - } } private void ValidatorWholeSet(ValidateContext validateContext, ExtendedDataEntity entity, string id, string msg) diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Submit.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Submit.cs new file mode 100644 index 0000000..f178e4a --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/Submit.cs @@ -0,0 +1,163 @@ +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn +{ + /// + /// 保存8 提交9 审核1 反审核26 删除3 + /// + [HotUpdate, Description("提交_销售出库单操作")] + public class Submit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + + e.FieldKeys.Add("FMaterialID"); + + e.FieldKeys.Add("FRealQty"); + + e.FieldKeys.Add("FStockID"); + e.FieldKeys.Add("FStockLocID"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 9) + { + //var validator = new SubmitVaildator();//新增的校验器 + //validator.EntityKey = "FEntity"; + //e.Validators.Add(validator);//添加校验器 + } + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + if (false && this.FormOperation.OperationId == 9) + { + #region 更新组装单库存数据 + foreach (var entity in e.DataEntitys) + { + var entry = ((DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"]); + var dataList = new List(); + foreach (var item in (DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"]) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["StockID_Id"].Long2Int(), + stockLocId = item["StockLocID_Id"].Long2Int(), + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + if (p.packBillNo.IsNullOrEmptyOrWhiteSpace()) + continue; + + var packBillNo = p.packBillNo; + var strockId = p.stockId; + var stocklocId = p.stockLocId; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + + var flag = packService.DoComputePackgeQty(packBillNo, strockId, stocklocId, pieceCount, false, ref msg); + + if (!flag) + throw new Exception($"明细行【{p.seq}】,{msg}"); + } + } + + } + #endregion 更新组装单库存数据 + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SubmitVaildator.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SubmitVaildator.cs new file mode 100644 index 0000000..402ce55 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/SubmitVaildator.cs @@ -0,0 +1,226 @@ +using Kingdee.BOS; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using Kingdee.K3.Core.MFG.EntityHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn +{ + [Description("销售出库单提交校验")] + public class SubmitVaildator : AbstractValidator + { + /// + /// 校验器初始化 + /// + /// + /// + public override void InitializeConfiguration(ValidateContext validateContext, Context ctx) + { + base.InitializeConfiguration(validateContext, ctx); + //if (validateContext.BusinessInfo != null) + //{ + // EntityKey = validateContext.BusinessInfo.GetEntity(0).Key; + //} + } + + public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) + { + if (validateContext.IgnoreWarning) + return;// 警告已经被用户忽略,就不需要再次执行了 + + if (dataEntities == null || dataEntities.Length <= 0) + return;// 传入数据包为空 + + #region 控制是否启用条码控制 + var packConl = 0; + var conlSql = $@"/*dialect*/ +exec Proc_Get_BarCode_Control_Param +"; + + var conlData = DBServiceHelper.ExecuteDynamicObject(this.Context, conlSql); + if (conlData == null && conlData.Count > 0) + packConl = int.Parse(conlData[0]["OutStockPack"].ToString()); + + if (packConl == 0) + return; + #endregion 控制是否启用条码控制 + + //string title = "条码匹配"; + var dataList = new List(); + foreach (var data in dataEntities) + { + var item = data.DataEntity; + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + materialId = item["MaterialID_Id"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["StockID_Id"].Long2Int(), + stockLocId = item["StockLocID_Id"].Long2Int(), + lotId = item["Lot_Id"].Long2Int(), + lot_text = item["Lot_Text"].ToString(), + QRCode = item["FPackBarCode"] == null ? string.Empty : item["FPackBarCode"].ToString(), + dataEntity = data, + errorLevel = (ErrorLevel)packConl + }; + + if (qv.QRCode.IsNullOrEmptyOrWhiteSpace()) + qv.QRCode = item["FPDABarCode"] == null ? string.Empty : item["FPDABarCode"].ToString(); + + dataList.Add(qv); + } + + if (dataList.Any()) + { + var pList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + pData.lotId = sData.lotId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in pList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId "); + idx++; + } + + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0s.FPACKSTOCKID,t0s.FPACKSTOCKLOCID,t0s.FPACKCOUNT,t0s.FSTOCKQTY,t1.seq +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKSTOCK t0s on t0.FID = t0s.FID + INNER JOIN #基础数据 t1 on t1.stockId = t0s.FPACKSTOCKID AND t0s.FPACKSTOCKLOCID = t1.stockLocId +WHERE t1.materialId = t0.FMATERIALID +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = pList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPackBarCode", $"对应明细中的物料批号存在条码,目前单据对应明细{data.seq}行中没有填写条码,请确认数据!", title)); + } + } + } + + var oList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Standard", StringComparison.OrdinalIgnoreCase)).ToList(); + + if (oList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in oList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId ,'{o.lot_text}' lot_text"); + idx++; + } + + if (sqlL.Count > 0) + { + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0.FBARCODE,t0.FMATERIALID,t0.FLOT + ,t0.FBILLENTRYID,t0.FBILLID,t0.FBILLNO,t1.seq +FROM T_UNW_WMS_BARCODE t0 + INNER JOIN #基础数据 t1 on t1.materialId = t0.FMATERIALID + AND t1.lot_text = t0.FLOT_TEXT +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = oList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPDABarCode", $"对应明细中的物料批号存在条码,目前单据对应明细{data.seq}行中没有填写条码,请确认数据!", title)); + } + } + + } + + } + + } + + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string QRCode { get; set; } + + public ExtendedDataEntity dataEntity { get; set; } + + public ErrorLevel errorLevel { get; set; } + + public ValidationErrorInfo SetValidationErrorInfo(string keyName, string msg, string title) + { + return new ValidationErrorInfo( + keyName + , this.dataEntity.DataEntity["Id"].ToString() + , this.dataEntity.DataEntityIndex + , this.dataIndex + , "REF" + , msg + , title + , errorLevel + ); + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/UnAudit.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/UnAudit.cs new file mode 100644 index 0000000..899c1f4 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/UnAudit.cs @@ -0,0 +1,157 @@ +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.SAL_OUTSTOCK.OperationEventPlugIn +{ + [HotUpdate, Description("反审核_销售出库单操作")] + public class UnAudit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FStockID"); + e.FieldKeys.Add("FStockLocID"); + e.FieldKeys.Add("FCuntQty"); + + e.FieldKeys.Add("FDocumentStatus"); + } + + + public override void BeginOperationTransaction(BeginOperationTransactionArgs e) + { + base.BeginOperationTransaction(e); + if (this.FormOperation.OperationId == 26) + { + // 调整当前操作的数据包(该数据包稍后平台会自动更新保存到数据库) + var billNoField = this.BusinessInfo.GetBillNoField(); + foreach (var dataEntity in e.DataEntitys) + { + dataEntity["F_Jac_Text"] = "来自数据包修改:" + dataEntity[billNoField.PropertyName]; + } + } + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + if (this.FormOperation.OperationId == 26) + { + foreach (var entity in e.DataEntitys) + { + if (!entity["DocumentStatus"].ToString().Equals("C")) + continue; + + var entry = ((DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"])[0]; + var dataList = new List(); + foreach (var item in (DynamicObjectCollection)entity["SAL_OUTSTOCKENTRY"]) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["StockID_Id"].Long2Int(), + stockLocId = item["StockLocID_Id"].Long2Int(), + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + if (p.packBillNo.IsNullOrEmptyOrWhiteSpace()) + continue; + + var packBillNo = p.packBillNo; + var strockId = p.stockId; + var stocklocId = p.stockLocId; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + + var flag = packService.DoComputePackgeQty(packBillNo, strockId, stocklocId, pieceCount, true, ref msg); + + if (!flag) + throw new Exception($"明细行【{p.seq}】,{msg}"); + } + } + + } + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/销售出库单审核后更新组装单信息.py b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/销售出库单审核后更新组装单信息.py index 5864deb..14a9fde 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/销售出库单审核后更新组装单信息.py +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugIn/销售出库单审核后更新组装单信息.py @@ -44,17 +44,24 @@ def EndOperationTransaction(e): # * 保存8提交9审核1反审核26删除3 if this.FormOperation.OperationId == 1: for entity in e.DataEntitys: - # raise Exception(JsonUtil.Serialize(entity)) + raise Exception(JsonUtil.Serialize(entity)) entry = entity["SAL_OUTSTOCKENTRY"][0] packBillNo = entry["FPackBillNo"] strockid = entry["StockID_Id"] stocklocid = entry["StockLocID_Id"] pieceCount = float(entry["FCuntQty"]) + sql = """/*dialect*/ + SELECT t0.FBILLNO + FROM T_PRD_PACKAGEINSTOCK t0 + WHERE t0.FBILLNO = '{0}' + """.format(packBillNo); + data = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if data.Count > 0: packService = PrdPackService(this.Context) msg = ""; - flag = packService.DoComputePackgeQty(packBillNo,strockid,stocklocid,pieceCount,True ,msg); + flag = packService.DoComputePackgeQty(packBillNo,strockid,stocklocid,pieceCount,False ,msg); if flag == False: raise Exception(msg) @@ -62,17 +69,24 @@ def EndOperationTransaction(e): if this.FormOperation.OperationId == 26: for entity in e.DataEntitys: - # raise Exception(JsonUtil.Serialize(entity)) + raise Exception(JsonUtil.Serialize(entity)) entry = entity["SAL_OUTSTOCKENTRY"][0] packBillNo = entry["FPackBillNo"] strockid = entry["StockID_Id"] stocklocid = entry["StockLocID_Id"] pieceCount = float(entry["FCuntQty"]) + sql = """/*dialect*/ + SELECT t0.FBILLNO + FROM T_PRD_PACKAGEINSTOCK t0 + WHERE t0.FBILLNO = '{0}' + """.format(packBillNo); + data = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if data.Count > 0: packService = PrdPackService(this.Context) msg = ""; - flag = packService.DoComputePackgeQty(packBillNo,strockid,stocklocid, -pieceCount,True ,msg); + flag = packService.DoComputePackgeQty(packBillNo,strockid,stocklocid, pieceCount,True ,msg); if flag == False: raise Exception(msg) diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs index cc7843f..8b48ee2 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs @@ -3,6 +3,7 @@ using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; @@ -30,18 +31,6 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK e.FieldKeys.Add("FStockLocID"); } - public override void OnAddValidators(AddValidatorsEventArgs e) - { - base.OnAddValidators(e); - //添加检查校验器: - if (this.FormOperation.OperationId == 9) - { - var validator = new VaildatorEventPlugInEx();//新增的校验器 - validator.EntityKey = "FEntity"; - e.Validators.Add(validator);//添加校验器 - } - } - /// /// /// @@ -87,20 +76,19 @@ ORDER BY tt.EntrySeq return null; } - - public override void EndOperationTransaction(EndOperationTransactionArgs e) - { - base.EndOperationTransaction(e); - //保存8 提交9 审核1 反审核26 删除3 - if (this.FormOperation.OperationId == 1) - { - DoComputePackgeQty(e.DataEntitys, false); - } - else if (this.FormOperation.OperationId == 26) - { - DoComputePackgeQty(e.DataEntitys, true); - } - } + //public override void EndOperationTransaction(EndOperationTransactionArgs e) + //{ + // base.EndOperationTransaction(e); + // //保存8 提交9 审核1 反审核26 删除3 + // if (this.FormOperation.OperationId == 1) + // { + // DoComputePackgeQty(e.DataEntitys, false); + // } + // else if (this.FormOperation.OperationId == 26) + // { + // DoComputePackgeQty(e.DataEntitys, true); + // } + //} /// /// diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py index 05d1972..6c32563 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py @@ -32,12 +32,12 @@ from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.App.Core import * def OnPreparePropertys(e): + e.FieldKeys.Add("FSeq"); e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); - # e.FieldKeys.Add("FPackBillSeq"); - # e.FieldKeys.Add("FPackBillEntryId"); - e.FieldKeys.Add("FRealQty"); e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FRealQty"); + e.FieldKeys.Add("FCuntQty"); def BeforeDoSaveExecute(e): # if this.FormOperation.OperationId == 8: @@ -55,7 +55,8 @@ def BeforeDoSaveExecute(e): entryId = entry["Id"] rowId = entry["RowId"] pRowId = entry["ParentRowId"] - sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode',{4} AS 'FRowType','{5}' AS 'rowId','{6}' AS 'pRwoId'".format(materialId,entryId,idx,packBarCode,rowType,rowId,pRowId)); + qty = entry["RealQty"] + sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode',{4} AS 'FRowType','{5}' AS 'rowId','{6}' AS 'pRwoId',{7} AS FQTY".format(materialId,entryId,idx,packBarCode,rowType,rowId,pRowId,qty)); if sqlL.Count > 0: sqlUnion = " UNION ALL ".join(sqlL); @@ -69,11 +70,15 @@ WITH #基础数据 AS ( ,CASE WHEN t0.FRowType = 1 THEN ( SELECT TOP 1 t1.PackBarCode FROM #基础数据 t1 WHERE t1.pRwoId = t0.rowId ) ELSE t0.PackBarCode END 'PackBarCode' + ,CASE WHEN t0.FRowType = 1 THEN t0.FQTY ELSE ( + SELECT TOP 1 t1.FQTY FROM #基础数据 t1 WHERE t1.rowId = t0.pRwoId + ) END PRQty ,t0.FRowType,t0.rowId,t0.pRwoId FROM #基础数据 t0 ) SELECT tt.* ,t0.FBARCODE,t1.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID + ,tt.PRQty / t1.FPDOSAGE AS 'CuntQty' FROM #初步处理 tt INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FSRCBILLENTRYID = t0.FBILLENTRYID @@ -90,7 +95,45 @@ ORDER BY tt.EntrySeq seq = item["EntrySeq"]; entries[seq]["FPackBarCode"] = item["PackBarCode"]; entries[seq]["FPackBillNo"] = item["FBILLNO"]; + entries[seq]["FCuntQty"] = item["CuntQty"] # entries[seq]["FPackBillSeq"] = item["FSeq"]; # entries[seq]["FPackBillEntryId"] = item["FEntryID"]; - return; \ No newline at end of file + return; + +def EndOperationTransaction(e): + if this.FormOperation.OperationId == 8: + for entity in e.DataEntitys: + entries = entity["SAL_OUTSTOCKENTRY"] + id = entity["Id"] + sql = """/*dialect*/ +;WITH #基础数据 AS ( + SELECT t0e.FMATERIALID,t0e.FENTRYID,t0e.FBOMID,t0e.FUNITID,t0e.FBOMUNITID,t0e.FBASEUNITQTY,t0e.FUnitCon,t0e.FSUBMITQTY,t0e_F.FROWTYPE,t0e_f.FROWID,FPARENTROWID + FROM T_SAL_OUTSTOCKENTRY t0e + INNER JOIN T_SAL_OUTSTOCKENTRY_F t0e_f on t0e.FENTRYID = t0e_f.FENTRYID + WHERE t0e.FID = {0} +) +,#最终数据 AS ( + SELECT t0.FMATERIALID,t0.FENTRYID,t0.FUNITID,t0.FBOMUNITID,t0.FUnitCon,t0.FROWTYPE,t0.FROWID,t0.FPARENTROWID + ,t1.FBOMID,t2.FENTRYROWID,t2.FUNITID 'bomUnit',CASE WHEN t0.FUNITID != t2.FUNITID THEN 1 ELSE 0 END unitCon,t3.F_UNITIDHS + ,t0.FSUBMITQTY,t0.FBASEUNITQTY * (1+ t3.F_FYLBL_DECIMAL) / CASE WHEN t0.FUNITID != t2.FUNITID THEN 1 ELSE t3.F_UNITIDHS END newQty + FROM #基础数据 t0 + INNER JOIN #基础数据 t1 on t0.FPARENTROWID = t1.FROWID + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t1.FBOMID AND t2.FMATERIALID = t0.FMATERIALID + INNER JOIN T_BD_MATERIAL t3 on t3.FMATERIALID = t0.FMATERIALID + WHERE t0.FROWTYPE = 'Son' + AND t0.FBOMUNITID = 0 +) +UPDATE t0 SET t0.FBOMUNITID = t1.bomUnit,t0.FSUBMITQTY = t1.newQty,t0.FUnitCon = unitCon +FROM T_SAL_OUTSTOCKENTRY t0 + INNER JOIN #最终数据 t1 on t0.FENTRYID = t1.FENTRYID + """.format(id) + + res = DBServiceHelper.Execute(this.Context, sql) + # if res != None and res.Count > 0: + # for item in entries: + # seq = item["Seq"] + # data = filter(lambda x: x["FSEQ"] == seq, res)[0]; + # item["FBomUnitId"] = data["bomUnit"]; + # item["FUnitCon"] = data["unitCon"]; + # item["FSubmitQty"] = data["FBOMID"]; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表.sql b/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表.sql index 3faef70..0f560dc 100644 --- a/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表.sql +++ b/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表.sql @@ -1,17 +1,38 @@ -;WITH #׼ AS ( +;WITH #λϢ AS ( +SELECT t0.FSTOCKID,t0_l.FNAME 'ֿ',t0.FNUMBER 'λ',t0f.FENTRYID,t0f.FFLEXID,t0f.FSEQ + ,t1.FNUMBER,t1.FFLEXNUMBER,t1e_l.FNAME + ,t2.* +FROM T_BD_STOCK t0 + INNER JOIN T_BD_STOCK_L t0_l on t0.FSTOCKID = t0_l.FSTOCKID AND t0_l.FLOCALEID = 2052 + INNER JOIN T_BD_STOCKFLEXITEM t0f on t0.FSTOCKID = t0f.FSTOCKID + INNER JOIN T_BAS_FLEXVALUES t1 on t1.FID = t0f.FFLEXID + INNER JOIN T_BAS_FLEXVALUESENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_BAS_FLEXVALUESENTRY_L t1e_l on t1e.FENTRYID = t1e_l.FENTRYID AND t1e_l.FLOCALEID = 2052 + CROSS APPLY ( + SELECT t2.FID 'StocklocId' + FROM T_BAS_FLEXVALUESDETAIL + UNPIVOT ( + T_BAS_FLEXVALUESDETAIL FOR FFLEXNUMBER IN (FF100001, FF100003, FF100004, FF100005,FF100007,FF100008,FF100009,FF100010,FF100013,FF100014) + ) AS t2 + WHERE 1 = 1 + --AND t2.FID = 100280 + AND t2.FFLEXNUMBER = t1.FFLEXNUMBER AND t1e.FENTRYID = t2.T_BAS_FLEXVALUESDETAIL + ) t2 +) +,#׼ AS ( SELECT t0.FBILLNO,t0.FID,t0.FMATERIALID AS 'P_MaterialId',t1.FNUMBER AS 'P_MaterialNumber',t1_l.FNAME AS 'P_MaterialName' ,t1_l.FSPECIFICATION AS 'P_Specification' - ,CONVERT(INT,t0.FQTY / CASE - WHEN CHARINDEX('/',t1_l.FSPECIFICATION) = 0 THEN 1 - ELSE CONVERT(INT,(LEFT(t1_l.FSPECIFICATION,CHARINDEX('/',t1_l.FSPECIFICATION) -2))) - END) '׼' + ,t0s.FPACKCOUNT '׼' ,t0.FHUOHAO,t0.FLABHUOHAO,t0.FQTY AS 'P_Qty',t0.FLABSPEC AS 'P_LabSpec' ,CONVERT(VARCHAR(100),t0.FEXPIRYDATE,23) 'FEXPIRYDATE' - ,ROW_NUMBER() OVER (ORDER BY t0.FBILLNO) AS 'P_RN',0 'isSub' + ,ROW_NUMBER() OVER (ORDER BY t0.FBILLNO DESC) AS 'P_RN',0 'isSub' + ,t0.FPDOSAGE,t0.FPIECECOUNT + ,t0.FUNITID,t0s.FPACKCOUNT,t0s.FSTOCKQTY,t0s.FPACKSTOCKID,t0s.FPACKSTOCKLOCID FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKSTOCK t0s on t0s.FID = t0.FID INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t1.FMATERIALID AND t1_l.FLOCALEID = 2052 - WHERE t0.FDOCUMENTSTATUS = 'C' + WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FRANDDMO = 0 ) , # AS ( SELECT t0.FBILLNO @@ -20,27 +41,51 @@ ,t0e.FMATERIALID,t1.FNUMBER AS 'MaterialNumber',t1_l.FNAME AS 'MaterialName',t0e.FQTY ,t1.FOLDNUMBER AS 'OldMaterialNumber' ,t0e.FGZLQTY,t0e.FZGSQTY,t0e.FFYLQTY,t0e.FHUOHAO,t0e.FLABHUOHAO,t0e.FLOT,t0e.FLOT_Text - ,CONVERT(VARCHAR(100),t0e.FPRODUCEDDATE,23) AS 'FPRODUCEDDATE' + ,t0e.FPRODUCEDDATE ,t0e.FMOBILLNO,t0e.FMOENTRYID,t0e.FMOID,t0e.FMOBILLTYPEID,1 'isSub' + ,t0e.FDOSAGE,t0.FPIECECOUNT,t1.F_UNITIDHS,t1.F_FYLBL_DECIMAL + ,t0e.FUNITID,t0.FPACKCOUNT,t0.FSTOCKQTY,t0.FPACKSTOCKID,t0.FPACKSTOCKLOCID FROM #׼ t0 INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t1.FMATERIALID AND t1_l.FLOCALEID = 2052 ) , # AS ( - SELECT t0.P_MaterialNumber '׼',t0.P_MaterialName '׼' - ,t0.P_Qty '׼',t0.P_LabSpec '׼',t0.FEXPIRYDATE 'Ч',t0.FBILLNO '׼' + SELECT t0.P_MaterialNumber '׼',t0.P_MaterialName '׼',t0.P_LabSpec '׼',t0.FLABHUOHAO '׼',t0.FHUOHAO '׼ڲ' + ,t0.FSTOCKQTY '׼' + ,'' 'Ч' + ,t0.FBILLNO '׼' ,'' AS 'ϱ','' AS 'Ͼɱ','' AS '',0 'װ_ml','' AS 'ڲ','' AS '','' AS '' - ,'' AS 'Ч',0 AS '','' AS 'λ',0 AS '_λ_ml',0 AS 'װ_',0 AS '_֧' + ,'' AS 'Ч',0 AS '',0 AS '_λ_ml',t0.FPACKCOUNT AS 'װ_',0 AS '_֧' + ,t0.FPDOSAGE,t0.FPIECECOUNT,1 'λ',0 '',t0.FUNITID,0 'ֿ',0 'λ',t0.P_MaterialId 'MaterialId' ,t0.P_RN,t0.isSub FROM #׼ t0 UNION ALL - SELECT '','',0,'','','',t0.MaterialNumber,t0.OldMaterialNumber,t0.MaterialName,t0.FGZLQTY - ,t0.FHUOHAO,t0.FLOT_Text,t0.FPRODUCEDDATE,t0.FEXPIRYDATE,t1s.FEXPPERIOD,'',t0.FQTY,0,0 + SELECT '','','','','',t0.FSTOCKQTY + ,CASE WHEN (t1s.FEXPPERIOD > 0 AND t1s.FEXPUNIT = 'Y') THEN (CONVERT(VARCHAR(100),DATEADD(YEAR,t1s.FEXPPERIOD / 2,t0.FPRODUCEDDATE),23)) + WHEN (t1s.FEXPPERIOD > 0 AND t1s.FEXPUNIT = 'M') THEN (CONVERT(VARCHAR(100),DATEADD(MONTH,t1s.FEXPPERIOD / 2,t0.FPRODUCEDDATE),23)) ELSE '' + END,'' + ,t0.MaterialNumber,t0.OldMaterialNumber,t0.MaterialName,t0.FGZLQTY,t0.FHUOHAO,t0.FLOT_Text + ,CONVERT(VARCHAR(100),t0.FPRODUCEDDATE,23),t0.FEXPIRYDATE,t1s.FEXPPERIOD,(t0.FDOSAGE * t0.FPACKCOUNT) / t0.F_UNITIDHS,t0.FPACKCOUNT,0 + ,t0.FDOSAGE,t0.FPIECECOUNT,t0.F_UNITIDHS,t0.F_FYLBL_DECIMAL,t0.FUNITID,t0.FPACKSTOCKID,t0.FPACKSTOCKLOCID,t0.FMATERIALID ,t0.P_RN,t0.isSub FROM # t0 INNER JOIN T_BD_MATERIALSTOCK t1s on t1s.FMATERIALID = t0.FMATERIALID ) -SELECT * +SELECT t0.׼,t0.׼,t0.׼,t0.׼,t0.׼ڲ ,t0.Ч ,t0.׼ + ,t0.ϱ,t0.Ͼɱ,t0.,t0.װ_ml,t0.ڲ,t0.,t0. + ,t0.Ч,t0.,t1_l.FNAME AS 'λ',t0._λ_ml,t0.װ_,CASE WHEN t0.װ_ml = 0 THEN ISNULL(t2.,0) ELSE ISNULL(t2.,0) / t0.λ / t0.װ_ml END AS _֧ + ,ISNULL(t4.ֿ,'') 'ֿ',ISNULL(t4.FNAME,'') 'λ' FROM # t0 -ORDER BY t0.P_RN,t0.isSub + INNER JOIN T_BD_UNIT_L t1_l on t1_l.FUNITID = t0.FUNITID AND t1_l.FLOCALEID = 2052 + LEFT JOIN T_BD_LOTMASTER t3 on t3.FMATERIALID = t0.MaterialId AND t3.FNUMBER = t0. AND t3.FUSEORGID = 1 AND t3.FBIZTYPE = 1 + OUTER APPLY ( + SELECT SUM(t2.FBASEQTY) '' + FROM T_STK_INVENTORY t2 + WHERE t2.FMATERIALID = t0.MaterialId AND t2.FLOT = t3.FLOTID + AND t2.FSTOCKID = t0.ֿ AND t2.FSTOCKLOCID = t0.λ + AND t2.FSTOCKORGID = 1 + ) t2 + --LEFT JOIN T_BD_STOCK_L t4_l on t0.ֿ = t4_l.FSTOCKID AND t4_l.FLOCALEID = 2052 + LEFT JOIN #λϢ t4 on t4.StocklocId = t0.λ AND t4.FSTOCKID = t0.ֿ +ORDER BY t0.P_RN,t0.isSub \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表_存储过程.sql b/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表_存储过程.sql new file mode 100644 index 0000000..a071f02 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SQLServer/库存优化报表_存储过程.sql @@ -0,0 +1,163 @@ +ALTER PROCEDURE PROC_STK_INVENTORY_OPTIMIZE +AS +BEGIN + + ;WITH #λϢ AS ( + SELECT t0.FSTOCKID,t0_l.FNAME 'ֿ',t0.FNUMBER 'λ',t0f.FENTRYID,t0f.FFLEXID,t0f.FSEQ + ,t1.FNUMBER,t1.FFLEXNUMBER,t1e_l.FNAME + ,t2.* + FROM T_BD_STOCK t0 + INNER JOIN T_BD_STOCK_L t0_l on t0.FSTOCKID = t0_l.FSTOCKID AND t0_l.FLOCALEID = 2052 + INNER JOIN T_BD_STOCKFLEXITEM t0f on t0.FSTOCKID = t0f.FSTOCKID + INNER JOIN T_BAS_FLEXVALUES t1 on t1.FID = t0f.FFLEXID + INNER JOIN T_BAS_FLEXVALUESENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_BAS_FLEXVALUESENTRY_L t1e_l on t1e.FENTRYID = t1e_l.FENTRYID AND t1e_l.FLOCALEID = 2052 + CROSS APPLY ( + SELECT t2.FID 'StocklocId' + FROM T_BAS_FLEXVALUESDETAIL + UNPIVOT ( + T_BAS_FLEXVALUESDETAIL FOR FFLEXNUMBER IN (FF100001, FF100003, FF100004, FF100005,FF100007,FF100008,FF100009,FF100010,FF100013,FF100014) + ) AS t2 + WHERE 1 = 1 + --AND t2.FID = 100280 + AND t2.FFLEXNUMBER = t1.FFLEXNUMBER AND t1e.FENTRYID = t2.T_BAS_FLEXVALUESDETAIL + ) t2 + ) + ,#׼ AS ( + SELECT t0.FBILLNO,t0.FID,t0.FMATERIALID AS 'P_MaterialId',t1.FNUMBER AS 'P_MaterialNumber',t1_l.FNAME AS 'P_MaterialName' + ,t1_l.FSPECIFICATION AS 'P_Specification' + ,t0s.FPACKCOUNT '׼' + ,t0.FHUOHAO,t0.FLABHUOHAO,t0.FQTY AS 'P_Qty',t0.FLABSPEC AS 'P_LabSpec' + ,CONVERT(VARCHAR(100),t0.FEXPIRYDATE,23) 'FEXPIRYDATE' + ,ROW_NUMBER() OVER (ORDER BY t0.FBILLNO DESC) AS 'P_RN',0 'isSub' + ,t0.FPDOSAGE,t0.FPIECECOUNT + ,t0.FUNITID,t0s.FPACKCOUNT,t0s.FSTOCKQTY,t0s.FPACKSTOCKID,t0s.FPACKSTOCKLOCID + FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKSTOCK t0s on t0s.FID = t0.FID + INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t1.FMATERIALID AND t1_l.FLOCALEID = 2052 + WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FRANDDMO = 0 + ) + , # AS ( + SELECT t0.FBILLNO + ,t0.P_MaterialId,t0.P_MaterialNumber,t0.P_MaterialName + ,t0.P_Qty,t0.P_LabSpec,t0.FEXPIRYDATE,t0.P_RN + ,t0e.FMATERIALID,t1.FNUMBER AS 'MaterialNumber',t1_l.FNAME AS 'MaterialName',t0e.FQTY + ,t1.FOLDNUMBER AS 'OldMaterialNumber' + ,t0e.FGZLQTY,t0e.FZGSQTY,t0e.FFYLQTY,t0e.FHUOHAO,t0e.FLABHUOHAO,t0e.FLOT,t0e.FLOT_Text + ,t0e.FPRODUCEDDATE + ,t0e.FMOBILLNO,t0e.FMOENTRYID,t0e.FMOID,t0e.FMOBILLTYPEID,1 'isSub' + ,t0e.FDOSAGE,t0.FPIECECOUNT,t1.F_UNITIDHS,t1.F_FYLBL_DECIMAL + ,t0e.FUNITID,t0.FPACKCOUNT,t0.FSTOCKQTY,t0.FPACKSTOCKID,t0.FPACKSTOCKLOCID + FROM #׼ t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t1.FMATERIALID AND t1_l.FLOCALEID = 2052 + ) + , # AS ( + SELECT t0.P_MaterialNumber '׼',t0.P_MaterialName '׼',t0.P_LabSpec '׼',t0.FLABHUOHAO '׼',t0.FHUOHAO '׼ڲ' + ,t0.FSTOCKQTY '׼' + ,'' 'Ч' + ,t0.FBILLNO '׼' + ,'' AS 'ϱ','' AS 'Ͼɱ','' AS '',0 'װ_ml','' AS 'ڲ','' AS '','' AS '' + ,'' AS 'Ч',0 AS '',0 AS '_λ_ml',t0.FPACKCOUNT AS 'װ_',0 AS '_֧' + ,t0.FPDOSAGE,t0.FPIECECOUNT,1 'λ',0 '',t0.FUNITID,0 'ֿ',0 'λ',t0.P_MaterialId 'MaterialId' + ,t0.P_RN,t0.isSub + FROM #׼ t0 + UNION ALL + SELECT '','','','','',t0.FSTOCKQTY + ,CASE WHEN (t1s.FEXPPERIOD > 0 AND t1s.FEXPUNIT = 'Y') THEN (CONVERT(VARCHAR(100),DATEADD(YEAR,t1s.FEXPPERIOD / 2,t0.FPRODUCEDDATE),23)) + WHEN (t1s.FEXPPERIOD > 0 AND t1s.FEXPUNIT = 'M') THEN (CONVERT(VARCHAR(100),DATEADD(MONTH,t1s.FEXPPERIOD / 2,t0.FPRODUCEDDATE),23)) ELSE '' + END,'' + ,t0.MaterialNumber,t0.OldMaterialNumber,t0.MaterialName,t0.FGZLQTY,t0.FHUOHAO,t0.FLOT_Text + ,CONVERT(VARCHAR(100),t0.FPRODUCEDDATE,23),t0.FEXPIRYDATE,t1s.FEXPPERIOD,(t0.FDOSAGE * t0.FPACKCOUNT) / t0.F_UNITIDHS,t0.FPACKCOUNT,0 + ,t0.FDOSAGE,t0.FPIECECOUNT,t0.F_UNITIDHS,t0.F_FYLBL_DECIMAL,t0.FUNITID,t0.FPACKSTOCKID,t0.FPACKSTOCKLOCID,t0.FMATERIALID + ,t0.P_RN,t0.isSub + FROM # t0 + INNER JOIN T_BD_MATERIALSTOCK t1s on t1s.FMATERIALID = t0.FMATERIALID + ) + SELECT t0.׼,t0.׼,t0.׼,t0.׼,t0.׼ڲ ,t0.Ч ,t0.׼ + ,t0.ϱ,t0.Ͼɱ,t0.,t0.װ_ml,t0.ڲ,t0.,t0. + ,t0.Ч,t0.,t1_l.FNAME AS 'λ',t0._λ_ml,t0.װ_,CASE WHEN t0.װ_ml = 0 THEN ISNULL(t2.,0) ELSE ISNULL(t2.,0) / t0.λ / t0.װ_ml END AS _֧ + ,ISNULL(t4.ֿ,'') 'ֿ',ISNULL(t4.FNAME,'') 'λ' + FROM # t0 + INNER JOIN T_BD_UNIT_L t1_l on t1_l.FUNITID = t0.FUNITID AND t1_l.FLOCALEID = 2052 + LEFT JOIN T_BD_LOTMASTER t3 on t3.FMATERIALID = t0.MaterialId AND t3.FNUMBER = t0. AND t3.FUSEORGID = 1 AND t3.FBIZTYPE = 1 + OUTER APPLY ( + SELECT SUM(t2.FBASEQTY) '' + FROM T_STK_INVENTORY t2 + WHERE t2.FMATERIALID = t0.MaterialId AND t2.FLOT = t3.FLOTID + AND t2.FSTOCKID = t0.ֿ AND t2.FSTOCKLOCID = t0.λ + AND t2.FSTOCKORGID = 1 + ) t2 + --LEFT JOIN T_BD_STOCK_L t4_l on t0.ֿ = t4_l.FSTOCKID AND t4_l.FLOCALEID = 2052 + LEFT JOIN #λϢ t4 on t4.StocklocId = t0.λ AND t4.FSTOCKID = t0.ֿ + ORDER BY t0.P_RN,t0.isSub + +END + + +--;WITH # AS ( +-- SELECT 20241031 seq,30000 qty,0 allotQty,1 id +-- UNION ALL +-- SELECT 20241101 seq,10000 qty,0 allotQty,2 +-- UNION ALL +-- SELECT 20241102 seq,10000 qty,0 allotQty,3 +--) +--, # AS ( +-- SELECT 20241028 seq,5000 qty,0 allotQty,1 id +-- UNION ALL +-- SELECT 20241029 seq,10000 qty,0 allotQty,2 +-- UNION ALL +-- SELECT 20241030 seq,5000 qty,0 allotQty,3 +-- UNION ALL +-- SELECT 20241030 seq,20000 qty,0 allotQty,4 +--) +--, #ݷ AS ( +-- SELECT *,SUM(qty) OVER(ORDER BY id) AS s +-- ,ROW_NUMBER() OVER(ORDER BY id) AS x +-- ,COUNT(1) OVER() AS y +-- FROM # +--) +--SELECT * +--FROM # tt +-- CROSS APPLY ( +-- SELECT * +-- ,CASE WHEN s<=@fp THEN +-- CASE WHEN x=y THEN @fp- LAG(s,1) OVER(ORDER BY a.itemno) else qty end +-- ELSE +-- CASE when a.qty-(s-@fp)<0 THEN 0 ELSE a.qty-(s-@fp) end +-- END AS +-- FROM #ݷ t0 +-- WHERE tt.seq < t0.seq +-- ) t1 +----WHERE t1.AvgQty > 0 + + + +--Create table #car_parts(docno nvarchar(30),itemno nvarchar(10),pcode nvarchar(30),qty numeric(18,4) ) +--Insert #car_parts +--select 'PO2021013','0001','A001',100 union all +--select 'PO2021013','0002','A001',200 union all +--select 'PO2021013','0003','A001',300 union all +--select 'PO2021013','0006','A001',400 union all +--select 'PO2021013','0004','B001',400 union all +--select 'PO2021013','0005','B001',500 union all +--select 'PO2021013','0007','B001',200 + +--DECLARE @fp NUMERIC(18,4)=1200 +--SELECT * +-- ,CASE WHEN s<=@fp THEN +-- CASE WHEN x=y THEN @fp- LAG(s,1) OVER(ORDER BY a.itemno) else qty end +-- ELSE +-- CASE when a.qty-(s-@fp)<0 THEN 0 ELSE a.qty-(s-@fp) end +-- END AS +--FROM +--( +-- SELECT *,SUM(qty) OVER(ORDER BY itemno) AS s +-- ,ROW_NUMBER() OVER(ORDER BY itemno) AS x +-- ,COUNT(1) OVER() AS y +-- FROM #car_parts +-- WHERE pcode='A001' +--) a + diff --git a/14.宝锐/GZ.LJY000.Biori/SQLServer/条码提示控制参数_存储过程.sql b/14.宝锐/GZ.LJY000.Biori/SQLServer/条码提示控制参数_存储过程.sql new file mode 100644 index 0000000..5a2982d --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SQLServer/条码提示控制参数_存储过程.sql @@ -0,0 +1,11 @@ +CREATE PROC Proc_Get_BarCode_Control_Param +AS +BEGIN + SELECT TOP 1 + F_SAL_OUTSTOCK_Group 'OutStockPack',F_SAL_OUTSTOCK_Group 'OutStockPackCode',F_SAL_OUTSTOCK_Group 'OutStockBarCode' + ,F_STK_TransferDirect_Group 'TransferDirectPack',F_STK_TransferDirect_Group 'TransferDirectPackCode',F_STK_TransferDirect_Group 'TransferDirectBarCode' + ,F_STK_MisDelivery_Group 'MisDeliveryPack',F_STK_MisDelivery_Group 'MisDeliveryPackCode',F_STK_MisDelivery_Group 'MisDeliveryBarCode' + FROM T_BD_BarCodeConlParam + ORDER BY FID + +END \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/Submit.cs b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/Submit.cs new file mode 100644 index 0000000..58291da --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/Submit.cs @@ -0,0 +1,52 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_MisDelivery.OperationEventPlugIn +{ + /// + /// 保存8 提交9 审核1 反审核26 删除3 + /// + [HotUpdate, Description("提交_其他出库单")] + public class Submit: AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FQty"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FTransferDirect"); + e.FieldKeys.Add("FMaterialId"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FRowId"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 9) + { + var validator = new SubmitVaildator();//新增的校验器 + validator.EntityKey = "FBillEntry"; + e.Validators.Add(validator);//添加校验器 + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/SubmitVaildator.cs b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/SubmitVaildator.cs new file mode 100644 index 0000000..f17f9e8 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugIn/SubmitVaildator.cs @@ -0,0 +1,204 @@ +using Kingdee.BOS; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using Kingdee.K3.Core.MFG.EntityHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_MisDelivery.OperationEventPlugIn +{ + [Description("其他出库单_提交")] + public class SubmitVaildator : AbstractValidator + { + /// + /// 校验器初始化 + /// + /// + /// + public override void InitializeConfiguration(ValidateContext validateContext, Context ctx) + { + base.InitializeConfiguration(validateContext, ctx); + //if (validateContext.BusinessInfo != null) + //{ + // EntityKey = validateContext.BusinessInfo.GetEntity(0).Key; + //} + } + + public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) + { + if (validateContext.IgnoreWarning) + return;// 警告已经被用户忽略,就不需要再次执行了 + + if (dataEntities == null || dataEntities.Length <= 0) + return;// 传入数据包为空 + + //string title = "条码匹配"; + var dataList = new List(); + foreach (var data in dataEntities) + { + var item = data.DataEntity; + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + materialId = item["MaterialID_Id"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["SrcStockId_Id"].Long2Int(), + stockLocId = item["SrcStockLocId_Id"].Long2Int(), + QRCode = item["FPackBarCode"] == null ? string.Empty : item["FPackBarCode"].ToString(), + //lotId = item["Lot_Id"].Long2Int(), + dataEntity = data, + }; + + if (qv.QRCode.IsNullOrEmptyOrWhiteSpace()) + qv.QRCode = item["FPDABarCode"] == null ? string.Empty : item["FPDABarCode"].ToString(); + + dataList.Add(qv); + } + + if (dataList.Any()) + { + var pList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + pData.lotId = sData.lotId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in pList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId "); + idx++; + } + + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0s.FPACKSTOCKID,t0s.FPACKSTOCKLOCID,t0s.FPACKCOUNT,t0s.FSTOCKQTY,t1.seq +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKSTOCK t0s on t0.FID = t0s.FID + INNER JOIN #基础数据 t1 on t1.stockId = t0s.FPACKSTOCKID AND t0s.FPACKSTOCKLOCID = t1.stockLocId +WHERE t1.materialId = t0.FMATERIALID +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = pList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPackBarCode", $"没有填写条码:第[{data.seq}]行明细,对应物料批号已存在条码!", title)); + } + } + } + + var oList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Standard", StringComparison.OrdinalIgnoreCase)).ToList(); + + if (oList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in oList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId "); + idx++; + } + + if (sqlL.Count > 0) + { + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0.FBARCODE,t0.FMATERIALID,t0.FLOT + ,t0.FBILLENTRYID,t0.FBILLID,t0.FBILLNO,t1.seq +FROM T_UNW_WMS_BARCODERECORD t0 + INNER JOIN #基础数据 t1 on t1.materialId = t0.FMATERIALID AND t0.FLOT = t1.lotId +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = oList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPackBarCode", $"没有填写条码:第[{data.seq}]行明细,对应物料批号已存在条码!", title)); + } + } + + } + + } + + } + + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string QRCode { get; set; } + + public ExtendedDataEntity dataEntity { get; set; } + + public ValidationErrorInfo SetValidationErrorInfo(string keyName, string msg, string title, ErrorLevel errorLevel = ErrorLevel.Error) + { + return new ValidationErrorInfo( + keyName + , this.dataEntity.DataEntity["Id"].ToString() + , this.dataEntity.DataEntityIndex + , this.dataIndex + , "REF" + , msg + , title + , errorLevel + ); + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/BillEventPlugIn/更新数量包含富余量.py b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/BillEventPlugIn/更新数量包含富余量.py new file mode 100644 index 0000000..ed6250f --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/BillEventPlugIn/更新数量包含富余量.py @@ -0,0 +1,62 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Xml") +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.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Util import * +from System import * +from System.Xml import * +from System.ComponentModel import * +from System.Collections.Generic import * +from System.Text import* +from Kingdee.BOS.ServiceHelper import * + +def RowTypeBool(row): + rowType = this.View.Model.GetValue("FRowType", row); + return rowType == "Parent" or rowType == "Son"; + +def DataChanged(e): + if e.Field.Key == "FQty": + if RowTypeBool(e.Row): + materialObj = this.View.Model.GetValue("FMaterialId", e.Row) + if materialObj == None: + return; + + unitIdHS = materialObj["F_UnitIdHS"] + + unitCon = this.View.Model.GetValue("FUnitCon", e.Row); + anchorQty = this.View.Model.GetValue("FAnchorQty",e.Row); + baseQty = this.View.Model.GetValue("FBaseQty",e.Row); + raise Exception(str(baseQty)) + submitQty = this.View.Model.GetValue("FSubmitQty",e.Row); + + if anchorQty == 0 or anchorQty != (e.NewValue / (1 + unitIdHS)): + this.View.Model.SetValue("FAnchorQty", e.NewValue ,e.Row); + this.View.UpdateView("FAnchorQty",e.Row); + + this.View.Model.SetValue("FSubmitQty", e.NewValue ,e.Row); + this.View.UpdateView("FSubmitQty",e.Row); + + + + return; + + return; + + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.cs new file mode 100644 index 0000000..fd3cf4e --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.cs @@ -0,0 +1,167 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.K3.Core.MFG.EntityHelper; +using Kingdee.K3.BD.NewCode.Core.Utils; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + [HotUpdate, Description("审核_直接调拨单")] + public class Audit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FTransferDirect"); + + e.FieldKeys.Add("FMaterialId"); + + e.FieldKeys.Add("FQty"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + if (this.FormOperation.OperationId == 1) + { + foreach (var entity in e.DataEntitys) + { + var isIn = false; + + var TransferDirect = entity["TransferDirect"].ToString(); + isIn = TransferDirect.Equals("RETURN", StringComparison.OrdinalIgnoreCase) ? !isIn : isIn; + + var entry = ((DynamicObjectCollection)entity["TransferDirectEntry"]); + var dataList = new List(); + foreach (var item in entry) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + + srcStockId = item["SrcStockId_Id"].Long2Int(), + srcStockLocId = item["SrcStockLocId_Id"].Long2Int(), + + destStockId = item["DestStockId_Id"].Long2Int(), + destStockLocId = item["DestStockLocId_Id"].Long2Int(), + + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.srcStockId = sData.srcStockId; + pData.srcStockLocId = sData.srcStockLocId; + + pData.destStockId = sData.destStockId; + pData.destStockLocId = sData.destStockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + if (p.packBillNo.IsNullOrEmptyOrWhiteSpace()) + continue; + + var packBillNo = p.packBillNo; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + var flag = packService.DoComputePackgeQty(packBillNo, p.srcStockId, p.srcStockLocId, pieceCount, isIn, ref msg); + if (!flag) + throw new Exception(msg); + + + var flag2 = packService.DoComputePackgeQty(packBillNo, p.destStockId, p.destStockLocId, pieceCount, !isIn, ref msg); + if (!flag2) + throw new Exception(msg); + } + } + } + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int srcStockId { get; set; } + public int srcStockLocId { get; set; } + + public int destStockId { get; set; } + public int destStockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.py b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.py new file mode 100644 index 0000000..a43440b --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Audit.py @@ -0,0 +1,119 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +clr.AddReference('GZ.LJY000.Biori') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * +from GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK import * + +class QRCodeValidate: + def __init__(self): + self.row_type = None + self.row_id = None + self.parent_row_id = None + self.seq = 0 + self.lot_id = 0 + self.lot_text = None + self.src_stock_id = 0 + self.src_stock_loc_id = 0 + self.dest_stock_id = 0 + self.dest_stock_loc_id = 0 + self.material_id = 0 + self.data_index = 0 + self.pack_bill_no = None + self.piece_count = 0 + +def OnPreparePropertys(e): + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FTransferDirect"); + + e.FieldKeys.Add("FMaterialId"); + + e.FieldKeys.Add("FQty"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + +def EndOperationTransaction(e): + if this.FormOperation.OperationId == 1: + for entity in e.DataEntitys: + is_in = False + + TransferDirect = entity["TransferDirect"] + + is_in = (not is_in) if TransferDirect.upper() == "RETURN" else is_in + + entry = entity["TransferDirectEntry"] + data_list = [] + for item in entry: + qv = QRCodeValidate() + qv.seq = int(item["Seq"]) + qv.row_type = str(item["RowType"]) + qv.row_id = str(item["RowId"]) + qv.parent_row_id = str(item["ParentRowId"]) + qv.src_stock_id = int(item["SrcStockId_Id"]) + qv.src_stock_loc_id = int(item["SrcStockLocId_Id"]) + qv.dest_stock_id = int(item["DestStockId_Id"]) + qv.dest_stock_loc_id = int(item["DestStockLocId_Id"]) + qv.pack_bill_no = str(item["FPackBillNo"]) if item["FPackBillNo"] else "" + qv.piece_count = float(item["FCuntQty"]) + data_list.append(qv) + + p_list = [x for x in data_list if x.row_type.upper() == "PARENT"] + for p in p_list: + if not p.pack_bill_no.strip(): + continue + + pack_bill_no = p.pack_bill_no + piece_count = p.piece_count + + pack_service = PrdPackService(this.Context) # 这里上下文参数需要根据实际情况传入 + msg = "" + flag = pack_service.DoComputePackgeQty(pack_bill_no, p.src_stock_id, p.src_stock_loc_id, piece_count, is_in, msg) + if not flag: + raise Exception(msg) + + flag2 = pack_service.DoComputePackgeQty(pack_bill_no, p.dest_stock_id, p.dest_stock_loc_id, piece_count, not is_in, msg) + if not flag2: + raise Exception(msg) + + \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Save.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Save.cs new file mode 100644 index 0000000..f2bbe30 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Save.cs @@ -0,0 +1,50 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + /// + /// 保存8 提交9 审核1 反审核26 删除3 + /// + [HotUpdate, Description("保存_直接调拨单")] + public class Save : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FQty"); + e.FieldKeys.Add("FPackBarCode"); + + e.FieldKeys.Add("FTransferDirect"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FRowId"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 8) + { + var validator = new SaveVaildator();//新增的校验器 + validator.EntityKey = "FBillEntry"; + e.Validators.Add(validator);//添加校验器 + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SaveVaildator.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SaveVaildator.cs new file mode 100644 index 0000000..d817988 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SaveVaildator.cs @@ -0,0 +1,127 @@ +using Kingdee.BOS; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + /// + /// 直接调拨单审核时校验对应组装单是否有足够数量 + /// + [Description("直接调拨单_校验保存")] + public class SaveVaildator : AbstractValidator + { + /// + /// 校验器初始化 + /// + /// + /// + public override void InitializeConfiguration(ValidateContext validateContext, Context ctx) + { + base.InitializeConfiguration(validateContext, ctx); + } + + + /// + /// + /// + /// + /// + /// + public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) + { + if (validateContext.IgnoreWarning) + return; // 警告已经被用户忽略,就不需要再次执行了 + + if (dataEntities == null || dataEntities.Length <= 0) + return;// 传入数据包为空 + + var stockIds = new Dictionary(); + var stockLocIds = new Dictionary(); + + var destStockIds = new Dictionary(); + var destStockLocIds = new Dictionary(); + + foreach (var data in dataEntities) + { + var item = data.DataEntity; + var rowType = item["RowType"].ToString(); + if (!rowType.Equals("Son", StringComparison.OrdinalIgnoreCase)) + continue; + + var parentRowId = item["ParentRowId"].ToString(); + + //仓库id + var stockId = item["SrcStockId_Id"].Long2Int(); + var stockLocId = item["SrcStockLocId_Id"].Long2Int(); + + var destStockId = item["DestStockId_Id"].Long2Int(); + var destStockLocId = item["DestStockLocId_Id"].Long2Int(); + + if (!parentRowId.IsNullOrEmptyOrWhiteSpace()) + { + + if (!stockIds.ContainsKey(parentRowId)) + stockIds.Add(parentRowId, stockId); + + if (!stockLocIds.ContainsKey(parentRowId)) + stockLocIds.Add(parentRowId, stockLocId); + + if (!destStockIds.ContainsKey(parentRowId)) + destStockIds.Add(parentRowId, destStockId); + + if (!destStockLocIds.ContainsKey(parentRowId)) + destStockLocIds.Add(parentRowId, destStockLocId); + + if (stockIds[parentRowId] != stockId || stockLocIds[parentRowId] != stockLocId) + { + var seq = item["Seq"].Long2Int(); + var msg = $"第[{seq}]行明细,与套件的调出仓库、仓位信息不匹配!"; + validateContext.AddError(data + , new ValidationErrorInfo( + "SrcStockId" // 出错的字段Key,可以空 + , data.DataEntity["Id"].ToString() // 数据包内码,必填,后续操作会据此内码避开此数据包 + , data.DataEntityIndex // 出错的数据包在全部数据包中的顺序 + , 0 // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 + , "REF"// 错误编码,可以任意设定一个字符,主要用于追查错误来源 + , msg // 错误的详细提示信息 + , "套件组分仓库、仓位信息需要统一!"// 错误的简明提示信息 + , ErrorLevel.Error // 错误级别:警告、错误... + ) + ); + } + + if (destStockIds[parentRowId] != destStockId || destStockLocIds[parentRowId] != destStockLocId) + { + var seq = item["Seq"].Long2Int(); + var msg = $"第[{seq}]行明细,与套件的调入仓库、仓位信息不匹配!"; + validateContext.AddError(data + , new ValidationErrorInfo( + "DestStockId" // 出错的字段Key,可以空 + , data.DataEntity["Id"].ToString() // 数据包内码,必填,后续操作会据此内码避开此数据包 + , data.DataEntityIndex // 出错的数据包在全部数据包中的顺序 + , 0 // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 + , "REF"// 错误编码,可以任意设定一个字符,主要用于追查错误来源 + , msg // 错误的详细提示信息 + , "套件组分仓库、仓位信息需要统一!"// 错误的简明提示信息 + , ErrorLevel.Error // 错误级别:警告、错误... + ) + ); + } + } + } + + } + + } + +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Submit.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Submit.cs new file mode 100644 index 0000000..431a19e --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/Submit.cs @@ -0,0 +1,182 @@ +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using Kingdee.K3.Core.MFG.EntityHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + /// + /// 保存8 提交9 审核1 反审核26 删除3 + /// + [HotUpdate, Description("提交_直接调拨单操作")] + public class Submit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FTransferDirect"); + + e.FieldKeys.Add("FMaterialId"); + + e.FieldKeys.Add("FQty"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + } + + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + //添加检查校验器: + if (this.FormOperation.OperationId == 9) + { + var validator = new SubmitVaildator();//新增的校验器 + validator.EntityKey = "FBillEntry"; + e.Validators.Add(validator);//添加校验器 + } + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + if (false && this.FormOperation.OperationId == 9) + { + foreach (var entity in e.DataEntitys) + { + var isIn = false; + + var TransferDirect = entity["TransferDirect"].ToString(); + isIn = TransferDirect.Equals("RETURN", StringComparison.OrdinalIgnoreCase) ? !isIn : isIn; + + var entry = ((DynamicObjectCollection)entity["TransferDirectEntry"]); + var dataList = new List(); + foreach (var item in entry) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + + srcStockId = item["SrcStockId_Id"].Long2Int(), + srcStockLocId = item["SrcStockLocId_Id"].Long2Int(), + + destStockId = item["DestStockId_Id"].Long2Int(), + destStockLocId = item["DestStockLocId_Id"].Long2Int(), + + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.srcStockId = sData.srcStockId; + pData.srcStockLocId = sData.srcStockLocId; + + pData.destStockId = sData.destStockId; + pData.destStockLocId = sData.destStockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + if (p.packBillNo.IsNullOrEmptyOrWhiteSpace()) + continue; + + var packBillNo = p.packBillNo; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + var flag = packService.DoComputePackgeQty(packBillNo, p.srcStockId, p.srcStockLocId, pieceCount, isIn, ref msg); + if (!flag) + throw new Exception(msg); + + + var flag2 = packService.DoComputePackgeQty(packBillNo, p.destStockId, p.destStockLocId, pieceCount, !isIn, ref msg); + if (!flag2) + throw new Exception(msg); + } + } + } + + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int srcStockId { get; set; } + public int srcStockLocId { get; set; } + + public int destStockId { get; set; } + public int destStockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SubmitVaildator.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SubmitVaildator.cs new file mode 100644 index 0000000..77e3203 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/SubmitVaildator.cs @@ -0,0 +1,226 @@ +using Kingdee.BOS; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using Kingdee.K3.Core.MFG.EntityHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + [Description("直接调拨单校验_提交")] + public class SubmitVaildator : AbstractValidator + { + /// + /// 校验器初始化 + /// + /// + /// + public override void InitializeConfiguration(ValidateContext validateContext, Context ctx) + { + base.InitializeConfiguration(validateContext, ctx); + //if (validateContext.BusinessInfo != null) + //{ + // EntityKey = validateContext.BusinessInfo.GetEntity(0).Key; + //} + } + + public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) + { + if (validateContext.IgnoreWarning) + return;// 警告已经被用户忽略,就不需要再次执行了 + + if (dataEntities == null || dataEntities.Length <= 0) + return;// 传入数据包为空 + + + #region 控制是否启用条码控制 + var packConl = 0; + var conlSql = $@"/*dialect*/ +exec Proc_Get_BarCode_Control_Param +"; + + var conlData = DBServiceHelper.ExecuteDynamicObject(this.Context, conlSql); + if (conlData == null && conlData.Count > 0) + packConl = int.Parse(conlData[0]["TransferDirectPack"].ToString()); + + if (packConl == 0) + return; + #endregion 控制是否启用条码控制 + + //string title = "条码匹配"; + var dataList = new List(); + foreach (var data in dataEntities) + { + var item = data.DataEntity; + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + materialId = item["MaterialID_Id"].Long2Int(), + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + stockId = item["SrcStockId_Id"].Long2Int(), + stockLocId = item["SrcStockLocId_Id"].Long2Int(), + lotId = item["Lot_Id"].Long2Int(), + lot_text = item["Lot_Text"].ToString(), + QRCode = item["FPackBarCode"] == null ? string.Empty : item["FPackBarCode"].ToString(), + dataEntity = data, + errorLevel = (ErrorLevel)packConl + }; + + if (qv.QRCode.IsNullOrEmptyOrWhiteSpace()) + qv.QRCode = item["FPDABarCode"] == null ? string.Empty : item["FPDABarCode"].ToString(); + + dataList.Add(qv); + } + + if (dataList.Any()) + { + var pList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.stockId = sData.stockId; + pData.stockLocId = sData.stockLocId; + pData.lotId = sData.lotId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in pList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId,'{o.lot_text}' lot_text"); + idx++; + } + + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0s.FPACKSTOCKID,t0s.FPACKSTOCKLOCID,t0s.FPACKCOUNT,t0s.FSTOCKQTY,t1.seq +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKSTOCK t0s on t0.FID = t0s.FID + INNER JOIN #基础数据 t1 on t1.stockId = t0s.FPACKSTOCKID AND t0s.FPACKSTOCKLOCID = t1.stockLocId +WHERE t1.materialId = t0.FMATERIALID +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = pList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPackBarCode", $"没有填写条码:第[{data.seq}]行明细,对应物料批号已存在条码!", title)); + } + } + } + + var oList = dataList.Where(w => w.QRCode.IsNullOrEmptyOrWhiteSpace() && w.rowType.Equals("Standard", StringComparison.OrdinalIgnoreCase)).ToList(); + + if (oList.Any()) + { + var sqlL = new List(); + var idx = 0; + foreach (var o in oList) + { + sqlL.Add($@" SELECT {idx} seq,{o.materialId} materialId ,{o.stockId} stockId,{o.stockLocId} stockLocId,{o.lotId} lotId ,'{o.lot_text}' lot_text"); + idx++; + } + + if (sqlL.Count > 0) + { + var sql = $@"/*dialect*/ +WITH #基础数据 AS ({(string.Join(" UNION ALL ", sqlL))}) +SELECT t0.FBARCODE,t0.FMATERIALID,t0.FLOT + ,t0.FBILLENTRYID,t0.FBILLID,t0.FBILLNO,t1.seq +FROM T_UNW_WMS_BARCODE t0 + INNER JOIN #基础数据 t1 on t1.materialId = t0.FMATERIALID + AND t1.lot_text = t0.FLOT_TEXT +"; + + var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + { + var title = "缺少对应条码!"; + foreach (var item in res) + { + var data = oList[item["seq"].Long2Int()]; + if (data.QRCode.IsNullOrEmptyOrWhiteSpace()) + validateContext.AddError(data.dataEntity, data.SetValidationErrorInfo("FPDABarCode", $"没有填写条码:第[{data.seq}]行明细,对应物料批号已存在条码!", title)); + } + } + + } + + } + + } + + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + public int stockId { get; set; } + + public int stockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string QRCode { get; set; } + + public ExtendedDataEntity dataEntity { get; set; } + + public ErrorLevel errorLevel { get; set; } + + public ValidationErrorInfo SetValidationErrorInfo(string keyName, string msg, string title) + { + return new ValidationErrorInfo( + keyName + , this.dataEntity.DataEntity["Id"].ToString() + , this.dataEntity.DataEntityIndex + , this.dataIndex + , "REF" + , msg + , title + , errorLevel + ); + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/UnAudit.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/UnAudit.cs new file mode 100644 index 0000000..1ea4a8e --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugIn/UnAudit.cs @@ -0,0 +1,168 @@ +using GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.K3.BD.NewCode.Core.Utils; +using Kingdee.K3.Core.MFG.EntityHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.STK_TransferDirect.OperationEventPlugIn +{ + [HotUpdate, Description("反审核_直接调拨单操作")] + public class UnAudit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FRowId"); + e.FieldKeys.Add("FParentRowId"); + e.FieldKeys.Add("FTransferDirect"); + + e.FieldKeys.Add("FMaterialId"); + + e.FieldKeys.Add("FQty"); + + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + e.FieldKeys.Add("FLot"); + + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FPDABarCode"); + + e.FieldKeys.Add("FCuntQty"); + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + //保存8 提交9 审核1 反审核26 删除3 + if (this.FormOperation.OperationId == 26) + { + foreach (var entity in e.DataEntitys) + { + var isIn = true; + + var TransferDirect = entity["TransferDirect"].ToString(); + isIn = TransferDirect.Equals("RETURN", StringComparison.OrdinalIgnoreCase) ? !isIn : isIn; + + var entry = ((DynamicObjectCollection)entity["TransferDirectEntry"]); + var dataList = new List(); + foreach (var item in entry) + { + var qv = new QRCodeValidate + { + seq = item["Seq"].Long2Int(), + + rowType = item["RowType"].Convert(), + rowId = item["RowId"].Convert(), + parentRowId = item["ParentRowId"].Convert(), + + srcStockId = item["SrcStockId_Id"].Long2Int(), + srcStockLocId = item["SrcStockLocId_Id"].Long2Int(), + + destStockId = item["DestStockId_Id"].Long2Int(), + destStockLocId = item["DestStockLocId_Id"].Long2Int(), + + packBillNo = item["FPackBillNo"] == null ? string.Empty : item["FPackBillNo"].ToString(), + pieceCount = item["FCuntQty"].Convert(), + }; + + dataList.Add(qv); + } + + var pList = dataList.Where(w => w.rowType.Equals("Parent", StringComparison.OrdinalIgnoreCase)).Select(x => + { + var pData = x; + var sData = dataList.FirstOrDefault(w => w.rowType.Equals("Son", StringComparison.OrdinalIgnoreCase) && w.parentRowId == pData.rowId); + if (sData != null) + { + pData.srcStockId = sData.srcStockId; + pData.srcStockLocId = sData.srcStockLocId; + + pData.destStockId = sData.destStockId; + pData.destStockLocId = sData.destStockLocId; + } + + return pData; + }).ToList(); + + if (pList.Any()) + { + foreach (var p in pList) + { + string msg = string.Empty; + + if (p.packBillNo.IsNullOrEmptyOrWhiteSpace()) + continue; + + var packBillNo = p.packBillNo; + var pieceCount = p.pieceCount; + + var packService = new PrdPackService(this.Context); + var flag = packService.DoComputePackgeQty(packBillNo, p.srcStockId, p.srcStockLocId, pieceCount, isIn, ref msg); + if (!flag) + throw new Exception(msg); + + + var flag2 = packService.DoComputePackgeQty(packBillNo, p.destStockId, p.destStockLocId, pieceCount, !isIn, ref msg); + if (!flag2) + throw new Exception(msg); + } + } + } + + } + } + + public class QRCodeValidate + { + /// + /// 产品类型 + /// + public string rowType { get; set; } + + /// + /// 行标识Id + /// + public string rowId { get; set; } + + /// + /// 父行标识Id + /// + public string parentRowId { get; set; } + + public int seq { get; set; } + + public int lotId { get; set; } + + public string lot_text { get; set; } + + + public int srcStockId { get; set; } + public int srcStockLocId { get; set; } + + public int destStockId { get; set; } + public int destStockLocId { get; set; } + + public int materialId { get; set; } + + public int dataIndex { get; set; } + + public string packBillNo { get; set; } + + public decimal pieceCount { get; set; } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs index b6c2f2e..036c7c0 100644 --- a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs @@ -26,6 +26,7 @@ namespace GZ.LJY000.Biori.STK_TransferDirect //e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FQty"); e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FTransferDirect"); } public override void OnAddValidators(AddValidatorsEventArgs e) diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.py index edc7d80..dab64db 100644 --- a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.py @@ -33,22 +33,30 @@ from Kingdee.BOS.App.Core import * def OnPreparePropertys(e): e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); e.FieldKeys.Add("FPackBarCode"); + e.FieldKeys.Add("FCuntQty"); + e.FieldKeys.Add("FQty"); def BeforeDoSaveExecute(e): for entity in e.DataEntities: entries = entity["TransferDirectEntry"] sqlL = List[str](); for idx,entry in enumerate(entries): - packBarCode = "" if entry["FPackBarCode"] == None else entry["FPackBarCode"].strip() - packBillNo = "" if entry["FPackBillNo"] == None else entry["FPackBillNo"].strip() - - if packBarCode != "" and packBillNo == "": - materialId = entry["MaterialID_Id"] - entryId = entry["Id"] - sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode'".format(materialId,entryId,idx,packBarCode)); - + rowType = 1 if entry["RowType"] == "Parent" else 2; + if rowType == 2 or rowType == 1: + packBarCode = "" if entry["FPackBarCode"] == None else entry["FPackBarCode"].strip() + packBillNo = "" if entry["FPackBillNo"] == None else entry["FPackBillNo"].strip() + + if (rowType == 1 and packBillNo == "") or (rowType == 2 and packBarCode != "" and packBillNo == ""): + materialId = entry["MaterialID_Id"] + entryId = entry["Id"] + rowId = entry["RowId"] + pRowId = entry["ParentRowId"] + qty = entry["Qty"] + sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode',{4} AS 'FRowType','{5}' AS 'rowId','{6}' AS 'pRwoId',{7} AS FQTY".format(materialId,entryId,idx,packBarCode,rowType,rowId,pRowId,qty)); + if sqlL.Count > 0: sqlUnion = " UNION ALL ".join(sqlL); sql = """/*dialect*/ @@ -56,9 +64,21 @@ def BeforeDoSaveExecute(e): WITH #基础数据 AS ( {0} ) +, #初步处理 AS ( + SELECT t0.MaterialId,t0.EntryId,t0.EntrySeq + ,CASE WHEN t0.FRowType = 1 THEN ( + SELECT TOP 1 t1.PackBarCode FROM #基础数据 t1 WHERE t1.pRwoId = t0.rowId + ) ELSE t0.PackBarCode END 'PackBarCode' + ,CASE WHEN t0.FRowType = 1 THEN t0.FQTY ELSE ( + SELECT TOP 1 t1.FQTY FROM #基础数据 t1 WHERE t1.rowId = t0.pRwoId + ) END PRQty + ,t0.FRowType,t0.rowId,t0.pRwoId + FROM #基础数据 t0 +) SELECT tt.* ,t0.FBARCODE,t1.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID -FROM #基础数据 tt + ,tt.PRQty / t1.FPDOSAGE AS 'CuntQty' +FROM #初步处理 tt INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FSRCBILLENTRYID = t0.FBILLENTRYID WHERE t0.FBILLFORMID = 'PLN_FORECAST' @@ -74,7 +94,50 @@ ORDER BY tt.EntrySeq seq = item["EntrySeq"]; entries[seq]["FPackBarCode"] = item["PackBarCode"]; entries[seq]["FPackBillNo"] = item["FBILLNO"]; - # entries[seq]["FPackBillSeq"] = item["FSeq"]; - # entries[seq]["FPackBillEntryId"] = item["FEntryID"]; + entries[seq]["FCuntQty"] = item["CuntQty"] - return; \ No newline at end of file + return; + +def EndOperationTransaction(e): + if this.FormOperation.OperationId == 8: + for entity in e.DataEntitys: + # entries = entity["TransferDirectEntry"] + id = entity["Id"] + sql = """/*dialect*/ +WITH #基础数据 AS ( + SELECT t0e.FID,t0e.FMATERIALID,t0e.FENTRYID,t0e.FBOMID,t0e.FUNITID + ,t0e.FBOMUNITID + ,t0e.FBASEQTY AS 'FBASEUNITQTY' + ,t0e.FUnitCon + ,t0e.FSUBMITQTY,t0e_t.FROWTYPE + ,t0e_t.FROWID,FPARENTROWID + FROM T_STK_STKTRANSFERINENTRY t0e + INNER JOIN T_STK_STKTRANSFERINENTRY_T t0e_t on t0e.FENTRYID = t0e_t.FENTRYID + WHERE t0e.FID = {0} +) +,#最终数据 AS ( + SELECT t0.FID,t0.FMATERIALID,t0.FENTRYID,t0.FUNITID,t0.FBOMUNITID,t0.FUnitCon,t0.FROWTYPE,t0.FROWID,t0.FPARENTROWID + ,t1.FBOMID,t2.FENTRYROWID,t2.FUNITID 'bomUnit',CASE WHEN t0.FUNITID != t2.FUNITID THEN 1 ELSE 0 END unitCon,t3.F_UNITIDHS + ,t0.FSUBMITQTY,t0.FBASEUNITQTY / CASE WHEN t0.FUNITID != t2.FUNITID THEN 1 ELSE t3.F_UNITIDHS END newQty + FROM #基础数据 t0 + INNER JOIN #基础数据 t1 on t0.FPARENTROWID = t1.FROWID + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t1.FBOMID AND t2.FMATERIALID = t0.FMATERIALID + INNER JOIN T_BD_MATERIAL t3 on t3.FMATERIALID = t0.FMATERIALID + WHERE t0.FROWTYPE = 'Son' + AND t0.FBOMUNITID = 0 +) +--SELECT * FROM #最终数据 +UPDATE t0 SET t0.FBOMUNITID = t1.bomUnit,t0.FSUBMITQTY = t1.newQty,t0.FUnitCon = unitCon +FROM T_STK_STKTRANSFERINENTRY t0 + INNER JOIN #最终数据 t1 on t0.FENTRYID = t1.FENTRYID + --AND t0.FBOMUNITID = 0 + """.format(id) + + res = DBServiceHelper.Execute(this.Context, sql) + # if res != None and res.Count > 0: + # for item in entries: + # seq = item["Seq"] + # data = filter(lambda x: x["FSEQ"] == seq, res)[0]; + # item["FBomUnitId"] = data["bomUnit"]; + # item["FUnitCon"] = data["unitCon"]; + # item["FSubmitQty"] = data["FBOMID"]; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx2.py b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx2.py new file mode 100644 index 0000000..bbb3934 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx2.py @@ -0,0 +1,48 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn 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.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FTransferDirect"); + e.FieldKeys.Add("FSrcStockId"); + e.FieldKeys.Add("FSrcStockLocId"); + e.FieldKeys.Add("FDestStockId"); + e.FieldKeys.Add("FDestStockLocId"); + e.FieldKeys.Add("FCuntQty"); + +def EndOperationTransaction(e): + for entity in e.DataEntitys: + entries = entity["TransferDirectEntry"] + entry = entity["TransferDirectEntry"][0] + raise Exception(JsonUtil.Serialize(entry)) \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs index 74d7c0d..08519fc 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs @@ -3,6 +3,7 @@ using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FieldElement; +using Kingdee.BOS.NumFormatTran; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; @@ -31,7 +32,17 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK var srcBillType = billHead["FSrcBillType"].ToString(); if (srcBillType.ToUpper().Equals("PLN_FORECAST")) { - var isRandDMo = bool.Parse(billHead["FRAndDMo"].ToString()); + var PMaterialObj = billHead["FPMaterialId"] as DynamicObject; + var isRandDMo = false; + if (PMaterialObj != null) + { + var pNumber = PMaterialObj["Number"].ToString(); + if (pNumber.Substring(0, 1).Equals("2")) + isRandDMo = pNumber.Substring(0, 1).Equals("2"); + } + + billHead["FRAndDMo"] = isRandDMo; + //isRandDMo = bool.Parse(billHead["FRAndDMo"].ToString()); if (isRandDMo) { billHead["FCreateMORpt"] = false; @@ -55,6 +66,7 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK var moBillTypeFId = e.TargetBusinessInfo.GetField("FMoBillTypeId") as BaseDataField; //#! 计量单位 var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; + var baseUnitFId = e.TargetBusinessInfo.GetField("FBaseUnitID") as BaseDataField; var PStockOrgObj = billHead["FPStockOrgId"] as DynamicObject; var PStockOrgId_Id = billHead["FPStockOrgId_Id"].Long2Int(); @@ -68,6 +80,7 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK var PDosageText = idx0["标签总单位数"].ToString(); var newPDosageText = ""; if (!PDosageText.IsNullOrEmptyOrWhiteSpace()) + { foreach (char c in PDosageText) { if (char.IsDigit(c)) @@ -75,8 +88,17 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK else break; } + } + else + { + throw new Exception("标签总单位数不能为空!"); + } var pDosage = newPDosageText.ConvertTo(); + + if (pDosage == 0) + throw new Exception("标签总单位数不合法,必须包含不为0的正整数!"); + var pQty = billHead["FPQty"].ConvertTo(); billHead["FPDosage"] = pDosage; decimal pieceCount = pQty / pDosage; @@ -143,6 +165,10 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK entry["FLot"] = lotObj; entry["FLot_Text"] = item["FLOT_TEXT"]; } + else + { + entry["FLot_Text"] = item["FLOT_TEXT"]; + } //# 计量单位 var unitId = item["FUNITID"].Long2Int(); @@ -153,6 +179,15 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK entry["FUnitID"] = unitObj; } + //# 基本计量单位 + var baseUnitId = item["FBASEUNITID"].Long2Int(); + if (baseUnitId > 0) + { + var baseUnitObj = BusinessDataServiceHelper.LoadSingle(this.Context, baseUnitId, baseUnitFId.RefFormDynamicObjectType); + entry["FBaseUnitID_Id"] = baseUnitId; + entry["FBaseUnitID"] = baseUnitObj; + } + //# 库存组织 entry["FStockOrgId_Id"] = PStockOrgId_Id; entry["FStockOrgId"] = PStockOrgObj; @@ -173,6 +208,7 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK entry["FFYLQty"] = item["F_FYL_QTY"]; entry["FQty"] = item["FQTY"]; + entry["FBaseQty"] = item["FBASEUNITQTY"]; entry["FDosage"] = item["FQTY"].ConvertTo() / pieceCount; entry["FSPieceCount"] = pieceCount; //entry["FRptQty"] = item["FQTY"]; @@ -195,9 +231,10 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK ;WITH #预测单数据 AS ( --套件子项 - SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID,t0e.FQTY - ,t0e.F_UHIK_QTY2 AS '富余量数',t0e.F_ZGS_QTY2,t0e.F_GZL_QTY1,t0e.F_UHIK_LOT,t0e.F_UHIK_LOT_Text - ,t0e.FUNITID + SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID,t0e.FQTY,t0e.FBASEQTY + ,t0e.F_UHIK_QTY2 AS '富余量数',t0e.F_UHIK_QTY3 '富余量数_基本单位' + ,t0e.F_ZGS_QTY2,t0e.F_GZL_QTY1,t0e.F_UHIK_LOT,t0e.F_UHIK_LOT_Text + ,t0e.FUNITID,t0e.FBASEUNITID ,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' @@ -218,12 +255,14 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK ,t0.FID,t0.FENTRYID,t0.FMATERIALID,t0.标签总单位数,t0.FPRODUCTTYPE,t0.FOWNERID,t0.FOWNERTYPEID ,t0.标签货号,t0.标签规格_Note,t0.货号 ,ISNULL(t2.FQTY,t0.FQTY + t0.富余量数) 'FQTY' + ,ISNULL(t2.FBASEUNITQTY,t0.FBASEQTY + t0.富余量数_基本单位) 'FBASEUNITQTY' ,ISNULL(t2.F_FYL_QTY,t0.富余量数) 'F_FYL_QTY' ,ISNULL(t2.F_GS_QTY,t0.F_ZGS_QTY2) 'F_GS_QTY' ,ISNULL(t2.F_GZQTY,t0.F_GZL_QTY1)'F_GZQTY' ,ISNULL(t2.FLOT,t0.F_UHIK_LOT) 'FLOT' ,ISNULL(t2.FLOT_TEXT,t0.F_UHIK_LOT_Text) 'FLOT_TEXT' ,ISNULL(t2.FUNITID,t0.FUNITID) 'FUNITID' + ,ISNULL(t2.FBASEUNITID,t0.FBASEUNITID) 'FBASEUNITID' ,ISNULL(t2.MOBIllNo,'') 'MOBIllNo' ,ISNULL(t2.MoBillType,'') 'MoBillType' ,ISNULL(t2.MoEntryId,0) 'MoEntryId' @@ -238,8 +277,8 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 OUTER APPLY ( SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq' - ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY - ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID + ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY,t2e.FBASEUNITQTY + ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID,t2e.FBASEUNITID ,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至' FROM T_PRD_MO t2 INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID @@ -248,8 +287,8 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK AND t2e.FMATERIALID = t0.FMATERIALID UNION ALL SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq' - ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY - ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID + ,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY,t2e.FBASEUNITQTY + ,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID,t2e.FBASEUNITID ,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至' FROM T_PRD_MO t2 INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID @@ -266,7 +305,6 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK WHERE t3e_lk.FSID = t2.MoEntryId GROUP BY t3e_lk.FSID ) t3 - "; return sqlL; diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/更新成品组装单基本单位,基本单位数量.sql b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/更新成品组装单基本单位,基本单位数量.sql new file mode 100644 index 0000000..54c9d9d --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/更新成品组装单基本单位,基本单位数量.sql @@ -0,0 +1,27 @@ +UPDATE t0e SET t0e.FBASEUNITID = t1e.FBASEUNITID + ,t0e.FBASEQTY = t1e.FBASEUNITQTY +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_PRD_MOENTRY t1e on t0e.FMOENTRYID = t1e.FENTRYID + +--ԴĻλ +UPDATE t0e SET t0e.FBASEUNITID = t1e.FBASEUNITID + ,t0e.FBASEQTY = t1e.FBASEUNITQTY +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_PRD_MOENTRY t1e on t0e.FMOENTRYID = t1e.FENTRYID + +SELECT t0.FBILLNO,t0e.FMATERIALID,t0e.FUNITID + ,t0e.FQTY,t0e.FBASEUNITID,t0e.FBASEQTY,t1e.FUNITID,t1e.FQTY,t1e.FBASEUNITID,t1e.FBASEQTY +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_PLN_FORECASTENTRY t1e on t0e.FSRCBILLENTRYID = t1e.FENTRYID +WHERE t0e.FBASEUNITID = 0 + +--ԴԤĻλ +UPDATE t0e SET t0e.FBASEUNITID = t1e.FBASEUNITID + ,t0e.FBASEQTY = t1e.FBASEQTY * 1.05 +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_PLN_FORECASTENTRY t1e on t0e.FSRCBILLENTRYID = t1e.FENTRYID +WHERE t0e.FBASEUNITID = 0 \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs index 98ee984..ef30b6a 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs @@ -410,7 +410,8 @@ WHERE 1 = 1 string msg = string.Empty; #region 自动保存 - IOperationResult saveResult = ServiceHelper.GetService().SaveAndAudit(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); + IOperationResult saveResult = ServiceHelper.GetService().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); + //IOperationResult saveResult = ServiceHelper.GetService().SaveAndAudit(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); if (!saveResult.IsSuccess) { diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py index 013dd2e..b11f11e 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py @@ -60,6 +60,8 @@ SET @BILLNO = '{0}' ,t0.FSRCBILLENTRYID AS 'LinkId' ,t0.FMATERIALID AS 'PMaterialId' ,t0.FQTY AS 'PQty' + ,t0.FPDOSAGE AS 'P_DOSAGE' + ,t0.FUNITID,0 'BaseUnitId' FROM T_PRD_PACKAGEINSTOCK t0 WHERE t0.FBILLNO = @BILLNO UNION ALL @@ -67,8 +69,10 @@ SET @BILLNO = '{0}' ,t0e.FEntryID,t0e.FSeq ,t0.FBILLNO,0,t0e.FQTY ,t0.FRANDDMO - ,CASE WHEN t0.FRANDDMO = 1 THEN t0e.FSRCBILLENTRYID ELSE t0e.FMOENTRYID END AS 'LinkId' + ,CASE WHEN t0e.FIsStkVal = 1 THEN t0e.FSRCBILLENTRYID ELSE t0e.FMOENTRYID END AS 'LinkId' ,t0.FMATERIALID,t0.FQTY + ,t0.FPDOSAGE + ,t0e.FUNITID,t0e.FBASEUNITID FROM T_PRD_PACKAGEINSTOCK t0 INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID WHERE t0.FBILLNO = @BILLNO @@ -88,24 +92,20 @@ SET @BILLNO = '{0}' ) t2 ) ,#分组计算 AS ( - SELECT t0.packBillNo,t0.IS_Main,t0.FMATERIALID,t0.PMaterialId,t0.PQty + SELECT t0.packBillNo,t0.IS_Main,t0.FMATERIALID,t0.PMaterialId,t0.PQty,t0.P_DOSAGE,t0.FUNITID,t0.BaseUnitId ,SUM(t0.FQTY) FQTY,MIN(t0.barCodeId) barCodeId FROM #关联条码 t0 - GROUP BY t0.packBillNo,t0.IS_Main,t0.FMATERIALID,t0.PMaterialId,t0.PQty + GROUP BY t0.packBillNo,t0.IS_Main,t0.FMATERIALID,t0.PMaterialId,t0.PQty,t0.P_DOSAGE,t0.FUNITID,t0.BaseUnitId ) SELECT t0.*,t2.FNUMBER,t2_l.FNAME ,t1_l.FSPECIFICATION - ,CONVERT(INT,t0.PQTY / CASE - WHEN CHARINDEX('/',t1_l.FSPECIFICATION) = 0 THEN 1 - ELSE CONVERT(INT,(LEFT(t1_l.FSPECIFICATION,CHARINDEX('/',t1_l.FSPECIFICATION) -2))) - END) '套件数' - ,t0.FQTY / CONVERT(INT,t0.PQTY / CASE - WHEN CHARINDEX('/',t1_l.FSPECIFICATION) = 0 THEN 1 - ELSE CONVERT(INT,(LEFT(t1_l.FSPECIFICATION,CHARINDEX('/',t1_l.FSPECIFICATION) -2))) - END) '单位用量' + ,t0.PQTY / t0.P_DOSAGE '套件数' + ,t0.FQTY / (t0.PQTY / t0.P_DOSAGE) / CASE WHEN t2p.FPRODUCEUNITID = t0.BaseUnitId THEN 1 ELSE t2.F_UNITIDHS END AS '单位用量' + ,t0.FUNITID,t2p.FPRODUCEUNITID,t0.BaseUnitId,t2.F_UNITIDHS FROM #分组计算 t0 INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.PMaterialId AND t1_l.FLOCALEID = 2052 INNER JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t0.FMATERIALID + INNER JOIN T_BD_MATERIALPRODUCE t2p on t2p.FMATERIALID = t2.FMATERIALID INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t2.FMATERIALID AND t2_l.FLOCALEID = 2052 ORDER BY t0.IS_Main DESC diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/OperaionEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugIn_Save.py similarity index 78% rename from 07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/OperaionEventPlugInEx.py rename to 14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugIn_Save.py index 0ce28bc..5cbf3e7 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/OperationEventPlugIn/OperaionEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugIn_Save.py @@ -31,14 +31,17 @@ from System.Collections.Generic import List from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.App.Core import * -def OnPreparePropertys(e): - e.FieldKeys.Add("FVersions"); - e.FieldKeys.Add("FBillNo"); +def OnPreparePropertys(e): + e.FieldKeys.Add("FIsStkVal"); + e.FieldKeys.Add("FMoEntryId"); + e.FieldKeys.Add("FRAndDMo"); def BeforeDoSaveExecute(e): - for entity in e.DataEntities: - billNo = entity["BillNo"] - billId = entity["Id"] + entries = entity["FEntity"] + if entity["FRAndDMo"] == False: + continue; - return; \ No newline at end of file + for idx,entry in enumerate(entries): + if entry["FMoEntryId"] == 0: + entry["FIsStkVal"] = True; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/PrdPackService.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/PrdPackService.cs index 9a3b18d..4308988 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/PrdPackService.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/PrdPackService.cs @@ -44,6 +44,12 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK IOperationResult result = new OperationResult(); if (!packBillNo.IsNullOrEmptyOrWhiteSpace() && qty != 0) { + if (stockId == 0) + { + msg = "仓库不能为空!"; + return false; + } + //获取元数据服务 IMetaDataService metadataService = ServiceHelper.GetService(); //获取保存服务 @@ -56,7 +62,6 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK QueryBuilderParemeter queryParameter = new QueryBuilderParemeter(); queryParameter.BusinessInfo = metadata.BusinessInfo; queryParameter.FilterClauseWihtKey = $" FBILLNO = '{packBillNo}' "; - //获取数据 DynamicObject[] objs = viewService.Load(this.Context, metadata.BusinessInfo.GetDynamicObjectType(), queryParameter); if (objs == null) @@ -66,6 +71,12 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK } var packObj = objs[0]; + var isRAndDMo = packObj["FRAndDMo"].Convert(); + if(isRAndDMo) + { + msg = "研发工单不需要套件库存信息"; + return true; + } var stockEntrys = packObj["FStockEntity"] as DynamicObjectCollection; DynamicObject stockEntry = stockEntrys.FirstOrDefault(w => w["FPackStockId_Id"].Long2Int() == stockId && w["FPackStockLocId_Id"].Long2Int() == stockLocId); diff --git a/14.宝锐/GZ.LJY000.Biori/UNW_WMS_INPUT_NORMAL/1.套件获取条码时,更新套数.py b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_INPUT_NORMAL/1.套件获取条码时,更新套数.py new file mode 100644 index 0000000..1f4a47b --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_INPUT_NORMAL/1.套件获取条码时,更新套数.py @@ -0,0 +1,123 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Xml") +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.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Util import * +from System import * +from System.Xml import * +from System.ComponentModel import * +from System.Collections.Generic import * +from System.Text import* +from Kingdee.BOS.ServiceHelper import * + +# def BeforeUpdateValue(e): +# if e.Key == 'FBarCodeId': +# details = this.View.BusinessInfo.GetEntity("FBillList") +# entrys = this.View.Model.GetEntityDataObject(details) +# # raise Exception(JsonUtil.Serialize(entrys)) +# # if e.Key == 'FPieceCount': +# # e.Value = 2; +# # raise Exception("A") + +def DataChanged(e): + if e.Field.Key == "FSubMaterialId": + subMaterialId = e.NewValue; + if subMaterialId == None: + + return; + return; + + if e.Field.Key == "FBarCodeId": + # raise Exception(str(e.NewValue)) + barCode = this.View.Model.GetValue("FBarCodeId") + if barCode == None: + return; + + typeId_Id = barCode["TypeId_Id"] # 条码类型 5 包装条码 + if typeId_Id != None and typeId_Id == 5: + materialNumber = barCode["MaterialId"]["Number"] + labAllDosage = barCode["LabAllDosage"] + dosageList = list(filter(str.isdigit, labAllDosage)) + dosage = int("".join(dosageList)) + + jobFlowId = this.View.Model.GetValue("FJobFlowId"); + # raise Exception(JsonUtil.Serialize(jobFlowId)) + + if jobFlowId["Number"] == "PRD_INSTOCK": + qty = barCode["Qty"] + count = qty / dosage; + this.View.Model.SetValue("FPieceCount", count) + return; + else: + details = this.View.BusinessInfo.GetEntity("FBillList") + entrys = this.View.Model.GetEntityDataObject(details) + for entry in entrys: + if entry["FMaterialID"] == materialNumber: + linkId = entry["LinkId"] + if jobFlowId["Number"] == "SAL_OUTSTOCK": + sqlL = """/*dialect*/ +SELECT TOP 1 t0.FBILLNO,t0.FID,t1e.FSTOCKID,t1e.FSTOCKLOCID +FROM T_SAL_OUTSTOCK t0 + INNER JOIN T_SAL_OUTSTOCKENTRY_F t0e_f on t0.FID = t0e_f.FID + INNER JOIN T_SAL_OUTSTOCKENTRY_F t1e_f on t0e_f.FID = t1e_f.FID AND t0e_f.FROWID = t1e_f.FPARENTROWID + INNER JOIN T_SAL_OUTSTOCKENTRY t1e on t1e.FENTRYID = t1e_f.FENTRYID +WHERE t0e_f.FENTRYID = {0} + """.format(linkId) + # raise Exception(sqlL) + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if dataList!= None and dataList.Count > 0: + data = dataList[0] + stockId = data["FSTOCKID"] + stockLocId = data["FSTOCKLOCID"] + this.View.Model.SetItemValueByID("FStockId", stockId,0); + this.View.Model.SetItemValueByID("FStockLocId", stockLocId,0); + + if jobFlowId["Number"] == "STK_TransferDirect": + sqlL = """/*dialect*/ +SELECT TOP 1 t0e_t.FENTRYID,t0e_t.FROWID,t0e_t.FPARENTROWID + ,t1e.FDESTSTOCKID,t1e.FDESTSTOCKLOCID + ,t1e.FSRCSTOCKID,t1e.FSRCSTOCKLOCID +FROM T_STK_STKTRANSFERIN t0 + INNER JOIN T_STK_STKTRANSFERINENTRY_T t0e_t on t0.FID = t0e_t.FID + INNER JOIN T_STK_STKTRANSFERINENTRY_T t1e_t on t1e_t.FPARENTROWID = t0e_t.FROWID + INNER JOIN T_STK_STKTRANSFERINENTRY t1e on t1e.FENTRYID = t1e_t.FENTRYID +WHERE t0e_t.FENTRYID = {0} + """.format(linkId); + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if dataList!= None and dataList.Count > 0: + data = dataList[0] + inStockId = data["FDESTSTOCKID"] + inStockLocId = data["FDESTSTOCKLOCID"] + stockId = data["FSRCSTOCKID"] + stockLocId = data["FSRCSTOCKLOCID"] + this.View.Model.SetItemValueByID("FStockId", stockId,0); + this.View.Model.SetItemValueByID("FStockLocId", stockLocId,0); + this.View.Model.SetItemValueByID("FInStockId", inStockId,0); + this.View.Model.SetItemValueByID("FInStockLocId", inStockLocId,0); + + srcQty = entry["FSrcQty"] + scanned = entry["FScanned"] + if srcQty != scanned: + count = (srcQty - scanned) / dosage; + this.View.Model.SetValue("FPieceCount", count); + + break; + + return; \ No newline at end of file diff --git a/GZ.LJY000.CYG/GZ.LJY000.CYG.csproj b/GZ.LJY000.CYG/GZ.LJY000.CYG.csproj index 309cfe8..4b57293 100644 --- a/GZ.LJY000.CYG/GZ.LJY000.CYG.csproj +++ b/GZ.LJY000.CYG/GZ.LJY000.CYG.csproj @@ -81,6 +81,8 @@ + + diff --git a/GZ.LJY000.CYG/销售合同更新.sql b/GZ.LJY000.CYG/销售合同更新.sql new file mode 100644 index 0000000..fb5fd17 --- /dev/null +++ b/GZ.LJY000.CYG/销售合同更新.sql @@ -0,0 +1,127 @@ +;WITH #۶ AS ( + SELECT t1.FSALES + ,SUM(t1e_f.FALLAMOUNT_LC) 'ۼ۶λ' + ,SUM(t1e.F_CYG_OPENTOTAL) AS 'С' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '⹺С' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS 'װС' + ,SUM(t1e.F_CYG_COSTTOTAL) AS 'ɱС' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID + WHERE 1=1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.F_CYG_CHECKBALANCE != '1' + AND t1e.F_CYG_CHECKBALANCE1 != '1' + AND t1.FBILLTYPEID != 'a300e2620037435492aed9842875b451' + AND t1e.FMRPTERMINATESTATUS != 'B' + GROUP BY t1.FSALES +) +SELECT t1.* + ,t2.ۼƷλ + ,t3.ۼƿƱ + INTO #۶ +FROM #۶ t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƷλ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '2'--ͣݹ + AND t3.FDOCUMENTSTATUS = 'C' + AND t3.FBYVERIFY = '0' + GROUP BY t3.FSALES + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƿƱ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '3'--ͣ + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY t3.FSALES + ) t3 + +;WITH #ͬ AS ( + SELECT t4.FOldFId + ,CAST(t4.FJSONDATA AS nvarchar(4000)) AS 'FJSONDATA' + ,ROW_NUMBER() OVER (PARTITION BY t4.FOldFId ORDER BY t4.FVERSION DESC) RN + FROM T_SCM_BILLCHANGEVERSIONS t4 + WHERE 1 = 1 + AND t4.FFormId = 'CRM_Contract' + AND t4.FACTIVESTATUS != 'A' +) +,#ۺͬ AS ( + SELECT t0.FID,t0.FBILLNO,t0.F_CYG_SALESNUMBER + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT_LC AS 'ͬ' + ,ISNULL(t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE) AS 'ͬ仯' + ,ISNULL(t1.ۼ۶λ,0) AS 'ۼ۶λ' + ,ISNULL(t1.С,0) AS 'С' + ,ISNULL(t1.⹺С,0) AS '⹺С' + ,ISNULL(t1.װС,0) AS 'װС' + ,ISNULL(t1.ɱС,0) AS 'ɱС' + ,ISNULL(t1.ۼƷλ,0) AS 'ۼƷλ' + ,ISNULL(t1.ۼƿƱ,0) AS 'ۼƿƱ' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + LEFT JOIN #۶ t1 on t1.FSALES = t0.F_CYG_YSALESNUMBER + OUTER APPLY ( + SELECT CAST(JSON_VALUE(t4.FJSONDATA,'$.CRM_ContractFIN[0].FCONTRACTAMOUNT_LC') AS decimal(23,10)) - t0f.FCONTRACTAMOUNT_LC 'FCONTRACTAMOUNT_X' + FROM #ͬ t4 + WHERE t4.FOLDFID = t0.FID AND t4.RN = 2 + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t0f.FCONTRACTAMOUNT_LC > 0 + AND t0.F_CYG_CONTRACTTYPE = '664cd624468638' + --AND CONVERT(int,CONVERT(varchar(4) ,t0.FDATE,112)) = 2024 --ֻ޸ͿԸ¶Ӧ +) +SELECT tt.FID,tt.FBILLNO,tt.F_CYG_SALESNUMBER,tt.FName + --,tt.FDOCUMENTSTATUS,tt.F_CYG_CONTRACTNODL,tt.FFORBIDSTATUS + ,tt.ͬ,tt.ͬ仯,tt.ۼ۶λ,tt.ͬ - tt.ۼ۶λ AS 'δµ۶λ' + ,tt.ۼƷλ,tt.ۼƿƱ + ,tt.ۼ۶λ - tt.ۼƷλ AS 'ʣδλ' + ,tt.ۼƷλ - tt.ۼƿƱ AS 'δƱ' + ,tt.װС,tt.ɱС,tt.С,tt.⹺С + INTO # +FROM #ۺͬ tt + INNER JOIN T_CRM_CONTRACTFIN t0 on t0.FID = tt.FID +WHERE NOT ( t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ + AND t0.F_CYG_NOORDERSALES = tt.ͬ - tt.ۼ۶λ + AND t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ + AND t0.F_CYG_REMAINSHIPMENT = tt.ۼ۶λ - tt.ۼƷλ + AND t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 + AND t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ + AND t0.F_CYG_UNINVOICEDAMOUNT = tt.ۼƷλ - tt.ۼƿƱ + AND t0.F_CYG_OPENPRICE = tt.С + AND t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С + AND t0.F_CYG_MOUNTINGCOST = tt.װС + AND t0.F_CYG_COST = tt.ɱС) + +UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ + ,t0.F_CYG_NOORDERSALES = tt.δµ۶λ + ,t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ + ,t0.F_CYG_REMAINSHIPMENT = tt.ʣδλ + --,t0.F_CYG_CONTRACTCOLLECTION = tt.ͬտ + --,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.ͬδտ + ,t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 + ,t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ + ,t0.F_CYG_UNINVOICEDAMOUNT = tt.δƱ + ,t0.F_CYG_OPENPRICE = tt.С + ,t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С + ,t0.F_CYG_MOUNTINGCOST = tt.װС + ,t0.F_CYG_COST = tt.ɱС +FROM T_CRM_CONTRACTFIN t0 + INNER JOIN # tt on t0.FID = tt.FID + +UPDATE t0 SET t0.FMODIFYDATE = GETDATE() + ,t0.FMODIFIERID = 100007 +FROM T_CRM_CONTRACT t0 + INNER JOIN # tt on t0.FID = tt.FID + +DROP TABLE #۶ +DROP TABLE # \ No newline at end of file diff --git a/GZ.LJY000.CYG/销售合同更新_v2_202502271053.sql b/GZ.LJY000.CYG/销售合同更新_v2_202502271053.sql new file mode 100644 index 0000000..612a910 --- /dev/null +++ b/GZ.LJY000.CYG/销售合同更新_v2_202502271053.sql @@ -0,0 +1,132 @@ +;WITH #۶ AS ( + SELECT t1.FSALES + ,SUM(t1e_f.FALLAMOUNT_LC) 'ۼ۶λ' + ,SUM(t1e.F_CYG_OPENTOTAL) AS 'С' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '⹺С' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS 'װС' + ,SUM(t1e.F_CYG_COSTTOTAL) AS 'ɱС' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID + WHERE 1=1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.F_CYG_CHECKBALANCE != '1' + AND t1e.F_CYG_CHECKBALANCE1 != '1' + AND t1.FBILLTYPEID != 'a300e2620037435492aed9842875b451' + AND t1e.FMRPTERMINATESTATUS != 'B' + GROUP BY t1.FSALES +) +SELECT t1.* + ,t2.ۼƷλ + ,t3.ۼƿƱ + INTO #۶ +FROM #۶ t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƷλ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '2'--ͣݹ + AND t3.FDOCUMENTSTATUS = 'C' + AND t3.FBYVERIFY = '0' + GROUP BY t3.FSALES + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƿƱ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '3'--ͣ + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY t3.FSALES + ) t3 + +;WITH #ͬ AS ( + SELECT t4.FOldFId + ,CAST(t4.FJSONDATA AS nvarchar(4000)) AS 'FJSONDATA' + ,ROW_NUMBER() OVER (PARTITION BY t4.FOldFId ORDER BY t4.FVERSION DESC) RN + FROM T_SCM_BILLCHANGEVERSIONS t4 + WHERE 1 = 1 + AND t4.FFormId = 'CRM_Contract' + AND t4.FACTIVESTATUS != 'A' +) +,#ۺͬ AS ( + SELECT t0.FID,t0.FBILLNO,t0.F_CYG_SALESNUMBER + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT_LC AS 'ͬ' + ,ISNULL(t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE) AS 'ͬ仯' + ,t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE + ,ISNULL(t1.ۼ۶λ,0) AS 'ۼ۶λ' + ,ISNULL(t1.С,0) AS 'С' + ,ISNULL(t1.⹺С,0) AS '⹺С' + ,ISNULL(t1.װС,0) AS 'װС' + ,ISNULL(t1.ɱС,0) AS 'ɱС' + ,ISNULL(t1.ۼƷλ,0) AS 'ۼƷλ' + ,ISNULL(t1.ۼƿƱ,0) AS 'ۼƿƱ' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + LEFT JOIN #۶ t1 on t1.FSALES = t0.F_CYG_YSALESNUMBER + OUTER APPLY ( + SELECT CAST(JSON_VALUE(t4.FJSONDATA,'$.CRM_ContractFIN[0].FCONTRACTAMOUNT_LC') AS decimal(23,10)) - t0f.FCONTRACTAMOUNT_LC 'FCONTRACTAMOUNT_X' + ,CAST(JSON_VALUE(t4.FJSONDATA,'$.CRM_ContractFIN[0].F_CYG_ContractChange') AS decimal(23,10)) - t0f.FCONTRACTAMOUNT_LC 'F_CYG_ContractChange_X' + FROM #ͬ t4 + WHERE t4.FOLDFID = t0.FID AND t4.RN = 2 + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t0f.FCONTRACTAMOUNT_LC > 0 + AND t0.F_CYG_CONTRACTTYPE = '664cd624468638' + --AND CONVERT(int,CONVERT(varchar(4) ,t0.FDATE,112)) = 2024 --ֻ޸ͿԸ¶Ӧ + AND t0.FBILLNO = 'XSHT123537' +) +SELECT tt.FID,tt.FBILLNO,tt.F_CYG_SALESNUMBER,tt.FName + --,tt.FDOCUMENTSTATUS,tt.F_CYG_CONTRACTNODL,tt.FFORBIDSTATUS + ,tt.ͬ,tt.ͬ仯,tt.ۼ۶λ,tt.ͬ - tt.ۼ۶λ AS 'δµ۶λ' + ,tt.FCONTRACTAMOUNT_X,tt.F_CYG_CONTRACTCHANGE + ,tt.ۼƷλ,tt.ۼƿƱ + ,tt.ۼ۶λ - tt.ۼƷλ AS 'ʣδλ' + ,tt.ۼƷλ - tt.ۼƿƱ AS 'δƱ' + ,tt.װС,tt.ɱС,tt.С,tt.⹺С + --INTO # +FROM #ۺͬ tt + INNER JOIN T_CRM_CONTRACTFIN t0 on t0.FID = tt.FID +WHERE 1=1 + AND NOT ( t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ + AND t0.F_CYG_NOORDERSALES = tt.ͬ - tt.ۼ۶λ + AND t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ + AND t0.F_CYG_REMAINSHIPMENT = tt.ۼ۶λ - tt.ۼƷλ + AND t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 + AND t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ + AND t0.F_CYG_UNINVOICEDAMOUNT = tt.ۼƷλ - tt.ۼƿƱ + AND t0.F_CYG_OPENPRICE = tt.С + AND t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С + AND t0.F_CYG_MOUNTINGCOST = tt.װС + AND t0.F_CYG_COST = tt.ɱС) + +--UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ +-- ,t0.F_CYG_NOORDERSALES = tt.δµ۶λ +-- ,t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ +-- ,t0.F_CYG_REMAINSHIPMENT = tt.ʣδλ +-- --,t0.F_CYG_CONTRACTCOLLECTION = tt.ͬտ +-- --,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.ͬδտ +-- ,t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 +-- ,t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ +-- ,t0.F_CYG_UNINVOICEDAMOUNT = tt.δƱ +-- ,t0.F_CYG_OPENPRICE = tt.С +-- ,t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С +-- ,t0.F_CYG_MOUNTINGCOST = tt.װС +-- ,t0.F_CYG_COST = tt.ɱС +--FROM T_CRM_CONTRACTFIN t0 +-- INNER JOIN # tt on t0.FID = tt.FID + +--UPDATE t0 SET t0.FMODIFYDATE = GETDATE() +-- ,t0.FMODIFIERID = 100007 +--FROM T_CRM_CONTRACT t0 +-- INNER JOIN # tt on t0.FID = tt.FID + +DROP TABLE #۶ +--DROP TABLE # \ No newline at end of file