First commit, 已上架的電子書
This commit is contained in:
@@ -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;
|
||||
Binary file not shown.
Reference in New Issue
Block a user