-- dbo.ep_Vyroba_GenSouhrnnyVydej CREATE PROCEDURE dbo.ep_Vyroba_GenSouhrnnyVydej @datum DATETIME=NULL, @radaVydej NVARCHAR(3)=NULL, @idSklad NVARCHAR(30)=NULL, @errorMsg NVARCHAR(500)=N'' OUT AS -- HD Consulting Strakonice, T. Buzin -- generuje souhrnnou vydejku (z vydejek prikazu, storna, rucnich korekci zaslanych z terminalu od PH) do jedne vydejky za dany den -- data z technologickeho/pomocneho skladu, vydejka na sklad Pekarna 211 (lze ovlivnit parametrem idSklad) -- pokud neni @datum zadane, bere se vcerejsek SET NOCOUNT ON DECLARE @errMsg NVARCHAR(500), @tranPred INT, @debugXml XML, @iTemp INT, @bTemp BIT DECLARE @idObd INT, @datumOd DATETIME, @datumDo DATETIME, @sklMatHlavni NVARCHAR(30)=N'311', @sklPekarna NVARCHAR(30)=N'211', @sklTechnolog NVARCHAR(30), @idDZ INT, @idPZ INT, @idSS INT, @idKZ INT, @mnoz NUMERIC(19,6), @cOrg INT=0, @dzMena NUMERIC(19,6), @dpz TINYINT=4, -- vydej v evid.cene @vstC TINYINT, @jednM INT, @dzKurz NUMERIC(19,6), @dzKurzE NUMERIC(19,6) DECLARE @vydeje TABLE (SkupZbo NVARCHAR(3) NOT NULL, RegCis NVARCHAR(30) NOT NULL, IDKmenZbozi INT, IDPohybZbozi INT, IDPrikaz INT, Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0.0, PRIMARY KEY (SkupZbo,RegCis) ) IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) ) SET @sklTechnolog=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%' AND CisloStr LIKE N'2%') IF (@sklTechnolog IS NULL) SET @sklTechnolog = N'261' SET @sklPekarna=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna') IF (@sklPekarna IS NULL) SET @sklPekarna = N'211' IF (@idSklad IS NULL) SET @idSklad = @sklPekarna IF (@datum IS NULL) SET @datum = DATEADD(second, -1, dbo.hf_TruncDate(GETDATE())) -- vcerejsi pulnoc SET @datumOd = dbo.hf_TruncDate(@datum) -- 00:00:00 daneho dne SET @datumDo = DATEADD(second, -1, DATEADD(day, 1, @datumOd)) -- 23:59:59 daneho dne EXEC @idObd = dbo.hp_GetObdobiDleDatumu @Datum=@datumOd, @JakyDatum=0, @HlasitUzavreno=0 IF (@radaVydej IS NULL) SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK' AND ID NOT IN (SELECT d.IDDruhDZ FROM dbo.TabDruhDokZboDef d WHERE d.IdObdobi=@idObd AND d.Blokovano=1) ) IF (@radaVydej IS NULL) SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK') IF (@radaVydej IS NULL) SET @radaVydej = N'223' -- vyrobni spotreba PEK INSERT @vydeje (SkupZbo, RegCis, IDKmenZbozi, IDPohybZbozi, IDPrikaz, Mnozstvi) SELECT p.SkupZbo, p.RegCis, k.ID, p.ID, ISNULL(p.IDPrikaz, d.IDPrikaz), p.MnozstviDruhove FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE d.DatPorizeni BETWEEN @datumOd AND @datumDo AND d.RadaDokladu IN (@radaVydej, N'229', N'292') -- standardne by melo byt: 223 vydej spotreba PEK, 229 Storno vydej spotreba, 292 Prijem vyrovnani do normy AND d.DruhPohybuZbo IN (0,1,3,4) AND s.IDSklad=@sklTechnolog AND p.Mnozstvi>0 AND k.Sluzba=0 ORDER BY d.ParovaciZnak, p.Poradi MERGE @vydeje AS T USING dbo.TabKmenZbozi AS S ON (S.SkupZbo=T.SkupZbo AND S.RegCis=T.RegCis) WHEN MATCHED AND T.IDKmenZbozi IS NULL THEN UPDATE SET T.IDKmenZbozi=S.ID; SET @debugXml=(SELECT * FROM @vydeje FOR XML AUTO) BEGIN TRY SET @tranPred = @@TRANCOUNT IF (@tranPred=0) BEGIN TRAN IF EXISTS (SELECT 1 FROM @vydeje WHERE Mnozstvi<>0 AND IDKmenZbozi IS NOT NULL) BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@idSklad, @DruhPohybuZbo=@dpz, @RadaDokladu=@radaVydej, @CisloOrg=@cOrg, @DatumPorizeni=@datumDo IF (@idDZ IS NOT NULL) BEGIN SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDZ DECLARE p CURSOR LOCAL FOR SELECT DISTINCT(IDKmenZbozi), SUM(Mnozstvi) FROM @vydeje WHERE IDKmenZbozi IS NOT NULL GROUP BY IDKmenZbozi OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @idKZ, @mnoz IF (@@FETCH_STATUS<>0) BREAK SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZ) IF (@idSS IS NULL) EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklPekarna, @IDZboSklad=@idSS OUT IF (@idSS IS NOT NULL) BEGIN EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=@cOrg, @IDZboSklad=@idSS, @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @PovolitDuplicitu=1, @PovolitBlokovane=1, @Mnozstvi=@mnoz END -- @idSS IS NOT NULL END CLOSE p DEALLOCATE p END -- @idDZ IS NOT NULL END -- mam neco v tabulici @vydeje IF (@tranPred=0) AND (@@TRANCOUNT>0) COMMIT TRAN END TRY BEGIN CATCH IF (@tranPred=0) AND (@@TRANCOUNT>0) ROLLBACK TRAN SET @errMsg = ERROR_MESSAGE() + N' / ' + ERROR_PROCEDURE() + N' / r. ' + CONVERT(nvarchar, ERROR_LINE()) END CATCH