— =============================================

— Author: 

— Create date:

— Description: 

— =============================================

ALTER PROCEDURE [dbo].[getCHMX]

AS

BEGIN

–声明游标

DECLARE orderNum_03_cursor CURSOR SCROLL

FOR SELECT FDIMEENTRYID,FNUMBER FROM T_UG_SKUIDANDNUMBER WHERE ID BETWEEN 3001 AND 4000

–AND t1.FNUMBER=’10106′

–and FDIMEENTRYID=123175

–2.打开游标

OPEN orderNum_03_cursor

–3.声明游标提取数据所要存放的变量

DECLARE @FDIMEENTRYID int,@FNUMBER NVARCHAR(200)

–4.定位游标到哪一行

FETCH FIRST FROM orderNum_03_cursor INTO @FDIMEENTRYID,@FNUMBER –into的变量数量必须与游标查询结果集的列数相同

WHILE @@fetch_status=0  –提取成功,进行下一条数据的提取操作

BEGIN

BEGIN

–DECLARE @FDIMEENTRYID int,@FNUMBER NVARCHAR(200)

–set @FDIMEENTRYID=123175

–set @FNUMBER=’10106′

INSERT INTO T_UG_StockInDetailAdjReport with(tablock)  (FDIMID, FDate, FBILLTYPEID, FBILLFORMID, FBILLID, FBillSeq, FYear, FPeriod, FBillNo, FType, FRowType, FRECEIVEAMOUNT, FSENDAMOUNT, FSTOCKSTATUSID)

SELECT T1.FDIMEENTRYID, t0.FDate, t0.FBILLTYPEID, ‘HS_AdjustmentBill’ fbillformid, t0.FID fbillid, t1.FSeq, outacct.FYear, outacct.FPeriod, t0.FBillNo, 6 ftype, 6 frowtype, CASE  WHEN t0.FINOUTINDEX = ‘1’ THEN t1.FAdjustmentAmount ELSE 0 END freceiveamount, CASE  WHEN t0.FINOUTINDEX = ‘1’ THEN 0 ELSE t1.FAdjustmentAmount END fsendamount, t1.FSTOCKSTATUSID FROM T_HS_AdjustmentBill t0 INNER JOIN T_HS_AdjustmentBillEntry t1 ON t0.FID = t1.FID INNER JOIN T_HS_OUTACCTG outacct ON outacct.FID = t0.FAcctgID INNER JOIN t_bd_Material mat ON (t1.FMATERIALID = mat.FMATERIALID AND t1.FSTOCKORGID = mat.FUSEORGID) WHERE ((((((((t0.FACCTGSYSTEMID = 1 AND t0.FAcctOrgID = 1) AND t0.FACCTPOLICYID = 1) AND t1.FACCTGDIMEENTRYID = @FDIMEENTRYID

) AND t0.FBUSINESSTYPE = ‘0’) AND (t0.FDate >= ‘2020-11-01 00:00:00’)) AND (t0.FDate < ‘2020-12-01 00:00:00’)) AND t0.FDocumentStatus = ‘C’) AND t0.FFORBIDSTATUS = ‘A’) UNION ALL SELECT T1.FDIMEENTRYID, t0.FDate, t0.FBILLTYPEID, ‘HS_AdjustmentBill’ fbillformid, t0.FID fbillid, t1.FSeq, outacct.FYear, outacct.FPeriod, t0.FBillNo, CASE WHEN t0.FFROMTYPE = ‘7’ THEN 5 ELSE 2 END ftype, CASE WHEN t1.FCROSSPERIODADJUST = ‘1’ THEN 2 ELSE 5 END frowtype, CASE WHEN t0.FINOUTINDEX = ‘1’ THEN t1.FAdjustmentAmount ELSE 0 END freceiveamount, CASE WHEN t0.FINOUTINDEX = ‘1’ THEN 0 ELSE t1.FAdjustmentAmount END fsendamount, t1.FSTOCKSTATUSID FROM T_HS_AdjustmentBill t0 INNER JOIN T_HS_AdjustmentBillEntry t1 ON t0.FID = t1.FID INNER JOIN T_HS_OUTACCTG outacct ON outacct.FID = t0.FAcctgID INNER JOIN t_bd_Material mat ON (t1.FMATERIALID = mat.FMATERIALID AND t1.FSTOCKORGID = mat.FUSEORGID) WHERE (((((((((t0.FACCTGSYSTEMID = 1 AND t0.FAcctOrgID = 1) AND t0.FACCTPOLICYID = 1) AND t1.FACCTGDIMEENTRYID = @FDIMEENTRYID

) AND (t0.FBusinessType <> ‘0’)) AND t0.FISACCTGGENERATE = ‘1’) AND (t0.FDate >= ‘2020-11-01 00:00:00’)) AND (t0.FDate < ‘2020-12-01 00:00:00’)) AND t0.FDocumentStatus = ‘C’) AND t0.FFORBIDSTATUS = ‘A’)

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FISTOTAL, FNUMBER, FDIMID, FACCTGSYSTEMID, FACCTGORGID, FACCTPOLICYID, FYear, FPeriod, FMATERIALID, FMATERIALNAME, FMATERIALGROUPID, FMODEL, FLOTNO, FASSIPROPERTYID, FMATERPROPERTY, FMATERTYPE, FBOMNO, FPLANNO, FSEQUENCENO, FPROJECTNO, FOWNERID, FSTOCKORGID, FSTOCKID, FSTOCKPLACEID, FACCTGRANGEID, FACCTGRANGENAME, FUNITID, FVALUATION, FINOUTKEY, FROWTYPE, FBILLTYPEID, FBILLFORMID, FBILLID, FBILLENTRYID, FBILLNO, FOrderSeq, FBILLSEQ, FBILLDATE, FRECEIVEQTY, FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, FSTOCKSTATUSID, FQtyDigits)

