-- dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu CREATE PROCEDURE dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad INT, @errMsg NVARCHAR(500)=N'' OUT AS -- HD Consulting Strakonice, T. Buzin -- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi nebo pluginu Pekerna !! SET NOCOUNT ON IF EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1) RETURN DECLARE @tranPred INT, @uziv INT, @bChyba BIT DECLARE @sklad NVARCHAR(30), @datPorizeni DATETIME, @datNasklad DATETIME, @idDZ INT, @idPZ INT, @idKZ INT, @idSS INT, @idSSPek INT, @prepKoef NUMERIC(19,6), @mnozPZ NUMERIC(19,6), @mnozSkl NUMERIC(19,6), @mnozNevyd NUMERIC(19,6), @mnozChybi NUMERIC(19,6) DECLARE @sklMatHlavni NVARCHAR(30), @sklTechnolog NVARCHAR(30), @sklPekarna NVARCHAR(30), @poslSarze NVARCHAR(100), @poslPalList NVARCHAR(100) DECLARE @idDZNew INT, @idPZNew INT, @rDokl NVARCHAR(3)=N'292', -- rada dokladu pro prijem "nedostatecneho materialu" -> "Příjemka - vyrovnání do normy" @dpz TINYINT, @mnoz NUMERIC(19,6), @vstC TINYINT, @menaDZ NVARCHAR(3), @kurzDZ NUMERIC(19,6), @kurzE NUMERIC(19,6), @jednM INT DECLARE @pol TABLE (IDZboSklad INT NOT NULL, Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0.0, Sarze NVARCHAR(100), PaletList NVARCHAR(100) ) DELETE FROM @pol SET @uziv = 0 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%NOVÝ% sklad%výdej%' IF (@sklTechnolog IS NULL) SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' IF (@sklPekarna IS NULL) SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' DECLARE c CURSOR LOCAL FOR SELECT p.ID, p.IDDoklad, p.IDZboSklad, p.Mnozstvi, p.PrepMnozstvi, s.IDKmenZbozi, d.IDSklad, d.DatPorizeni FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) WHERE d.ID=@IDDoklad OPEN c WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idPZ, @idDZ, @idSS, @mnozPZ, @prepKoef, @idKZ, @sklad, @datPorizeni IF (@@FETCH_STATUS<>0) BREAK SET @mnozPZ = @mnozPZ * @prepKoef SET @mnozNevyd = ISNULL( (SELECT SUM(p.Mnozstvi*p.PrepMnozstvi) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) WHERE p.IDZboSklad=@idSS AND p.IDDoklad<>@idDZ AND p.Mnozstvi>0 AND d.DruhPohybuZbo IN (2,4) AND d.Realizovano=0 AND d.DatPorizeni<@datPorizeni) , 0) SET @mnozSkl = ISNULL( (SELECT Mnozstvi FROM dbo.TabStavSkladu WHERE ID=@idSS), 0) SET @mnozChybi = @mnozSkl - @mnozPZ - @mnozNevyd IF (@mnozChybi>0) BEGIN SET @idSSPek = NULL IF (@sklPekarna IS NOT NULL) SELECT @idSSPek=ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZ SELECT @poslSarze=_Prevod_PosledniSarze, @poslPalList=_Prevod_PosledniPaletList FROM dbo.TabStavSkladu_EXT WHERE ID=@idSSPek UPDATE @pol SET Mnozstvi = Mnozstvi + @mnozChybi WHERE IDZboSklad=@idSS IF (@@ROWCOUNT=0) INSERT @pol (IDZboSklad, Mnozstvi, Sarze, PaletList) SELECT @idSS, @mnozChybi, @poslSarze, @poslPalList END END CLOSE c DEALLOCATE c -- pokud mam polozky na doplneni, udelej doklad a realizuj ho IF EXISTS(SELECT 1 FROM @pol) BEGIN BEGIN TRY SET @tranPred=@@TRANCOUNT IF (@tranPred=0) BEGIN TRAN SET @datNasklad = (SELECT MIN(d.DatPorizeni) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) WHERE p.Mnozstvi>0 AND d.DruhPohybuZbo IN (2,4) AND d.Realizovano=0 AND p.IDZboSklad IN (SELECT IDZboSklad FROM @pol)) IF (@datNasklad IS NULL) SET @datNasklad = DATEADD(second, -5, @datPorizeni) SET @dpz=0 EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZNew OUT, @Sklad=@sklad, @DruhPohybu=@dpz, @RadaDokladu=@rDokl, @CisloOrg=0, @DatumPorizeni=@datNasklad IF (@idDZNew IS NOT NULL) BEGIN SELECT @menaDZ=Mena, @vstC=VstupniCena, @kurzDZ=Kurz, @kurzE=KurzEuro, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDZNew DECLARE c CURSOR LOCAL FOR SELECT IDZboSklad, Mnozstvi, ISNULL(Sarze,N''), ISNULL(PaletList,N'') FROM @pol OPEN c WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idSS, @mnoz, @poslSarze, @poslPalList IF (@@FETCH_STATUS<>0) BREAK EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZNew OUT, @IDDoklad=@idDZNew, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, @KurzEuro=@kurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz IF (@idPZNew IS NOT NULL) BEGIN IF (@poslSarze<>N'') OR (@poslPalList<>N'') BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZNew) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZNew) UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@poslSarze, _Vyroba_PaletList=@poslPalList WHERE ID=@idPZNew END END END CLOSE c DEALLOCATE c UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZNew EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=@idDZ, @AktualizaceSlev=0 -- realizace EXEC dbo.hp_Realizuj_Prijem @ID=@idDZNew, @DatumRealizace=@datNasklad, @Uzivatel=@uziv, @BylaChyba=@bChyba OUT END IF (@tranPred=0) AND (@@TRANCOUNT>0) COMMIT TRAN END TRY BEGIN CATCH SET @errMsg = ERROR_MESSAGE() IF (@tranPred=0) AND (@@TRANCOUNT>0) ROLLBACK TRAN END CATCH END