-- dbo.ep_Vyroba_GenObjednavkuMatDoVyroby CREATE PROCEDURE dbo.ep_Vyroba_GenObjednavkuMatDoVyroby @cilovySklad NVARCHAR(30)=N'', @radaDokl NVARCHAR(3)=N'', @druhPohybuZbo TINYINT=4, @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 DECLARE @idObj INT, @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, @idZboSklad INT, @idKmen INT, @idKZ INT, @sz NVARCHAR(3), @rc NVARCHAR(30), @sarze NVARCHAR(100), @paletList NVARCHAR(100), @skladMat NVARCHAR(30), @skladFin NVARCHAR(30), @mnoz NUMERIC(19,6), @mnozVydano NUMERIC(19,6), @material BIT IF OBJECT_ID(N'tempdb..#VyrobaGenObjednavkuMatDoVyroby', N'U') IS NOT NULL SELECT TOP(1) @skladMat=SkladMaterial, @skladFin=SkladVyrobky FROM #VyrobaGenObjednavkuMatDoVyroby SET @radaDokl = ISNULL(@radaDokl, N'231') SET @druhPohybuZbo = ISNULL(@druhPohybuZbo, 4) IF NOT EXISTS(SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo) RETURN SELECT @cilovySklad=IDSkladPrevodu, @radaPrijem=TypPrevodky, @druhPohybuZboPrijem=TabDruhDZ_DruhPohybuZboPre FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo SET @radaPrijem = ISNULL(@radaPrijem, N'281') SET @druhPohybuZboPrijem = ISNULL(@druhPohybuZboPrijem, 0) IF NOT EXISTS (SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaPrijem AND DruhPohybuZbo=@druhPohybuZboPrijem) RETURN SET @cilovySklad = ISNULL(@cilovySklad, N'') IF (@cilovySklad=N'') SET @cilovySklad = N'211' SET @skladMat = ISNULL(@skladMat, N'') IF (@skladMat=N'') SET @skladMat = N'311' SET @skladFin = ISNULL(@skladFin, N'') IF (@skladFin=N'') SET @skladFin = N'312' 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 GROUP BY JeMaterial OPEN m WHILE (1=1) BEGIN FETCH NEXT FROM m INTO @material IF (@@FETCH_STATUS<>0) BREAK SET @cnt = (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl AND CAST(d.DatPorizeni AS DATE)=IIF(@material=0, CAST(@datumDokladuMat AS DATE), CAST(@datumDokladuFin AS DATE)) AND s.BlokovaniEditoru IS NULL AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=(@material+1) ) IF (@cnt<=1) BEGIN IF (@material=0) IF (@idDokladFin IS NULL) SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=2 AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1 ) ELSE SET @idDoklad = @idDokladFin IF (@material=1) IF (@idDokladMat IS NULL) SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=1 AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1 ) ELSE SET @idDoklad = @idDokladMat IF (@idDoklad IS NULL) BEGIN IF (@material=0) AND (@genDokladFin=1) EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladFin, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuFin IF (@material=1) AND (@genDokladMat=1) EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladMat, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuMat IF (@idDoklad IS NOT NULL) BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.TabDOkladyZbozi_EXT WHERE ID=@idDoklad) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDoklad) UPDATE dbo.TabDokladyZbozi_EXT SET _Vydej_ObjednavkaMat=1 WHERE ID=@idDoklad IF (@material=0) SET @idDokladFin = @idDoklad ELSE SET @idDokladMat = @idDoklad END END SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzEur=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDoklad IF (@idDoklad IS NOT NULL) BEGIN DECLARE c CURSOR LOCAL FOR SELECT ID, SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, PaletovyList, Sarze FROM dbo._TabVyroba_Objednavky WHERE Splneno=0 AND OdmitnutoSkladem=0 AND NocniObjednavka=0 AND Storno=0 AND Vratka=0 AND Blokovano=0 AND JeMaterial=@material ORDER BY DatPorizeni OPEN c WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idObj, @sz, @rc, @idKmen, @mnoz, @paletList, @sarze IF (@@FETCH_STATUS<>0) BREAK 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=@idKZ AND IDSklad=@skladFin) ELSE SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@skladMat) IF (@idZboSklad IS NULL) IF (@material=0) EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladFin, @IDZboSklad=@idZboSklad OUT ELSE EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladMat, @IDZboSklad=@idZboSklad OUT IF (@idZboSklad IS NOT NULL) 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 INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis) SELECT @idObj, @idDoklad, @idPZ, @mnoz, @sarze, @paletList, @sz, @rc SET @paletList = ISNULL(@paletList, N'') SET @sarze = ISNULL(@sarze, N'') IF (@paletList<>N'') BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@paletList, _Vyroba_Sarze=@sarze WHERE ID=@idPZ END END -- @idPZ IS NOT NULL END -- @idSS IS NOT NULL END -- @mnoz>0 END CLOSE c DEALLOCATE c END -- @idDoklad IS NOT NULL END -- @cnt<=1 END CLOSE m DEALLOCATE m END -- mam neco k zapsani ? IF OBJECT_ID(N'dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2', 'P') IS NOT NULL EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2 @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 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 JOIN dbo.TabPohybyZbozi p 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