SELECT DISTINCT 0 fistotal, ROW_NUMBER() OVER( ORDER BY fyear ASC, fperiod ASC, FINOUTKEY ASC, FOrderSeq ASC, FBILLDATE ASC, FBILLNO ASC, FBILLSEQ ASC) fnumber, t.FDIMID, t.FACCTGSYSTEMID, t.FACCTGORGID, t.FACCTPOLICYID, t.FYear, t.FPeriod, t.FMATERIALID, t.FMATERIALNAME, t.FMATERIALGROUP, t.FMODEL, lot.FNumber flotno, t.FASSIPROPERTYID, FMATERPROPERTY, t.FMATERTYPE, t.FBOMNO, t.FPLANNO, t.FSEQUENCENO, t.FPROJECTNO, t.FOWNERID, t.FSTOCKORGID, t.FSTOCKID, t.FSTOCKPLACEID, FACCTGRANGEID, FACCTGRANGENAME, t.FUNITID, FVALUATION, t.FINOUTKEY, t.FROWTYPE, t.FBILLTYPEID, t.FBILLFORMID, t.FBILLID, t.FBILLENTRYID, t.FBILLNO, t.FOrderSeq, t.FBILLSEQ, t.FBILLDATE, FRECEIVEQTY, FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, FSTOCKSTATUSID, FQtyDigits

