-- 先把代码传上来 再慢慢写思路和标记

DECLARE @DATESTAR   datetime
 DECLARE @DATEEND    datetime
 DECLARE @DATEBill   datetime

----##### 定义开始时间@DATESTAR 结束时间 @DATEEND,期间指定时间 @DATEBill

DECLARE @FYP   INT
 DECLARE @FYear   INT
 DECLARE @FMonth  INT

----#### 定义年份、月份、期间

DECLARE @StockID  INT
 DECLARE @StockID2  INT
 DECLARE @StockID3  INT

--  ##   定义 仓库  ,为整过程序制定对应要的 仓库

----     18455 原料仓 18065 材料仓  18497 丝线仓
   Select    @DATESTAR='2021-06-15' , @DATEEND='2021-06-30' ,  
          @StockID=18455  , @StockID2=18497 -- ,@StockID3=18065

-------######  为下列的查询时间 和指定仓库赋值

IF (SELECT DATEDIFF(DAY, @DATESTAR, @DATEEND))<0 
     BEGIN
          SELECT @DATEBill=@DATEEND , @DATEEND=@DATESTAR
          SELECT @DATESTAR=@DATEBill
     END

-------######   如果输入 的起始时间 大于截止时间 ,将两个时间互换。

SELECT @FYP=max(Fyear*12+Fperiod)  FROM ICBal

-------######  获取目前K3系统 最新账期

SELECT @FYear=@FYP/12, @FMonth=@FYP%12

-------######  通过 最新账期  获取 具体的 年份 和月份 。

SELECT @DATESTAR=(CASE WHEN DATEDIFF(DAY, @DATESTAR, CONVERT(datetime ,CONVERT(char(4),@FYear)+'-'+CONVERT(char(2),@FMonth)+'-01'))>=-1*(DAY(@DATESTAR)) THEN @DATESTAR 
                     ELSE CONVERT(datetime ,CONVERT(char(4),@FYear)+'-'+CONVERT(char(2),@FMonth)+'-01') END)

---------######  将起始日期 与 当前账期对比,如果大于当前账期,则用当前账期期初,否则将 起始日期设置为起始月份 的1号

SELECT @FYear=YEAR(@DATESTAR) , @FMonth=MONTH(@DATESTAR)

SELECT @DATEBill=CONVERT(datetime ,CONVERT(char(4),@FYear)+'-'+CONVERT(char(2),@FMonth)+'-01')

-------######  将指定日期 设置 为 起始时间 当月的1号( 屏蔽上句就能获取指定日期数据,不屏-------######  蔽就自动已当月1号为起点)

-------######  “结账期初”---“起始时间当月1号”-----“起始时间”--------“截止时间”

-------######

-----####################################################################-------------###########   系统查询期间内出现的物料及仓库   #######################---------------
-----##################################################################-----------
-----#############################################################------------
SELECT Pro1.FItemID , Pro1.FStockID  
   INTO #TPro1  -----###  获取 查询期间 当月 1号 至 截止时间 所有单据相关联的物料、仓库
   FROM (
   SELECT  FItemID , FStockID   
   FROM ICinvBal
   WHERE FYear=@FYear AND FPeriod=@FMonth  AND FStockID IN (@StockID,@StockID2)
     UNION ALL
   SELECT b2.FItemID , b2.FDCStockID 
   FROM ICStockBill AS a1
   LEFT OUTER JOIN ICStockBillEntry AS b2
   ON a1.FInterID=b2.FInterID
   WHERE a1.FDate BETWEEN @DATEBill AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType IN (1,2,5,6,10,40,41)  -- 入库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
     UNION ALL
   SELECT b2.FItemID , b2.FDCStockID 
   FROM ICStockBill AS a1
   LEFT OUTER JOIN ICStockBillEntry AS b2
   ON a1.FInterID=b2.FInterID
   WHERE a1.FDate BETWEEN @DATEBill AND @DATEEND  
        AND a1.FStatus>0 
        AND a1.FTranType IN (21,26,29,28,43)  -- 出库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
 UNION ALL
   SELECT b2.FItemID , b2.FSCStockID 
   FROM ICStockBill AS a1
   LEFT OUTER JOIN ICStockBillEntry AS b2
   ON a1.FInterID=b2.FInterID
   WHERE a1.FDate BETWEEN @DATEBill AND @DATEEND  
        AND a1.FStatus>0 
        AND a1.FTranType IN (24,41)  -- 出库单 单据类型
        AND b2.FSCStockID IN (@StockID,@StockID2) 
  ) AS Pro1 GROUP BY Pro1.FItemID ,Pro1.FStockID

-----####################################################################---------
-----#############   系统期初数量 、金额       ############################---------------------------------######################################---------------
-----#####################################################---------------

SELECT FYear , FPeriod , FItemID , FStockID  , SUM(FBegQty) AS 'FBegQty' , SUM(FBegBal) AS 'FBegBal'    --,FBatchNo , FAuxPropID ,  FStockGroupID
   INTO #TICBeBal ----### 获取 当前 期间 期初余额,统计各仓库各物料存货及金额 明细
   FROM ICinvBal
   WHERE FYear=@FYear AND FPeriod=@FMonth
         AND FStockID IN (@StockID,@StockID2)
   GROUP BY FYear , FPeriod , FItemID  ,FStockID

-----###############################################################------------
-----########    系统期初时间 至 查询起始时间 之间的数量 金额    ###########---------------
-----#########################################################---------------
-----###############################################################---------------
  
  SELECT FQC2.FItemID , FQC2.FDCStockID ,SUM(FQC2.InFQty) AS 'FInSumQty' ,SUM(FQC2.OutFQty) AS 'FOutSumQty' ,
         SUM(FQC2.InFAmount) AS 'InFAmount' , SUM(FQC2.OutFAmount) AS 'OutFAmount'
  INTO  #TIOBeBal -- 查询 “当月1号” 至“指定时间” 的出入库 数量 和金额 明细。
  FROM (
  SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FDCStockID ,
         b2.FQty AS 'InFQty',0 AS 'OutFQty' ,b2.FAmount AS 'InFAmount' , 0 AS 'OutFAmount'
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate>=@DATEBill AND a1.FDate<@DATESTAR 
        AND a1.FStatus>0 
        AND a1.FTranType IN (1,2,5,6,10,40,41)  -- 入库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
  
  UNION ALL
    SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FDCStockID ,
            0 , b2.FQty*-1 ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount' 
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate>=@DATEBill AND a1.FDate<@DATESTAR 
        AND a1.FStatus>0 
        AND a1.FTranType IN (21,26,29,28,43)  -- 出库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
  
  UNION ALL

SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FSCStockID ,
           0 , b2.FQty*-1 ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount'
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate>=@DATEBill AND a1.FDate<@DATESTAR 
        AND a1.FStatus>0 
        AND a1.FTranType IN (24,41)  -- 出库单 单据类型
        AND b2.FSCStockID IN (@StockID,@StockID2) 
   ) AS FQC2
   GROUP BY FQC2.FItemID , FQC2.FDCStockID

