USE [AIS20220929093310] GO /****** Object: StoredProcedure [dbo].[P_UpdateMoFORECAST2] Script Date: 2025/1/3 2:33:38 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 阿斌 -- Create date: 2022-12-31 -- Description: 更新生产订单预测单号信息 -- ============================================= ALTER PROCEDURE [dbo].[P_UpdateMoFORECAST2] ( @FBILLNO NVARCHAR(1000) ) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- EXEC P_UpdateMoFORECAST select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',') --UPDATE A SET FBILLNO=ISNULL( cast(I.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(E.FBOMID,b.fmaterialid) as nvarchar(100)) ,'') --from T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --INNER JOIN T_PRD_MOENTRY_LK C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PLN_PLANORDER D ON D.FID=C.FSBILLID --INNER JOIN T_PLN_PLANORDER_B D_B ON D_B.FID=D.FID --INNER JOIN T_PLN_FORECASTENTRY E ON E.FENTRYID= D_B.FSALEORDERENTRYID --INNER JOIN T_PLN_PLANORDER_B F_B ON F_B.FSALEORDERENTRYID = E.FENTRYID --INNER JOIN T_PLN_PLANORDER F ON F.FID = F_B.FID AND F.FMATERIALID=E.FMATERIALID --INNER JOIN T_PRD_MOENTRY_LK G ON G.FSBILLID=F.FID --INNER JOIN T_PRD_MOENTRY H ON H .FENTRYID=G.FENTRYID --INNER JOIN T_PRD_MO I ON I.FID=H.FID --WHERE C.FSTABLENAME = 'T_PLN_PLANORDER' --AND E.FMATERIALID <> B.FMATERIALID --AND B.FFORECASTGROUP = '' --update B SET FFORECASTGROUP = concat (K.FBILLNO,'-',dbo.GetBomSeq(j.FBOMID,b.fmaterialid)) ----* --FROM T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID --INNER JOIN T_PRD_MO E ON E.FID=D.FID --INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --INNER JOIN T_PRD_MOENTRY G ON G.FID=H.FID AND G.FFORECASTGROUP = '' --INNER JOIN T_PRD_MOENTRY_Q I ON I .FSrcSplitEntryId=G.FENTRYID --INNER JOIN T_PRD_MOENTRY J ON J.FENTRYID=I.FENTRYID --INNER JOIN T_PRD_MO K ON K.FID=J.FID --WHERE B.FFORECASTGROUP= '' --更新生产订单的生产层数(拆分产生生产订单) --SELECT --REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO), --H.FBILLNO, --L.FBILLNO,* UPDATE B SET FFORECASTGROUP = REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO) FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID INNER JOIN T_PRD_MO E ON E.FID=D.FID INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --首层 INNER JOIN T_PRD_MOENTRY I ON I.FID=H.FID --首层单据体 INNER JOIN T_PRD_MOENTRY_Q J ON J.FSRCSPLITENTRYID=I.FENTRYID INNER JOIN T_PRD_MOENTRY K ON K.FENTRYID=J.FENTRYID INNER JOIN T_PRD_MO L ON L.FID=K.FID AND SUBSTRING(L.FBILLNO, CHARINDEX('-',L.FBILLNO)+1,LEN(L.FBILLNO)) = SUBSTRING(A.FBILLNO, CHARINDEX('-',A.FBILLNO)+1,LEN(A.FBILLNO)) INNER JOIN #temp2 m on m.Fname=a.FBILLNO WHERE 1=1 AND B.FFORECASTGROUP = '' --AND A.FBILLNO =@FBILLNO --update B SET FFORECASTGROUP = concat (K.FBILLNO,'-',dbo.GetBomSeq(j.FBOMID,b.fmaterialid)) --FROM T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID --INNER JOIN T_PRD_MO E ON E.FID=D.FID --INNER JOIN T_PRD_MOENTRY_LK F ON F.FENTRYID=D.FENTRYID --INNER JOIN T_PRD_MOENTRY G ON G.FENTRYID=F.FSID AND G.FID=F.FSBILLID --INNER JOIN T_PRD_MO H ON H.FID=G.FID --INNER JOIN T_PRD_MOENTRY_Q I ON I .FSrcSplitEntryId=G.FENTRYID --INNER JOIN T_PRD_MOENTRY J ON J.FENTRYID=I.FENTRYID AND J.FFORECASTGROUP ='' --INNER JOIN T_PRD_MO K ON K.FID=J.FID --WHERE B.FFORECASTGROUP = '' --更新计划订单的生产层数 --select 1, E.FSTABLENAME ----A.FID,A.F_WAUG_LAYER, ----dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '层数', ----A.FCREATEDATE, ----A.FMATERIALID,G.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER ----,A.F_LINENUMBER,A.F_MATERIALCODE,a.FBILLNO as '1',G.FBILLNO as '订单号' --from T_PLN_PLANORDER A --INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID --INNER JOIN T_PRD_MO C ON C.FBILLNO=B.FSALEORDERNO --INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FID --INNER JOIN T_PRD_MOENTRY_LK E ON E.FENTRYID=D.FENTRYID AND E.FSTABLENAME = 'T_PLN_PLANORDER' ----INNER JOIN T_PLN_PLANORDER F ON F.FID = E.FSBILLID ----INNER JOIN T_PLN_PLANORDER G ON G.F_FORECASTNUMBER=F.F_FORECASTNUMBER ----AND G.F_LINENUMBER=F.F_LINENUMBER AND F.F_MATERIALCODE =G.FMATERIALID --WHERE a.F_WAUG_LAYER = '' --AND A.FBILLNO = 'MRP00490390' --更新生产订单的生产层数(由预测单跑Mrp带出计划订单) -- UPdate b set B.FFORECASTGROUP = isnull( dbo.getmobomseq( F.FENTRYID,dbo.GetBomSeq( f.FBOMID,b.FMATERIALID)) ,'') --from T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --INNER JOIN T_PRD_MOENTRY_LK C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PLN_PLANORDER D ON D.FID=C.FSBILLID --INNER JOIN T_PLN_PLANORDER_B E ON E.FID=D.FID --INNER JOIN T_PLN_FORECASTENTRY F ON F.FENTRYID=E.FSALEORDERENTRYID --INNER JOIN T_PLN_FORECAST G ON G.FID=F.FID --WHERE B.FFORECASTGROUP='' --UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER = --CASE WHEN B.层数 IS NULL THEN 订单号 ELSE CONCAT(订单号,'-',层数) END -- from T_PLN_PLANORDER A -- INNER JOIN --( --select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '层数', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '订单号' from T_PLN_PLANORDER A --INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID --INNER JOIN T_PRD_MOENTRY_LK C ON B.FID=C.FSBILLID --INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID = C.FENTRYID --INNER JOIN T_PRD_MO E ON E.FID = D.FID ----INNER JOIN #temp2 i on i.Fname=a.FBILLNO --WHERE a.F_WAUG_LAYER = '' --) B ON A.FID = B.FID --2024-01-15 阿斌修改 ,使用骏愉存储过程 --UPDATE B SET FFORECASTGROUP = REPLACE( D.F_WAUG_LAYER,e.FBILLNO,h.FBILLNO) --from T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --INNER JOIN T_PRD_MOENTRY_LK C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PLN_PLANORDER D ON D.FID=C.FSBILLID --INNER JOIN T_PLN_PLANORDER E ON E.FBILLNO = substring( D.F_WAUG_LAYER,0, CHARINDEX( '-',REPLACE( D.F_WAUG_LAYER,'_','-') ,0)) --INNER JOIN T_PRD_MOENTRY_LK F ON F.FSBILLID=E.FID --INNER JOIN T_PRD_MOENTRY G ON G.FENTRYID=F.FENTRYID --INNER JOIN T_PRD_MO h ON H.FID=G.FID --INNER JOIN #temp2 i on i.Fname=a.FBILLNO --WHERE B.FFORECASTGROUP='' --AND A.FBILLNO =@FBILLNO --2024-01-15 阿斌修改 ,使用骏愉存储过程 exec PROC_SELECT_UPDATE_BOMLEVEL@FBILLNO ----更新生产订单的生产层数(由预测单跑Mrp带出计划订单) -- UPdate b set B.FFORECASTGROUP = dbo.getmobomseq( F.FENTRYID,dbo.GetBomSeq( f.FBOMID,b.FMATERIALID)) --from T_SUB_REQORDER A --INNER JOIN T_SUB_REQORDERENTRY B ON A.FID=B.FID --INNER JOIN T_SUB_REQORDERENTRY_LK C ON C.FENTRYID=B.FENTRYID --INNER JOIN T_PLN_PLANORDER D ON D.FID=C.FSBILLID --INNER JOIN T_PLN_PLANORDER_B E ON E.FID=D.FID --INNER JOIN T_PLN_FORECASTENTRY F ON F.FENTRYID=E.FSALEORDERENTRYID --INNER JOIN T_PLN_FORECAST G ON G.FID=F.FID --WHERE B.FFORECASTGROUP='' --更新生产订单的生产层数(由生产订单生产下游订单生成) UPDATE B SET FFORECASTGROUP = ISNULL( cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) ,'') --SELECT --F.FNUMBER, --a.FBILLNO, --B.FENTRYID , --D.fbomid,b.fmaterialid, --cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) as 'Bom项次', --CONVERT( nvarchar(1000),'') as '上游单据',a.FBILLNO as '上游生产订单',e.FBILLNO as '源头生产订单' FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_LK C ON C .FENTRYID=B.FENTRYID INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FSBILLID AND D.FENTRYID=C.FSID INNER JOIN T_PRD_MO E ON E.FID=D.FID INNER JOIN T_BD_MATERIAL F ON F.FMATERIALID=B.FMATERIALID INNER JOIN #temp2 g on g.Fname=a.FBILLNO WHERE B.FFORECASTGROUP = '' --AND A.FBILLNO =@FBILLNO --2024-01-23 18:14 梁骏愉修改start-- ----更新生产订单(生产订单没有上游单据,为他的单据编号) --UPDATE B SET FFORECASTGROUP = A.FBILLNO ----SELECT * --FROM T_PRD_MO A --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID --LEFT JOIN T_PRD_MOENTRY_LK D ON D.FENTRYID=B.FENTRYID AND D.FSTABLENAME = 'T_PRD_MOENTRY' --INNER JOIN #temp2 f on f.Fname=a.FBILLNO --WHERE --1=1 --AND D.FSID IS NULL --AND B.FFORECASTGROUP = '' ----AND A.FBILLNO =@FBILLNO --2024-01-23 18:14 梁骏愉修改end-- --2024-01-23 18:14 梁骏愉添加start-- UPDATE B SET FFORECASTGROUP = A.FBILLNO --SELECT A.FBILLNO FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_A t0e_a on B.FENTRYID = t0e_a.FENTRYID INNER JOIN #temp2 f on f.Fname=a.FBILLNO WHERE 1=1 AND B.FFORECASTGROUP = '' AND t0e_a.FCREATETYPE != 3 --AND B.FFORECASTGROUPFRIST != '无顶层' AND NOT EXISTS ( SELECT 1 FROM T_PRD_MOENTRY_LK t1_lk WHERE 1=1 AND t1_lk.FSTABLENAME = 'T_PRD_MOENTRY' AND t1_lk.FENTRYID = B.FENTRYID) --2024-01-23 18:14 梁骏愉添加end-- --将系统标准的备注字段更新到备注2字段 UPDATE B SET FNOTE2=c.FMEMO FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_L C ON C.FENTRYID=B.FENTRYID INNER JOIN #temp2 f on f.Fname=a.FBILLNO --where FNOTE2 = '' --AND A.FBILLNO =@FBILLNO --拆单获取原单备注 UPDATE B SET FNOTE2 = D.FNOTE2 FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID INNER JOIN #temp2 f on f.Fname=a.FBILLNO --where A.FBILLNO = 'WO2301050101' WHERE B.FNOTE2= '' --AND A.FBILLNO =@FBILLNO --将上游单据的生产订单的备注带到下级生产订单的备注 --UPDATE D SET D.FNOTE2 = B.FNOTE2 --SELECT a.FBILLNO,b.FNOTE2,c.FBILLNO ,d.FNOTE2 UPDATE B SET FNOTE2 = D.FNOTE2 FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MO C ON C.FBILLNO= B.FFORECASTGROUPFRIST INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FID INNER JOIN #temp2 f on f.Fname=a.FBILLNO --where A.FBILLNO = 'WO2301050101' where B.FNOTE2= '' AND A.FBILLNO <> B.FFORECASTGROUPFRIST -- AND A.FBILLNO =@FBILLNO --更新生产用料清单的生产层数 UPDATE T_PRD_PPBOMENTRY SET FFORECASTGROUP= c.FFORECASTGROUP FROM T_PRD_PPBOM A INNER JOIN T_PRD_PPBOMENTRY D ON A.FID=D.FID INNER JOIN T_PRD_MO B ON B.FBILLNO=A.FMOBillNO INNER JOIN T_PRD_MOENTRY C ON C.FID=B.FID INNER JOIN #temp2 f on f.Fname=a.FMOBILLNO WHERE 1=1 AND LTRIM(RTRIM(d.FFORECASTGROUP)) = '' --AND A.FMOBILLNO =@FBILLNO UPDATE A SET FINVSTOCKQTY=B.FBASEQTY FROM T_PRD_MOENTRY A INNER JOIN ( SELECT B.FMATERIALID,SUM(FBASEQTY) AS 'FBASEQTY' FROM T_STK_INVENTORY A INNER JOIN T_BD_MATERIAL B ON A.FMATERIALID=B.FMASTERID WHERE A.FISEFFECTIVED=1 GROUP BY B.FMATERIALID ) B ON A.FMATERIALID=B.FMATERIALID INNER JOIN t_prd_mo c on c.fid=a.fid INNER JOIN #temp2 f on f.Fname=c.FBILLNO WHERE FINVSTOCKQTY = 0 --AND c.FBILLNO =@FBILLNO --更新生产订单的首层订单号 update a set FFORECASTGROUPFRIST = CASE WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) = 0 THEN FFORECASTGROUP WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID=0 THEN SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',1)) WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID>0 AND SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) IS NULL THEN FFORECASTGROUP ELSE SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) END FROM T_PRD_MOENTRY A INNER JOIN T_PRD_MOENTRY_Q B ON A.FENTRYID=B.FENTRYID INNER JOIN T_PRD_MO c on c.fid =a.fid INNER JOIN #temp2 f on f.Fname=c.FBILLNO WHERE 1=1 AND FFORECASTGROUPFRIST= '' --AND c.FBILLNO =@FBILLNO --更新生产用料清单的首层订单号 update T_PRD_PPBOMENTRY SET FFORECASTGROUPFRIST = CASE WHEN CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0) = 0 THEN A.FFORECASTGROUP ELSE SUBSTRING(A.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0)) END FROM T_PRD_PPBOMENTRY a INNER JOIN T_PRD_PPBOM b on a.fid=b.fid INNER JOIN #temp2 f on f.Fname=b.FMOBILLNO WHERE FFORECASTGROUPFRIST= '' --and b.FMOBILLNO = @FBILLNO --生产订单的客户带到下级生产订单的客户(生成下级子工单) UPDATE E SET E.F_PKGR_CUSTOMER= A.F_PKGR_CUSTOMER --SELECT * --D.FNOTE2, --B.FNOTE2,* FROM T_PRD_MO A INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID INNER JOIN T_PRD_MOENTRY_LK C ON C.FSID=B.FENTRYID AND C.FSBILLID=B.FID INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FENTRYID INNER JOIN T_PRD_MO E ON E.FID=D.FID INNER JOIN #temp2 f on f.Fname=a.FBILLNO --where A.FBILLNO = 'TO2305300002' AND ISNULL(E.F_PKGR_CUSTOMER,0)= 0 and E.F_PKGR_CUSTOMER<>A.F_PKGR_CUSTOMER --更新生产用料清单的单位用量 --SELECT FNUMERATOR,FDENOMINATOR, --ROUND(FNUMERATOR/FDENOMINATOR,3), F_PKGR_CONSUMPTION, --* update T_PRD_PPBOMENTRY set FBomStdQty = ROUND(FNUMERATOR/FDENOMINATOR,3) FROM T_PRD_PPBOMENTRY a INNER JOIN T_PRD_PPBOM b on a.fid=b.fid INNER JOIN #temp2 c on c.Fname=b.FMOBILLNO WHERE FBomStdQty = 0 --and b.FMOBILLNO = @FBILLNO drop table #temp2 END