FROM (SELECT DISTINCT init.FDIMID, init.FACCTGSYSTEMID, init.FACCTGORGID, init.FACCTPOLICYID, init.FYear, init.FPeriod, init.FMATERIALID, init.FMATERIALNAME, init.FMATERIALGROUP, init.FMODEL, init.FLOT, init.FASSIPROPERTYID, init.FMATERTYPE, init.FBOMNO, init.FPLANNO, init.FSEQUENCENO, init.FPROJECTNO, init.FOWNERID, init.FSTOCKORGID, init.FSTOCKID, init.FSTOCKPLACEID, init.FUNITID, init.FINOUTKEY, init.FROWTYPE, init.FBILLTYPEID, init.FBILLFORMID, init.FBILLID, init.FBILLENTRYID, init.FBILLNO, 0 forderseq, init.FBILLSEQ, init.FBILLDATE, FRECEIVEQTY, FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, FSTOCKSTATUSID, rang.FNUMBER facctgrangeid, rangl.FNAME facctgrangename, enumL.FCAPTION fmaterproperty, enumL1.FCAPTION fvaluation, unit.FPRECISION fqtydigits FROM (SELECT ((ag.fyear * 100) + ag.fperiod) fyearperiod, bal.FEndInitKey, dim.FEntryId fdimid, cald.FACCTSYSTEMID facctgsystemid, cald.FFinOrgID facctgorgid, cald.FACCTPOLICYID facctpolicyid, ag.FYear fyear, ag.FPeriod fperiod, mat.FNUMBER fmaterialid, mat_L.FNAME fmaterialname, mat.FMATERIALGROUP, mat_L.FSPECIFICATION fmodel, dim.FLOT flot, dim.FAuxPropId fassipropertyid, mat_T.FERPCLSID fmaterproperty, mat_T.FCATEGORYID fmatertype, dim.FBOMId fbomno, dim.FMtoNo fplanno, N’ ‘ fsequenceno, dim.FPROJECTNO fprojectno, dim.FCargoOwnerId fownerid, dim.FStockOrgId fstockorgid, dim.FSTOCKSTATUSID, dim.FStockId fstockid, dim.FStockLocId fstockplaceid, dim.FAcctgRangeId facctgrangeid, mat_T.FBASEUNITID funitid, dim.FVALUATIONMETHOD fvaluation, 1 finoutkey, 1 frowtype, ‘ ‘ fbilltypeid, ‘ ‘ fbillformid, 0 fbillid, 0 fbillentryid, ‘ ‘ fbillno, NULL fbillseq, NULL fbilldate, bal.FYearSumQty freceiveqty, bal.FYearOutSumQty fsendqty, bal.FQty fendqty, bal.FYearSumAmount freceiveamount, CASE  WHEN (bal.FYearSumAmount = 0 OR bal.FYearSumQty = 0) THEN 0 ELSE (bal.FYearSumAmount / bal.FYearSumQty) END freceiveprice, bal.FYearOutSumAmount fsendamount, CASE  WHEN (bal.FYearOutSumAmount = 0 OR bal.FYearOutSumQty = 0) THEN 0 ELSE (bal.FYearOutSumAmount / bal.FYearOutSumQty) END fsendprice, bal.FAmount fendamount, CASE  WHEN (bal.FAmount = 0 OR bal.FQty = 0) THEN 0 ELSE (bal.FAmount / bal.FQty) END fendprice FROM T_HS_OUTACCTG ag INNER JOIN T_HS_BALANCE_H bal ON (ag.fid = bal.fid AND ((bal.FYearSumAmount <> 0) OR (bal.FYearOutSumAmount <> 0) OR (bal.FAmount <> 0) OR (bal.FYearSumQty <> 0) OR (bal.FYearOutSumQty <> 0) OR (bal.FQty <> 0))) INNER JOIN T_HS_CALDIMENSIONS cald ON ag.FDIMENSIONID = cald.FDIMENSIONID INNER JOIN (SELECT TOP 1 stDim.*, ISNULL(ivDim.FLOT, 0) flot, ISNULL(ivDim.FSTOCKORGID, 0) fstockorgid, ISNULL(ivDim.FCargoOwnerId, 0) fcargoownerid, ISNULL(ivDim.FSTOCKSTATUSID, 0) fstockstatusid FROM T_HS_StockDimension stDim LEFT OUTER JOIN T_HS_InivStockDimension ivDim ON stDim.FEntryID = ivDim.FDIMEENTRYID WHERE stDim.FEntryID = @FDIMEENTRYID

) dim ON bal.FDimeEntryId = dim.FEntryId INNER JOIN t_bd_Material mat ON dim.FMASTERID = mat.FMATERIALID INNER JOIN T_BD_MATERIALBASE mat_T ON (mat.FMATERIALID = mat_T.FMATERIALID AND mat.FUSEORGID = mat_T.FUSEORGID) LEFT OUTER JOIN t_bd_Material_l mat_L ON ((mat.FMATERIALID = mat_L.FMATERIALID AND mat.FUSEORGID = mat_L.FUSEORGID) AND

mat_L.FLOCALEID = 2052)) init INNER JOIN T_HS_ACCTGRANGE rang ON init.FACCTGRANGEID = rang.FAcctgRangeId LEFT OUTER JOIN T_HS_ACCTGRANGE_L rangl ON (init.FACCTGRANGEID = rangl.FACCTGRANGEID AND rangl.FLOCALEID = 2052) INNER JOIN T_META_FORMENUMITEM enum ON (enum.FID = ‘ac14913e-bd72-416d-a50b-2c7432bbff63’ AND

enum.FValue = init.FMATERPROPERTY) LEFT OUTER JOIN T_META_FORMENUMITEM_L enumL ON (enum.FENUMID = enumL.FENUMID AND enumL.FLOCALEID = 2052) INNER JOIN T_META_FORMENUMITEM enum1 ON (enum1.FID = ‘eca675f6-d296-4ba9-b9df-170b7b286a73’ AND enum1.FValue = init.FVALUATION) LEFT OUTER JOIN T_META_FORMENUMITEM_L enumL1 ON

(enum1.FENUMID = enumL1.FENUMID AND enumL1.FLOCALEID = 2052) LEFT OUTER JOIN T_BD_UNIT unit ON unit.funitid = init.FUNITID WHERE ((((((((

(

(FEndInitKey = ‘0’ AND FDIMID = @FDIMEENTRYID

) AND FMATERIALID = @FNUMBER

)

AND

init.FYearPeriod = ‘202011’) AND init.FACCTGSYSTEMID = 1) AND init.FACCTGORGID = 1) AND init.FACCTPOLICYID

= 1) AND (init.FYearPeriod >= 202011)) AND (init.FYearPeriod <= 202011)) AND (init.FMATERIALID >= @FNUMBER)

) AND (init.FMATERIALID <= @FNUMBER)

)

UNION

SELECT rt.FDIMID, rt.FACCTGSYSTEMID, rt.FACCTGORGID, rt.FACCTPOLICYID, rt.FYear, rt.FPeriod, rt.FMATERIALID, rt.FMATERIALNAME, rt.FMATERIALGROUP, rt.FMODEL, rt.FLOT,

rt.FASSIPROPERTYID, rt.FMATERTYPE, rt.FBOMNO, rt.FPLANNO, rt.FSEQUENCENO, rt.FPROJECTNO, rt.FOWNERID, rt.FSTOCKORGID, rt.FSTOCKID, rt.FSTOCKPLACEID, rt.FUNITID, rt.FINOUTKEY, rt.FRowType, rt.FBILLTYPEID, rt.FBILLFORMID, rt.FBILLID, rt.FBILLENTRYID, rt.FBILLNO, rt.FOrderSeq, rt.FBILLSEQ, rt.FBILLDATE, FRECEIVEQTY,

FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, FSTOCKSTATUSID, rang.FNUMBER facctgrangeid, rangl.FNAME facctgrangename, enumL.FCAPTION fmaterproperty, enumL1.FCAPTION fvaluation, unit.FPRECISION fqtydigits

FROM (

——————————-

SELECT ((T1.fyear * 100) + T1.fperiod) fyearperiod,

‘2’ fendinitkey, stockdim.FEntryId fdimid, cald.FACCTSYSTEMID facctgsystemid, cald.FFinOrgID facctgorgid, cald.FACCTPOLICYID facctpolicyid, t1.FYear fyear, t1.FPeriod fperiod, mat.FNUMBER fmaterialid, mat_L.FNAME fmaterialname, MAT.FMATERIALGROUP, mat_L.FSPECIFICATION fmodel, dim.FLOT flot, dim.FAuxPropId fassipropertyid, mat_T.FERPCLSID fmaterproperty, mat_T.FCATEGORYID fmatertype, dim.FBOMId fbomno, dim.FMtoNo fplanno, N’ ‘ fsequenceno, dim.FPROJECTNO fprojectno, dim.FCargoOwnerId fownerid, dim.FStockOrgId fstockorgid, dim.FSTOCKSTATUSID, dim.FStockId fstockid, dim.FStockLocId fstockplaceid, stockdim.FAcctgRangeId facctgrangeid, mat_T.FBASEUNITID funitid, stockdim.FVALUATIONMETHOD fvaluation,

CASE  WHEN t3.FProphaseAdjSign = ‘1’ THEN 2

WHEN t3.FInOutIndex = ‘1’ THEN 4 ELSE 4 END finoutkey,

CASE  WHEN t3.FProphaseAdjSign = ‘1’ THEN 2

WHEN t3.FInOutIndex = ‘1’ THEN 3 ELSE 4 END frowtype,

t3.FBillTypeId fbilltypeid, t3.FBillFromId fbillformid, t3.FBillId fbillid, t3.FBillEntryId fbillentryid, ISNULL(t3.FBillNo, ‘ ‘) fbillno, ISNULL(t3_Seq.FORDETBYSEQ, t3.FSeq) forderseq, t3.FBillSeqId fbillseq, t3.FBillDate fbilldate,

CASE  WHEN t3.FInOutIndex = ‘1’ THEN t3.FQty ELSE 0 END freceiveqty,

CASE  WHEN t3.FInOutIndex = ‘0’ THEN t3.FQty ELSE 0 END fsendqty,

0 fendqty,

CASE  WHEN (t3.FInOutIndex = ‘1’ AND (t3.FINDEXENTRYID <> 32)) THEN t3.FAcctgAmount ELSE 0 END freceiveamount,

CASE  WHEN t3.FInOutIndex = ‘1’ THEN t3.FACCTGPRICE ELSE 0 END freceiveprice,

CASE  WHEN t3.FInOutIndex = ‘0’ THEN t3.FAcctgAmount

WHEN t3.FINDEXENTRYID = 32 THEN (0 – t3.FAcctgAmount) ELSE 0 END fsendamount,

CASE  WHEN t3.FInOutIndex = ‘0’ THEN t3.FACCTGPRICE ELSE 0 END fsendprice,

0 fendamount, 0 fendprice

FROM T_HS_OUTACCTG t1

INNER JOIN T_HS_CALDIMENSIONS cald ON t1.FDIMENSIONID = cald.FDIMENSIONID

INNER JOIN

(

SELECT t2.FID, t2.FDimeentryid, t30.FENTRYID fseqentryid, max(pe.FORDETBYSEQ) fordetbyseq

FROM T_HS_ACCTGPROCESS_H t2

INNER JOIN T_HS_OUTINSTOCKSEQ_H t30 ON (t2.FEntryId = t30.FProcessEntryId AND t30.fdocumentstatus = ‘C’)

LEFT OUTER JOIN T_HS_ACCTGPROCESSENTRY_H pe ON ((pe.fprocessEntryID = t2.FEntryId AND pe.FSEQENTRYID = t30.FEntryId) AND (pe.FCALDATATYPE <> ‘6’))

GROUP BY t2.FID, t2.FDimeentryid, t30.FENTRYID

) t3_seq ON t3_Seq.FID = t1.FID

INNER JOIN T_HS_OUTINSTOCKSEQ_H t3 ON t3_Seq.FSeqEntryID = t3.FENTRYID

INNER JOIN T_HS_InivStockDimension dim ON t3.FDimeEntryId = dim.FEntryId

INNER JOIN T_HS_StockDimension stockdim ON t3_Seq.FDimeentryid = stockdim.FEntryId

INNER JOIN t_bd_Material mat ON dim.FMATERIALID = mat.FMATERIALID

INNER JOIN T_BD_MATERIALBASE mat_T ON (mat.FMATERIALID = mat_T.FMATERIALID AND mat.FUSEORGID = mat_T.FUSEORGID)

LEFT OUTER JOIN t_bd_Material_l mat_L ON ((mat.FMATERIALID = mat_L.FMATERIALID AND mat.FUSEORGID = mat_L.FUSEORGID) AND mat_L.FLOCALEID = 2052) WHERE 1 = 1

———————

) rt

INNER JOIN T_HS_ACCTGRANGE rang ON rt.FACCTGRANGEID = rang.FAcctgRangeId

LEFT OUTER JOIN T_HS_ACCTGRANGE_L rangl ON (rt.FACCTGRANGEID = rangl.FACCTGRANGEID AND rangl.FLOCALEID = 2052)

INNER JOIN T_META_FORMENUMITEM enum ON (

enum.FID = ‘ac14913e-bd72-416d-a50b-2c7432bbff63’ AND

enum.FValue =

rt.FMATERPROPERTY)

LEFT OUTER JOIN T_META_FORMENUMITEM_L enumL ON (enum.FENUMID = enumL.FENUMID AND enumL.FLOCALEID = 2052)

INNER JOIN T_META_FORMENUMITEM enum1 ON (enum1.FID = ‘eca675f6-d296-4ba9-b9df-170b7b286a73’ AND enum1.FValue = rt.FVALUATION)

LEFT OUTER JOIN T_META_FORMENUMITEM_L enumL1 ON (enum1.FENUMID =

enumL1.FENUMID AND enumL1.FLOCALEID = 2052)

LEFT OUTER JOIN T_BD_UNIT unit ON unit.funitid = rt.FUNITID

WHERE (((((((((

(

FDIMID = @FDIMEENTRYID AND

FMATERIALID = @FNUMBER

) AND

(rt.FYearPeriod >= ‘202011’)) AND (rt.FYearPeriod <= ‘202011’)) AND rt.FACCTGSYSTEMID = 1) AND rt.FACCTGORGID = 1) AND rt.FACCTPOLICYID = 1) AND

(rt.FYearPeriod >= 202011)) AND (rt.FYearPeriod <= 202011)) AND (rt.FMATERIALID >= @FNUMBER)

) AND (rt.FMATERIALID <= @FNUMBER)

)

UNION

SELECT @FDIMEENTRYID fdimid, 1 facctgsystemid, 1 facctgorgid, 1 facctpolicyid, t1.fyear, t1.fperiod, MAT.FNUMBER fmaterialid, MAT_L.FNAME fmaterialname, MAT.FMATERIALGROUP,

mat_L.FSPECIFICATION fmodel, STOCKDIME.FLOT flot, STOCKDIME.FAUXPROPID fassipropertyid, MAT_T.FCATEGORYID fmatertype, STOCKDIME.FBOMID fbomno, STOCKDIME.FMTONO fplanno, N’ ‘ fsequenceno, N’ ‘ fprojectno, STOCKDIME.FCARGOOWNERID fownerid, STOCKDIME.FSTOCKORGID fstockorgid, STOCKDIME.FSTOCKID, STOCKDIME.FSTOCKLOCID fstockplaceid, mat_T.FBASEUNITID funitid, t1.FType, t1.FRowType, t1.FBILLTYPEID, t1.FBILLFORMID, t1.FBILLID, 0 fbillentryid, t1.FBillNo, 9999 forderseq, t1.FBillSeq, t1.FDate fbilldate, 0 freceiveqty, 0 freceiveprice, 0 fsendqty, 0 fsendprice, 0 fendqty, 0 fendprice, t1.FRECEIVEAMOUNT, t1.FSENDAMOUNT, 0 fendamount, t1.FSTOCKSTATUSID, rang.FNUMBER facctgrangeid, rangl.FNAME facctgrangename, enumL.FCAPTION fmaterproperty, N’加权平均法’ fvaluation, unit.FPRECISION fqtydigits  –into #temp001

FROM T_UG_StockInDetailAdjReport t1

INNER JOIN T_HS_InivStockDimension STOCKDIME ON t1.FDIMID = STOCKDIME.FENTRYID

INNER JOIN T_HS_StockDimension DIME ON STOCKDIME.FDIMEENTRYID = DIME.FENTRYID

INNER JOIN t_bd_Material MAT ON (STOCKDIME.FMATERIALID = MAT.FMATERIALID AND STOCKDIME.FSTOCKORGID = mat.FUSEORGID)

INNER JOIN T_BD_MATERIALBASE MAT_T ON (MAT.FMATERIALID = mat_T.FMATERIALID AND mat.FUSEORGID = mat_T.FUSEORGID)

LEFT OUTER JOIN t_bd_Material_l MAT_L ON ((MAT.FMATERIALID = MAT_L.FMATERIALID AND mat.FUSEORGID = mat_L.FUSEORGID) AND MAT_L.FLOCALEID = 2052)

INNER JOIN T_HS_ACCTGRANGE rang ON DIME.FACCTGRANGEID = rang.FACCTGRANGEID

LEFT OUTER JOIN T_HS_ACCTGRANGE_L rangl ON (rang.FACCTGRANGEID = rangl.FACCTGRANGEID AND rangl.FLOCALEID = 2052)

INNER JOIN T_META_FORMENUMITEM enum ON (enum.FID = ‘ac14913e-bd72-416d-a50b-2c7432bbff63’ AND enum.FValue = mat_T.FERPCLSID)

LEFT OUTER JOIN T_META_FORMENUMITEM_L enumL ON (enum.FENUMID = enumL.FENUMID AND enumL.FLOCALEID = 2052)

LEFT OUTER JOIN T_BD_UNIT unit ON MAT_T.FBASEUNITID = unit.FUNITID

) t

