Files
GateDge2023_ljy/03.珠海市汇威精密制造有限公司/HW.PythonPlugIn/ProductionMaterialsReport/sql/新BOM层级库存状态.sql

281 lines
7.5 KiB
MySQL
Raw Normal View History

2024-03-04 16:50:20 +08:00
declare
@moBillNo varchar(100)
,@salesBillNo varchar(100)
,@startMaterialId int
,@endMaterialId int
2024-03-11 09:04:46 +08:00
,@FSDate varchar (30)
,@FEDate varchar (30)
,@FSNumber varchar (50)
,@FENumber varchar (50)
,@FSStock varchar (max)
2024-03-04 16:50:20 +08:00
SET @moBillNo =''
SET @salesBillNo =''
SET @moBillNo = 0
SET @moBillNo = 0
2024-03-11 09:04:46 +08:00
SET @FSDate = '2024-01-05'
SET @FEDate = '2024-02-05'
SET @FSNumber = '1.01'
SET @FENumber = '1.01'
--SET @FSNumber = 'TSH182H000208O'
--SET @FENumber = 'TSH182H000208O'
SET @FSStock =''
2024-03-04 16:50:20 +08:00
declare @FCloseBALDate varchar (30)
declare @FClosedate varchar (30)
--<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ĩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
If NOT Exists(
SELECT FORGID, MAX(FCLOSEDATE) fclosedate
FROM T_STK_CLOSEPROFILE
WHERE FORGID IN (1) AND FCATEGORY = 'STK' AND (FCLOSEDATE < @FSDate)
GROUP BY FORGID)
BEGIN
SET @FClosedate='2020-01-01'
SET @FCloseBALDate='2020-01-01'
--print @FClosedate
END
ELSE
BEGIN
--SET @FClosedate='2019-07-01'
SELECT @FClosedate= CONVERT(varchar (30), DATEADD(D, 1,MAX(FCLOSEDATE)),23) FROM
T_STK_CLOSEPROFILE WHERE ((FORGID IN (1) AND FCATEGORY = 'STK') AND (FCLOSEDATE < @FSDate)) GROUP BY FORGID
SET @FCloseBALDate=CONVERT(varchar (30), DATEADD(D, -1,@FClosedate),23)
--print @FClosedat
END
2024-03-11 09:04:46 +08:00
DECLARE @FSWL varchar (50)
DECLARE @FEWL varchar (50)
SET @FSWL=''
SET @FEWL=''
IF @FSNumber<>'' and @FENumber<>''
BEGIN
SET @FSWL= @FSNumber
SET @FEWL= @FENumber
END
IF @FSNumber<>'' and @FENumber=''
BEGIN
SET @FSWL= @FSNumber
SELECT @FEWL=MAX(FNUMBER) FROM T_BD_MATERIAL
END
IF @FSNumber='' and @FENumber<>''
BEGIN
SET @FEWL= @FENumber
SELECT @FSWL=MIN(FNUMBER) FROM T_BD_MATERIAL
END
IF @FSNumber='' and @FENumber=''
BEGIN
SELECT @FSWL=MIN(FNUMBER) FROM T_BD_MATERIAL
SELECT @FEWL=MAX(FNUMBER) FROM T_BD_MATERIAL
END
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱѡȡ<EFBFBD>ֿ<EFBFBD>
IF EXISTS(select * FROM tempdb..SYSOBJECTS WHERE id=OBJECT_ID('tempdb..#tmpStockID'))
BEGIN
DROP TABLE #tmpStockID
print '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
END
Create Table #tmpStockID (
FID INT IDENTITY(1,1)
,FStockID INT
)
DECLARE @Strsql varchar(max)
SET @Strsql= 'insert into #tmpStockID select distinct FSTOCKID from T_BD_STOCK where 1=1 ' +@FSStock
EXEC(@Strsql)
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Stock_Status_temp'))
begin
drop table #Stock_Status_temp
print '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
end
Create Table #Stock_Status_temp (
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> INT IDENTITY(1,1),
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> INT ,
<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD> varchar(100) null ,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar(255) null ,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD> varchar(255) null ,
<EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD> varchar(100) null ,
--<EFBFBD><EFBFBD>λ varchar(30) null ,
<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD>ڲɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD>ĩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD>;<EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD>۳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD>δת<EFBFBD><EFBFBD> DECIMAL (18, 2) Null,
<EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD> DECIMAL (18, 2) Null ,
<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> INT ,
<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar(100) null ,
<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar(255) null ,
<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> INT ,
<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ʽ varchar(255) null
)
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TMP'))
begin
drop table #TMP
print '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
end
CREATE TABLE #TMP (
FID INT IDENTITY(1,1),
FSTOCKORGID INT NOT NULL DEFAULT 0,
FBILLENTRYID INT NOT NULL DEFAULT 0,
FORDERBY INT NOT NULL DEFAULT 0,
FSTOCKIO CHAR (1) NULL,
FMATERIALID INT NOT NULL DEFAULT 0,
FAUXPROPID INT NOT NULL DEFAULT 0,
FDATE DATETIME NULL,
FSTOCKID INT NOT NULL DEFAULT 0,
FSTOCKLOCID INT NOT NULL DEFAULT 0,
FSTOCKSTATUSID INT NOT NULL DEFAULT 0,
FBILLNAME NVARCHAR (100) NULL,
FBILLID INT NOT NULL DEFAULT 0,
FBILLSEQID INT NULL,
FBILLNO NVARCHAR (100) NULL,
FBASEQCQTY DECIMAL (23, 10) NOT NULL DEFAULT 0,
FBASEINQTY DECIMAL (23, 10) NOT NULL DEFAULT 0,
FBASEOUTQTY DECIMAL (23, 10) NOT NULL DEFAULT 0
)
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>BOM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID=OBJECT_ID('TEMPDB..#YC_T_MRP'))
BEGIN
DROP TABLE #YC_T_MRP
END
CREATE TABLE #YC_T_MRP(
FID INT IDENTITY(1,1),
FBOMNumber NVARCHAR(255),
FMATERIALID INT,
<EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD> NVARCHAR(255),
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NVARCHAR(255),
<EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD> DECIMAL(28,10) DEFAULT (0),
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DECIMAL(28,10),--BOM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ĸ DECIMAL(28,10),--BOM<EFBFBD><EFBFBD>ĸ
FQty DECIMAL(28,10),--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FLevle INT ,
FERPCLSID INT,
FOrderNum NVARCHAR(255),
FBOMID INT,
BOM<EFBFBD> NVARCHAR(200) NULL,
FSEQ1 INT,
FSEQ2 INT,
FSEQ3 INT,
FSEQ4 INT,
FSEQ5 INT,
FSEQ6 INT,
FParentNumber NVARCHAR(255)
)
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID=OBJECT_ID('TEMPDB..#BOMTMP'))
BEGIN
DROP TABLE #BOMTMP
END
/*ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>BOM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
SELECT
ID=IDENTITY(INT,1,1)
,T0.FID
,T0.FNUMBER
,T0.FMATERIALID
,ROW_NUMBER() OVER(PARTITION BY T0.FMATERIALID ORDER BY t0.FID DESC) AS ROWID
INTO #BOMTmp
FROM T_ENG_BOM T0
INNER JOIN T_BD_MATERIAL TM ON t0.FMATERIALID=TM.FMATERIALID --<EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
WHERE (t0.FDOCUMENTSTATUS = 'C') and (t0.FFORBIDSTATUS='A')
AND (TM.FNUMBER >= @FSWL AND TM.FNUMBER <=@FEWL)
ORDER BY FMATERIALID,FNUMBER
--/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°汾<EFBFBD><EFBFBD>BOM*/
--DELETE FROM #BOMTmp WHERE id NOT IN (SELECT max(id) FROM #BOMTmp GROUP BY FMATERIALID)
DELETE FROM #BOMTmp WHERE ROWID > 1
IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID=OBJECT_ID('TEMPDB..#TMP_TOP_BOM_SET'))
BEGIN
DROP TABLE #TMP_TOP_BOM_SET
END
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,BOMID int
,FERPCLSID int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t1.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID AS 'BOMID'
,t2.FERPCLSID
FROM T_ENG_BOM t0
INNER JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID
LEFT OUTER JOIN t_BD_MaterialBase t2 ON t1.FMATERIALID = t2.FMATERIALID
INNER JOIN #BOMTmp t3 on t3.FNUMBER = t0.FNUMBER AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND (t0.FDOCUMENTSTATUS = 'C')
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num > 0 AND @LoopCount < 10)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t2.FNUMBER
,t1.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID,t0.bomid order by t0.fseq) 'FSEQ'
,@level + 1 AS 'BOMLEVEL'
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.bomid,t0.fid order by t1.fseq) as VARCHAR)) 'showLevel'
,0 'OID'
,t4.FERPCLSID
FROM
#TMP_TOP_BOM_SET t0
LEFT JOIN T_ENG_BOMCHILD t1 on t0.BOMID = t1.FID
INNER JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t1.FMATERIALID
LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t1.FMATERIALID AND t1_l.FLOCALEID = 2052
LEFT JOIN T_ENG_BOM t3 on t1.FID = t3.FID--t1.FMATERIALID = t3.FMATERIALID
LEFT JOIN T_BD_MATERIALBASE t4 on t4.FMATERIALID = t1.FMATERIALID
WHERE 1 = 1
--AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
AND t0.FERPCLSID >= 2
AND t0.BOMLEVEL = @level
AND t3.FDOCUMENTSTATUS = 'C'
AND t2.FFORBIDSTATUS = 'A'
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT * FROM #TMP_TOP_BOM_SET