-----####################################################################---------------#########    查询起始时间  至 查询截止时间 数量 金额  ##################---------------
-----#####################################################################--------------################################################################---------------

----- 查询 入库单据 以及 调拨单  退回的部分 
  SELECT FQC2.FTranType ,FQC2.FItemID , FQC2.FDCStockID ,ISNULL(SUM(FQC2.InFQty),0) AS 'FInSumQty' ,ISNULL(SUM(FQC2.OutFQty),0) AS 'FOutSumQty' ,
         ISNULL(SUM(FQC2.InFAmount),0) AS 'InFAmount' , ISNULL(SUM(FQC2.OutFAmount),0) AS 'OutFAmount'
  INTO  #TQJIO   -- 临时表 #TQJIO 中的OUTQty和 QutFAmount  未退回数据   主要作为 仓库 入库数据统计
  FROM (
  SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FDCStockID ,
         b2.FQty AS 'InFQty',0 AS 'OutFQty' ,b2.FAmount AS 'InFAmount' , 0 AS 'OutFAmount'
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType IN (1,2,5,6,10,40,41)  -- 入库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
  
  UNION ALL
    SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FDCStockID ,
            0 , b2.FQty*-1 ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount' 
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType IN (21,26,29,28,43)  -- 出库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
  
  UNION ALL
        --------------------------------------------------------------------------------------------------------
        -------- 此处 调拨单 为退回数据 即产品退回 与上面的入库数据冲减 得出当期 入库数据------
        --------------------------------------------------------------------------------------------------------
    SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FSCStockID ,
           0 , b2.FQty*-1 ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount'
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType IN (24,41)  -- 出库单 单据类型
        AND b2.FSCStockID IN (@StockID,@StockID2)

) AS FQC2
   GROUP BY FQC2.FTranType , FQC2.FItemID , FQC2.FDCStockID

-----################################################################---------------
-----#########    查询起始时间  至 查询截止时间 除调拨单之外的出库 数量 金额  ##---------------
-----####### 普通单据 包括生产领料单等 #################################---------------
-----############################################################---------------

--------  普通出库是从 FDCStockID 发出数量 ,调拨单和领料单是 从 FSCStockID 发出数量 
  SELECT FQC2.FTranType ,FQC2.FItemID , FQC2.FDCStockID ,FQC2.FDeptID ,ISNULL(SUM(FQC2.InFQty),0) AS 'FInSumQty' ,ISNULL(SUM(FQC2.OutFQty),0) AS 'FOutSumQty' ,
         ISNULL(SUM(FQC2.InFAmount),0) AS 'InFAmount' , ISNULL(SUM(FQC2.OutFAmount),0) AS 'OutFAmount'
  INTO  #TQJOut
  FROM (   SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FDCStockID ,
            0 AS InFQty , b2.FQty*-1 AS OutFQty ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount' 
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType IN (21,26,29,28,43)  -- 出库单 单据类型
        AND b2.FDCStockID IN (@StockID,@StockID2)
  
  UNION ALL
    SELECT a1.FTranType , a1.FDate , a1.FBillNo  ,a1.FDeptID ,b2.FItemID , b2.FAuxPropID , b2.FBatchNo , b2.FSCStockID ,
           0 , b2.FQty*-1 ,0 AS 'InFAmount' , b2.FAmount*-1 AS 'OutFAmount'
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType=24  -- 出库单 单据类型
        AND b2.FSCStockID IN (@StockID,@StockID2) 
      ) AS FQC2
   GROUP BY FQC2.FTranType , FQC2.FItemID , FQC2.FDCStockID , FQC2.FDeptID

-----#################################################################---------------
-----####    查询起始时间  至 查询截止时间 调拨单据  数量 金额   #############---------------
-----###########  调拨单 调出仓库  ###############################---------------
-----##########################################################---------------
  SELECT b2.FItemID ,  b2.FSCStockID , b2.FDCStockID ,
           ISNULL(SUM(b2.FQty),0) AS InFQty , ISNULL(SUM(b2.FAmount),0) AS 'InFAmount' , ISNULL(SUM(b2.FQty),0)*-1 AS OutFQty , ISNULL(SUM(b2.FAmount),0)*-1 AS 'OutFAmount' 
  INTO #TDB  -- 查询期间调拨单数据
  FROM ICStockBill AS a1
  LEFT OUTER JOIN ICStockBillEntry AS b2
  ON a1.FInterID=b2.FInterID
  WHERE a1.FDate BETWEEN @DATESTAR AND @DATEEND 
        AND a1.FStatus>0 
        AND a1.FTranType=41  -- 调拨单 单据类型
        AND (b2.FSCStockID IN (@StockID,@StockID2) OR b2.FDCStockID IN (@StockID,@StockID2))
  GROUP BY  b2.FItemID , b2.FSCStockID , b2.FDCStockID 
    --  FSCStockID 为调出仓库  , FDCStockID  为调入仓库

-----##############################################################---------------
-----###    查询起始时间  至 查询截止时间 成本调整单  金额       #############---------------
-----##### 2021-07-03 增加期间 成本调整单据 将金额汇总并关联 调拨临时表#TDB 和普通出库临时表##TQJOut ####---------------
-----#############################################################---------------
  
  SELECT cb1.FItemID , cb1.FDCStockID ,cb1.FQty , cb1.FAmount ,db1.OutFQty , db1.OutFAmount AS 'DBFAmount' ,jt1.FOutSumQty  , jt1.OutFAmount AS 'JTFAmount' ,
         jq1.FOutSumQty AS 'FJQOutQty' , jq1.OutFAmount AS 'JQOutFAmount' ,
         tbe1.FOutSumQty AS 'FBeOutQty' , tbe1.OutFAmount AS 'FBeAmount'  ,
        ISNULL(tbe1.OutFAmount,0)+ISNULL(db1.OutFAmount,0)+ISNULL(jt1.OutFAmount,0)+ISNULL(cb1.FAmount,0) AS 'ChangeFAmount' ,