LEFT OUTER JOIN T_BD_LOTMASTER lot ON lot.flotid = t.flot

WHERE 1 = 1

MERGE INTO t_UG_StockInDetailRet t using(SELECT t1.Fyear, t1.Fperiod, t1.FDIMID, t1.FMATERIALID, t1.FBILLNO, t1.FBILLENTRYID, t1.FBILLSEQ, t1.FINOUTKEY, t1.FRowType, sum((ISNULL(t1.FENDQTY, 0) + ISNULL(t1.FRECEIVEQTY, 0)) – ISNULL(t1.FSENDQTY, 0)) fendqty, sum((ISNULL(t1.FENDAMOUNT, 0) + ISNULL(t1.FRECEIVEAMOUNT, 0)) – ISNULL(t1.FSENDAMOUNT, 0)) fendamount FROM t_UG_StockInDetailRet t1 GROUP BY t1.Fyear, t1.Fperiod, t1.FDIMID, t1.FMATERIALID, t1.FBILLNO, t1.FBILLENTRYID, t1.FINOUTKEY, t1.FRowType, t1.FBILLSEQ) t2 ON (((((((((t.FDIMID = t2.FDIMID AND t.FMATERIALID = t2.FMATERIALID) AND t.FBILLNO = t2.FBILLNO) AND t.FBILLENTRYID = t2.FBILLENTRYID) AND t.FBILLSEQ = t2.FBILLSEQ) AND t.Fperiod = t2.Fperiod) AND t.Fyear = t2.Fyear) AND t.FRowType = t2.FRowType) AND t.FRowType IN (2, 3, 4, 6, 5))) WHEN MATCHED  THEN UPDATE SET t.FENDQTY = t2.FENDQTY, t.FENDAMOUNT = t2.FENDAMOUNT;

