K3 取消批次管理的SQL腳本

/*


K3取消批次管理的SQL腳本(2010-02-05測試通過於K3 V10.4)


事因:由於期初啓用了批次管理,但後期進行退貨再加工流程時發現出現問題,無法流轉,所以,必須取消批次。由於已經存在大量業務數據,不可能再重新開始,只能通過底層語句進行批次的取消操作。


處理步驟:
找到4個和批次有關的表
分別是:ICInvInitial初始化數據表   ICBal存貨餘額表  poInvBal代管餘額表(不用理會也可)   ICInvBal庫房存貨餘額表   ICInventory即時庫存(記錄可以清空,通過校對庫存,數據自動生成)


處理原則:相同庫房裏取消批次後,是否有相同記錄,有則合併


一些必要的字段:FItemID商品內碼  FstockID庫房內碼 


這三個字段是需要清除數據的字段:FBatchNo批次號 FKFPeriod保質期 FKFDate生產/採購日期


因爲我們公司的帳套還同時啓用了保質期,所以最初合併記錄沒有到位,後期將保質期FKFPeriod數據清除,進行二次合併,通過。




以下是取消批次的腳本(沒有處理保質期),拷貝到查詢分析器中執行即可完成。
*/


 


--1.初始化表
--將數據彙總轉入臨時表
SELECT FBrNo,FPeriod,FStockID,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,SUM(FBegQty) AS FBegQty,SUM(FReceive) AS FReceive,SUM(FSend) AS FSend,
       SUM(FYtdReceive) AS FYtdReceive, SUM(FYtdSend) AS FYtdSend,SUM(FEndQty) AS FEndQty, SUM(FBegBal) AS FBegBal,
       SUM(FDebit) AS FDebit,SUM(FCredit) AS FCredit,SUM(FYtdDebit) AS FYtdDebit,SUM(FYtdCredit) AS FYtdCredit,SUM(FEndBal) AS FEndBal,
       SUM(FBegDiff) AS FBegDiff,SUM(FReceiveDiff) AS FReceiveDiff,SUM(FSendDiff) AS FSendDiff,FBillInterID,FUnitID,
       SUM(FAuxBegQty) AS FAuxBegQty,SUM(FYtdBegQty) AS FYtdBegQty,SUM(FYtdAuxBegQty) AS FYtdAuxBegQty,SUM(FYtdAuxReceive) AS FYtdAuxReceive,
       SUM(FYtdAuxSend) AS FYtdAuxSend,SUM(FYtdBegBal) AS FYtdBegBal,SUM(FYtdBegDiff) AS FYtdBegDiff, SUM(FYtdReceiveDiff) AS FYtdReceiveDiff,
       SUM(FYtdSendDiff) AS FYtdSendDiff,FKFDate,FKFPeriod,FSPID,SUM(FSecBegQty) AS FSecBegQty,SUM(FSecReceive) As FSecReceive,
       SUM(FSecSend) AS FSecSend,SUM(FSecYtdReceive) AS FSecYtdReceive,SUM(FSecYtdSend) AS FSecYtdSend,SUM(FSecEndQty) AS FSecEndQty,
       FSecUnitID,FStockInDate,FAuxPropID,0 AS FSecCoefficient,SUM(FAuxUnitBegQty) AS FAuxUnitBegQty,SUM(FYtdAuxUnitBegQty) AS FYtdAuxUnitBegQty,
       SUM(FYtdAuxUnitSend) AS FYtdAuxUnitSend,SUM(FYtdAuxUnitReceive) AS FYtdAuxUnitReceive,FSNListID
  INTO #TempICInvInitial 
  FROM ICInvInitial GROUP BY FBrNo,FPeriod,FStockID,FItemID,FBillInterID,FUnitID,FKFDate,FKFPeriod,FSPID,FSecUnitID,FStockInDate,FAuxPropID,FSNListID
--清空表
TRUNCATE TABLE ICInvInitial
--轉回數據
INSERT INTO ICInvInitial SELECT * FROM #TempICInvInitial
--倒算輔助換算率
UPDATE ICInvInitial SET FSecCoefficient = CASE WHEN FSecBegQty<>0 THEN FBegQty/FSecBegQty ELSE 0 END
--刪除臨時表
DROP TABLE #TempICInvInitial


