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

310 lines
11 KiB
Transact-SQL

-- dbo.ep_Vyroba_GenVydejZeMzdy
CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy
@IDMzdy INT,
@IDDoklad INT=NULL OUT,
@errMsg NVARCHAR(500)=N'' OUT,
@extTab NVARCHAR(50)=NULL,
@vydejAll BIT=0,
@realizujVydej BIT=0
AS
-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri Windows sluzby HDCDZApi !!
-- @extTab - tabulka, do ktere budou vraceny pohyby vydejky @extTab (ID INT NOT NULL, IDPohZbo INT NOT NULL)
-- @vydejAll - bude vydano vse, nejen kde jde splnena podminka TabPrKVazby - dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad
-- pokud existuje objekt #HDCTabPrKVazbyGenPredna, jedu vydej podle nej
SET NOCOUNT ON
DECLARE
@bChyba BIT,
@retVal INT=0,
@errID int,
@sql NVARCHAR(1000),
@idUziv INT=0
DECLARE @vydejky TABLE (ID INT NOT NULL)
IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL
SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME())
SET @idUziv = ISNULL(@idUziv, 0)
DELETE FROM @vydejky
IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky)
BEGIN
SELECT @retVal=MAX(ID) FROM dbo.TabPrikazMzdyAZmetky
DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, @retVal)
END
ELSE
DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, 1)
DROP TABLE IF EXISTS #TabPrKVazbyGen
CREATE TABLE #TabPrKVazbyGen (
ID INT IDENTITY NOT NULL,
Generuj BIT NOT NULL DEFAULT 1,
PoKorekciDat BIT NOT NULL DEFAULT 0,
IDPrKV INT NOT NULL,
Doklad INT NOT NULL,
IDPrikaz INT NOT NULL,
Prednastaveno BIT NOT NULL DEFAULT 1,
Sklad NVARCHAR(30) NULL,
VyrStredisko NVARCHAR(30) NULL,
IDPracoviste INT NULL,
mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0,
Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
MnozstviMax NUMERIC(19,6) NULL,
PuvodniMnozstviPoz NUMERIC(19,6) NULL,
MnozstviPoz NUMERIC(19,6) NOT NULL,
PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0,
IDPohZbo INT NULL,
PoznamkaNaDoklad NTEXT NULL,
priorita INT NOT NULL DEFAULT 0,
vyssi INT NOT NULL,
nizsi INT NOT NULL,
DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1,
pozice NVARCHAR(100) NULL DEFAULT N'',
Operace NCHAR(4) NULL,
FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0,
mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1,
ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0,
mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0,
Prirez NUMERIC(19,6) NOT NULL DEFAULT 1,
Poznamka NTEXT NULL,
pom_pomer_A NUMERIC(19,6) NULL,
pom_pomer_B NUMERIC(19,6) NULL,
Dodavatel INT NULL,
mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))),
PRIMARY KEY (ID)
)
DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy
CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int)
DROP TABLE IF EXISTS #TabPrKVazbyGenVC
CREATE TABLE #TabPrKVazbyGenVC(
ID INT IDENTITY NOT NULL,
IDPolozky INT NOT NULL,
VyrCislo NVARCHAR(100) NOT NULL,
Mnozstvi NUMERIC(19,6) NOT NULL,
Sklad NVARCHAR(30) NULL,
IDKmenZbozi INT NULL,
IDVyrCP INT NULL,
PRIMARY KEY(ID)
)
DECLARE
@RespektovatExistEvid bit=0,
@IDPrikaz int=NULL,
@dilec INT,
@IDPrPostup INT=NULL,
@mnozstviPomer_A numeric(19,6),
@mnozstviPomer_B numeric(19,6),
@IDPrKV int,
@mnoz_zad numeric(19,6),
@PrKVDoklad int,
@PocetVazeb int,
@PrP_Doklad int,
@skladProVydejKZ NVARCHAR(30)
SELECT @errID=NULL, @errMsg='', @PocetVazeb=0
SELECT @IDPrikaz=MZ.IDPrikaz, @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad, @PrP_Doklad=PrP.Doklad,
@IDPrPostup=PrP.ID
FROM dbo.TabPrikazMzdyAZmetky MZ
INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL)
WHERE MZ.ID=@IDMzdy
UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@IDMzdy
IF (@@ROWCOUNT=0)
RETURN 0
SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz
IF OBJECT_ID('dbo.TabKmenZbozi_EXT', 'U') IS NOT NULL
IF COL_LENGTH('dbo.TabKmenZbozi_EXT', '_SkladProVydejMat') IS NOT NULL
SET @skladProVydejKZ = (SELECT _SkladProVydejMat FROM dbo.TabKmenZbozi_EXT WHERE ID=@dilec)
SET @skladProVydejKZ = ISNULL(@skladProVydejKZ, N'')
IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenPredna', N'U') IS NULL
BEGIN
IF (@mnozstviPomer_A<=0.0)
RETURN -1
IF (@vydejAll=1)
DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR
SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad
FROM dbo.TabPrKVazby PrKV
INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz)
INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada)
INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0)
WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND
PrKV.IDPrikaz=@IDPrikaz AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL
ELSE
DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR
SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad
FROM dbo.TabPrKVazby PrKV
INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz)
INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada)
INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0)
WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND
PrKV.IDPrikaz=@IDPrikaz AND dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL
OPEN crPom1334
FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad
WHILE @@fetch_status=0
BEGIN
UPDATE #TabPrKVazbyGen SET MnozstviPoz=@mnoz_zad * (pom_pomer_A+@mnozstviPomer_A)/pom_pomer_B, pom_pomer_A=pom_pomer_A+@mnozstviPomer_A
WHERE IDPrKV=@IDPrKV
IF (@@ROWCOUNT=0)
BEGIN
IF @RespektovatExistEvid=1
SELECT @mnozstviPomer_A=SUM(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr)
FROM dbo.TabPrikazMzdyAZmetky MZ WHERE MZ.IDPrikaz=@IDPrikaz AND MZ.DokladPrPostup=@PrP_Doklad AND MZ.GenerovanaMatVydejka=1
INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad,
Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi,
mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka)
SELECT PrKV.ID,
PrKV.mnoz_zad * @mnozstviPomer_A/@mnozstviPomer_B,
@mnozstviPomer_A, @mnozstviPomer_B,
PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne,
PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi,
PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka
FROM dbo.TabPrKVazby PrKV
WHERE PrKV.ID=@IDPrKV
END
INSERT INTO #TabPrKVazbyGen_IDMzdy (IDPrikaz, Doklad, IDMzdy) VALUES (@IDPrikaz, @PrKVDoklad, @IDMzdy)
SET @PocetVazeb=@PocetVazeb + 1
FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad
END
CLOSE crPom1334
DEALLOCATE crPom1334
IF (@PocetVazeb<=0)
RETURN -2
END
ELSE
BEGIN -- pokud mam seznam na co vygenerovat vydejku, jedu podle nej
DELETE FROM #TabPrKVazbyGen
INSERT INTO #TabPrKVazbyGen
SELECT Generuj, PoKorekciDat, IDPrKV, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane,
Cena_real, Mnoz_odv, Cena_odv, MnozstviMax, PuvodniMnozstviPoz, MnozstviPoz, PomMnozPoz, IDPohZbo, PoznamkaNaDoklad, priorita, vyssi, nizsi, DavkaTPV,
pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, pom_pomer_A, pom_pomer_B, Dodavatel
FROM #HDCTabPrKVazbyGenPredna
END
-- preddefinovana mzda pro provazani
IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', N'U') IS NOT NULL
BEGIN
DELETE FROM #TabPrKVazbyGen_IDMzdy
INSERT INTO #TabPrKVazbyGen_IDMzdy
SELECT IDPrikaz, Doklad, IDMzdy FROM #HDCTabPrKVazbyGen_IDMzdyPredna
END
-- preddefinvana tabulka vyrobnich cisel
IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenVCPredna', N'U') IS NOT NULL
BEGIN
DELETE FROM #TabPrKVazbyGenVC
INSERT INTO #TabPrKVazbyGenVC
SELECT IDPolozky, VyrCislo, Mnozstvi, Sklad, IDKmenZbozi, IDVyrCP FROM #HDCTabPrKVazbyGenVCPredna
END
-- ext info k dilci, sklad, ze kterho se ma vydavat material
IF (@skladProVydejKZ<>N'')
UPDATE #TabPrKVazbyGen SET Sklad=@skladProVydejKZ
EXEC dbo.hp_AktualizaceTabPrKVazbyGenVC @Vratka=0
UPDATE #TabPrKVazbyGen SET Generuj=1
DROP TABLE IF EXISTS #TabGenRezVyd
CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID))
BEGIN TRY
EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=NULL, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0,
@IDExistDoklad=@IDDoklad, @SekejOperace=0
END TRY
BEGIN CATCH
SET @errMsg = 'Chyba generovani vydeje: ' + ERROR_MESSAGE()
END CATCH
INSERT @vydejky (ID) SELECT ID FROM #TabGenRezVyd
DECLARE
@idVyd INT,
@idKZ INT,
@idPZ INT
IF (@realizujVydej=1)
BEGIN
DECLARE vyd CURSOR LOCAL FOR
SELECT ID FROM #TabGenRezVyd
OPEN vyd
WHILE (1=1)
BEGIN
FETCH NEXT FROM vyd INTO @idVyd
IF (@@FETCH_STATUS<>0) BREAK
BEGIN TRY
EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT
END TRY
BEGIN CATCH
SET @errMsg = ERROR_MESSAGE()
END CATCH
END
CLOSE vyd
DEALLOCATE vyd
END
IF (1=(SELECT COUNT(*) FROM @vydejky))
SET @IDDoklad=(SELECT TOP(1) ID FROM @vydejky)
IF (@extTab IS NOT NULL) AND EXISTS(SELECT 1 FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL)
IF OBJECT_ID(@extTab, N'U') IS NOT NULL
BEGIN
SET @sql = N'DELETE FROM ' + @extTab
EXECUTE sp_executesql @sql
SET @sql = N'INSERT ' + @extTab + N' (ID, IDPohZbo) SELECT ID, IDPohZbo FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL'
EXECUTE sp_executesql @sql
END
-- uklid
DROP TABLE IF EXISTS #TabPrKVazbyGen
DROP TABLE IF EXISTS #TabGenRezVyd
DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy
DROP TABLE IF EXISTS #TabPrKVazbyGenVC