MERGE INTO t_UG_StockInDetailRet t using(SELECT b.FNumber, sum(a.FENDQTY) fendqty, CAST(sum(a.FENDAMOUNT) AS NUMERIC(23, 10)) fendamount FROM t_UG_StockInDetailRet a INNER JOIN t_UG_StockInDetailRet b ON (a.FNUMBER <= b.FNUMBER) GROUP BY b.FNumber) m ON (t.FNUMBER = m.FNUMBER) WHEN MATCHED THEN UPDATE SET t.FENDQTY = m.FENDQTY, t.FENDAMOUNT = m.FENDAMOUNT, t.FENDPRICE = CASE m.FENDQTY WHEN 0 THEN 0 ELSE (m.FENDAMOUNT / m.FENDQTY) END;

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FYear, FPeriod, FISTOTAL, FDIMID, FINOUTKEY, FRowType, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, FRECEIVEPRICE, FSENDPRICE, FQtyDigits) SELECT FYear, FPeriod, 1 fistotal, FDIMID, FINOUTKEY, FRowType, AllReceiveQty, AllReceiveAmt, AllSendQty, AllSendAmt, CASE  WHEN AllReceiveQty = 0 THEN 0 ELSE ROUND((AllReceiveAmt / AllReceiveQty), 10) END allreceiveprice, CASE  WHEN AllSendQty = 0 THEN 0 ELSE ROUND((AllSendAmt / AllSendQty), 10) END allsendprice, FQtyDigits FROM (SELECT FYear, FPeriod, FDIMID, 7 finoutkey, 8 frowtype, sum(FRECEIVEQTY) allreceiveqty, CAST(sum(FRECEIVEAMOUNT) AS NUMERIC(23, 10)) allreceiveamt, sum(FSENDQTY) allsendqty, CAST(sum(FSENDAMOUNT) AS NUMERIC(23, 10)) allsendamt, Max(FQtyDIgits) fqtydigits FROM t_UG_StockInDetailRet WHERE FINOUTKEY IN (2, 3, 4, 6, 5) GROUP BY FDIMID, FBILLNO, FYear, FPeriod) t

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FISTOTAL, FDIMID, FINOUTKEY, FRowType, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, FRECEIVEPRICE, FSENDPRICE, FQtyDigits) SELECT 2 fistotal, FDIMID, FINOUTKEY, FRowType, AllReceiveQty, AllReceiveAmt, AllSendQty, AllSendAmt, CASE  WHEN AllReceiveQty = 0 THEN 0 ELSE ROUND((AllReceiveAmt / AllReceiveQty), 10) END allreceiveprice, CASE  WHEN AllSendQty = 0 THEN 0 ELSE ROUND((AllSendAmt / AllSendQty), 10) END allsendprice, FQtyDIgits FROM (SELECT FDIMID, 9 finoutkey, 10 frowtype, sum(FRECEIVEQTY) allreceiveqty, CAST(sum(FRECEIVEAMOUNT) AS NUMERIC(23, 10)) allreceiveamt, sum(FSENDQTY) allsendqty, CAST(sum(FSENDAMOUNT) AS NUMERIC(23, 10)) allsendamt, max(FQtyDIgits) fqtydigits FROM t_UG_StockInDetailRet WHERE FRowType = 8 GROUP BY FDIMID) t

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FYear, FPeriod, FISTOTAL, FDIMID, FBILLNO, FINOUTKEY, FRowType, FORDERSEQ, FRECEIVEAMOUNT, FSENDAMOUNT, FReceiveQty, FSendQty, FReceivePrice, FSendPrice, FQtyDigits) SELECT FYear, FPeriod, 2 fistotal, FDIMID, N’ ‘ fbillno, FINOUTKEY, FRowTYpe, 10000, AllReceiveAmt, AllSendAmt, FReceiveQty, FSendQty, CASE  WHEN FReceiveQty = 0 THEN 0 ELSE ROUND((AllReceiveAmt / FReceiveQty), 10) END freceiveprice, CASE  WHEN FSendQty = 0 THEN 0 ELSE ROUND((AllSendAmt / FSendQty), 10) END fsendprice, FQtyDigits FROM (SELECT FYear, FPeriod, FDIMID, 6 finoutkey, 7 frowtype, CAST(sum(FRECEIVEAMOUNT) AS NUMERIC(23, 10)) allreceiveamt, CAST(sum(FSENDAMOUNT) AS NUMERIC(23, 10)) allsendamt, sum(FReceiveQty) freceiveqty, sum(FSendQty) fsendqty, max(FQtyDIgits) fqtydigits FROM t_UG_StockInDetailRet WHERE FRowTYpe = 8 GROUP BY FYear, FPeriod, FDIMID) t

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FYear, FISTOTAL, FDIMID, FINOUTKEY, FRowType, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, FRECEIVEPRICE, FSENDPRICE, FQtyDigits) SELECT FYear, 2 fistotal, FDIMID, FINOUTKEY, FRowType, AllReceiveQty, AllReceiveAmt, AllSendQty, AllSendAmt, CASE  WHEN AllReceiveQty = 0 THEN 0 ELSE ROUND((AllReceiveAmt / AllReceiveQty), 10) END allreceiveprice, CASE  WHEN AllSendQty = 0 THEN 0 ELSE ROUND((AllSendAmt / AllSendQty), 10) END allsendprice, FQtyDIgits FROM (SELECT FYear, FDIMID, 11 finoutkey, 12 frowtype, sum(FRECEIVEQTY) allreceiveqty, CAST(sum(FRECEIVEAMOUNT) AS NUMERIC(23, 10)) allreceiveamt, sum(FSENDQTY) allsendqty, CAST(sum(FSENDAMOUNT) AS NUMERIC(23, 10)) allsendamt, max(FQtyDIgits) fqtydigits FROM t_UG_StockInDetailRet WHERE FRowType = 8 GROUP BY FYear, FDIMID) t

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FISTOTAL, FDIMID, FMATERIALID, FMATERIALNAME, FMODEL, FINOUTKEY, FRowType, FENDQTY, FENDAMOUNT, FENDPRICE, FQtyDigits) SELECT 3 fistotal, FDIMID, FMATERIALID, FMATERIALNAME, FMODEL, 8 finoutkey, 9 frowtype, FENDQTY, FENDAMOUNT, CASE  WHEN (FENDQTY = 0 OR FENDAMOUNT = 0) THEN 0 ELSE (FENDAMOUNT / FENDQTY) END fendprice, FQtyDigits FROM (SELECT FDIMID, max(FMATERIALID) fmaterialid, max(FMATERIALNAME) fmaterialname, max(FMODEL) fmodel, ((sum(ISNULL(FENDQTY, 0)) + sum(FRECEIVEQTY)) – sum(FSENDQTY)) fendqty, ((CAST(sum(ISNULL(FENDAMOUNT, 0)) AS NUMERIC(23, 10)) + CAST(sum(FRECEIVEAMOUNT) AS NUMERIC(23, 10))) – CAST(sum(FSENDAMOUNT) AS NUMERIC(23, 10))) fendamount, max(FQtyDigits) fqtydigits FROM (SELECT FDIMID, FMATERIALID, FMATERIALNAME, FMODEL, 0 freceiveqty, 0 freceiveamount, 0 fsendqty, 0 fsendamount, FENDQTY, FENDAMOUNT, FQtyDigits FROM t_UG_StockInDetailRet WHERE FRowType = 1 UNION SELECT FDIMID, FMATERIALID, FMATERIALNAME, FMODEL, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, FENDQTY, FENDAMOUNT, FQtyDigits FROM t_UG_StockInDetailRet WHERE FRowType = 10) tmp GROUP BY FDIMID) t

