310 lines
11 KiB
Transact-SQL
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
|
|
|
|
|