464 lines
18 KiB
Transact-SQL
464 lines
18 KiB
Transact-SQL
-- dbo.ep_Vyroba_GenOdvodZeMzdy
|
|
CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy
|
|
@IDMzdy INT=NULL,
|
|
@bezVyrCis BIT=1,
|
|
@radaOdvod NVARCHAR(3)=NULL,
|
|
@skladOdvod NVARCHAR(30)=NULL,
|
|
@realizujPrijem BIT=0,
|
|
@prevodDoVyssiho BIT=0,
|
|
@kopiiNaTechSklad BIT=0,
|
|
@errMsg NVARCHAR(500)=N'' OUT,
|
|
@aktualizujPolozkyExistPrij BIT=0
|
|
AS
|
|
|
|
-- HD Consulting Strakonice, T. Buzin
|
|
-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !!
|
|
-- konfiguraci lze ovlivnit pres tabulku #HDCTabGenOdvodZeMzdyKonfig
|
|
-- pozor, v tom pripade musi byt na rade prikazu sklad pro generovani odvodu roven NULL
|
|
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE
|
|
@iTemp INT,
|
|
@aktDatum DATETIME=GETDATE(),
|
|
@datPrijem DATETIME,
|
|
@bChyba BIT,
|
|
@ret INT,
|
|
@cnt INT,
|
|
@jeOdvOper BIT=0,
|
|
@idUziv INT,
|
|
@IDPrikaz INT,
|
|
@IDZakazModif INT,
|
|
@IDPrikazVyssi INT,
|
|
@doklKV INT,
|
|
@IDKmen INT,
|
|
@jeFinal BIT=0,
|
|
@idPZ INT,
|
|
@idPZNew INT,
|
|
@idPZOld INT,
|
|
@idSS INT,
|
|
@idVCS INT,
|
|
@idVCP INT,
|
|
@idVPrVC INT,
|
|
@vc NVARCHAR(100),
|
|
@NekontrolMnozOdvedFinal BIT=0,
|
|
@mnozstvi NUMERIC(19,6)=0,
|
|
@radaOdvNaSklad NVARCHAR(3)=N'273',
|
|
@sklProOdvod NVARCHAR(30)=N'261',
|
|
@sklProFinal NVARCHAR(30)=N'312',
|
|
@sklProPolo NVARCHAR(30)=N'311',
|
|
@radaVPr NVARCHAR(10),
|
|
@idPrij INT,
|
|
@idPrijOld INT,
|
|
@uklidPomocTab BIT,
|
|
@idPrijKopie INT,
|
|
@sklTechnicky NVARCHAR(30),
|
|
@dpz TINYINT,
|
|
@cOrg INT,
|
|
@dzDatum DATETIME,
|
|
@dzMena NVARCHAR(3),
|
|
@dzKurz NUMERIC(19,6),
|
|
@dzKurzE NUMERIC(19,6),
|
|
@vstC TINYINT,
|
|
@jednM INT
|
|
DECLARE
|
|
@idDZPomocPrijem INT,
|
|
@idPZPomocPrijem INT,
|
|
@idSSPomocPrijem INT,
|
|
@mnozPrijem NUMERIC(19,6)
|
|
|
|
DECLARE @idPZsOld TABLE (ID INT NOT NULL)
|
|
|
|
|
|
SET @uklidPomocTab = 0
|
|
|
|
SELECT @jeOdvOper=pp.Odvadeci
|
|
FROM dbo.TabPrikazMzdyAZmetky pmz
|
|
INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup AND pp.IDOdchylkyDo IS NULL)
|
|
WHERE pmz.ID=@IDMzdy
|
|
IF (@jeOdvOper=0)
|
|
RETURN
|
|
|
|
|
|
|
|
|
|
IF OBJECT_ID(N'dbo.TabUserCfg', 'U') IS NOT NULL
|
|
SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME())
|
|
SET @idUziv = ISNULL(@idUziv, 0)
|
|
|
|
|
|
-- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT)
|
|
IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', 'U') IS NOT NULL
|
|
SELECT TOP(1) @radaOdvNaSklad=ISNULL(RadaOdvodNaSklad, @radaOdvNaSklad), @sklProOdvod=ISNULL(SkladProOdvod, @sklProOdvod),
|
|
@bezVyrCis=ISNULL(BezVyrobnichCisel, @bezVyrCis), @idUziv=ISNULL(IDUziv, @idUziv)
|
|
FROM #HDCTabGenOdvodZeMzdyKonfig
|
|
|
|
|
|
IF (@sklTechnicky IS NULL)
|
|
SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEZH%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%'
|
|
IF (@sklTechnicky IS NULL)
|
|
SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%v}dej%'
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabOdved
|
|
CREATE TABLE #TabOdved (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
IDDilec INT NOT NULL,
|
|
IDZakazModif INT NULL,
|
|
IDZakazka INT NULL,
|
|
maxMnozstvi NUMERIC(19,6) NULL,
|
|
mnozstvi NUMERIC(19,6) NOT NULL,
|
|
EvidJednotka NUMERIC(19,6) NOT NULL,
|
|
Sklad NVARCHAR(30) NULL,
|
|
KodUmisteni NVARCHAR(15) NULL,
|
|
IDPohZbo INT NULL,
|
|
PomVnoreni INT NULL,
|
|
StavPrikazu TINYINT NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabOdved_IDMzdy
|
|
CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int)
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabVyrCisProGenOdv
|
|
CREATE TABLE #TabVyrCisProGenOdv (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDOdvedeni INT NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
VyrCislo NVARCHAR(100) NOT NULL,
|
|
Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0,
|
|
MaxMnozstvi NUMERIC(19,6) NULL,
|
|
IDVyrCP INT NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabPolotovProGenOdv
|
|
CREATE TABLE #TabPolotovProGenOdv (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDOdvedeni INT NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
Doklad INT NOT NULL,
|
|
IDDilec INT NOT NULL,
|
|
Mnozstvi NUMERIC(19,6) NOT NULL,
|
|
MaxMnozstvi NUMERIC(19,6) NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabGenPrijem
|
|
CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy)
|
|
RETURN
|
|
|
|
|
|
SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
|
|
|
|
UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy
|
|
IF (@@ROWCOUNT=0) RETURN
|
|
IF @mnozstvi<=0.0 RETURN
|
|
|
|
|
|
|
|
|
|
SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
|
|
SELECT @radaVPr=Rada, @IDKmen=IDTabKmen, @IDZakazModif=IDZakazModif, @IDPrikazVyssi=IDPrikazVyssi
|
|
FROM dbo.TabPrikaz WHERE ID=@IDPrikaz
|
|
|
|
SET @jeFinal=0
|
|
IF EXISTS (SELECT 1 FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen AND TypDilce=0)
|
|
SET @jeFinal=1
|
|
|
|
|
|
-- nastav sklad pro odvod podle karty
|
|
IF (@sklProOdvod IS NULL)
|
|
SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen
|
|
|
|
-- pripadne zkus podle rady prikazu
|
|
SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvNaSklad ELSE RadaDokl_OdvedeniPrikazu END,
|
|
@sklProOdvod=CASE WHEN PrijemVyrDil_SkladProGenHlavDZ IS NULL THEN @sklProOdvod ELSE PrijemVyrDil_SkladProGenHlavDZ END
|
|
FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr
|
|
|
|
|
|
IF (@radaOdvod IS NOT NULL)
|
|
SET @radaOdvNaSklad=@radaOdvod
|
|
IF (@skladOdvod IS NULL)
|
|
BEGIN
|
|
SET @sklProOdvod = @sklProPolo
|
|
IF (@jeFinal=1)
|
|
SET @sklProOdvod = @sklProFinal
|
|
END
|
|
ELSE
|
|
SET @sklProOdvod = @skladOdvod
|
|
|
|
|
|
|
|
|
|
UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz
|
|
IF (@@ROWCOUNT=0)
|
|
INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu)
|
|
SELECT P.ID,
|
|
CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END,
|
|
ZMD.IDZakazModif,
|
|
P.IDZakazka,
|
|
CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END,
|
|
P.EvidJednotka,
|
|
CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END,
|
|
P.sklad,
|
|
P.StavPrikazu
|
|
FROM dbo.TabPrikaz P
|
|
INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen)
|
|
LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID)
|
|
LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen)
|
|
WHERE P.ID=@IDPrikaz AND
|
|
(CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END)>0
|
|
INSERT INTO #TabOdved_IDMzdy (IDPrikaz, IDMzdy) VALUES (@IDPrikaz, @IDMzdy)
|
|
|
|
|
|
|
|
UPDATE O SET maxMnozstvi=CASE WHEN RP.NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END
|
|
FROM #tabOdved O
|
|
INNER JOIN dbo.TabPrikaz P ON (P.ID=O.IDPrikaz)
|
|
INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada)
|
|
|
|
UPDATE #tabOdved SET mnozstvi=maxMnozstvi WHERE maxMnozstvi IS NOT NULL AND mnozstvi>maxMnozstvi
|
|
DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0)
|
|
DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0)
|
|
DELETE #tabOdved WHERE Mnozstvi<=0.0
|
|
|
|
SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0)
|
|
DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp)
|
|
|
|
IF (@sklProOdvod IS NOT NULL)
|
|
UPDATE #tabOdved SET Sklad=@sklProOdvod
|
|
|
|
|
|
|
|
EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL
|
|
IF (@bezVyrCis=1)
|
|
DELETE #TabVyrCisProGenOdv
|
|
|
|
|
|
IF (@prevodDoVyssiho=0)
|
|
BEGIN
|
|
BEGIN TRY
|
|
-- pozor, nelze predem zadat do jake prijemky polozky odvodu generovat, vzdy se generuje nova, o prevedeni polozek se postarame nize
|
|
EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errMsg = 'Chyba pri odvadeni: ' + ERROR_MESSAGE()
|
|
END CATCH
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF (@IDPrikazVyssi IS NOT NULL)
|
|
BEGIN
|
|
IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', 'U') IS NOT NULL
|
|
DELETE FROM #TabOdved_IDMzdy
|
|
INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idPrikaz, @idMzdy
|
|
|
|
SET @doklKV = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@IDPrikazVyssi AND nizsi=@IDKmen AND IDOdchylkyDo IS NULL)
|
|
|
|
EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz, @IDPrikazCil=@IDPrikazVyssi,
|
|
@Doklad=@doklKV, @IDDilec=@IDKmen, @mnozstvi=@mnozstvi, @IDOdvedeniVC=0, @IDZakazModif=@IDZakazModif
|
|
IF OBJECT_ID(N'tempdb..#TabGenPrijem', 'U') IS NOT NULL
|
|
DELETE FROM #TabGenPrijem
|
|
END -- @IDPrikazVyssi IS NOT NULL
|
|
END
|
|
|
|
|
|
|
|
|
|
|
|
-- ID polozek puvodnich dokladu
|
|
DELETE FROM @idPZsOld
|
|
|
|
|
|
DECLARE prij CURSOR LOCAL FOR
|
|
SELECT ID FROM #TabGenPrijem
|
|
OPEN prij
|
|
WHILE (1=1)
|
|
BEGIN
|
|
FETCH NEXT FROM prij INTO @idPrij
|
|
IF (@@FETCH_STATUS<>0) BREAK
|
|
|
|
INSERT @idPZsOld (ID) SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij
|
|
|
|
SELECT @datPrijem=DatPorizeni FROM dbo.TabDokladyZbozi WHERE ID=@idPrij
|
|
|
|
SET @idPrijOld = NULL
|
|
|
|
-- zjisti jestli na cilovem skladu mame nejakou otevrenou prijemku z dnesniho dne
|
|
SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
|
|
AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem))
|
|
, 0)
|
|
IF (@cnt=0) -- nemame, vygeneruj ji
|
|
BEGIN
|
|
SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabDokladyZbozi WHERE ID=@idPrij
|
|
SET @datPrijem = @dzDatum
|
|
EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijOld OUT, @Sklad=@sklProOdvod, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad,
|
|
@Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@datPrijem
|
|
END
|
|
IF (@cnt=1) -- ma jen jednu
|
|
BEGIN
|
|
SELECT TOP(1) @idPrijOld=ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
|
|
AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)
|
|
END
|
|
IF (@cnt>1) -- mam jich vic, vezmi tu posledni (nejnovejsi)
|
|
BEGIN
|
|
SET @idPrijOld = (SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
|
|
AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL
|
|
AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)
|
|
ORDER BY DatPorizeni DESC)
|
|
END
|
|
IF (@idPrijOld IS NOT NULL) -- nakopiruj do ni polozky nove prijemky
|
|
BEGIN
|
|
IF (@aktualizujPolozkyExistPrij=0) AND (@idPrijOld IS NOT NULL) -- nechci existujici prijemku aktualizovat, novou polozku pridam
|
|
BEGIN
|
|
EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijOld, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL,
|
|
@KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL,
|
|
@StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL,
|
|
@PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1,
|
|
@SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT,
|
|
@KopirovaniDokladu=0
|
|
SET @idVPrVC = (SELECT IDVyrCis FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy)
|
|
SET @vc = NULL
|
|
IF (@idVPrVC IS NOT NULL)
|
|
SET @vc = (SELECT VyrCislo FROM dbo.TabVyrCisPrikaz WHERE ID=@idVPrVC)
|
|
SET @idPZNew = NULL
|
|
SET @idVCP = (SELECT TOP(1) vcp.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
|
|
JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID)
|
|
JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis)
|
|
WHERE d.ID=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
|
|
IF (@vc IS NOT NULL)
|
|
SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
|
|
JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID)
|
|
JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis)
|
|
WHERE p.IDDoklad=@idPrijOld AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
|
|
ELSE
|
|
SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad)
|
|
WHERE p.IDDoklad=@idPrijOld AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC)
|
|
IF (@idPZNew IS NOT NULL)
|
|
INSERT dbo.TabPrikazMzdyAZmetkyGenPZ (IDMzdy, TypGen, IDPohybu) SELECT @IDMzdy, 2, @idPZNew
|
|
END
|
|
|
|
|
|
IF (@aktualizujPolozkyExistPrij=1) AND (@idPrijOld IS NOT NULL) -- chci existujici prijemku aktualizovat (udaji nove polozky)
|
|
BEGIN
|
|
SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @cOrg=CisloOrg
|
|
FROM dbo.TabDokladyZbozi WHERE ID=@idPrijOld
|
|
|
|
DECLARE cPol CURSOR LOCAL FAST_FORWARD FOR
|
|
SELECT ID, IDZboSklad FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij
|
|
OPEN cPol
|
|
WHILE (1=1)
|
|
BEGIN
|
|
FETCH NEXT FROM cPol INTO @idPZNew, @idSS
|
|
IF (@@FETCH_STATUS<>0) BREAK
|
|
|
|
SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0)
|
|
IF (@cnt=0) -- nemam na starem dokladu polozku, zalozim
|
|
BEGIN
|
|
EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZOld OUT, @IDDoklad=@idPrijOld, @DruhPohybu=0, @CisloOrg=@cOrg, @IDZboSklad=@idSS,
|
|
@Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL,
|
|
@ZakazanoDPH=0, @VstupniCena=@vstC
|
|
SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0)
|
|
END
|
|
IF (@cnt=1) -- polozka dohledana, aktualizuju
|
|
BEGIN
|
|
SELECT @idPZOld=ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS
|
|
UPDATE o SET o.Mnozstvi=o.Mnozstvi + n.Mnozstvi
|
|
FROM dbo.TabPohybyZbozi n, dbo.TabPohybyZbozi o WHERE n.ID=@idPZNew AND o.ID=@idPZOld
|
|
-- pokud mam VC, prepis je
|
|
IF EXISTS (SELECT 1 FROM dbo.TabVyrCP WHERE IDPolozkaDokladu=@idPZNew)
|
|
INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace)
|
|
SELECT @idPZOld, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace FROM dbo.TabVyrCP WHERE ID=@idPZNew
|
|
END
|
|
|
|
END
|
|
CLOSE cPol
|
|
DEALLOCATE cPol
|
|
END -- @idPrijOld IS NOT NULL
|
|
|
|
END -- @cnt=1, mam existujici prijemku
|
|
|
|
|
|
|
|
|
|
-- kopie na technologicky sklad, aby se mohly delat provozni vydejky
|
|
SET @idPrijKopie = NULL
|
|
IF (@kopiiNaTechSklad=1) AND (@sklTechnicky IS NOT NULL)
|
|
BEGIN
|
|
SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabPohybyZbozi WHERE ID=@idPrij
|
|
EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijKopie OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad,
|
|
@Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@dzDatum
|
|
IF (@idPrijKopie IS NOT NULL)
|
|
EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijKopie, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL,
|
|
@KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL,
|
|
@StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL,
|
|
@PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1,
|
|
@SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT,
|
|
@KopirovaniDokladu=0
|
|
END -- kopii na TechSklad
|
|
|
|
|
|
|
|
IF (@realizujPrijem=1)
|
|
BEGIN
|
|
BEGIN TRY
|
|
-- vypnuto, polozky se davaji do jedne denni prijemky, vygenerovana bude zrusena o krok dal
|
|
-- EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
|
|
IF (@idPrijKopie IS NOT NULL)
|
|
EXEC dbo.hp_Realizuj_Prijem @ID=@idPrijKopie, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errMsg = ERROR_MESSAGE()
|
|
END CATCH
|
|
END
|
|
|
|
|
|
-- smaz vygenerovanou prijemku, davame to na sbernou s ID = @idPrijOld, viz kopie polozek vyse pres hp_generuj_navazny_doklad nebo kurzor
|
|
IF OBJECT_ID(N'tempdb..#TabPomSeznamDZProDel', 'U') IS NULL
|
|
CREATE TABLE #TabPomSeznamDZProDel (ID INT NOT NULL)
|
|
INSERT #TabPomSeznamDZProDel (ID) VALUES (@idPrij)
|
|
EXEC dbo.hp_SmazSeznamDokZbozi -- postara se i o smazani #TabPomSeznamDZProDel
|
|
DELETE FROM dbo.TabPrikazMzdyAZmetkyGenPZ WHERE IDMzdy=@IDMzdy AND TypGen IN (2,3) AND IDPohybu IN (SELECT ID FROM @idPZsOld)
|
|
|
|
-- vycisti seed
|
|
SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0)
|
|
DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp)
|
|
SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0)
|
|
DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp)
|
|
|
|
END
|
|
CLOSE prij
|
|
DEALLOCATE prij
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- cisteni
|
|
DROP TABLE IF EXISTS #TabGenPrijem
|
|
DROP TABLE IF EXISTS #TabPolotovProGenOdv
|
|
DROP TABLE IF EXISTS #TabVyrCisProGenOdv
|
|
DROP TABLE IF EXISTS #TabOdved_IDMzdy
|
|
DROP TABLE IF EXISTS #TabOdved
|
|
|
|
DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig
|