Files
HDCApi/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyrobyNew.sql
2026-03-03 16:18:27 +01:00

341 lines
14 KiB
Transact-SQL

-- dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew
CREATE PROCEDURE dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew
@errMsg NVARCHAR(500)=N'' OUT
AS
-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri spusteni pluginu Pekarna nebo pri startu Windows sluzby HDCDZApi !!
SET NOCOUNT ON
DECLARE
@tranPred INT,
@cnt INT,
@iTemp INT
DECLARE
@idObj INT,
@druhPohybuZbo TINYINT=9,
@radaExpPr NVARCHAR(3)=N'550',
@doklVydPrevod NVARCHAR(3)=N'281',
@idExpPrMat INT,
@idExpPrPolo INT,
@radaDokl NVARCHAR(3),
@cilovySklad NVARCHAR(30),
@radaPrijem NVARCHAR(3),
@druhPohybuZboPrijem TINYINT,
@idDoklad INT,
@datumDokladuMat DATETIME,
@datumDokladuFin DATETIME,
@genDokladMat BIT=0,
@idDokladMat INT,
@genDokladFin BIT=0,
@idDokladFin INT,
@cOrg INT=0,
@dzMena NVARCHAR(3),
@dzKurz NUMERIC(19,6),
@dzKurzEur NUMERIC(19,6),
@jednM INT,
@vstC TINYINT,
@idPohyb INT,
@idPZ INT,
@idVCS INT,
@idVCP INT,
@idZboSklad INT,
@idKmen INT,
@sz NVARCHAR(3),
@rc NVARCHAR(30),
@sarze NVARCHAR(100),
@paletList NVARCHAR(100),
@sklMatHlavni NVARCHAR(30), -- 311
@sklPekarna NVARCHAR(30), -- 211
@sklTechnolog NVARCHAR(30), -- 261
@skladFin NVARCHAR(30), -- 312
@mnoz NUMERIC(19,6),
@mnozVydano NUMERIC(19,6),
@material BIT,
@idPHIdent BIGINT,
@idPHIdent2 BIGINT,
@textDoPoznamky NVARCHAR(max)=NULL
IF OBJECT_ID(N'tempdb..#VyrobaGenObjednavkuMatDoVyrobyNew', N'U') IS NOT NULL
SELECT TOP(1) @sklMatHlavni=SkladMaterial, @skladFin=SkladVyrobky
FROM #VyrobaGenObjednavkuMatDoVyrobyNew
IF (@sklMatHlavni IS NULL)
SELECT TOP(1) @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%'
IF (@sklTechnolog IS NULL)
SELECT TOP(1) @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚÈ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%'
IF (@sklPekarna IS NULL)
SELECT TOP(1) @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%'
SET @sklPekarna = ISNULL(@sklPekarna, N'')
IF (@sklPekarna=N'')
SET @sklPekarna = N'211'
SET @sklMatHlavni = ISNULL(@sklMatHlavni, N'')
IF (@sklMatHlavni=N'')
SET @sklMatHlavni = N'311'
SET @skladFin = ISNULL(@skladFin, N'')
IF (@skladFin=N'')
SET @skladFin = N'312'
MERGE dbo._TabVyroba_Objednavky AS T
USING dbo.TabKmenZbozi AS S ON (S.ID=T.IDKmenZbozi)
WHEN MATCHED AND T.JeMaterial IS NULL THEN UPDATE SET T.JeMaterial=S.Material;
DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ NOT IN (SELECT ID FROM dbo.TabPohybyZbozi WITH(NOLOCK))
SET @genDokladMat=0
IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
BEGIN
SET @genDokladMat=1
SET @datumDokladuMat = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
END
SET @datumDokladuMat = ISNULL(@datumDokladuMat, GETDATE())
SET @genDokladFin=0
IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
BEGIN
SET @genDokladFin=1
SET @datumDokladuFin = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
END
SET @datumDokladuFin = ISNULL(@datumDokladuFin, GETDATE())
IF (@genDokladMat=1) OR (@genDokladFin=1)
BEGIN
DECLARE m CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT(JeMaterial)
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND OdmitnutoSkladem=0
AND NocniObjednavka=0
AND Storno=0
AND Vratka=0
AND Blokovano=0
AND IDPhIdent2 IS NOT NULL
GROUP BY JeMaterial
OPEN m
WHILE (1=1)
BEGIN
FETCH NEXT FROM m INTO @material
IF (@@FETCH_STATUS<>0) BREAK
IF (@material=0)
BEGIN
SET @cilovySklad=@skladFin
SET @cnt = ISNULL( (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d WITH(NOLOCK) WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X'
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE)
), 0)
IF (@cnt=0)
EXEC dbo.hp_InsertHlavickyOZ @Ident=@idExpPrPolo OUT, @Sklad=@cilovySklad, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaExpPr, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuFin
IF (@cnt=1)
SET @idExpPrPolo = (SELECT d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X'
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE)
)
IF (@cnt>1)
SET @idExpPrPolo = (SELECT TOP(1) d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' ORDER BY d.DatPorizeni DESC)
IF NOT EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idExpPrPolo)
INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idExpPrPolo)
UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_ObjednavkaMat_Typ=2, _Vydej_ObjednavkaMat=1 WHERE ID=@idExpPrPolo
SET @idDoklad = @idExpPrPolo
END
IF (@material=1)
BEGIN
SET @cilovySklad=@sklMatHlavni
SET @cnt = ISNULL( (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X'
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE)
), 0)
IF (@cnt=0)
EXEC dbo.hp_InsertHlavickyOZ @Ident=@idExpPrMat OUT, @Sklad=@cilovySklad, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaExpPr, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuMat
IF (@cnt=1)
SET @idExpPrMat = (SELECT d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X'
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE)
)
IF (@cnt>1)
SET @idExpPrMat = (SELECT TOP(1) d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad
AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' ORDER BY d.DatPorizeni DESC)
IF NOT EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idExpPrMat)
INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idExpPrMat)
UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_ObjednavkaMat_Typ=1, _Vydej_ObjednavkaMat=1 WHERE ID=@idExpPrMat
SET @idDoklad = @idExpPrMat
END
IF (@idDoklad IS NOT NULL)
BEGIN
UPDATE dbo.TabDokladyZbozi SET IDSkladPrevodu=@sklPekarna WHERE ID=@idDoklad AND IDSkladPrevodu IS NULL
UPDATE dbo.TabDokladyZbozi SET TypPrevodky=@doklVydPrevod WHERE ID=@idDoklad AND TypPrevodky IS NULL
SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzEur=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny
FROM dbo.TabDokladyZbozi WHERE ID=@idDoklad
DECLARE c CURSOR LOCAL FOR
SELECT ID, SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, PaletovyList, Sarze, IdPHIdent, IdPHIdent2
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND OdmitnutoSkladem=0
AND NocniObjednavka=0
AND Storno=0
AND Vratka=0
AND Blokovano=0
AND IDPhIdent2 IS NOT NULL
AND JeMaterial=@material
ORDER BY DatPorizeni
OPEN c
WHILE (1=1)
BEGIN
FETCH NEXT FROM c INTO @idObj, @sz, @rc, @idKmen, @mnoz, @paletList, @sarze, @idPHIdent, @idPHIdent2
IF (@@FETCH_STATUS<>0) BREAK
IF (@idKmen IS NULL)
SET @idKmen = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc)
SET @mnozVydano = ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObj), 0)
SET @mnoz = @mnoz - @mnozVydano
IF (@mnoz>0)
BEGIN
SET @idZboSklad = NULL
IF (@material=0)
SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@skladFin)
ELSE
SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@sklMatHlavni)
IF (@idZboSklad IS NULL)
BEGIN
IF (@material=0)
EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@skladFin, @IDZboSklad=@idZboSklad OUT
ELSE
EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@sklMatHlavni, @IDZboSklad=@idZboSklad OUT
END -- @idZboSklad IS NULL
IF (@idZboSklad IS NOT NULL)
AND NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabPohybyZbozi_EXT pe WITH(NOLOCK) ON (pe.ID=p.ID)
WHERE p.IDDoklad=@idDoklad AND p.IDZboSklad=@idZboSklad AND pe._Vyroba_Sarze=@sarze AND pe._Vyroba_PaletList=@paletList AND pe._HDCAPI_PHident=@idPHIdent2)
BEGIN
EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDoklad, @DruhPohybu=@druhPohybuZbo, @CisloOrg=@cOrg, @IDZboSklad=@idZboSklad,
@Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzEur, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL,
@ZakazanoDPH=0, @VstupniCena=@vstC, @PovolitDuplicitu=1, @Mnozstvi=@mnoz
IF (@idPZ IS NOT NULL)
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ)
INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ)
SET @paletList = ISNULL(@paletList, N'')
SET @sarze = ISNULL(@sarze, N'')
UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@paletList, _Vyroba_Sarze=@sarze, _Vyroba_IDObjednavkaMat=@idObj, _HDCAPI_PHident=@idPHIdent2
WHERE ID=@idPZ
SET @idVCS = NULL
IF (@material=0) -- prevadej realna VC jen u dilcu (finaly+polotovary)
BEGIN
SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDStavSkladu=@idZboSklad AND Nazev1=@paletList)
IF (@idVCS IS NULL)
BEGIN
SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCS), 0)
DBCC CHECKIDENT (TabVyrCS, RESEED, @iTemp)
EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDZboSklad=@idZboSklad, @Nazev1=@paletList
END
SET @idVCP = NULL
IF (@idVCS IS NOT NULL)
BEGIN
SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0)
DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp)
INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz
SET @idVCP = SCOPE_IDENTITY()
END
END -- @material=0
INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis, IDVyrCP)
SELECT @idObj, @idDoklad, @idPZ, @mnoz, @sarze, @paletList, @sz, @rc, @idVCP
IF (@paletList<>'')
SET @textDoPoznamky = N'PL: ' + @paletList
IF (@sarze<>N'')
IF (ISNULL(@textDoPoznamky,N'')=N'')
SET @textDoPoznamky = N'šarze: ' + @sarze
ELSE
SET @textDoPoznamky = @textDoPoznamky + N' / šarze: ' + @sarze
SET @textDoPoznamky = TRIM(@textDoPoznamky)
IF (@textDoPoznamky=N'')
SET @textDoPoznamky = NULL
UPDATE dbo.TabPohybyZbozi SET Poznamka=@textDoPoznamky WHERE ID=@idPZ
END -- @idPZ IS NOT NULL
END -- @idZboSklad IS NOT NULL
END -- @mnoz>0
END
CLOSE c
DEALLOCATE c
END -- @idDoklad IS NOT NULL
END
CLOSE m
DEALLOCATE m
END -- mam neco k zapsani ?
IF OBJECT_ID(N'dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew2', 'P') IS NOT NULL
EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew2 @idDoklad
-- oznac splnene polozky
DECLARE c CURSOR LOCAL FAST_FORWARD FOR
SELECT ID, Mnozstvi
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND Vratka=0
AND Storno=0
AND OdmitnutoSkladem=0
AND ID IN (SELECT 1 FROM dbo._TabVyroba_Objednavky_Pol p WITH(NOLOCK) WHERE p.IDHlava=ID)
OPEN c
WHILE (1=1)
BEGIN
FETCH NEXT FROM c INTO @idObj, @mnoz
IF (@@FETCH_STATUS<>0) BREAK
SET @mnozVydano = ISNULL( (SELECT SUM(op.Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol op WITH(NOLOCK) JOIN dbo.TabPohybyZbozi p WITH(NOLOCK) ON (p.ID=op.IDPohybOZ)
WHERE op.IDHlava=@idObj AND p.SkutecneDatReal IS NOT NULL), 0)
IF (@mnoz=@mnozVydano)
UPDATE dbo._TabVyroba_Objednavky SET Splneno=1 WHERE ID=@idObj
END
CLOSE c
DEALLOCATE c