--2.餘額表
--將數據彙總轉入臨時表
SELECT FBrNo,FYear,FPeriod,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,SUM(FBegQty) AS FBegQty,SUM(FReceive) AS FReceive,SUM(FSend) AS FSend,
       SUM(FYtdReceive) AS FYtdReceive, SUM(FYtdSend) AS FYtdSend,SUM(FEndQty) AS FEndQty, SUM(FBegBal) AS FBegBal,
       SUM(FDebit) AS FDebit,SUM(FCredit) AS FCredit,SUM(FYtdDebit) AS FYtdDebit,SUM(FYtdCredit) AS FYtdCredit,SUM(FEndBal) AS FEndBal,
       SUM(FBegDiff) AS FBegDiff,SUM(FReceiveDiff) AS FReceiveDiff,SUM(FSendDiff) AS FSendDiff,SUM(FEndDiff) AS FEndDiff,
       FBillInterID,FEntryID,FStockGroupID,SUM(FYtdReceiveDiff) AS FYtdReceiveDiff,SUM(FYtdSendDiff) AS FYtdSendDiff,
       SUM(FSecBegQty) AS FSecBegQty,SUM(FSecReceive) As FSecReceive,SUM(FSecSend) AS FSecSend,SUM(FSecYtdReceive) AS FSecYtdReceive,
       SUM(FSecYtdSend) AS FSecYtdSend,SUM(FSecEndQty) AS FSecEndQty,FStockInDate,FAuxPropID
  INTO #TempICBal 
  FROM ICBal GROUP BY FBrNo,FYear,FPeriod,FItemID,FBillInterID,FEntryID,FStockGroupID,FStockInDate,FAuxPropID
--清空表
TRUNCATE TABLE ICBal
--轉回數據
INSERT INTO ICBal SELECT * FROM #TempICBal
--刪除臨時表
DROP TABLE #TempICBal


--3.庫存餘額表
--將數據彙總轉入臨時表
SELECT FBrNo,FYear,FPeriod,FStockID,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,SUM(FBegQty) AS FBegQty,SUM(FReceive) AS FReceive,SUM(FSend) AS FSend,
       SUM(FYtdReceive) AS FYtdReceive, SUM(FYtdSend) AS FYtdSend,SUM(FEndQty) AS FEndQty, SUM(FBegBal) AS FBegBal,
       SUM(FDebit) AS FDebit,SUM(FCredit) AS FCredit,SUM(FYtdDebit) AS FYtdDebit,SUM(FYtdCredit) AS FYtdCredit,SUM(FEndBal) AS FEndBal,
       SUM(FBegDiff) AS FBegDiff,SUM(FReceiveDiff) AS FReceiveDiff,SUM(FSendDiff) AS FSendDiff,SUM(FEndDiff) AS FEndDiff,FBillInterID,FStockPlaceID,
       FKFPeriod,FKFDate,SUM(FYtdReceiveDiff) AS FYtdReceiveDiff,SUM(FYtdSendDiff) AS FYtdSendDiff,SUM(FSecBegQty) AS FSecBegQty,SUM(FSecReceive) As FSecReceive,
       SUM(FSecSend) AS FSecSend,SUM(FSecYtdReceive) AS FSecYtdReceive,SUM(FSecYtdSend) AS FSecYtdSend,SUM(FSecEndQty) AS FSecEndQty,
       FAuxPropID,FStockInDate
  INTO #TempICInvBal
  FROM ICInvBal GROUP BY FBrNo,FYear,FPeriod,FStockID,FItemID,FBillInterID,FStockPlaceID,FKFPeriod,FKFDate,FAuxPropID,FStockInDate
--清空表
TRUNCATE TABLE ICInvBal
--轉回數據
INSERT INTO ICInvBal SELECT * FROM #TempICInvBal
--刪除臨時表
DROP TABLE #TempICInvBal


-----------===================
--代管餘額表  可以不用處理
--將數據彙總轉入臨時表
SELECT FBrNo,FYear,FPeriod,FStockID,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,SUM(FBegQty) AS FBegQty,
SUM(FReceive) AS FReceive,SUM(FSend) AS FSend,
       SUM(FYtdReceive) AS FYtdReceive, SUM(FYtdSend) AS FYtdSend,SUM(FEndQty) AS FEndQty, SUM(FBegBal) AS FBegBal,
       SUM(FDebit) AS FDebit,SUM(FCredit) AS FCredit,SUM(FYtdDebit) AS FYtdDebit,SUM(FYtdCredit) AS FYtdCredit,
SUM(FEndBal) AS FEndBal,
       SUM(FBegDiff) AS FBegDiff,SUM(FReceiveDiff) AS FReceiveDiff,SUM(FSendDiff) AS FSendDiff,SUM(FEndDiff) AS FEndDiff,FBillInterID,
       FKFPeriod,FKFDate,sum(FSPID) FSPID,sum(FDCSPID) FDCSPID,SUM(FSecBegQty) AS FSecBegQty,SUM(FSecReceive) As FSecReceive,
       SUM(FSecSend) AS FSecSend,SUM(FSecYtdReceive) AS FSecYtdReceive,SUM(FSecYtdSend) AS FSecYtdSend,
SUM(FSecEndQty) AS FSecEndQty,
       FAuxPropID
  INTO #TemppoInvBal
  FROM poInvBal GROUP BY FBrNo,FYear,FPeriod,FStockID,FItemID,FBillInterID,FKFPeriod,FKFDate,FAuxPropID
