-- 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=1,
     @errMsg NVARCHAR(500)=N'' OUT
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

IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy)
 RETURN


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,
 @doklPrPostup INT,
 @altPrPostup NCHAR(1),
 @doklKV INT,
 @IDKmen INT,
 @mjEvid NVARCHAR(10),
 @jeFinal BIT=0,
 @idPZ INT,
 @idPZOld INT,
 @idPZOld2 INT,
 @idPZSberna INT,
 @idSS INT,
 @idVCS INT,
 @idVCP INT,
 @idVPrVC INT,
 @vc NVARCHAR(100),
 @NekontrolMnozOdvedFinal BIT=0,
 @mnozstvi NUMERIC(19,6)=0,
 @mnozstviKA NUMERIC(19,6)=0,
 @radaOdvNaSklad NVARCHAR(3)=N'273',
 @sklProOdvod NVARCHAR(30)=N'261',
 @sklProOdvodHV NVARCHAR(30)=N'262',
 @sklProPolo NVARCHAR(30)=N'311',
 @sklProFinal NVARCHAR(30)=N'312',
 @sklPrijem NVARCHAR(30),
 @radaVPr NVARCHAR(10),
 @idPrij INT,
 @idPrijOld INT,
 @idPrijSberna INT,
 @uklidPomocTab BIT,
 @idPrijKopie INT,
 @sklTechnicky NVARCHAR(30),
 @sklTechnolog NVARCHAR(30),
 @sklTechnologHV 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),
 @idPalety INT,
 @paletList NVARCHAR(100),
 @sarze NVARCHAR(30)
DECLARE
 @ksOdv NUMERIC(19,6),
 @ksOdv_ks NUMERIC(19,6),
 @idDavkaPomoc INT,
 @mnozDavkaPomoc NUMERIC(19,6)





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%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%'
IF (@sklTechnicky IS NULL)
 SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%'


IF (@sklTechnolog IS NULL)
 SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%'
IF (@sklTechnolog IS NULL)
 SET @sklTechnolog = N'261'
IF (@sklTechnologHV IS NULL)
 SELECT @sklTechnologHV=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev LIKE N'%HV%' AND CisloStr LIKE N'2%'
IF (@sklTechnologHV IS NULL)
 SET @sklTechnologHV = N'262'






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))







SELECT @mnozstvi=kusy_odv, @doklPrPostup=DokladPrPostup, @altPrPostup=AltPrPostup FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
SET @mnozstviKA = 0

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


SELECT @mjEvid=MJEvidence FROM dbo.TabKmenZbozi WHERE ID=@IDKmen
IF (@mjEvid=N'KA')
 SET @mnozstviKA = @mnozstvi


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
*/

IF (@jeFinal=1)
  SET @sklProOdvod = @sklTechnologHV
 ELSE
  SET @sklProOdvod = @sklTechnolog




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)

-- @idPZ je TabPrikazPrevodPolotov.ID
     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





IF (@jeFinal=0)
  SET @sklPrijem=@sklProPolo
 ELSE
  SET @sklPrijem=@sklProFinal


IF (@sklPrijem<>N'')
 BEGIN
  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

    SELECT @datPrijem=DatPorizeni FROM dbo.TabDokladyZbozi WHERE ID=@idPrij




    IF (@realizujPrijem=1)
     BEGIN
      BEGIN TRY
       EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
       IF (@bChyba=1)
         INSERT dbo.Tabx_Vyroba_Log (Kategorie, Typ, LogText, iHodnota) SELECT 1, 1, 'Chyba realizace neidentifikovaná', @idPrij
        ELSE
         BEGIN
          SET @idPrijOld = NULL
          SET @idPrijSberna = 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=@sklPrijem 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=@idPrijSberna OUT, @Sklad=@sklPrijem, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad,
                                         @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@datPrijem
           END
          IF (@cnt=1)  -- ma jen jednu
           BEGIN
            SELECT TOP(1) @idPrijSberna=ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
              AND CisloOrg=0 AND IDSklad=@sklPrijem 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 @idPrijSberna = (SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
                                      AND CisloOrg=0 AND IDSklad=@sklPrijem AND Realizovano=0 AND BlokovaniEditoru IS NULL
                                      AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)
                                     ORDER BY DatPorizeni DESC)
           END

