This commit is contained in:
PastSaid
2024-12-05 15:39:19 +08:00
parent 5472714e30
commit 9725ab5376
128 changed files with 46381 additions and 69 deletions

View File

@@ -0,0 +1,186 @@
USE [MESAPI_V2]
GO
/****** Object: StoredProcedure [dbo].[rb_GetMergePPBOMKeyMartQty] Script Date: 2024/9/23 15:53:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <<3C>ֱȣ<D6B1>XPS>
-- Create date: <20230130>
-- Last date: <20230915>
-- Description: <<3C>û<EFBFBD>ȡ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B5A5>ͬ<EFBFBD><CDAC><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>>
-- =============================================
ALTER PROCEDURE [dbo].[rb_GetMergePPBOMKeyMartQty]
@MO varchar(255),@MOSeq INT,@allmart bit=1,@OrgID INT=1
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
/*-----------------------------------------------------------------------------------------------------------------------*/
CREATE TABLE #MATERGROUP(
INDEXID INT IDENTITY(1,1)
,FID INT
,FENTRYID INT PRIMARY KEY
,FSEQ INT
,FMATERIALID INT
,FQTY DECIMAL(38,10)
,FBASEQTY DECIMAL(38,10)
,FNUMERATOR INT DEFAULT 1
,FDENOMINATOR INT DEFAULT 1
,FPOSITIONNO NVARCHAR(4000)
)
INSERT INTO #matergroup(FID,FENTRYID,FMATERIALID,FSeq,FQTY,FBaseQTY,FPositionNO)
SELECT t1.FID,t1.FENTRYID,FMATERIALID,FSEQ,FMUSTQTY,FBASEMUSTQTY,FPositionNO
FROM T_PRD_PPBOMENTRY t1
INNER JOIN T_PRD_PPBOMENTRY_C tc ON tc.FID = t1.FID AND tc.FENTRYID = t1.FENTRYID AND tc.FSUPPLYORG= @OrgID
WHERE t1.FMOBILLNO = @MO AND FMOENTRYSEQ = @MOSeq AND FMATERIALTYPE = 1
AND FMUSTQTY > CASE @allmart WHEN 0 THEN -1 ELSE 0 END
AND T1.FMATERIALID IN (
SELECT FMATERIALID FROM T_PRD_PPBOMENTRY
WHERE FID=t1.FID AND FMATERIALTYPE = 1
AND FMUSTQTY > CASE @allmart WHEN 0 THEN -1 ELSE 0 END
GROUP BY FMATERIALID
HAVING COUNT(1) > 1
)
--SELECT * FROM #matergroup
/*-----------------------------------------------------------------------------------------------------------------------*/
IF EXISTS(SELECT 1 FROM #matergroup)
BEGIN
/*-----------------------------------------------------------------------------------------------------------------------*/
--/*<EFBFBD><EFBFBD><EFBFBD>Ⱥϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
--create table #group (FMATERIALID int,FEntryID INT primary key)
--insert into #group
--SELECT p.FMATERIALID,p.FENTRYID FROM #matergroup g INNER JOIN T_PRD_PPBOMENTRY p ON P.FID=G.FID AND P.FENTRYID=G.FENTRYID
--WHERE p.FREPLACEGROUP in(
-- SELECT FREPLACEGROUP FROM T_PRD_PPBOMENTRY WHERE FMOBILLNO=@MO and FMOENTRYSEQ=@MOSeq GROUP BY FREPLACEGROUP HAVING count(*)>1
--)
--UPDATE M SET FQTY=(SELECT ROUND(SUM(ISNULL(FQTY,0)),U.FPrecision) FROM #matergroup q INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
-- INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID GROUP BY s.FMATERIALID,U.FPrecision HAVING s.FMATERIALID=M.FMATERIALID)
-- ,FBaseQTY=(SELECT ROUND(SUM(ISNULL(FBaseQTY,0)),U.FPrecision) FROM #matergroup q INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
-- INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID GROUP BY s.FMATERIALID,U.FPrecision HAVING s.FMATERIALID=M.FMATERIALID)
--FROM #matergroup M INNER JOIN #group g ON m.FENTRYID=g.FEntryID
--WHERE g.FEntryID in(SELECT MIN(FEntryID) FEntryID FROM #group GROUP BY FMATERIALID)
UPDATE M SET FQTY=(
SELECT ROUND(SUM(ISNULL(FQTY,0)),U.FPrecision)
FROM #matergroup q
INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID = q.FMATERIALID
INNER JOIN T_BD_UNIT u ON u.FUNITID = s.FStoreUnitID
GROUP BY s.FMATERIALID,U.FPrecision
HAVING s.FMATERIALID=M.FMATERIALID),FBaseQTY = (
SELECT ROUND(SUM(ISNULL(FBaseQTY,0)),U.FPrecision)
FROM #matergroup q
INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID
GROUP BY s.FMATERIALID,U.FPrecision
HAVING s.FMATERIALID=M.FMATERIALID
)
FROM #matergroup M
WHERE FSEQ in(
SELECT MIN(FSEQ) FSEQ
FROM #matergroup
GROUP BY FMATERIALID
)
--and not exists(
-- SELECT FENTRYID FROM #group WHERE FENTRYID=m.FENTRYID
--)
UPDATE M SET FQTY=0,FBaseQTY=0
FROM #matergroup M
WHERE FSEQ not in(
SELECT MIN(FSEQ) FSEQ FROM #matergroup GROUP BY FMATERIALID
)
--and FENTRYID NOT IN(
-- SELECT MIN(FENTRYID) FENTRYID FROM #group WHERE FMATERIALID=M.FMATERIALID GROUP BY FMATERIALID
--)
/*-----------------------------------------------------------------------------------------------------------------------*/
DECLARE @PQTY DECIMAL(38,10),@PBASEQTY DECIMAL(38,10)
SELECT @PQTY=FQTY,@PBASEQTY=FBASEQTY FROM T_PRD_PPBOM WHERE FMOBILLNO=@MO and FMOENTRYSEQ=@MOSeq
DECLARE @i int=1,@j int
SELECT @j=max(IndexID) FROM #matergroup
while @i<=@j
begin
declare @molecule DECIMAL(38,10),@md decimal(38,10),@out_molecule int,@out_denominator int
SELECT @molecule=FQTY FROM #matergroup WHERE IndexID=@i
if @molecule>0 /*<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ĸ*/
begin
UPDATE #matergroup SET FNUMERATOR=ROUND(@molecule/@PQTY,4),FDENOMINATOR=1
WHERE IndexID=@i
end
SET @i=@i + 1
end
--drop table #group
/*-----------------------------------------------------------------------------------------------------------------------*/
SELECT
MP.FNUMBER FParentMaterial,bom.FNUMBER FBOMID,p2.FMoId,B.FMOBILLNO,B.FMOEntrySeq,b.FMOEntryID,p2.FBaseQty
,y.FNUMBER FMOType,u2.FNUMBER FBaseUnitID,u3.FNUMBER FUnitID,p2.FParentOwnerTypeId
,m2.FNUMBER FMaterialID2,FChangeType,u1.FNUMBER FUnitID2,A.FMUSTQTY,p2.FQTY FProduceQty
,p2.FBILLNO FPPBOMNo,B.FID FPPBOMId,B.FENTRYID FPPBOMEntryId,B.FSeq FPPBOMEntrySeq
,d1.FNUMBER FWORKSHOPID,g.FNUMBER FOWNERID,g.FNUMBER FSUPPLYORG,B.FReplaceGroup,A.FPositionNO
FROM (
SELECT '2' FChangeType,p1.FMUSTQTY FMustQty,p1.FID,p1.FENTRYID,FPositionNO
FROM #matergroup m
INNER JOIN T_PRD_PPBOMENTRY p1 ON p1.FID=m.FID and p1.FENTRYID=m.FENTRYID
union
SELECT '3' FChangeType,m.FQTY FMustQty,p1.FID,p1.FENTRYID,CASE m.FQTY WHEN 0 THEN FPositionNO ELSE STUFF
(
(
SELECT ','+FPositionNO
FROM (SELECT DISTINCT FPositionNO,FMATERIALID FROM #matergroup m1 WHERE m1.FID=m.FID) B
WHERE (FMATERIALID=m.FMATERIALID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'
),1,1,''
) END AS FPositionNO
FROM #matergroup m
INNER JOIN T_PRD_PPBOMENTRY p1 ON p1.FID=m.FID and p1.FENTRYID=m.FENTRYID
) A
INNER JOIN T_PRD_PPBOMENTRY B ON B.FID=A.FID and B.FENTRYID=A.FENTRYID
INNER JOIN T_BD_MATERIAL m2 ON m2.FMATERIALID=B.FMATERIALID
INNER JOIN T_BD_UNIT u1 ON u1.FUNITID=B.FUNITID
INNER JOIN T_PRD_PPBOM p2 ON p2.FID=B.FID
INNER JOIN T_BD_DEPARTMENT d1 ON d1.FDEPTID=p2.FWORKSHOPID
INNER JOIN T_PRD_PPBOMENTRY_C p3 ON p3.FID=B.FID and p3.FENTRYID=B.FENTRYID
INNER JOIN T_ORG_Organizations g ON g.forgid=p2.FParentOwnerId
inner JOIN T_BD_MATERIAL MP ON MP.FMATERIALID=p2.FMATERIALID
INNER JOIN T_ENG_BOM bom ON bom.FID=p2.FBOMID
INNER JOIN T_BD_UNIT u2 ON u2.FUNITID=p2.FBASEUNITID
INNER JOIN T_BD_UNIT u3 ON u3.FUNITID=p2.FUNITID
INNER JOIN T_BAS_BILLTYPE y ON y.FBILLTYPEID=p2.FMOType
ORDER BY B.FID,B.FENTRYID,FChangeType
/*-----------------------------------------------------------------------------------------------------------------------*/
end
DROP TABLE #matergroup
COMMIT TRAN
END TRY
BEGIN CATCH
--SELECT
-- ERROR_NUMBER() AS ErrorNumber
-- ,ERROR_SEVERITY() AS ErrorSeverity
-- ,ERROR_STATE() AS ErrorState
-- ,ERROR_PROCEDURE() AS ErrorProcedure
-- ,ERROR_LINE() AS ErrorLine
-- ,ERROR_MESSAGE() AS ErrorMessage;
--ROLLBACK TRAN
END CATCH
SET NOCOUNT OFF;
END