2024-03-04 16:50:20 +08:00
IF EXISTS ( SELECT * FROM SYS . PROCEDURES WHERE NAME = ' PROC_SELECT_UPDATE_BOMLEVEL ' )
DROP PROCEDURE dbo . PROC_SELECT_UPDATE_BOMLEVEL ;
GO
CREATE PROCEDURE PROC_SELECT_UPDATE_BOMLEVEL
2024-03-28 11:30:14 +08:00
@ billnoStr nvarchar ( 8000 )
2024-03-04 16:50:20 +08:00
AS
BEGIN
CREATE TABLE #TMP_MO --<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> #TMP
(
FID INT
, FBILLNO VARCHAR ( 255 )
, FDATE DATE
, FENTRYID INT
, FMATERIALID INT
, OMATERAILID int
, MOBOMID INT
, FSRCFORMID VARCHAR ( 255 )
, FSRCBILLNO VARCHAR ( 255 )
, FSRCINTERID INT
, FSRCENTRYID INT
, FSEQ INT
, FBOMID INT
, BOMLEVEL VARCHAR ( 255 )
, TOPBILLNO VARCHAR ( 255 )
, FFORECASTGROUP varchar ( 255 )
) ;
CREATE INDEX [ #TMP_MO_FID] ON #TMP_MO(FID);
- - INSERT INTO #TMP_MO
/* <EFBFBD> ƻ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> Ͷ<EFBFBD> ţ<EFBFBD> T_PLN_RESERVELINKENTRY<EFBFBD> <EFBFBD> <EFBFBD> ƻ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ת<EFBFBD> Ƶ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
SELECT
t0e . FID
, t0 . FBILLNO
, t0 . FDATE
, t0e . FENTRYID
, t0e . FMATERIALID
, t0e . FBomId MOBomId
, t1 . FSRCFORMID - - ' <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '
, t1 . FSRCBILLNO - - ' <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '
, t1 . FSRCINTERID /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
, t1 . FSRCENTRYID /* <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> ֵ һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ
, t2e . FSEQ
, t2e . FBomId /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԥ<EFBFBD> ⶩ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> FBomIdȡƥ<EFBFBD> <EFBFBD> BOM<EFBFBD> ༶չ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ײ<EFBFBD> <EFBFBD> <EFBFBD> */
, t2e . FMATERIALID OMATERAILID
, t0e . FFORECASTGROUP
- - , t0_lk . FSTABLENAME
- - , t0_lk . FSTABLEID
- - , t0_lk . FSBILLID
, t0_lk . FSID
, t0e_Q . FSRCSPLITID
, ' ' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 - - <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e . FID = t0 . FID - - <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e . FENTRYID = t0e_Q . FENTRYID
INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e . FENTRYID = t0_lk . FENTRYID
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e . FINTSUPPLYID = t0e . FID AND t1e . FINTSUPPLYENTRYID = t0e . FENTRYID - - Ԥ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1 . FID = t1e . FID AND t1 . FSRCFORMID = ' PLN_FORECAST ' - - Ԥ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e . FID = t1 . FSRCINTERID AND t2e . FENTRYID = t1 . FSRCENTRYID - - Ԥ <EFBFBD> ⵥ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
WHERE 1 = 1
- - t0 . FBILLNO = ' WO2401100002 ' /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
AND t0e . FFORECASTGROUP = ' ' /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <EFBFBD> */
- - AND t0e . FFORECASTGROUPFRIST = ' WO2312270043 '
AND t0e . FSRCBILLTYPE = ' PLN_PLANORDER ' /* ȷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <EFBFBD> MRP<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƶĵ<EFBFBD> <EFBFBD> <EFBFBD> */
AND t0e_Q . FSRCSPLITID = 0
AND t0 . FBILLNO in ( SELECT b . billno FROM ( SELECT CAST ( ' <v> ' + REPLACE ( @ billnoStr , ' , ' , ' </v><v> ' ) + ' </v> ' AS xml ) billno ) a OUTER APPLY ( SELECT T . C . value ( ' . ' , ' varchar(50) ' ) billno FROM a . billno . nodes ( ' /v ' ) AS T ( C ) ) b ) - - <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų <EFBFBD> <EFBFBD> <EFBFBD>
INSERT INTO #TMP_MO
SELECT
tt . FID
, tt . FBILLNO
, tt . FDATE
, tt . FENTRYID
, tt . FMATERIALID
, tt . OMATERAILID
, tt . MOBomId
, tt . FSRCFORMID - - ' <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '
, tt . FSRCBILLNO - - ' <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '
, tt . FSRCINTERID /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
, tt . FSRCENTRYID /* <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> ֵ һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ
, tt . FSEQ
, tt . FBomId /* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԥ<EFBFBD> ⶩ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> FBomIdȡƥ<EFBFBD> <EFBFBD> BOM<EFBFBD> ༶չ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ײ<EFBFBD> <EFBFBD> <EFBFBD> */
, tt . BOMLevel
, t0 . FBILLNO
, tt . FFORECASTGROUP
- - into #TMP_MO
FROM
#TMP_MO_PART tt
INNER JOIN (
SELECT
FID , MOBomId , FBOMID , FSEQ , FSRCINTERID , FSRCENTRYID , FBILLNO , FDATE , len ( FBILLNO ) Billnolen , OMATERAILID , FMATERIALID , FSID
, ROW_NUMBER ( ) over ( partition BY MOBomId , FBOMID , FSEQ , FSRCINTERID , FSRCENTRYID , FDATE , len ( FBILLNO ) , OMATERAILID , FMATERIALID order by FBILLNO ) ROWID
FROM
#TMP_MO_PART
WHERE FMATERIALID = OMATERAILID
) t0 ON 1 = 1
AND tt . FBOMID = t0 . FBOMID
AND tt . FSEQ = t0 . FSEQ
AND tt . FSRCINTERID = t0 . FSRCINTERID
AND tt . FSRCENTRYID = t0 . FSRCENTRYID
AND tt . FDATE = t0 . FDATE
- - AND t0 . ROWID = 1
AND tt . OMATERAILID = t0 . FMATERIALID
AND t0 . Billnolen = len ( tt . FBILLNO )
- - AND tt . fsid = t0 . FSID
WHERE 1 = 1
- - AND tt . FFORECASTGROUP = ' '
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
, FNUMBER varchar ( 80 )
, FMATERIALID int
, FSEQ int
, BOMLEVEL int
, TOPID int
, showlevel varchar ( 80 )
, oId int
)
CREATE INDEX [ #TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0 . FID
, t0 . FNUMBER
, t0 . FMATERIALID
, ROW_NUMBER ( ) over ( partition BY t0 . FID order by t0 . fid )
, 1 ' BOMLEVEL '
, t0 . FID AS ' TOPID '
, ' '
, t0 . FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND t3 . FMATERIALID = t3 . OMATERAILID
GROUP BY
t0 . FID
, t0 . FNUMBER
, t0 . FMATERIALID
DECLARE @ num INT , @ level int , @ LoopCount int
SET @ num = 1
SET @ level = 1
SET @ LoopCount = 0 ;
WHILE ( @ num < > 0 AND @ LoopCount < 30 )
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3 . FID
, t3 . FNUMBER
, t3 . FMATERIALID
, ROW_NUMBER ( ) over ( partition BY t0 . TOPID , t0 . oid order by t0 . fseq )
, t0 . BOMLEVEL + 1
, t0 . TOPID
, CONCAT ( t0 . showlevel , ' - ' , CAST ( dense_rank ( ) over ( partition BY t0 . topid , t0 . oid , t0 . fid order by t1 . fseq ) as VARCHAR ) )
, t0 . FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0 . FID = t1 . FID
INNER JOIN T_BD_MATERIALBASE t2 on t2 . FMATERIALID = t1 . FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1 . FMATERIALID = t3 . FMATERIALID
WHERE 1 = 1
AND ( t2 . FERPCLSID = 2 OR t2 . FERPCLSID = 5 )
AND t0 . BOMLEVEL = @ level
SET @ num = @ @ ROWCOUNT
SET @ level + = 1
SET @ LoopCount + = 1
END
SELECT
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID , FNUMBER , FMATERIALID , FSEQ , BOMLEVEL , TOPID , showlevel , oId
SELECT FID , FBILLNO , FENTRYID , FDATE , FMATERIALID , OMATERAILID , MOBOMID , FSRCENTRYID , FSRCINTERID , FSEQ , FBOMID , TOPBILLNO , BOMLEVEL , FFORECASTGROUP
INTO #TMP_MO_GROUP
FROM #TMP_MO
GROUP BY FID , FBILLNO , FENTRYID , FDATE , FMATERIALID , OMATERAILID , MOBOMID , FSRCENTRYID , FSRCINTERID , FSEQ , FBOMID , TOPBILLNO , BOMLEVEL , FFORECASTGROUP
- - <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
UPDATE t0 SET t0 . BOMLEVEL = ISNULL ( t0 . TOPBILLNO , ' ' ) + ISNULL ( t1 . showlevel , ' ' )
FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
- - - - <EFBFBD> <EFBFBD> <EFBFBD> µ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݿ <EFBFBD>
- - UPDATE t0e SET t0e . FFORECASTGROUP = t1 . BOMLEVEL , t0e . FFORECASTGROUPFRIST = t1 . TOPBILLNO
- - FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
- - SELECT t0 . * , t1 . fnumber
- - FROM #TMP_TOP_BOM_GROUP t0
- - INNER JOIN T_BD_MATERIAL t1 on t0 . fmaterialid = t1 . fmaterialid
- - - - WHERE t0 . TOPID = 8062230
- - order by t0 . FSEQ , t0 . BOMLEVEL
- - SELECT t0 . * , t1 . FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'<27> <>
- - SELECT t0 . *
-- ,t0_lk.FSTABLENAME
-- ,t0_lk.FSTABLEID
-- ,t0_lk.FSBILLID
-- ,t0_lk.FSID
-- ,t0e_Q.FSRCSPLITBILLNO
-- ,t0e_Q.FSRCSPLITID
-- ,t0e_Q.FSRCSPLITSEQ
-- ,t0e_Q.FSRCSPLITENTRYID
-- --INTO #TMP_MO_PART
-- FROM #TMP_MO_GROUP t0
-- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
-- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
-- WHERE 1 = 1
- - AND FBOMID = 8237478 AND MOBOMID = 8237478
- - AND topbillno = ' WO2311080183 '
- - SELECT * FROM #TMP_MO WHERE 1 = 1
- - AND FBOMID < > MOBOMID
- - AND FBOMID = 6339745 - - AND topbillno = ' WO2308090009 ' - - <EFBFBD> <EFBFBD> ѯ <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
DROP TABLE #TMP_MO_GROUP
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<> <C9BE> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> #TMP
END
- - SET STATISTICS TIME ON
- - EXEC PROC_UPDATE_BOMLEVEL
- - SET STATISTICS TIME OFF