INSERT INTO t_UG_StockInDetailRet with(tablock)  (FYear, FISTOTAL, FDIMID, FBillNo, FINOUTKEY, FRowType, FEXPENSEID, FEXPENSENAME, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, FRECEIVEPRICE, FSENDPRICE, FENDQTY, FENDAMOUNT, FENDPRICE, FQtyDigits) SELECT FYear, 2 fistotal, FDIMID, N’ ‘ fbillno, 10 finoutkey, 11 frowtype, N’ ‘ fexpenseid, N’小计’ fexpensename, FRECEIVEQTY, FRECEIVEAMOUNT, FSENDQTY, FSENDAMOUNT, CASE  WHEN (FRECEIVEQTY = 0 OR FRECEIVEAMOUNT = 0) THEN 0 ELSE (FRECEIVEAMOUNT / FRECEIVEQTY) END freceiveprice, CASE  WHEN (FSENDQTY = 0 OR FSENDAMOUNT = 0) THEN 0 ELSE (FSENDAMOUNT / FSENDQTY) END fsendprice, FENDQTY, FENDAMOUNT, 0 fendprice, FQtyDigits FROM (SELECT FYear, FDIMID, sum(ISNULL(FRECEIVEQTY, 0)) freceiveqty, CAST(sum(ISNULL(FRECEIVEAMOUNT, 0)) AS NUMERIC(23, 10)) freceiveamount, sum(ISNULL(FSENDQTY, 0)) fsendqty, CAST(sum(ISNULL(FSENDAMOUNT, 0)) AS NUMERIC(23, 10)) fsendamount, 0 fendqty, 0 fendamount, max(FQtyDIgits) fqtydigits FROM t_UG_StockInDetailRet WHERE FRowType IN (1, 12) GROUP BY FYear, FDIMID) t

