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