-- dbo.ep_P03_HDC1 CREATE PROCEDURE dbo.ep_P03_HDC1 @IDDoklad INT AS -- HD Consulting Strakonice, T. Buzin -- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu pro pekarnu nebo Windows sluzby HDCDZApi !! -- volá se před realizací příjemky, po standardních kontrolách, běží už v triggeru SET NOCOUNT ON DECLARE @errMsg NVARCHAR(500), @iTemp INT DECLARE @rada NVARCHAR(3), @idSklad NVARCHAR(30), @sklMatHlavni NVARCHAR(30)=N'311', @sklPekarna NVARCHAR(30)=N'211', @sklTechnolog NVARCHAR(30), @idPZ INT, @idSS INT, @idKZ INT, @poslVyrCis NVARCHAR(100), @idVCP INT, @vyrCis NVARCHAR(100), @siloMouka SMALLINT IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) IF OBJECT_ID(N'tempdb..#TabDefiniceProP03', N'U') IS NOT NULL SELECT TOP(1) @sklMatHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #TabDefiniceProP03 IF (@sklMatHlavni IS NULL) SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' IF (@sklTechnolog IS NULL) SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%' AND CisloStr LIKE N'2%' IF (@sklPekarna IS NULL) SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' DROP TABLE IF EXISTS #TabDefiniceProP03 SELECT @rada=RadaDokladu, @idSklad=IDSklad FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad -- prijemka/prevodka na sklad Pekarna, zkontroluj zda mouka ma umisteni (ext.info pohybu OZ) IF (@rada IN (N'251', N'261', N'281')) AND (@idSklad=@sklPekarna) BEGIN IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=@IDDoklad AND k.SkupZbo=N'101' AND k.Nazev1 LIKE N'%mouka%' AND p.IDUmisteni IS NULL) BEGIN SET @errMsg = N'Mouka zadaná na příjemce musí mít zadáno umístění (Silo) ! (ep_P03)' INSERT #TabExtKom (Typ, Poznamka) SELECT 3, LEFT(@errMsg, 255) RAISERROR (@errMsg, 16, 1) END -- zapis posledni prevedene sarze na skladovou kartu skladu Pekarna DECLARE p CURSOR LOCAL FOR SELECT p.ID, p.IDZboSklad, s.IDKmenZbozi FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=@IDDoklad AND k.Sluzba=0 ORDER BY p.Poradi OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @idPZ, @idSS, @idKZ IF (@@FETCH_STATUS<>0) BREAK SET @poslVyrCis = N'' DECLARE v CURSOR LOCAL FOR SELECT ID, Nazev FROM dbo.TabVyrCP WHERE IDPolozkaDokladu=@idPZ AND TRIM(ISNULL(Nazev,N''))<>N'' ORDER BY ID OPEN v WHILE (1=1) BEGIN FETCH NEXT FROM v INTO @idVCP, @vyrCis IF (@@FETCH_STATUS<>0) BREAK SET @poslVyrCis = @vyrCis END CLOSE v DEALLOCATE v IF (@poslVyrCis<>N'') BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idSS) UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@poslVyrCis WHERE ID=@idSS END END CLOSE p DEALLOCATE p DECLARE c CURSOR LOCAL FOR SELECT p.ID, CONVERT(smallint, u.Kod) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) INNER JOIN dbo.TabUmisteni u ON (u.ID=p.IDUmisteni) WHERE p.IDDoklad=@IDDoklad AND k.SkupZbo=N'101' AND k.Nazev1 LIKE N'%mouka%' AND p.IDUmisteni IS NOT NULL OPEN c WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idPZ, @siloMouka IF (@@FETCH_STATUS<>0) BREAK IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@siloMouka WHERE ID=@idPZ END CLOSE c DEALLOCATE c -- pro info zapis informaci o prevadenych VC INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) WHERE p.IDDoklad=@IDDoklad ORDER BY p.Poradi, vcp.ID -- odstran umisteni, delalo by problem pri vydeji UPDATE dbo.TabPohybyZbozi SET IDUmisteni=NULL WHERE IDDoklad=@IDDoklad -- smaz vyrobni cisla, jejich evidenci vede ProHolding DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) END -- prijemky a storna na hlavni sklad IF (@rada IN (N'251', N'259', N'261', N'269')) AND (@idSklad=@sklMatHlavni) BEGIN INSERT dbo._hdc_PZ_PuvodniVC (IDPohybZbozi, IDDoklad, IDZboSklad, VyrCis, IDVyrCis, Mnozstvi, Sarze, PaletovyList, IDUmisteni) SELECT p.ID, p.IDDoklad, p.IDZboSklad, vcp.Nazev, vcp.IDVyrCis, vcp.Mnozstvi, vcp.Nazev, vcs.Nazev1, p.IDUmisteni FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID) INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) WHERE p.IDDoklad=@IDDoklad ORDER BY p.Poradi, vcp.ID -- odstran umisteni, delalo by problem pri vydeji UPDATE dbo.TabPohybyZbozi SET IDUmisteni=NULL WHERE IDDoklad=@IDDoklad -- smaz vyrobni cisla, jejich evidenci vede ProHolding DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad) SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) END