Files
HDCApi/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql
2025-05-21 21:14:32 +02:00

179 lines
5.8 KiB
Transact-SQL

-- 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