284 lines
10 KiB
Transact-SQL
284 lines
10 KiB
Transact-SQL
-- 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
|
|
|