-- pokud ji mam, nakopiruj do ni novou polozku
          IF (@idPrijSberna IS NOT NULL)
           BEGIN
            EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijSberna, @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 @vc = NULL
            SET @idVPrVC = (SELECT IDVyrCis FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy)
            IF (@idVPrVC IS NOT NULL)
             SET @vc = (SELECT VyrCislo FROM dbo.TabVyrCisPrikaz WHERE ID=@idVPrVC)
            IF (@vc IS NULL)
             SELECT TOP(1) @idPalety=ID, @vc=CisloPalety FROM dbo._TabVyroba_Palety WHERE IDMzda=@IDMzdy AND IDPrikaz=@idPrikaz

            SET @paletList = N''
            IF (@vc IS NOT NULL)
             SET @paletList = @vc

            SET @idPZSberna = 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 @idPZSberna = (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=@idPrijSberna AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
/*
             ELSE -- tato situace nesmi nastat, na sklad se vzdy prijima polotovar nebo final vcetne VC/paletovelo listu
              SET @idPZSberna = (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 (@idPZSberna IS NOT NULL)
             BEGIN
              SET @idPalety = (SELECT ID FROM dbo._TabVyroba_Palety WHERE CisloPalety=@paletList AND IDPrikaz=@idPrikaz)
              UPDATE dbo._TabVyroba_Palety SET IDPohybPrijem=@idPZSberna WHERE ID=@idPalety
              SELECT @sarze=Sarze FROM dbo._TabVyroba_Palety WHERE ID=@idPalety

-- udelej pomocnou vazbu polozky prijmu na skladu 311/312 na polozku prijmu na technologickem sklade 261/262
              SET @idPZOld = NULL -- id pohybu zbozi na prijemce 261/262
              IF (@vc IS NOT NULL)
                SET @idPZOld = (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=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
               ELSE
                SET @idPZOld = (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=@idPrij AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC)

              IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZSberna) AND (@idPZSberna IS NOT NULL)
               INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZSberna)
              IF (@idPZOld IS NULL)
               SET @idPZOld = (SELECT TOP(1) IDPohybOZPuvodni FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@idPalety)
              IF (@idPZOld IS NULL)
               SET @idPZOld = (SELECT TOP(1) ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij) -- id pohybu zbozi na prijemce 261/262            
              IF (@idPZOld IS NOT NULL)
               UPDATE dbo.TabPohybyZbozi_EXT SET _Prijem_IDPZPuvodni=@idPZOld WHERE ID=@idPZSberna

              IF (@idPalety IS NOT NULL)
               IF NOT EXISTS (SELECT 1 FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@idPalety)
                INSERT dbo._TabVyroba_PaletyPohybOZ (IDPalety, IDPohybOZ, Sarze, Mnozstvi, MnozstviKA, IDPohybOZPuvodni)
                 SELECT @idPalety, @idPZSberna, @sarze, @mnozstvi, @mnozstviKA, @idPZOld


-- smaz vazbu nove polozky (prijem na sklade 311/312) na vyrobni prikaz
              UPDATE dbo.TabPohybyZbozi SET IDPrikaz=NULL, TypVyrobnihoDokladu=NULL, DokladPrikazu=NULL WHERE ID=@idPZSberna
              DELETE FROM dbo.TabPrikazMzdyAZmetkyGenPZ WHERE IDMzdy=@IDMzdy AND TypGen=2 AND IDPohybu=@idPZSberna

             END -- @idPZSberna IS NOT NULL

           END -- @idPrijOld IS NOT NULL
         END -- else @bChyba=1
      END TRY
      BEGIN CATCH
       SET @errMsg = ERROR_MESSAGE()
       INSERT dbo.Tabx_Vyroba_Log (Kategorie, Typ, LogText, iHodnota) SELECT 1, 1, 'Chyba realizace neidentifikovaná', @idPrij
      END CATCH
     END


  -- 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
 END




-- napocti odvedeni davek Kapacitniho planu vedenych v pomocne Tabx_Vyroba_DavkyPlanu
IF OBJECT_ID(N'Tabx_Vyroba_DavkyPlanu', 'U') IS NOT NULL
 BEGIN
  SET  @ksOdv = ISNULL( (SELECT SUM(kusy_odv) FROM dbo.TabPrikazMzdyAZmetky WHERE IDPrikaz=@IDPrikaz AND DokladPrPostup=@doklPrPostup), 0)
  IF (@ksOdv>0)
   BEGIN
    SET @ksOdv_ks = @ksOdv
    IF (@mjEvid=N'KA')
     SET @ksOdv_ks = @ksOdv_ks * dbo.ef_Kmen_VratPocetKsVKartonu (@IDKmen)

    DECLARE d CURSOR LOCAL FAST_FORWARD FOR
     SELECT ID, Mnozstvi
      FROM Tabx_Vyroba_DavkyPlanu
      WHERE IDPrikaz=@IDPrikaz
        AND DokladPrPostup=@doklPrPostup
        AND Dilec=@IDKmen
    OPEN d
    WHILE (1=1)
     BEGIN
      FETCH NEXT FROM d INTO @idDavkaPomoc, @mnozDavkaPomoc
      IF (@@FETCH_STATUS<>0) BREAK
     END
    CLOSE d
    DEALLOCATE d
   END  -- @ksOdv_ks
 END   -- Tabx_Vyroba_DavkyPlanu IS NOT NULL





-- 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