--清空表
TRUNCATE TABLE poInvBal
--轉回數據
INSERT INTO poInvBal SELECT * FROM #TemppoInvBal
--刪除臨時表
DROP TABLE #TemppoInvBal
--insert into poInvBal select * from poInvBalback
---


--4. *******************實倉即時庫存表
--將數據彙總轉入臨時表
SELECT FBrNo,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,FStockID,SUM(FQty) AS FQty,SUM(FBal) AS FBal,
       FStockPlaceID,FKFPeriod,FKFDate,SUM(FQtyLock) AS FQtyLock,FAuxPropID,SUM(FSecQty) AS FSecQty
  INTO #TempIcInventory
  FROM ICInventory GROUP BY FBrNo,FItemID,FStockID,FStockPlaceID,FKFPeriod,FKFDate,FAuxPropID
--清空表
TRUNCATE TABLE ICInventory
--轉回數據
INSERT INTO ICInventory SELECT * FROM #TempIcInventory
--刪除臨時表
DROP TABLE #TempIcInventory


--代管庫存表   虛倉即時庫存表  可以不用處理
--將數據彙總轉入臨時表
SELECT FBrNo,FItemID,CONVERT(VARCHAR(200),'') AS FBatchNo,FStockID,SUM(FQty) AS FQty,SUM(FBal) AS FBal,
       FStockPlaceID,FKFPeriod,FKFDate,FStockTypeID,FAuxPropID,SUM(FSecQty) AS FSecQty
  INTO #TempPOInventory
  FROM POInventory GROUP BY FBrNo,FItemID,FStockID,FStockPlaceID,FKFPeriod,FKFDate,FStockTypeID,FAuxPropID
--清空表
TRUNCATE TABLE POInventory
--轉回數據
INSERT INTO POInventory SELECT * FROM #TempPOInventory
--刪除臨時表
DROP TABLE #TempPOInventory


 


--清除物料批次屬性  商品表裏
UPDATE t_ICItem SET FBatchManager = 0 WHERE FBatchManager = 1


 


 


 


--------  處理批次問題,我們以下代碼並沒有執行,如果不好使的話,可以考慮執行以下代碼
--盤點備份表  無數據
--業務單據表
DECLARE @StrSql VARCHAR(2000)
DECLARE @TableName VARCHAR(100)
DECLARE @FieldName VARCHAR(100)
DECLARE Cur_Table CURSOR
    FOR SELECT DISTINCT tt.FEntryTable,tf.FFieldName FROM ICTransactiontype tt
         INNER JOIN (SELECT DISTINCT FID,FFieldName FROM ICTemplateentry WHERE FHeadCaption LIKE '批%') tf
            ON tt.FTemplateID = tf.FID
   OPEN Cur_Table
 
  FETCH NEXT FROM Cur_Table INTO @TableName, @FieldName
  WHILE @@FETCH_STATUS=0
  BEGIN
      SELECT  @StrSql = 'ALTER TABLE ' + @TableName + ' DISABLE TRIGGER ALL ' + CHAR(13)
      SELECT  @StrSql = @StrSql + 'UPDATE ' + @TableName + ' SET ' + @FieldName + ' = ''''' + CHAR(13)
      SELECT  @StrSql = @StrSql +  'ALTER TABLE ' + @TableName + ' ENABLE TRIGGER ALL ' 
      EXEC(@StrSql)
      FETCH NEXT FROM Cur_Table INTO @TableName , @FieldName
  END
  CLOSE Cur_Table
  DEALLOCATE Cur_Table
  DECLARE Cur_Table CURSOR
    FOR SELECT DISTINCT tt.FHeadTable,tf.FFieldName FROM ICTransactiontype tt
         INNER JOIN (SELECT DISTINCT FID,FFieldName FROM ICTemplate WHERE FCaption LIKE '批%') tf
            ON tt.FTemplateID = tf.FID
   OPEN Cur_Table
 
  FETCH NEXT FROM Cur_Table INTO @TableName, @FieldName
  WHILE @@FETCH_STATUS=0
  BEGIN     
      SELECT  @StrSql = 'ALTER TABLE ' + @TableName + ' DISABLE TRIGGER ALL ' + CHAR(13)
      SELECT  @StrSql = @StrSql + 'UPDATE ' + @TableName + ' SET ' + @FieldName + ' = ''''' + CHAR(13)
      SELECT  @StrSql = @StrSql +  'ALTER TABLE ' + @TableName + ' ENABLE TRIGGER ALL ' 
      EXEC(@StrSql)
      FETCH NEXT FROM Cur_Table INTO @TableName , @FieldName
  END
  CLOSE Cur_Table
  DEALLOCATE Cur_Table

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章