CAST(0.00 as FLOAT) AS 'DBChangeFAmount' ,  CAST(0.00 AS FLOAT)  AS 'JTChangeFAmount' ,
        CAST(0.00 AS FLOAT) AS 'JQCHFAmount' ,  CAST(0.00 AS FLOAT) AS 'FBeOutFAmount' ,

(CASE WHEN ISNULL(tbe1.FOutSumQty,0)+ISNULL(db1.OutFQty,0)+ISNULL(jt1.FOutSumQty,0)=0  THEN 1 
              WHEN ISNULL(tbe1.OutFAmount,0)+ISNULL(db1.OutFAmount,0)+ISNULL(jt1.OutFAmount,0)=0 then 2 ELSE 3 END) AS 'FZero'

---- FZero标识 完全没有出库数量的物料标识为1,有数量无金额的标识为2 ,正常为3  
  INTO #TCBTZ   ------- 成本调整单 对应的 金额和对应的仓库
  FROM (
        SELECT b2.FItemID ,   b2.FDCStockID , SUM(b2.FQty)*-1 AS FQty , SUM(b2.FAmount)*-1 AS 'FAmount' 
        
        FROM ICStockBill AS a1
        LEFT OUTER JOIN ICStockBillEntry AS b2
        ON a1.FInterID=b2.FInterID
        WHERE a1.FDate BETWEEN @DATEBill AND @DATEEND 
           AND a1.FStatus>0 
           AND a1.FTranType=100  -- 成本单 单据类型
           AND b2.FDCStockID IN (@StockID,@StockID2) 
        GROUP BY  b2.FItemID , b2.FDCStockID   ) AS cb1

LEFT OUTER JOIN #TDB AS db1   -- 需要调整的 调拨单 调出数据
  ON cb1.FItemID=db1.FItemID AND cb1.FDCStockID=db1.FSCStockID
  LEFT OUTER JOIN #TQJOut AS  jt1  --  需要调整的 期间“普通出库” 数据
  ON cb1.FItemID=jt1.FItemID AND cb1.FDCStockID=jt1.FDCStockID
  LEFT OUTER JOIN (  SELECT FQC2.FItemID , FQC2.FDCStockID ,SUM(FQC2.FOutSumQty) AS 'FOutSumQty' , SUM(FQC2.OutFAmount) AS 'OutFAmount'
         FROM #TQJIO  AS FQC2 WHERE FQC2.FOutSumQty<>0  GROUP BY FQC2.FItemID , FQC2.FDCStockID )   AS  jq1  ------ 临时表为明细数据,需要先进行统计
  ON cb1.FItemID=jq1.FItemID AND cb1.FDCStockID=jq1.FDCStockID 
  LEFT OUTER JOIN #TIOBeBal AS tbe1  ---- 期初 至 制定时间发生出库的数量
  ON cb1.FItemID=tbe1.FItemID AND cb1.FDCStockID=tbe1.FDCStockID

UPDATE #TCBTZ SET 
       --  EG:成本调整金额 C 、 调拨出库金额 A 、普通出库金额 B 。 调整后的 调拨出库金额 X=A+(C*(A/(A+B)))
             DBChangeFAmount=ISNULL(DBFAmount,0)+(CASE WHEN ISNULL(FBeAmount,0)+ISNULL(DBFAmount,0)+ISNULL(JTFAmount,0)=0 THEN 
                ISNULL(FAmount,0)*(ISNULL(OutFQty,0)/(ISNULL(FBeOutQty,0)+ISNULL(OutFQty,0)+ISNULL(FOutSumQty,0)))
             ELSE  ISNULL(FAmount,0)*(ISNULL(DBFAmount,0)/(ISNULL(FBeAmount,0)+ISNULL(DBFAmount,0)+ISNULL(JTFAmount,0))) END)
       --  EG:成本调整金额 C 、 调拨出库金额 A 、普通出库金额 B 。 调整后的 调拨出库金额 X=B+(C*(B/(A+B)))
           , JTChangeFAmount=ISNULL(JTFAmount,0)+(CASE WHEN ISNULL(FBeAmount,0)+ISNULL(DBFAmount,0)+ISNULL(JTFAmount,0)=0 THEN 
                  ISNULL(FAmount,0)*(ISNULL(FOutSumQty,0)/(ISNULL(FBeOutQty,0)+ISNULL(OutFQty,0)+ISNULL(FOutSumQty,0)))
             ELSE   ISNULL(FAmount,0)*(ISNULL(JTFAmount,0)/(ISNULL(FBeAmount,0)+ISNULL(DBFAmount,0)+ISNULL(JTFAmount,0))) END)
 
           , JQCHFAmount=ISNULL(JQOutFAmount,0)+(CASE WHEN ISNULL(FBeAmount,0)+ISNULL(JQOutFAmount,0)=0 THEN 
                      ISNULL(FAmount,0)*(ISNULL(FJQOutQty,0)/(ISNULL(FBeOutQty,0)+ISNULL(FJQOutQty,0)))
             ELSE   ISNULL(FAmount,0)*(ISNULL(JQOutFAmount,0)/(ISNULL(FBeAmount,0)+ISNULL(JQOutFAmount,0))) END)

, FBeOutFAmount=ISNULL(FBeAmount,0)+(CASE WHEN ISNULL(FBeAmount,0)+ISNULL(JQOutFAmount,0)=0 THEN 
                      ISNULL(FAmount,0)*(ISNULL(FBeOutQty,0)/(ISNULL(FBeOutQty,0)+ISNULL(FJQOutQty,0)))
             ELSE   ISNULL(FAmount,0)*(ISNULL(FBeAmount,0)/(ISNULL(FBeAmount,0)+ISNULL(JQOutFAmount,0))) END)

WHERE ISNULL(FAmount,0)<>0 AND FZero<>1

-----  更改 调拨临时表中 的出库金额 修改为调整成本后的金额  
     UPDATE db1 SET OutFAmount=ISNULL(cb1.DBChangeFAmount,0)
       FROM #TDB AS db1 , #TCBTZ AS cb1
       WHERE cb1.FItemID=db1.FItemID AND cb1.FDCStockID=db1.FSCStockID AND cb1.FZero<>1
     -----  更改 普通出库临时表中 的出库金额 修改为调整成本后的金额  
     UPDATE jt1 SET OutFAmount=ISNULL(cb1.JTChangeFAmount,0)
       FROM #TQJOut AS jt1 , #TCBTZ AS cb1
       WHERE cb1.FItemID=jt1.FItemID AND cb1.FDCStockID=jt1.FDCStockID AND cb1.FZero<>1

UPDATE   jq1  SET OutFAmount=ISNULL(cb1.JQCHFAmount,0)*(ISNULL(jq1.FOutSumQty,0)/ISNULL(FJQOutQty,0))
        FROM #TQJIO AS jq1 , #TCBTZ AS cb1
        WHERE cb1.FItemID=jq1.FItemID AND cb1.FDCStockID=jq1.FDCStockID AND cb1.FZero<>1 AND cb1.FJQOutQty<>0

UPDATE tbe1  SET OutFAmount=ISNULL(cb1.FBeOutFAmount,0)
         FROM #TIOBeBal tbe1 , #TCBTZ AS cb1
         WHERE cb1.FItemID=tbe1.FItemID AND cb1.FDCStockID=tbe1.FDCStockID AND cb1.FZero<>1 --AND tbe1.FOutSumQty<>0

-----###########################################################---------------
-----#################################################################---------------
-----################################################################---------------
-----################################################################---------------

SELECT  Pro1.FItemID ,ic1.FNumber ,ic1.FName ,ic1.F_121 AS 'FLineID' ,Pro1.FStockID ,st1.FName AS FStockName ,
              ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0) AS FBegQty ,
              (CASE WHEN (ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0))=0 THEN 0
              ELSE (ISNULL(QCBal.FBegBal,0)+ISNULL(IPBal.InFAmount,0)+ISNULL(IPBal.OutFAmount,0))/
              (ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0)) END ) AS FBegPrice ,
              ISNULL(QCBal.FBegBal,0)+ISNULL(IPBal.InFAmount,0)+ISNULL(IPBal.OutFAmount,0) AS FBegAmount,
