declare @FBILLNO NVARCHAR(1000) set @FBILLNO = 'WO2402200045,WO2402200046,WO2402200047' select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',') /*********************************拆分订单更新生产层数start*****************************************/ --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 = '' UPDATE t0e SET t0e.FFORECASTGROUP = REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO) --SELECT REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO) FROM T_PRD_MO t0 INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID INNER JOIN T_PRD_MOENTRY_Q t0e_q on t0e_q.FENTRYID = t0e.FENTRYID INNER JOIN T_PRD_MOENTRY t1e on t1e.FENTRYID = t0e_q.FSRCSPLITENTRYID INNER JOIN T_PRD_MO t2 on t2.FBILLNO = t1e.FFORECASTGROUPFRIST INNER JOIN T_PRD_MOENTRY t2e on t2e.FID = t2.FID INNER JOIN T_PRD_MOENTRY_Q t3e_q on t3e_q.FSRCSPLITENTRYID = t2e.FENTRYID INNER JOIN T_PRD_MOENTRY t3e on t3e.FENTRYID = t3e_q.FENTRYID INNER JOIN T_PRD_MO t3 on t3.FID = t3e.FID AND SUBSTRING(t3.FBILLNO, CHARINDEX('-',t3.FBILLNO)+1,LEN(t3.FBILLNO)) = SUBSTRING(t0.FBILLNO, CHARINDEX('-',t0.FBILLNO)+1,LEN(t0.FBILLNO)) WHERE 1=1 AND t0e.FFORECASTGROUP = '' /*********************************拆分订单更新生产层数end*****************************************/ --2024-01-15 阿斌修改 ,使用骏愉存储过程 exec PROC_SELECT_UPDATE_BOMLEVEL @FBILLNO --更新生产订单的生产层数(由生产订单生产下游订单生成) 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 D 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 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 a.FBILLNO = 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 --WHERE B.FFORECASTGROUP = '' --更新生产订单的首层订单号 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