UPDATE T0 SET t0.FENDAMOUNT = t1.FENDAMOUNT, t0.FENDPRICE = t1.FENDPRICE, t0.FENDQTY = t1.FENDQTY FROM t_UG_StockInDetailRet T0, t_UG_StockInDetailRet t1 WHERE t1.frowtype = 9 AND (t0.frowtype = 11 AND t0.FYear = 2020)

UPDATE t_UG_StockInDetailRet SET FReceiveAmount = NULL, FReceiveQty = NULL, FSendAmount = NULL, FSendQty = NULL, FReceivePrice = NULL, FSendPrice = NULL WHERE frowtype = 1

MERGE INTO t_UG_StockInDetailRet t0 using(SELECT T.FID, CASE  WHEN ISNULL(T.FShowName, N’ ‘) = N’ ‘ THEN CONVERT(VARCHAR(8000), N”) ELSE LEFT(T.FShowName, (LEN(T.FShowName) – 1)) END fshowname FROM (SELECT t0.FID fid, (((CASE  WHEN ISNULL(st01_L.FNAME, N’ ‘) = ‘ ‘ THEN CONVERT(VARCHAR(8000), N”) ELSE (CONVERT(NVARCHAR(255), st01_L.FNAME) + CONVERT(VARCHAR(8000), ‘;’)) END + CASE  WHEN ISNULL(st02_L.FNAME, N’ ‘) = ‘ ‘ THEN CONVERT(VARCHAR(8000), N”) ELSE (CONVERT(NVARCHAR(255), st02_L.FNAME) + CONVERT(VARCHAR(8000), ‘;’)) END) + CASE  WHEN ISNULL(t0.FOPCODE, N’ ‘) = ‘ ‘ THEN CONVERT(VARCHAR(8000), N”) ELSE (CONVERT(NVARCHAR(255), t0.FOPCODE) + CONVERT(VARCHAR(8000), ‘;’)) END) + CONVERT(VARCHAR(8000), N”)) fshowname FROM T_BAS_FLEXVALUESDETAIL t0 LEFT OUTER JOIN T_BAS_FLEXVALUESENTRY_L st01_L ON (t0.FF100004 = st01_L.FEntryID AND st01_L.FLocaleId = 2052) LEFT OUTER JOIN T_BAS_FLEXVALUESENTRY_L st02_L ON (t0.FF100016 = st02_L.FEntryID AND st02_L.FLocaleId = 2052)) t) t1 ON (t1.FID = t0.FSTOCKPLACEID) WHEN MATCHED  THEN UPDATE SET t0.FSTOCKPLACENAME = CASE  WHEN (LEN(t1.FShowName) >= 255) THEN (LEFT(t1.FShowName, 252) + ‘…’) ELSE t1.FShowName END;

insert INTO TMPFAA6B8D1861C11EB8585F67B9D01

SELECT (CONVERT(VARCHAR(8000), FYEAR) + CASE  WHEN FPeriod = 99 THEN ‘ ‘ ELSE (‘.’ + CONVERT(VARCHAR(8000), FPeriod)) END) fperiod, FMATERIALID, FMATERIALNAME, FMATERIALGROUP, FMODEL, FLOTNO, FASSIPROPERTYID, FMATERPROPERTY, FMATERTYPE, FBOMNO, FPLANNO, FSEQUENCENO, FPROJECTNO, FOWNERID, FOWNERNAME, FSTOCKORGID, FSTOCKORGNAME, FSTOCKID, FSTOCKNAME, FSTOCKPLACEID, FSTOCKPLACENAME, FACCTGRANGEID, FACCTGRANGENAME, FBUSINESSTYPE, CONVERT(CHAR(10), FBILLDATE, 20) fbilldate, FBILLNO, FBillSeq, FRECEIVEQTY, FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, FBILLID, FBILLENTRYID,