--              ISNULL(QCBal.FBegQty,0),ISNULL(IPBal.FInSumQty,0),ISNULL(IPBal.FOutSumQty,0) ,
--              ISNULL(QCBal.FBegBal,0),ISNULL(IPBal.InFAmount,0),ISNULL(IPBal.OutFAmount,0) ,
              ISNULL(QJIN.FInSumQty,0)+ISNULL(QJIN.FOutSumQty,0) AS QJINFQty ,
              (CASE WHEN (ISNULL(QJIN.FInSumQty,0)+ISNULL(QJIN.FOutSumQty,0))=0 THEN 0
              ELSE (ISNULL(QJIN.InFAmount,0)+ISNULL(QJIN.OutFAmount,0))/(ISNULL(QJIN.FInSumQty,0)+ISNULL(QJIN.FOutSumQty,0)) END ) AS QJINPrice ,
              ISNULL(QJIN.InFAmount,0)+ISNULL(QJIN.OutFAmount,0) AS QJINFAmount ,

ISNULL(QJOUT.FInSumQty,0)+ISNULL(QJOUT.FOutSumQty,0) AS QJOUTFQty ,
              (CASE WHEN (ISNULL(QJOUT.FInSumQty,0)+ISNULL(QJOUT.FOutSumQty,0))=0 THEN 0
              ELSE (ISNULL(QJOUT.InFAmount,0)+ISNULL(QJOUT.OutFAmount,0))/(ISNULL(QJOUT.FInSumQty,0)+ISNULL(QJOUT.FOutSumQty,0)) END ) AS QJOUTPrice ,
              ISNULL(QJOUT.InFAmount,0)+ISNULL(QJOUT.OutFAmount,0) AS QJOUTFAmount ,

ISNULL(INCS.InFQty,0) AS INCSFQty ,(CASE WHEN ISNULL(INCS.InFQty,0)=0 THEN 0 ELSE ISNULL(INCS.InFAmount,0)/ISNULL(INCS.InFQty,0) END) AS INCSPrice , ISNULL(INCS.InFAmount,0) AS INCSFAmount ,
              ISNULL(OutCS.OutFQty,0) AS OutCSFQty ,(CASE WHEN ISNULL(OutCS.OutFQty,0)=0 THEN 0 ELSE ISNULL(OutCS.OutFAmount,0)/ISNULL(OutCS.OutFQty,0) END) AS OutCSPrice , ISNULL(OutCS.OutFAmount,0) AS OutCSFAmount ,

ISNULL(INBZ.InFQty,0) AS INBZFQty ,(CASE WHEN ISNULL(INBZ.InFQty,0)=0 THEN 0 ELSE ISNULL(INBZ.InFAmount,0)/ISNULL(INBZ.InFQty,0) END) AS INBZPrice ,ISNULL(INBZ.InFAmount,0) AS INBZFAmount ,
              ISNULL(OutBZ.OutFQty,0) AS OutBZFQty ,(CASE WHEN ISNULL(OutBZ.OutFQty,0)=0 THEN 0 ELSE ISNULL(OutBZ.OutFAmount,0)/ISNULL(OutBZ.OutFQty,0) END) AS OutBZPrice , ISNULL(OutBZ.OutFAmount,0) AS OutBZFAmount ,

ISNULL(INAnB.InFQty,0) AS INAnBFQty ,(CASE WHEN ISNULL(INAnB.InFQty,0)=0 THEN 0 ELSE ISNULL(INAnB.InFAmount,0)/ISNULL(INAnB.InFQty,0) END) AS INAnBPrice , ISNULL(INAnB.InFAmount,0) AS INAnBFAmount ,
              ISNULL(OutAnB.OutFQty,0) AS OutAnBFQty ,(CASE WHEN ISNULL(OutAnB.OutFQty,0)=0 THEN 0 ELSE ISNULL(OutAnB.OutFAmount,0)/ISNULL(OutAnB.OutFQty,0) END) AS OutAnBPrice , ISNULL(OutAnB.OutFAmount,0) AS OutAnBFAmount ,

ISNULL(INCC.InFQty,0) AS INCCFQty ,(CASE WHEN ISNULL(INCC.InFQty,0)=0 THEN 0 ELSE ISNULL(INCC.InFAmount,0)/ISNULL(INCC.InFQty,0) END) AS INCCPrice , ISNULL(INCC.InFAmount,0) AS INCCFAmount ,
              ISNULL(OutCC.OutFQty,0) AS OutCCFQty ,(CASE WHEN ISNULL(OutCC.OutFQty,0)=0 THEN 0 ELSE ISNULL(OutCC.OutFAmount,0)/ISNULL(OutCC.OutFQty,0) END) AS OutCCPrice , ISNULL(OutCC.OutFAmount,0) AS OutCCFAmount ,

ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0) AS QJSUMFQty ,

