Files
Rootvin-pluginHDCRTN/_sql/ep_P03_HDC1.sql
2025-06-10 19:43:13 +02:00

183 lines
6.5 KiB
Transact-SQL

-- 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 k.RegCis IN (N'111000', N'112000') 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
-- zapis moznych puvodnich VC materialu do pomocne tabulky, u polotovaru je VC cislo paletoveho listu, to se musi nechat kvuli odpisu ze stavu 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.TabStavSkladu s ON (s.ID=p.IDZboSklad)
INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi)
INNER JOIN dbo.TabVyrCP vcp ON (vcp.IDPolozkaDokladu=p.ID)
INNER JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis)
WHERE p.IDDoklad=@IDDoklad
-- AND k.Material=1
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/sarze materialu, jejich evidenci vede ProHolding - nesmi se mazat u vyrobenych polotovaru, u tech mame cislo paletoveho listu !!!
-- jen materialy ???
DELETE FROM dbo.TabVyrCP WHERE IDPolozkaDokladu IN (SELECT p.ID 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.Material=1
)
-- identity reseed tabulky pohybu VC
SET @iTemp = ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0)
DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp)
END