First commit, 已上架的電子書

This commit is contained in:
DATAEXPRESS\4734
2026-01-19 17:39:31 +08:00
commit 0b2351e4da
1146 changed files with 1442668 additions and 0 deletions
@@ -0,0 +1,277 @@
CREATE PROC GEX_RESETINVMONTHCOST_V2
(
@YY1 INTEGER, --計算月加權的西元年/月
@MM1 INTEGER,
@LOGINID VARCHAR(30)
)
/*
Function : 計算進銷存的月加權
V2 的版本是考慮多階 BOM 的成本累計計算
因為考慮到效能的問題, 所以仍保留原版本
Description: 20100726 MICHAEL 有變更 SP 的名稱
Build Date : 2011/07/13
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/07/13 加入多選機制
2 Michael 2012/05/21 修改月加權計算時, 前期無資料的問題修改
3 Michael 2012/06/01 新增產品組合單的母件成本計算
目前還有2個問題, 目前版本只能處理一階的組合, 也就是說組合單表身不能是母件
另外一個問題是, 若母件又有進貨且有組合單, 成本目前取進貨成本
4 Michael 2013/03/08 新增 INVSTKBILL7_D,CRMMAINTAIN1_D 的回寫 NOWCOST 作業
*/
AS
--
-- 將本期資料刪除
DELETE FROM BASPRODMONTHCOST
WHERE YEAR(CAST ( YEARMONTH + '01' AS DATETIME)) = @YY1 AND
MONTH(CAST (YEARMONTH + '01' AS DATETIME)) = @MM1
--
SELECT A.PRODUCTID, SUM(A.QUANTITY) AS QTY1 INTO #STK31 FROM INVSTKBILL3_D A
LEFT JOIN INVSTKBILL3_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
GROUP BY A.PRODUCTID
SELECT A.PRODUCTID, SUM(A.QUANTITY*PRICE*CURRRATE) AS AMT1,SUM(A.QUANTITY) AS QTY3 INTO #STK32 FROM INVSTKBILL3_D A
LEFT JOIN INVSTKBILL3_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
AND ADJUSTMETHOD > 0
GROUP BY A.PRODUCTID
--組合單(子件減)
SELECT A.PRODUCTID,SUM(A.QUANTITY)*-1 QTY71 INTO #STK71 FROM INVSTKBILL7_D A
INNER JOIN INVSTKBILL7_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
GROUP BY A.PRODUCTID
--維修單用料
SELECT A.PRODUCTID,SUM(A.QUANTITY)*-1 QTY73 INTO #STK73 FROM CRMMAINTAIN1_D A
INNER JOIN CRMMAINTAIN1_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
GROUP BY A.PRODUCTID
--組合單(母件增)
SELECT A.M_PRODID PRODUCTID,SUM(A.STANDARDBATCHQTY) QTY72,SUM(A.STANDARDBATCHQTY*A.M_PRODCOST) AMT1 INTO #STK72 FROM INVSTKBILL7_M A
WHERE YEAR(A.BILLDATE) = @YY1 AND MONTH(A.BILLDATE) = @MM1
GROUP BY A.M_PRODID;
WITH INV1
AS
(
SELECT A.PRODUCTID, SUM(A.QUANTITY) AS QTY1,SUM(A.QUANTITY*(PRICE+UNDER_VALUE)*CURRRATE) AS AMT1,SUM(A.QUANTITY) AS QTY3 FROM INVSTKBILL1_D A
LEFT JOIN INVSTKBILL1_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
GROUP BY A.PRODUCTID
), INV2
AS
(
SELECT A.PRODUCTID, SUM(A.QUANTITY)*-1 AS QTY1,SUM(A.QUANTITY*PRICE*CURRRATE)*-1 AS AMT1,SUM(A.QUANTITY)*-1 AS QTY3 FROM INVSTKBILL2_D A
LEFT JOIN INVSTKBILL2_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
GROUP BY A.PRODUCTID
), INV3_DATA
AS
(
SELECT DISTINCT PRODUCTID FROM #STK31
UNION ALL
SELECT DISTINCT PRODUCTID FROM #STK71
UNION ALL
SELECT DISTINCT PRODUCTID FROM #STK72
UNION ALL
SELECT DISTINCT PRODUCTID FROM #STK73
), INV3_PROD
AS
(
SELECT DISTINCT PRODUCTID FROM INV3_DATA
), INV3
AS
(
SELECT
Z.PRODUCTID,
ISNULL(A.QTY1,0)+ISNULL(C.QTY71,0)+ISNULL(D.QTY72,0)+ISNULL(E.QTY73,0) QTY1,
ISNULL(B.AMT1,0)+ISNULL(D.AMT1,0) AMT1,
ISNULL(B.QTY3,0)+ISNULL(D.QTY72,0) QTY3
FROM INV3_PROD Z
LEFT JOIN #STK31 A ON Z.PRODUCTID = A.PRODUCTID
LEFT JOIN #STK32 B ON Z.PRODUCTID = B.PRODUCTID
LEFT JOIN #STK71 C ON Z.PRODUCTID = C.PRODUCTID
LEFT JOIN #STK72 D ON Z.PRODUCTID = D.PRODUCTID
LEFT JOIN #STK73 E ON Z.PRODUCTID = E.PRODUCTID
), INV5
AS
(
SELECT A.PRODUCTID, SUM(A.QUANTITY)*-1 AS QTY1,0 AS AMT1,0 AS QTY3 FROM INVSTKBILL5_D A
LEFT JOIN INVSTKBILL5_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
GROUP BY A.PRODUCTID
), INV6
AS
(
SELECT A.PRODUCTID, SUM(A.QUANTITY) AS QTY1,0 AS AMT1,0 AS QTY3 FROM INVSTKBILL6_D A
LEFT JOIN INVSTKBILL6_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND
MONTH(B.BILLDATE) = @MM1 AND
PRODUCTID NOT IN
(
SELECT M_PRODID FROM MRPBOM_M
)
GROUP BY A.PRODUCTID
), FINAL99
AS
(
SELECT * FROM INV1
UNION ALL
SELECT * FROM INV2
UNION ALL
SELECT * FROM INV3
UNION ALL
SELECT * FROM INV5
UNION ALL
SELECT * FROM INV6
), FINALOK
AS
(
SELECT PRODUCTID,SUM(QTY1) AS QTY1,SUM(AMT1) AS AMT1,SUM(QTY3) AS QTY3
FROM FINAL99
GROUP BY PRODUCTID
)
-- 材料金額(進銷存)
-- qty1 本期總進,調,組數量
-- amt1 本期會影響成本的單據總金額
-- qty3 本期會影響成本的單據總數量
-- amt3 本期成本
-- qty2 上期數量
-- amt2 上期成本
SELECT IDENTITY(INT, 1,1) AS SEQNO,PRODUCTID,QTY1,AMT1,QTY3,QTY1*0 AS QTY2,AMT1*0 AS AMT2,AMT1*0 AS AMT3
INTO #AVGCOST
FROM FINALOK
-- update 上期成本及上期數量
UPDATE #AVGCOST
SET QTY2=MONTHENDQTY, AMT2=MONTHAVGCOST
FROM BASPRODMONTHCOST
WHERE #AVGCOST.PRODUCTID = BASPRODMONTHCOST.PRODUCTID AND
YEARMONTH =(
SELECT MAX(CAST(YEARMONTH AS INTEGER))
FROM BASPRODMONTHCOST
WHERE CAST(YEARMONTH AS INTEGER) < (@YY1 *100 + @MM1)
AND #AVGCOST.PRODUCTID = BASPRODMONTHCOST.PRODUCTID
AND MONTHAVGCOST > 0
)
--update 本期成本
UPDATE #AVGCOST
SET AMT3 = ROUND((AMT1+(QTY2*AMT2))/(QTY2+QTY3),6)
WHERE (QTY2+QTY3) > 0
--防特殊狀況, 本月無影響成本的單據, 但是有數量, 成本為0, 此時應取前一有成本的月份資料
--只要本期成本有異(小於等於0), 就取上期成本, 取銷原本的數量判斷
UPDATE #AVGCOST SET AMT3 = AMT2 WHERE AMT3 <= 0 --AND ISNULL(QTY1,0)+ISNULL(QTY2,0) > 0
INSERT INTO BASPRODMONTHCOST
(YEARMONTH, SEQNO, PRODUCTID, MONTHAVGCOST, MONTHENDQTY)
SELECT
CAST( (@YY1*100+@MM1) AS VARCHAR(6)),SEQNO, PRODUCTID, ISNULL(AMT3,0), ISNULL(QTY1,0)+ISNULL(QTY2,0)
FROM #AVGCOST
WHERE PRODUCTID IS NOT NULL AND PRODUCTID <> ''
--********************************
--以下開始計算產品組合單的母件成本
--********************************
EXEC GEX_CALCBOM_COST1 @YY1,@MM1,@LOGINID
--*****************************************
--等所有產品的月加權算好後, 再一起回寫原單
--*****************************************
--取得當月所有產品的月加權
SELECT
A.PRODUCTID,A.MONTHAVGCOST INTO #ALLCOST
FROM
(
SELECT PRODUCTID,MAX(YEARMONTH) MAX_YM FROM BASPRODMONTHCOST
WHERE CAST(YEARMONTH AS INTEGER) <= (@YY1 *100 + @MM1) AND MONTHAVGCOST > 0
GROUP BY PRODUCTID
) Z
LEFT JOIN BASPRODMONTHCOST A ON A.PRODUCTID = Z.PRODUCTID AND A.YEARMONTH = Z.MAX_YM
--回寫原單成本
UPDATE INVSTKBILL1_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL1_D A
LEFT JOIN INVSTKBILL1_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE INVSTKBILL2_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL2_D A
LEFT JOIN INVSTKBILL2_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE INVSTKBILL3_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL3_D A
LEFT JOIN INVSTKBILL3_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE INVSTKBILL4_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL4_D A
LEFT JOIN INVSTKBILL4_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE INVSTKBILL5_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL5_D A
LEFT JOIN INVSTKBILL5_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE INVSTKBILL6_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL6_D A
LEFT JOIN INVSTKBILL6_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
--ADD
UPDATE INVSTKBILL7_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM INVSTKBILL7_D A
LEFT JOIN INVSTKBILL7_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
UPDATE CRMMAINTAIN1_D SET NOWCOST = (SELECT ISNULL(MONTHAVGCOST,0) FROM #ALLCOST WHERE A.PRODUCTID = #ALLCOST.PRODUCTID)
FROM CRMMAINTAIN1_D A
LEFT JOIN CRMMAINTAIN1_M B ON A.BILLNO = B.BILLNO
WHERE YEAR(B.BILLDATE) = @YY1 AND MONTH(B.BILLDATE) = @MM1
DROP TABLE #STK31
DROP TABLE #STK32
DROP TABLE #STK71
DROP TABLE #STK72
DROP TABLE #STK73
DROP TABLE #AVGCOST
DROP TABLE #ALLCOST
@@ -0,0 +1,225 @@
CREATE PROC dbo.GEX_RESETQTY
(
@PROD1 NVARCHAR(20),
@PROD2 NVARCHAR(20),
@RESETTYPE NCHAR(1),
@DATE2 VARCHAR(10)
)
/*
Function : 進銷存數量重置主程式
Description:
目前的想法是將所有歷史重置的資料都統一寫到 FIVINVFINAL_HISTORY, 用 RESETDATE 區分不同時期的重置
風險是單一 Table 會有過大的疑慮, 但好處是固定的 Table 名稱, 管理及 SQL 語法都較方便處理
不含生管的數量重置作業, 可以支援單一產品或全產品重置
執行範例 EXEC GEX_RESETQTY '','ZZ','1','2099/12/31'
RESETTYPE = 1 全重置
2 從頭到指定重置日
3 從前次重置日到指定重置日
4 從前次重置日到最後
9 期初期末存量表等報表要臨時使用的期初存量(取消)
1,4 寫到 FIVINVFINAL
2,3 寫到 FIVINVFINAL_HISTORY
目前只要使用1和2 即可, 期末數量和單據筆數關連不大
但是成本重置的 SP, 就要分段計算, 這是效能問題
Build Date : 2011/07/13
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/07/13 加入註解
2 Michael 2011/11/10 修正產品引數傳入星號(zz)的 SQL 問題
3 Michael 2013/03/18 將數量欄位為 null 更新為 0
*/
AS
--要先停掉 Trigger
DISABLE TRIGGER DBO.TRI_INVSTKBILL1_CALCCOST ON dbo.INVSTKBILL1_D;
DISABLE TRIGGER DBO.TRI_INVSTKBILL2_CALCCOST ON dbo.INVSTKBILL2_D;
DISABLE TRIGGER DBO.TRI_INVSTKBILL3_CALCCOST ON dbo.INVSTKBILL3_D;
IF @RESETTYPE = 1 OR @RESETTYPE = 4
BEGIN
SET @DATE2 = '2199/12/31'
END
IF @RESETTYPE = '' OR @RESETTYPE = '*' BEGIN SET @RESETTYPE = '1' END
IF @DATE2 = '' BEGIN SET @DATE2 = '2199/12/31' END
--FOR 擴充機制使用
DECLARE @LOGINID VARCHAR(60)
DECLARE @FUNCTAG VARCHAR(30)
SELECT @LOGINID=GETDATE()+Round(RAND() * 10000, 0)
SET @FUNCTAG = 'GEX_RESETQTY'
--擴充機制
EXEC GEXRPT_INVRPT_EXTEND @PROD1,@PROD2,'','zz','1900/01/01',@DATE2,@FUNCTAG,'INV_INIT',@LOGINID,1
SELECT A.PRODUCTID, B.WAREID INTO #INVALL FROM BASPRODUCT A LEFT JOIN BASWAREHOUSE B ON 1 = 1
WHERE CASE WHEN @PROD1 = '*' THEN @PROD1 ELSE A.PRODUCTID END >= @PROD1
AND CASE WHEN @PROD2 = '*' THEN @PROD2 ELSE A.PRODUCTID END <= @PROD2
IF @RESETTYPE = 1 OR @RESETTYPE = 4
BEGIN
DELETE FROM FIVINVFINAL WHERE NOT EXISTS
(
SELECT * FROM BASPRODUCT
WHERE PRODUCTID = FIVINVFINAL.PRODUCTID
)
DELETE FROM FIV_LPS WHERE LOWPOINTSTOCK IS NULL
INSERT INTO FIVINVFINAL (PRODUCTID,WAREID,LOWPOINTSTOCK,NOWQUANTITY,NOWCOST,BORROWOUTQTY,BORROWINQTY,RETURNINQTY,RETURNOUTQTY)
SELECT A.PRODUCTID,A.WAREID,0,0,0,0,0,0,0 FROM #INVALL A
LEFT JOIN FIVINVFINAL B ON A.PRODUCTID = B.PRODUCTID AND A.WAREID = B.WAREID
WHERE B.NOWQUANTITY IS NULL
AND CASE WHEN @PROD1 = '*' THEN @PROD1 ELSE A.PRODUCTID END >= @PROD1
AND CASE WHEN @PROD2 = '*' THEN @PROD2 ELSE A.PRODUCTID END <= @PROD2
--保留安全庫存設定
INSERT INTO FIV_LPS (PRODUCTID,WAREID,LOWPOINTSTOCK)
SELECT A.PRODUCTID,A.WAREID,ISNULL(A.LOWPOINTSTOCK,0) FROM FIVINVFINAL A
LEFT JOIN FIV_LPS B ON A.PRODUCTID = B.PRODUCTID AND A.WAREID = B.WAREID
WHERE B.LOWPOINTSTOCK IS NULL
AND CASE WHEN @PROD1 = '*' THEN @PROD1 ELSE A.PRODUCTID END >= @PROD1
AND CASE WHEN @PROD2 = '*' THEN @PROD2 ELSE A.PRODUCTID END <= @PROD2
UPDATE FIV_LPS SET LOWPOINTSTOCK = (SELECT LOWPOINTSTOCK FROM FIVINVFINAL WHERE FIV_LPS.PRODUCTID = FIVINVFINAL.PRODUCTID AND FIV_LPS.WAREID = FIVINVFINAL.WAREID)
END
ELSE IF @RESETTYPE = 2 OR @RESETTYPE = 3
BEGIN
INSERT INTO FIVINVFINAL_HISTORY (RESETDATE,PRODUCTID,WAREID,LOWPOINTSTOCK,NOWQUANTITY,NOWCOST,BORROWOUTQTY,BORROWINQTY,RETURNINQTY,RETURNOUTQTY)
SELECT @DATE2,A.PRODUCTID,A.WAREID,0,0,0,0,0,0,0 FROM #INVALL A
LEFT JOIN FIVINVFINAL_HISTORY B ON A.PRODUCTID = B.PRODUCTID AND A.WAREID = B.WAREID AND RESETDATE = @DATE2
WHERE B.NOWQUANTITY IS NULL
AND CASE WHEN @PROD1 = '*' THEN @PROD1 ELSE A.PRODUCTID END >= @PROD1
AND CASE WHEN @PROD2 = '*' THEN @PROD2 ELSE A.PRODUCTID END <= @PROD2
END;
WITH INV1
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY1 FROM INVSTKBILL1_D A
LEFT JOIN INVSTKBILL1_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV2
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY2 FROM INVSTKBILL2_D A
LEFT JOIN INVSTKBILL2_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV3
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY3 FROM INVSTKBILL3_D A
LEFT JOIN INVSTKBILL3_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV41
AS
(
SELECT A.PRODUCTID, A.WAREINWAREHOUSE, SUM(A.QUANTITY) AS QTY41 FROM INVSTKBILL4_D A
LEFT JOIN INVSTKBILL4_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREINWAREHOUSE
), INV42
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY42 FROM INVSTKBILL4_D A
LEFT JOIN INVSTKBILL4_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV5
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY5 FROM INVSTKBILL5_D A
LEFT JOIN INVSTKBILL5_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV6
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY6 FROM INVSTKBILL6_D A
LEFT JOIN INVSTKBILL6_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV71
AS
(
SELECT A.M_PRODID, A.WAREID, SUM(A.STANDARDBATCHQTY) AS QTY71 FROM INVSTKBILL7_M A
WHERE A.BILLDATE <= @DATE2 GROUP BY A.M_PRODID, A.WAREID
), INV72
AS
(
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY72 FROM INVSTKBILL7_D A
LEFT JOIN INVSTKBILL7_M B ON A.BILLNO = B.BILLNO
WHERE B.BILLDATE <= @DATE2 GROUP BY A.PRODUCTID, A.WAREID
), INV77
AS
(
--擴充機制
SELECT A.PRODUCTID, A.WAREID, SUM(A.QUANTITY) AS QTY77 FROM INVEXTEND_INIT A
WHERE A.LOGINID = @LOGINID AND FUNCTAG = @FUNCTAG
GROUP BY A.PRODUCTID, A.WAREID
), FINAL99
AS
(
SELECT A.PRODUCTID, A.WAREID, ISNULL(B.QTY1,0) AS QTY1, ISNULL(C.QTY2,0) AS QTY2, ISNULL(D.QTY3,0) AS QTY3,
ISNULL(E.QTY41,0) AS QTY41, ISNULL(F.QTY42,0) AS QTY42, ISNULL(G.QTY5,0) AS QTY5, ISNULL(H.QTY6,0) AS QTY6,
ISNULL(I.QTY71,0) AS QTY71, ISNULL(J.QTY72,0) AS QTY72, ISNULL(K.QTY77,0) AS QTY77
FROM #INVALL A
LEFT JOIN INV1 B ON A.PRODUCTID = B.PRODUCTID AND A.WAREID = B.WAREID
LEFT JOIN INV2 C ON A.PRODUCTID = C.PRODUCTID AND A.WAREID = C.WAREID
LEFT JOIN INV3 D ON A.PRODUCTID = D.PRODUCTID AND A.WAREID = D.WAREID
LEFT JOIN INV41 E ON A.PRODUCTID = E.PRODUCTID AND A.WAREID = E.WAREINWAREHOUSE
LEFT JOIN INV42 F ON A.PRODUCTID = F.PRODUCTID AND A.WAREID = F.WAREID
LEFT JOIN INV5 G ON A.PRODUCTID = G.PRODUCTID AND A.WAREID = G.WAREID
LEFT JOIN INV6 H ON A.PRODUCTID = H.PRODUCTID AND A.WAREID = H.WAREID
LEFT JOIN INV71 I ON A.PRODUCTID = I.M_PRODID AND A.WAREID = I.WAREID
LEFT JOIN INV72 J ON A.PRODUCTID = J.PRODUCTID AND A.WAREID = J.WAREID
LEFT JOIN INV77 K ON A.PRODUCTID = K.PRODUCTID AND A.WAREID = K.WAREID
), FINALOK
AS
(
SELECT PRODUCTID, WAREID, (QTY1-QTY2+QTY3+QTY41-QTY42-QTY5+QTY6+QTY71-QTY72+QTY77) AS NOWQTY
FROM FINAL99
)
--用 WITH 就一定要在下一句 SQL 使用, 只好先寫到 TempDB
SELECT * INTO #FINALOK FROM FINALOK
IF @RESETTYPE = 1 OR @RESETTYPE = 4
BEGIN
UPDATE FIVINVFINAL SET NOWQUANTITY = B.NOWQTY FROM #FINALOK B WHERE B.PRODUCTID = FIVINVFINAL.PRODUCTID AND B.WAREID= FIVINVFINAL.WAREID
UPDATE FIVINVFINAL SET LOWPOINTSTOCK = (SELECT LOWPOINTSTOCK FROM FIV_LPS WHERE FIV_LPS.PRODUCTID = FIVINVFINAL.PRODUCTID AND FIV_LPS.WAREID = FIVINVFINAL.WAREID)
DELETE FROM FIVINVFINAL WHERE NOWQUANTITY = 0 AND LOWPOINTSTOCK = 0 AND BORROWOUTQTY = 0 AND BORROWINQTY = 0 AND RETURNINQTY = 0 AND RETURNOUTQTY = 0
END
ELSE IF @RESETTYPE = 2 OR @RESETTYPE = 3
BEGIN
UPDATE FIVINVFINAL_HISTORY SET NOWQUANTITY = B.NOWQTY FROM #FINALOK B WHERE B.PRODUCTID = FIVINVFINAL_HISTORY.PRODUCTID AND B.WAREID= FIVINVFINAL_HISTORY.WAREID
AND FIVINVFINAL_HISTORY.RESETDATE = @DATE2
DELETE FROM FIVINVFINAL_HISTORY WHERE NOWQUANTITY = 0 AND LOWPOINTSTOCK = 0 AND BORROWOUTQTY = 0 AND BORROWINQTY = 0 AND RETURNINQTY = 0 AND RETURNOUTQTY = 0
END
--刪除暫存內容
DELETE FROM INVEXTEND_INIT WHERE LOGINID = @LOGINID AND FUNCTAG = @FUNCTAG
--重置借還貨數量
IF @RESETTYPE = 1 OR @RESETTYPE = 4 BEGIN
EXEC GEX_RESET_BORRQTY @PROD1,@PROD2
END
--將 NULL 重設為 0
UPDATE FIVINVFINAL SET LOWPOINTSTOCK = 0 WHERE LOWPOINTSTOCK IS NULL
UPDATE FIVINVFINAL SET BORROWOUTQTY = 0 WHERE BORROWOUTQTY IS NULL
UPDATE FIVINVFINAL SET BORROWINQTY = 0 WHERE BORROWINQTY IS NULL
UPDATE FIVINVFINAL SET RETURNINQTY = 0 WHERE RETURNINQTY IS NULL
UPDATE FIVINVFINAL SET RETURNOUTQTY = 0 WHERE RETURNOUTQTY IS NULL
DROP TABLE #INVALL
DROP TABLE #FINALOK;
--重啟 Trigger
ENABLE TRIGGER DBO.TRI_INVSTKBILL1_CALCCOST ON dbo.INVSTKBILL1_D;
ENABLE TRIGGER DBO.TRI_INVSTKBILL2_CALCCOST ON dbo.INVSTKBILL2_D;
ENABLE TRIGGER DBO.TRI_INVSTKBILL3_CALCCOST ON dbo.INVSTKBILL3_D;