(CASE WHEN (ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0))=0 THEN 0
              ELSE (ISNULL(QJSUM.InFAmount,0)+ISNULL(QJSUM.OutFAmount,0))/(ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0)) END ) AS QJSUMPrice ,
              ISNULL(QJSUM.InFAmount,0)+ISNULL(QJSUM.OutFAmount,0) AS QJSUMFAmount ,

ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0)+
                ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0)  AS FQtyEndBal ,

(CASE WHEN (ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0)+
                         ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0))=0 THEN 0
              ELSE (ISNULL(QCBal.FBegBal,0)+ISNULL(IPBal.InFAmount,0)+ISNULL(IPBal.OutFAmount,0)+
                ISNULL(QJSUM.InFAmount,0)+ISNULL(QJSUM.OutFAmount,0))/(ISNULL(QCBal.FBegQty,0)+ISNULL(IPBal.FInSumQty,0)+ISNULL(IPBal.FOutSumQty,0)+
                ISNULL(QJSUM.FInSumQty,0)+ISNULL(QJSUM.FOutSumQty,0))  END ) AS FPriceEndBal ,

ISNULL(QCBal.FBegBal,0)+ISNULL(IPBal.InFAmount,0)+ISNULL(IPBal.OutFAmount,0)+
                ISNULL(QJSUM.InFAmount,0)+ISNULL(QJSUM.OutFAmount,0)  AS FAmountEndBal 
           
         INTO #TempReport

-----  根据要求 显示 期初数、期初至指定时间发生的数量合计为报表期初数  ,其他根据要求单独------- 从调拨单和领用单据中统计获取    
         FROM #TPro1 AS Pro1
         LEFT OUTER JOIN #TICBeBal AS QCBal  -- 系统期初数
         ON Pro1.FItemID=QCBal.FItemID AND Pro1.FStockID=QCBal.FStockID
         LEFT OUTER JOIN #TIOBeBal  AS IPBal  -- 系统期初至 查询起始期间
         ON Pro1.FItemID=IPBal.FItemID AND Pro1.FStockID=IPBal.FDCStockID
         LEFT OUTER JOIN t_ICItem AS ic1  --  物料资料
         ON Pro1.FItemID=ic1.FItemID
         LEFT OUTER JOIN t_Stock  AS st1   -- 仓库名称
         ON Pro1.FStockID=st1.FItemID
         LEFT OUTER JOIN #TQJIO AS  QJIN    -- 查询期间 数量 金额
         ON Pro1.FItemID=QJIN.FItemID AND Pro1.FStockID=QJIN.FDCStockID AND QJIN.FTranType IN (1,2,5,6,10,40)
         LEFT OUTER JOIN #TQJIO AS  QJOUT    -- 查询期间 数量 金额
         ON Pro1.FItemID=QJOUT.FItemID AND Pro1.FStockID=QJOUT.FDCStockID AND QJOUT.FTranType IN (21,26,29,28,43,24)

