Files
GateDge2023_ljy/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/英博尔测试20240220.sql
PastSaid 912bea60ac 1
2024-03-28 11:30:14 +08:00

245 lines
15 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 1814 梁骏愉修改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 1814 梁骏愉修改end--
--2024-01-23 1814 梁骏愉添加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 1814 梁骏愉添加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