FBILLFORMID, FDIMID, FASSIPROPNAME, FSTOCKSTATUSID, 2 fdigits, 6 fpricedigits, FQtyDigits, FInOutKey, FRowType, ROW_NUMBER() OVER( ORDER BY T.FYEAR ASC, T.FPERIOD ASC, T.FINOUTKEY ASC, T.FORDERSEQ ASC, T.FBILLDATE ASC, T.FBILLNO ASC, T.FBILLSEQ ASC, T.FISTOTAL DESC) fidentityid

FROM (SELECT FISTOTAL, FDIMID, m.FACCTGSYSTEMID, m.FACCTGORGID, m.FACCTPOLICYID, CASE  WHEN (FRowType = 9 OR FRowType = 10) THEN 2020 ELSE m.FYear END fyear, CASE  WHEN (FRowType = 9 OR FRowType = 10) THEN 12 WHEN FRowType = 11 THEN 99 ELSE m.FPeriod END fperiod, m.FMATERIALID, m.FMATERIALNAME, GROUPL.FNAME

fmaterialgroup, m.FMODEL, m.FLOTNO, m.FASSIPROPERTYID, m.FMATERPROPERTY, mt.FNAME fmatertype, bom.FNumber fbomno, FPLANNO, FSEQUENCENO, FPROJECTNO, m.FOWNERID, m.FSTOCKORGID, m.FSTOCKID, m.FSTOCKPLACEID, m.FACCTGRANGEID, unit.FNAME funitid, m.FVALUATION, FInOutKey, FRowType, CASE  WHEN FRowType = 1 THEN

N’期初结存’ WHEN FRowType = 2 THEN N’期初调整’ WHEN FRowType = 6 THEN N’期末调整’ WHEN FRowType = 8 THEN N’按单本期合计’ WHEN FRowType = 10 THEN N’合计’ WHEN FRowType = 9 THEN N’期末结存’ WHEN FRowType = 11 THEN N’本年累计’ WHEN FRowType = 5 THEN N’成本调整’ WHEN FRowType = 7 THEN N’本期小计’ ELSE bt.FNAME END fbusinesstype, m.FBILLFORMID, m.FBILLID, m.FBILLENTRYID, m.FBILLNO, m.FOrderSeq, m.FBILLSEQ fbillseq, FBILLDATE, FRECEIVEQTY, FRECEIVEPRICE, FSENDQTY, FSENDPRICE, FENDQTY, FENDPRICE, FRECEIVEAMOUNT, FSENDAMOUNT, FENDAMOUNT, asys.FNAME facctgsystemname, aorg.FNAME facctgorgname, sorg.FNAME fstockorgname, own.FNAME fownername, stock.FNAME fstockname, m.FSTOCKPLACENAME, m.FACCTGRANGENAME, unit.FNAME funitname, FASSIPROPNAME, sts.FNAME fstockstatusid, FQtyDigits FROM

t_UG_StockInDetailRet m

LEFT OUTER JOIN T_ORG_ACCOUNTSYSTEM_L asys ON (m.FACCTGSYSTEMID = asys.FACCTSYSTEMID AND asys.FLOCALEID = 2052)

LEFT OUTER JOIN T_ORG_ORGANIZATIONS_L aorg ON (m.FACCTGORGID = aorg.FORGID AND aorg.FLOCALEID = 2052)

LEFT OUTER JOIN T_ORG_ORGANIZATIONS_L sorg ON (m.FSTOCKORGID = sorg.FORGID AND sorg.FLOCALEID = 2052)

LEFT OUTER JOIN T_ORG_ORGANIZATIONS_L own ON (m.FOWNERID = own.FORGID AND own.FLOCALEID = 2052)

LEFT OUTER JOIN t_BD_Stock_L stock ON (m.FSTOCKID = stock.FSTOCKID AND stock.FLOCALEID = 2052)

LEFT OUTER JOIN T_BD_UNIT_L unit ON (m.FUNITID = unit.FUNITID AND unit.FLOCALEID = 2052)

LEFT OUTER JOIN T_BAS_BILLTYPE_L bt ON (m.FBILLTYPEID = bt.FBILLTYPEID AND bt.FLOCALEID = 2052)

LEFT OUTER JOIN T_BD_MATERIALCATEGORY_L mt ON (m.FMATERTYPE = mt.FCATEGORYID AND mt.FLOCALEID = 2052)

LEFT OUTER JOIN t_eng_bom bom ON bom.FID = m.FBOMNO

LEFT OUTER JOIN T_BD_STOCKSTATUS_L sts ON (m.FSTOCKSTATUSID = sts.FSTOCKSTATUSID AND sts.FLOCALEID = 2052)

LEFT OUTER JOIN T_BD_MATERIALGROUP_L GROUPL ON (m.FMATERIALGROUPID = GROUPL.FID AND GROUPL.FLOCALEID = 2052)) t WHERE ((((((FRowType <> 8) AND (FRowType <> 13)) AND (FRowType <> 12)) AND (FRowType <> 10)) AND (FRowType <> 11)) AND (FRowType <> 7))

delete from t_UG_StockInDetailRet

delete from T_UG_StockInDetailAdjReport

END

FETCH NEXT FROM orderNum_03_cursor INTO @FDIMEENTRYID,@FNUMBER   –移动游标

END

END

–关闭游标

CLOSE orderNum_03_cursor

–释放游标

DEALLOCATE orderNum_03_cursor

–EXEC sp_helptext ‘getCHMX’;

–EXEC getCHMX;