LEFT OUTER JOIN #TDB  AS INCS
         ON Pro1.FItemID=INCS.FItemID AND Pro1.FStockID=INCS.FDCStockID AND INCS.FSCStockID=18557   -- 从抽丝车间 退回 到目标仓库 18557 抽丝车间仓
         LEFT OUTER JOIN ( SELECT FCS.FItemID , FCS.FDCStockID ,SUM(FCS.OutFQty)*-1 AS 'OutFQty' ,SUM(FCS.OutFAmount)*-1 AS 'OutFAmount' 
            FROM (
            SELECT a.FItemID , a.FDCStockID , a.FOutSumQty AS OutFQty ,a.OutFAmount  
                   FROM #TQJOut AS a LEFT OUTER JOIN t_Department AS d on a.FDeptID=d.FItemID 
                   WHERE d.FNumber LIKE '03.01%'
            UNION ALL
            SELECT c.FItemID , c.FSCStockID , c.OutFQty ,c.OutFAmount   FROM  #TDB AS c WHERE c.FDCStockID=18557 ) AS FCS 
              GROUP BY FCS.FItemID , FCS.FDCStockID  
          )  AS OutCS
         ON Pro1.FItemID=OutCS.FItemID AND Pro1.FStockID=OutCS.FDCStockID --AND OutCS.FDCStockID=18557   -- 从目的仓库调出  调入到抽丝车间  18557 抽丝车间仓

LEFT OUTER JOIN #TDB  AS INBZ
         ON Pro1.FItemID=INBZ.FItemID AND Pro1.FStockID=INBZ.FDCStockID AND INBZ.FSCStockID=18558   -- 从编织车间 退回 到目标仓库 18588 编织车间仓
         LEFT OUTER JOIN ( SELECT FCS.FItemID , FCS.FDCStockID ,SUM(FCS.OutFQty)*-1 AS 'OutFQty' ,SUM(FCS.OutFAmount)*-1 AS 'OutFAmount' 
            FROM (
            SELECT a.FItemID , a.FDCStockID , a.FOutSumQty AS OutFQty ,a.OutFAmount  
                   FROM #TQJOut AS a LEFT OUTER JOIN t_Department AS d on a.FDeptID=d.FItemID 
                   WHERE d.FNumber LIKE '03.02%'
            UNION ALL
            SELECT c.FItemID , c.FSCStockID , c.OutFQty ,c.OutFAmount   FROM  #TDB AS c WHERE c.FDCStockID=18558 ) AS FCS 
              GROUP BY FCS.FItemID , FCS.FDCStockID  
          )  AS OutBZ
         ON Pro1.FItemID=OutBZ.FItemID AND Pro1.FStockID=OutBZ.FDCStockID  -- AND OutBZ.FDCStockID=18558   -- 从目的仓库调出  调入到编织车间 18588 编织车间仓

LEFT OUTER JOIN #TDB  AS INAnB
         ON Pro1.FItemID=INAnB.FItemID AND Pro1.FStockID=INAnB.FDCStockID AND INAnB.FSCStockID IN (18559,18560)   --  18559 后A车间仓 18560 后B车间仓
         LEFT OUTER JOIN ( SELECT FCS.FItemID , FCS.FDCStockID ,SUM(FCS.OutFQty)*-1 AS 'OutFQty' ,SUM(FCS.OutFAmount)*-1 AS 'OutFAmount' 
            FROM (
            SELECT a.FItemID , a.FDCStockID ,
                     a.FOutSumQty AS OutFQty ,a.OutFAmount  
                   FROM #TQJOut AS a LEFT OUTER JOIN t_Department AS d on a.FDeptID=d.FItemID 
                   WHERE d.FNumber LIKE '03.03%' OR d.FNumber LIKE '03.04%'
            UNION ALL
            SELECT c.FItemID , c.FSCStockID , c.OutFQty ,c.OutFAmount   FROM  #TDB AS c WHERE c.FDCStockID IN (18559,18560) ) AS FCS 
              GROUP BY FCS.FItemID , FCS.FDCStockID  
          )  AS OutAnB
         ON Pro1.FItemID=OutAnB.FItemID AND Pro1.FStockID=OutAnB.FDCStockID --AND OutAnB.FDCStockID IN (18559,18560)  --  18559 后A车间仓 18560 后B车间仓

LEFT OUTER JOIN #TDB  AS INCC
         ON Pro1.FItemID=INCC.FItemID AND Pro1.FStockID=INCC.FDCStockID AND INCC.FSCStockID=18064   -- 从抽丝车间 退回 到目标仓库 18557 抽丝车间仓
         LEFT OUTER JOIN ( SELECT FCS.FItemID , FCS.FDCStockID ,SUM(FCS.OutFQty)*-1 AS 'OutFQty' ,SUM(FCS.OutFAmount)*-1 AS 'OutFAmount' 
            FROM (
            SELECT a.FItemID , a.FDCStockID , a.FOutSumQty AS OutFQty ,a.OutFAmount  
                   FROM #TQJOut AS a LEFT OUTER JOIN t_Department AS d on a.FDeptID=d.FItemID 
                   WHERE d.FNumber LIKE '02.%'   --  半成品前缀编码 丝线仓中只有 丝线半成品
            UNION ALL
            SELECT c.FItemID , c.FSCStockID , c.OutFQty ,c.OutFAmount   FROM  #TDB AS c WHERE c.FDCStockID=18064 ) AS FCS 
              GROUP BY FCS.FItemID , FCS.FDCStockID  
          )  AS OutCC
         ON Pro1.FItemID=OutCC.FItemID AND Pro1.FStockID=OutCC.FDCStockID -- AND OutCC.FDCStockID=18064   -- 从目的仓库调出  调入到抽丝车间  18557 抽丝车间仓

LEFT OUTER JOIN (  SELECT FQC2.FItemID , FQC2.FDCStockID ,SUM(FQC2.FInSumQty) AS 'FInSumQty' ,SUM(FQC2.FOutSumQty) AS 'FOutSumQty' ,
         SUM(FQC2.InFAmount) AS 'InFAmount' , SUM(FQC2.OutFAmount) AS 'OutFAmount'
         FROM #TQJIO  AS FQC2 GROUP BY FQC2.FItemID , FQC2.FDCStockID ) AS QJSUM
         ON Pro1.FItemID=QJSUM.FItemID AND Pro1.FStockID=QJSUM.FDCStockID                            --  查询期间 发出、收入 数量、金额总和
         ORDER BY Pro1.FStockID , ic1.FNumber

SELECT (CASE WHEN t31.F_103='单丝' AND RIGHT(t31.FName,2)<>'PE' THEN '单丝' 
                     WHEN t31.F_103='复丝' AND RIGHT(t31.FName,2)<>'PE' THEN '复丝' 
                     WHEN t31.F_103='PE'   OR  RIGHT(t31.FName,2)='PE' THEN 'PE线' 
                     WHEN t31.F_103='复捻单丝' AND RIGHT(t31.FName,2)<>'PE' THEN '复捻单丝' ELSE '单丝' END)  AS '规格'  ,-- NULL AS '仓库名称'  , 
                CAST(SUM(FBegQty) AS DECIMAL(18,2))  AS '期初数量' , 
                CAST( (CASE WHEN SUM(FBegQty)=0 THEN 0 ELSE  SUM(FBegAmount)/SUM(FBegQty) END) AS DECIMAL(18,2) )  AS '期初单价' ,
                CAST(SUM(FBegAmount) AS DECIMAL(18,2))  AS '期初金额' ,

CAST(SUM(INCSFQty)+SUM(QJINFQty) AS DECIMAL(18,2))  AS '抽丝入库数量' ,
                CAST( (CASE WHEN (SUM(INCSFQty)+SUM(QJINFQty))=0 THEN 0 ELSE  (SUM(INCSFAmount)+SUM(QJINFAmount))/(SUM(INCSFQty)+SUM(QJINFQty)) END) AS DECIMAL(18,2) ) AS '抽丝退回单价' ,
                CAST(SUM(INCSFAmount)+SUM(QJINFAmount) AS DECIMAL(18,2))  AS '抽丝入库金额' ,
--                CAST(SUM(OUTCSFQty) AS DECIMAL(18,2))  AS '抽丝领用数量' ,
--                CAST( (CASE WHEN SUM(OUTCSFQty)=0 THEN 0 ELSE  SUM(OUTCSFAmount)/SUM(OUTCSFQty) END) AS DECIMAL(18,2) ) AS '抽丝领用单价' ,
--                CAST(SUM(OUTCSFAmount) AS DECIMAL(18,2))  AS '抽丝领用金额' ,

CAST(SUM(INBZFQty) AS DECIMAL(18,2))  AS '编织退回数量' ,
                CAST( (CASE WHEN SUM(INBZFQty)=0 THEN 0 ELSE  SUM(INBZFAmount)/SUM(INBZFQty) END) AS DECIMAL(18,2) )  AS '编织退回单价' ,
                CAST(SUM(INBZFAmount) AS DECIMAL(18,2))  AS '编织退回金额' ,
                CAST(SUM(OUTBZFQty) AS DECIMAL(18,2))  AS '编织领用数量' ,
                CAST( (CASE WHEN SUM(OUTBZFQty)=0 THEN 0 ELSE  SUM(OUTBZFAmount)/SUM(OUTBZFQty) END) AS DECIMAL(18,2) )  AS '编织领用单价' ,
                CAST(SUM(OUTBZFAmount) AS DECIMAL(18,2))  AS '编织领用金额' ,

CAST(SUM(OUTCCFQty) AS DECIMAL(18,2))  AS '市场领用数量' ,
                CAST( (CASE WHEN SUM(OUTCCFQty)=0 THEN 0 ELSE  SUM(OUTCCFAmount)/SUM(OUTCCFQty) END) AS DECIMAL(18,2) )  AS '市场领用单价' ,
                CAST(SUM(OUTCCFAmount) AS DECIMAL(18,2))  AS '市场领用金额' ,

--                CAST(SUM(QJSUMFQty) AS DECIMAL(18,2))  AS '期间发生数量' , NULL  AS '期间发生单价' , CAST(SUM(QJSUMFAmount) AS DECIMAL(18,2))  AS '期间发生金额' ,
                CAST(SUM(FQtyEndBal) AS DECIMAL(18,2))  AS '期末余额数量' ,
                CAST( (CASE WHEN SUM(FQtyEndBal)=0 THEN 0 ELSE  SUM(FAmountEndBal)/SUM(FQtyEndBal) END) AS DECIMAL(18,2) )  AS '期末余额单价' ,
                CAST(SUM(FAmountEndBal) AS DECIMAL(18,2))  AS '期末余额金额' 
           FROM #TempReport AS a LEFT OUTER JOIN t_Item_3001 AS t31 ON a.FLineID=t31.FItemID
           WHERE a.FNumber LIKE '2.1.%'
                GROUP BY (CASE WHEN t31.F_103='单丝' AND RIGHT(t31.FName,2)<>'PE' THEN '单丝' 
                     WHEN t31.F_103='复丝' AND RIGHT(t31.FName,2)<>'PE' THEN '复丝' 
                     WHEN t31.F_103='PE'   OR  RIGHT(t31.FName,2)='PE' THEN 'PE线' 
                     WHEN t31.F_103='复捻单丝' AND RIGHT(t31.FName,2)<>'PE' THEN '复捻单丝' ELSE '单丝' END)

UNION ALL

SELECT  '合计: ' AS '规格'  ,-- NULL AS '仓库名称'  , 
                CAST(SUM(FBegQty) AS DECIMAL(18,2))  AS '期初数量' , 
                CAST( (CASE WHEN SUM(FBegQty)=0 THEN 0 ELSE  SUM(FBegAmount)/SUM(FBegQty) END) AS DECIMAL(18,2) )  AS '期初单价' ,
                CAST(SUM(FBegAmount) AS DECIMAL(18,2))  AS '期初金额' ,

CAST(SUM(INCSFQty)+SUM(QJINFQty) AS DECIMAL(18,2))  AS '抽丝入库数量' ,
                CAST( (CASE WHEN (SUM(INCSFQty)+SUM(QJINFQty))=0 THEN 0 ELSE  (SUM(INCSFAmount)+SUM(QJINFAmount))/(SUM(INCSFQty)+SUM(QJINFQty)) END) AS DECIMAL(18,2) ) AS '抽丝入库单价' ,
                CAST(SUM(INCSFAmount)+SUM(QJINFAmount) AS DECIMAL(18,2))  AS '抽丝入库金额' ,
                CAST(SUM(INBZFQty) AS DECIMAL(18,2))  AS '编织退回数量' ,
                CAST( (CASE WHEN SUM(INBZFQty)=0 THEN 0 ELSE  SUM(INBZFAmount)/SUM(INBZFQty) END) AS DECIMAL(18,2) )  AS '编织退回单价' ,
                CAST(SUM(INBZFAmount) AS DECIMAL(18,2))  AS '编织退回金额' ,
                CAST(SUM(OUTBZFQty) AS DECIMAL(18,2))  AS '编织领用数量' ,
                CAST( (CASE WHEN SUM(OUTBZFQty)=0 THEN 0 ELSE  SUM(OUTBZFAmount)/SUM(OUTBZFQty) END) AS DECIMAL(18,2) )  AS '编织领用单价' ,
                CAST(SUM(OUTBZFAmount) AS DECIMAL(18,2))  AS '编织领用金额' ,

CAST(SUM(OUTCCFQty) AS DECIMAL(18,2))  AS '市场领用数量' ,
                CAST( (CASE WHEN SUM(OUTCCFQty)=0 THEN 0 ELSE  SUM(OUTCCFAmount)/SUM(OUTCCFQty) END) AS DECIMAL(18,2) )  AS '市场领用单价' ,
                CAST(SUM(OUTCCFAmount) AS DECIMAL(18,2))  AS '市场领用金额' ,

--                CAST(SUM(QJSUMFQty) AS DECIMAL(18,2))  AS '期间发生数量' , NULL  AS '期间发生单价' , CAST(SUM(QJSUMFAmount) AS DECIMAL(18,2))  AS '期间发生金额' ,
                CAST(SUM(FQtyEndBal) AS DECIMAL(18,2))  AS '期末余额数量' ,
                CAST( (CASE WHEN SUM(FQtyEndBal)=0 THEN 0 ELSE  SUM(FAmountEndBal)/SUM(FQtyEndBal) END) AS DECIMAL(18,2) )  AS '期末余额单价' ,
                CAST(SUM(FAmountEndBal) AS DECIMAL(18,2))  AS '期末余额金额' 
           FROM #TempReport AS a LEFT OUTER JOIN t_Item_3001 AS t31 ON a.FLineID=t31.FItemID
           WHERE a.FNumber LIKE '2.1.%'

UNION ALL

------  如遇到没有出库数量、没有金额 的成本调整单,在次显示具体物料提示

SELECT  ic1.FNumber+' 无出库记录' AS '规格'  ,-- NULL AS '仓库名称'  , 
                NULL   AS '期初数量' , 
                NULL   AS '期初单价' ,
                NULL   AS '期初金额' , 
                NULL    AS '抽丝入库数量' ,
                NULL   AS '抽丝入库单价' ,
                NULL   AS '抽丝入库金额' ,
                NULL    AS '编织退回数量' ,
                NULL   AS '编织退回单价' ,
                NULL    AS '编织退回金额' ,
                NULL    AS '编织领用数量' ,
                NULL    AS '编织领用单价' ,
                NULL    AS '编织领用金额' ,

NULL    AS '市场领用数量' ,
                NULL    AS '市场领用单价' ,
                NULL    AS '市场领用金额' ,

NULL    AS '期末余额数量' ,
                NULL    AS '期末余额单价' ,
                NULL    AS '期末余额金额' 
              FROM #TCBTZ AS a  LEFT OUTER JOIN t_ICItem as ic1 on ic1.fitemid=a.fitemid
                                LEFT OUTER JOIN #TPro1 AS tp1 ON a.FItemID=tp1.FItemID AND a.FDCStockID=tp1.FStockID
              WHERE a.FZero=1 AND ic1.FNumber LIKE '2.1.%'

--   SELECT * FROM #TempReport
--   SELECT * FROM #TICBeBal 
--   SELECT * FROM #TIOBeBal 
--   SELECT * FROM #TQJIO
--   SELECT * FROM #TDB
--   SELECT * FROM #TQJOut 
--   SELECT * FROM #TPro1 
--   SELECT * FROM #TCBTZ

DROP  TABLE #TICBeBal   -- 系统期间结算 期初数据
   DROP  TABLE #TPro1      --  系统查询期间内出现的 物料及对应仓库
   DROP  TABLE #TIOBeBal   --  系统期初 与日期前的期初数据
   DROP  TABLE #TQJIO      --  查询期间 发出、收入  的 数量 金额
   DROP  TABLE #TDB        --  查询期间  调拨仓库 数量、金额 汇总
   DROP  TABLE #TQJOut     --  查询期间 除调拨单外的出库数据
   DROP  TABLE #TempReport --  查询结果
   DROP  table #TCBTZ      --  查询成数量结果

------  写在最后,由于金蝶自带的收发汇总无法查询所需数据,只能工作这样繁复的方式来实现对-------  应的功能。好处是只要理清基本思路就可以写出需要的报表。

------ 1、确定 期间 获取 期初数据 ,将指定时间至期初1号日期数据 获取就能实现任意时间查询。-------  也能与系统自带的收发汇总表进行对照。

------ 2、将期初、期间、起始时间-截止时间、发生的明细数据分门别类 收集有利于 编写过程中查-------  找对应 问题及原因。

------ 3、将过程中需要修正数据 在各原始数据汇总临时表中修改,就不必对繁复的报表进行修改。

金蝶K3 库存收发汇总相关推荐

  1. 金蝶 K3 库存账龄分析表 数据不一致

    用户反馈某个物料在库存账龄分析表内的统计后存在超过1080天的数量,但实际该料只是在一年前导入,故不可能存在超过1080天的数据. 原因分析:用户没勾选包含调拨单的数据,报表统计时将调拨单排除在外.造 ...

  2. 金蝶k3库存账龄分析报表(带参数)

    单价取最近的结账账期加权平均单价:数量根据传入参数确定. 传入参数: 年份:如2017 账期:如11 SQL直接使用时执行存储过程: execute [huwei_sp_stock_Age] 2017 ...

  3. 金蝶K3出入库单据制单日期误填到未来的日期,如何进行账务调整?

    接到一个比较棘手的情况,先描述下现状和遇到的问题: 1.仓库2019-04-11手工制作了一张产品入库单,单据日期误填到了2020-04-11,当时没发现,审核也通过了(审核更新库存): 2.这个入库 ...

  4. 金蝶K3供应链与总账对账的思路及方法

    本文档适用于 K/3V12.0及以上版本: 学习完本文档以后,能够对供应链与总账对账的思路和方法有个清晰的了解,并且 掌握对账不平的原因以及查找方法,解决对账不平的困扰. 背景 一到期末结账时就会接到 ...

  5. Excel+MSSQL开发金蝶K3欠料报表

    将K3所有订单需求.MRP运算.库存及在途数据等数据整体展示,适合计划部门根据报表数据统筹考量物料供给情况,特制作此报表及Excel集成工具,以减少手工汇总统计的工作量. 本代码适用于金蝶K3 WIS ...

  6. 金蝶k3单据编码规则_金蝶K3存货跌价案例教程

    目录 案例介绍 后台设置 计提存货跌价准备 显示计提表 计提凭证模板设置 计提凭证生成 手工结转跌价准备 案例介绍 关于存货跌价准备,企业会计准则第1号存货相关规定如下: 第十五条 资产负债表日,存货 ...

  7. 金蝶K3案例实验实际成本前台操作

    目录 投入产量录入 完工产量录入 在制品盘点产量录入 材料费用录入 人工费用录入 折旧费用录入 其它费用录入 材料出库核算 产成品出库核算 材料费用分配 其它费用分配 成本计算合法性检查 产品成本计算 ...

  8. 金蝶K3物料生效流程+物料批量导入功能开发

    开发工具:IMS信息化平台+Excel+MSSQL+K3 WISE版本. 原理: 1.使用IMS信息化平台搭建线上的物料生效流程,定义各物料维护节点和流程走向,流程完结后数据存放在平台后台数据库表中: ...

  9. 金蝶K3存货跌价准备案例专题

    目录 案例介绍 后台设置 计提存货跌价准备 显示计提表 计提凭证模板设置 计提凭证生成 手工结转跌价准备 案例介绍 关于存货跌价准备,企业会计准则第1号存货相关规定如下: 第十五条 资产负债表日,存货 ...

最新文章

  1. html怎么制作固定背景,使用CSS制作的页面背景固定和滚动效果
  2. 基于深度学习的口罩规范佩戴检测【树莓派+PC训练、测试】
  3. PIL应用之生成验证码图片
  4. Qt 实现桌面右下角消息弹窗提示
  5. eclipse启动tomcat错误:A Java Exception has occurred(转)
  6. 小米拒绝权限_小米手机MIUI12真有那么好吗?
  7. C++ stringstream输入方式
  8. 【转】Go Micro(2)——微服务工具箱
  9. gpedit msc组策略面板 win10在哪里_Win10系统gpedit.msc在哪?Win10系统gpedit.msc组策略打不开怎么办?...
  10. 互联网时代,还有闷声发大财的吗?
  11. VIRTUALBOX无法加载USB移动设备的解决方法
  12. win7安装VScode(Visual Studio Code)
  13. 编写函数trans(str)实现字符串中数字转化为大写汉字。例如 “0123456789“转化为 “零壹贰叁肆伍陆柒捌玖“。
  14. 在matlab中怎么把点链接,怎么样把所有点连接起来?
  15. 超级计算机作文230字,我想养小兔子二年级作文230字
  16. CAD数据在柔性制造中的重要作用
  17. 前端JS校验银行卡卡号和身份证号码(附ES6版方法)
  18. 从SPS帧解析视频分辨率
  19. Eigen::aligned_allocator
  20. Qt学习 第21节:窗口初始化EVENT

热门文章

  1. 英语、日语学习网站软件
  2. 华为路由器:ospf协议入门介绍
  3. Android实现可录音/暂停录音/播放录音的录音软件
  4. 用ajax做级联操作,学习笔记之MVC级联及Ajax操作
  5. C++秋招春招面试总结
  6. 躺平减脂减重法补充篇——无需控制碳水摄入的有效方法,另推一种健康的运动和防止老年慢性病的方式...
  7. sqlyog连接mysql错误码2058 正确处理方式
  8. 红米k30至尊纪念版和红米k30i哪个好
  9. Docker离线安装及python算法部署详细介绍
  10. 消失的2000万辆小黄车去哪儿了?