-- dbo.ep_Vyroba_Doklady_Micharna CREATE PROCEDURE dbo.ep_Vyroba_Doklady_Micharna @idJson INT=NULL AS -- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! -- sklady/rady lze ovlivnit nastavenim tabulky #HDCTabDefiniceProZapisJSON -- CREATE TABLE #HDCTabDefiniceProZapisJSON (HlavniSkladMat NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30), TechnologickySklad NVARCHAR(30), SkladVyrobky NVARCHAR(30), -- RadaTechnologickyVydej NVARCHAR(3) ) SET NOCOUNT ON DECLARE @tranPred INT, @cnt INT, @errMsg NVARCHAR(500), @bChyba BIT, @iChyba INT, @debugXml XML, @gKV XML, @kv XML, @odv XML, @aktDatum DATETIME=GETDATE(), @logTyp TINYINT, @logText NVARCHAR(500), @logInt INT, @logStr NVARCHAR(255), @log4Mail BIT=0 DECLARE @jsonString NVARCHAR(MAX), @jsonString2 NVARCHAR(MAX), @typDokum NVARCHAR(50), @subtypDokum NVARCHAR(50), @akce NVARCHAR(50) DECLARE @cOrg INT, @sklMat NVARCHAR(30), @sklTechnicky NVARCHAR(30), @sklPek NVARCHAR(30), @sklProFin NVARCHAR(30)=N'312', @sklProPolo NVARCHAR(30)=N'311', @radaTechVydej NVARCHAR(30)=N'223', @radaTechPrijem NVARCHAR(30)=N'', @sklVydejMat NVARCHAR(30), @radaDZVydejka NVARCHAR(3)=NULL, @radaDZPrevodV NVARCHAR(3)=NULL, @prevodka BIT=0, @parZnak NVARCHAR(20) DECLARE @idPHIdent BIGINT, @idPHIdentBak BIGINT, @idPHIdent2 BIGINT, @idPHObj INT, @idPHObjPol INT DECLARE @datPorizeni DATETIME, @idVPr INT, @idZakazModif INT, @radaVPr NVARCHAR(10), @cisloPrikazu NVARCHAR(20), @idVPrNizsi INT, @radaVPrNizsi NVARCHAR(10), @idVPrVyssi INT, @radaVPrVyssi NVARCHAR(10), @dilec INT, @dilecVyssi INT, @idZakazka INT, @cisloZak NVARCHAR(30), @casStart DATETIME, @vyrobniDen DATETIME, @smena TINYINT, @casStartOld DATETIME, @viskoz TINYINT, @vodaLitry NUMERIC(12,3), @moukaKgNorma NUMERIC(19,6), @moukaKgFin NUMERIC(19,6), @moukaSilo TINYINT, @jsemMouka BIT, @hmotTesta NUMERIC(19,6), @idMzda INT, @idMezd NVARCHAR(max), @nazevDilce NVARCHAR(100), @skCasSek INT, @casKonec DATETIME, @idSS INT, @rDoklVyd NVARCHAR(3), @idDZ INT, @idDZDst INT, @idPZ INT, @datumDZ DATETIME, @datReal DATETIME, @menaDZ NVARCHAR(3), @kurzDZ NUMERIC(19,6), @kurzEDZ NUMERIC(19,6), @dpz TINYINT, @jednM INT, @vstC TINYINT DECLARE @mnDavkaPred NUMERIC(19,6), @mnDavkaPo NUMERIC(19,6), @procZtrat NUMERIC(19,6), @mnBezZtrat NUMERIC(19,6), @mnSeZtrat NUMERIC(19,6) DECLARE @doklKV INT, @idPrKVazby INT, @doklPrV INT, @altPrV NCHAR(1), @oper NVARCHAR(4), @popisOper NVARCHAR(100), @jeOdvOperace BIT, @pozice NVARCHAR(100), @idKZ INT, @nazev1 NVARCHAR(100), @idVCK INT, @idVCS INT, @idVCP INT, @sz NVARCHAR(3), @rc NVARCHAR(30), @idUmist INT, @sarze NVARCHAR(30), @paletList NVARCHAR(30), @mnozDilec NUMERIC(19,6), @mnoz NUMERIC(19,6), @mnoz2 NUMERIC(19,6), @mnozVyd NUMERIC(19,6), @mnozReq NUMERIC(19,6), @mnozNew NUMERIC(19,6), @mnozEvid NUMERIC(19,6), @idVazVP INT, @mnozVyssiReq NUMERIC(19,6), @mnozVyssiOdv NUMERIC(19,6) DECLARE @idStartStopOp INT, @idPracoviste INT, @idPracovisteOld INT, @idStroj INT, @strojPec NVARCHAR(40), @statusStroje NVARCHAR(50), @idEvROp INT, @idEvROpR INT, @cisZam INT, @idZam INT, @doklPrP INT, @altPrP NCHAR(1) DECLARE @retVal INT, @RespekExistDoklady BIT=0, @NekontrolMnozOdvedFinal BIT, @idUziv INT DECLARE @idKZv INT, @idKZn INT, @idPrKVazbyPolot INT, @idPrKVazbyNova INT, @novaPriorita INT, @mnozVaz NUMERIC(19,6), @mnozZadVaz NUMERIC(19,6), @procZtrVaz NUMERIC(19,6), @idOdchylVaz INT DECLARE @idDZPomocPrij INT, @radaPrijem NVARCHAR(3)='292', @menaPrij NVARCHAR(3), @kurzPrij NUMERIC(19,6), @kurzPrijE NUMERIC(19,6), @vstCPrij TINYINT, @jednMPrij INT, @idPZPomocPrij INT, @idSSPomocPrij INT, @mnozSklad NUMERIC(19,6), @mnozVydej NUMERIC(19,6), @mnozPrij NUMERIC(19,6) DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent BIGINT ) DECLARE @PrKVazby TABLE (ID INT NOT NULL, Sklad NVARCHAR(30), IDKmenZbozi INT, Mnozstvi NUMERIC(19,6) DEFAULT 0.0 ) DECLARE @TabPolozky TABLE (ID INT IDENTITY(1,1) NOT NULL, IDKmen INT, Sarze NVARCHAR(100), PaletList NVARCHAR(100) ) DECLARE @TabIDMzdy TABLE (ID INT NOT NULL) -- tabulky pro generovani vydejky a odvodu 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)) 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 NVARCHAR(max) 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, MJ NVARCHAR(10) 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) ) DROP TABLE IF EXISTS #TabGenRezVyd CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) -- reseed SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0) DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @cnt) SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0) DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @cnt) SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabPrikazMzdyAZmetky), 0) DBCC CHECKIDENT (TabPrikazMzdyAZmetky, RESEED, @cnt) SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabEvidRozpracOper), 0) DBCC CHECKIDENT (TabEvidRozpracOper, RESEED, @cnt) SELECT @cnt = ISNULL( (SELECT MAX(ID) FROM dbo.TabEvidRozpracOperR), 0) DBCC CHECKIDENT (TabEvidRozpracOperR, RESEED, @cnt) -- vytvor pomocnou tabulku DROP TABLE IF EXISTS #TabJSONData CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) -- odlinkuj neplatna data UPDATE dbo._hdc_ph_PrijataJsonData SET IDDoklad=NULL WHERE IDDoklad NOT IN (SELECT ID FROM dbo.TabDokladyZbozi) UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=NULL WHERE IDMzda NOT IN (SELECT ID FROM dbo.TabPrikazMzdyAZmetky) IF OBJECT_ID(N'tempdb..#HDCTabDefiniceProZapisJSON', N'U') IS NOT NULL SELECT TOP(1) @sklMat=HlavniSkladMat, @sklPek=SkladVyrobaPekarna, @sklTechnicky=TechnologickySklad, @radaTechVydej=RadaTechnologickyVydej, @sklProFin=SkladVyrobky FROM #HDCTabDefiniceProZapisJSON DROP TABLE IF EXISTS #HDCTabDefiniceProZapisJSON IF (@sklMat IS NULL) SELECT @sklMat=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' SET @sklProPolo = @sklMat IF (@sklTechnicky IS NULL) SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%' AND CisloStr LIKE N'2%' IF (@sklPek IS NULL) SELECT @sklPek=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' IF (@sklTechnicky IS NULL) AND (@sklPek IS NOT NULL) SET @sklTechnicky=@sklPek IF (@sklProFin IS NULL) SELECT @sklProFin=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Hlavní sklad - Výrobky / Zboží' IF (@radaTechVydej IS NOT NULL) SET @radaDZVydejka = @radaTechVydej 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) IF (@idJson IS NULL) DECLARE j CURSOR LOCAL FOR SELECT ID, JSONData, Akce FROM dbo._hdc_ph_PrijataJsonData WHERE DatZpracovani IS NULL AND ISNULL(JSONData, N'')<>N'' AND DatPorizeni>CONVERT(datetime,N'18.3.2025',104) ORDER BY DatPorizeni ASC ELSE DECLARE j CURSOR LOCAL FOR SELECT ID, JSONData, Akce FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson OPEN j WHILE (1=1) BEGIN FETCH NEXT FROM j INTO @idJson, @jsonString, @akce IF (@@FETCH_STATUS<>0) BREAK IF (ISJSON(@jsonString)=0) CONTINUE IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 BEGIN UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson CONTINUE END UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL WHERE ID=@idJson SET @logTyp = 0 SET @logInt = NULL SET @logStr = N'' SET @log4Mail = 0 SET @logText = N'' DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString BEGIN TRY SET @tranPred = @@TRANCOUNT IF (@tranPred=0) BEGIN TRAN -- BEGIN: SPOTREBA/ODPIS IF (@akce=N'vyroba_spotreba') BEGIN DELETE FROM @PrKVazby SET @radaDZVydejka = N'223' SELECT @typDokum=u2.typ, @subtypDokum=ISNULL(u2.subtyp, N''), @idPHIdent=u2.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId BIGINT) AS u2; IF (@idPHIdent IS NOT NULL) UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson; -- SPOTREBA PLUS UKONCENI OPERACE MICHANI ---------------------------------------------------- IF (@typDokum='vyroba') BEGIN SET @mnozEvid = NULL IF (@subtypDokum='michani') BEGIN SET @vodaLitry = 0 SET @moukaKgNorma = 0 SET @moukaKgFin = 0 SET @moukaSilo = 0 SELECT @idStroj=u3.heliosId, @idPHIdent=u2.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (datazoneId BIGINT, stroj NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (stroj) WITH (heliosId INT) u3; SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec, @viskoz=u3.viskozita, @moukaSilo=u3.silo FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (prikaz) WITH (heliosId INT, datazoneId BIGINT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME, viskozita TINYINT, silo TINYINT) u3; END -- michani IF (@subtypDokum='maceni') OR (@subtypDokum='baleni') BEGIN SELECT @idPHIdent=u2.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (datazoneId BIGINT, stroj NVARCHAR(MAX) AS JSON) AS u2; SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (prikaz) WITH (heliosId INT, datazoneId BIGINT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME) u3; END -- maceni/baleni -- je prikaz zadany ? Pokud ne, pokracuj na dalsi json IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu NOT IN (30)) BEGIN UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Přikaz je již uzavřen' WHERE ID=@idJson CONTINUE END SET @idPHIdentBak = @idPHIdent SELECT @vyrobniDen=Datum, @smena=Smena FROM dbo.ef_GetDatumASmenu(@casStart) SELECT @idStartStopOp=ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrikaz=@idVPr AND IDPHIdent=@idPHIdent SELECT @dilec=IdTabKmen, @radaVPr=Rada, @idZakazModif=IDZakazModif, @idZakazka=IDZakazka, @mnozDilec=kusy_zad FROM dbo.TabPrikaz WHERE ID=@idVPr SELECT @cisloZak=CisloZakazky FROM dbo.TabZakazka WHERE ID=@idZakazka IF (@radaDZVydejka IS NULL) SET @radaDZVydejka = ISNULL( (SELECT RadaDokl_GenerRezVyd_Mat FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @radaDZVydejka) -- SET @sklMat = ISNULL( (SELECT VydejMatPol_SkladProGenHlavDZ FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr), @sklMat) -- povol evidenci a odvod vice ks nez je na prikazu UPDATE dbo.TabRadyPrikazu SET NekontrolMnozEvidMezd=1 WHERE Rada=@radaVPr AND NekontrolMnozEvidMezd=0 UPDATE dbo.TabRadyPrikazu SET NekontrolMnozOdvedFinal=1 WHERE Rada=@radaVPr AND NekontrolMnozOdvedFinal=0 SET @idDZ = (SELECT IDDoklad FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson) IF (@idDZ IS NULL) -- @idDZ uz existuje ? Ne, udelej vydejku na prikaz BEGIN DELETE FROM @TabPolozky SELECT @jsonString2=u2.vydej FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString2 DECLARE p CURSOR LOCAL FOR SELECT u.nazev, u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.mnozstviVychozi, u.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ( nazev NVARCHAR(100), skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), mnozstviVychozi NUMERIC(19,6), datazoneId INT) AS u OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @nazev1, @sz, @rc, @sarze, @paletList, @mnoz, @mnoz2, @idPHIdent IF (@@FETCH_STATUS<>0) BREAK SET @paletList = ISNULL(@paletList, N'') IF (@sz=N'921') AND (@rc=N'001000') SET @vodaLitry = @mnoz IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') BEGIN SET @moukaKgFin = @mnoz SET @moukaKgNorma = @mnoz2 END SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo<>N'921' AND SkupZbo=@sz AND RegCis=@rc AND (Material=1 OR Dilec=1) AND Sluzba=0) IF (@idKZ IS NOT NULL) BEGIN INSERT @TabPolozky (IDKmen, Sarze, PaletList) SELECT @idKZ, @sarze, @paletList -- najdi vazbu vc. kontroly jestli polozka neni rezijni material SET @idPrKVazby = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND vyssi=@dilec AND nizsi=@idKZ AND IDOdchylkyDo IS NULL AND RezijniMat=0) -- pokud neni material v pozadavcich prikazu, pridej ho (neni v TPV) IF (@idPrKVazby IS NULL) AND (@mnoz>0) EXEC @idPrKVazby=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz, @Mnoz_zad=@mnoz, @VychoziSklad=@sklTechnicky IF (@idPrKVazby IS NOT NULL) BEGIN INSERT @PrKVazby (ID, Sklad, IDKmenZbozi, Mnozstvi) SELECT ID, Sklad, @idKZ, @mnoz FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby UPDATE dbo.TabPrKVazby SET Sklad=@sklTechnicky WHERE ID=@idPrKVazby SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklTechnicky) IF (@idSS IS NULL) EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklTechnicky, @IDZboSklad=@idSS OUT END -- @idPrKVazby IS NOT NULL END -- @idKZ IS NOT NULL END CLOSE p DEALLOCATE p SET @kv = (SELECT * FROM @PrKVazby FOR XML AUTO) IF (@subtypDokum='michani') OR (@subtypDokum=N'') BEGIN SET @mnozEvid = ISNULL(@mnozEvid, 1) -- UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnoz>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnoz END WHERE IDPrikaz=@idVPr UPDATE #tabOdved SET mnozstvi=@mnoz WHERE IDPrikaz=@idVPr 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, NULL, -- nekontrolovat odvedene mnozstvi P.EvidJednotka, @mnozEvid, -- u michani by mela byt vzdy jen jedna davka @sklTechnicky, 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=@idVPr END ELSE BEGIN -- ne michani -- UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnoz>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnoz END WHERE IDPrikaz=@idVPr UPDATE #tabOdved SET mnozstvi=@mnoz WHERE IDPrikaz=@idVPr 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, @mnoz, 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=@idVPr AND (CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnoz>P.kusy_zive THEN P.kusy_zive ELSE @mnoz END)>0 END SET @odv = (SELECT * FROM #TabOdved FOR XML AUTO) SET @RespekExistDoklady=0 SET @NekontrolMnozOdvedFinal=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*O.mnozstvi/P.kusy_zad - CASE WHEN @RespekExistDoklady=1 THEN (PrKV.VydanoRefMnoz-PrKV.Mnoz_nepotrebne) + (SELECT ISNULL(SUM(PZ2.prepmnozstvi*(PZ2.mnozstvi-PZ2.MnOdebrane) * PrKV2.RefMnoz / PrKV2.mnoz_zad), 0.0) FROM TabPohybyZbozi PZ2 INNER JOIN TabDokladyZbozi DZ2 ON (DZ2.ID=PZ2.IDDoklad AND DZ2.splneno=0) INNER JOIN TabStavSkladu SS2 ON (SS2.ID=PZ2.IDZboSklad) INNER JOIN TabPrKVazby PrKV2 ON (PrKV2.IDPrikaz=PZ2.IDPrikaz AND PrKV2.Doklad=PZ2.DokladPrikazu AND PrKV2.nizsi=SS2.IDKmenZbozi AND PrKV2.IDOdchylkyDo IS NULL) WHERE PZ2.TypVyrobnihoDokladu=1 AND PZ2.IDPrikaz=PrKV.IDPrikaz AND PZ2.DokladPrikazu=PrKV.Doklad AND PZ2.Splneno=0 AND PZ2.druhPohybuZbo IN (2,4,9,10) AND PZ2.SkutecneDatReal IS NULL) ELSE 0.0 END, CASE WHEN @RespekExistDoklady=0 THEN O.mnozstvi END, CASE WHEN @RespekExistDoklady=0 THEN P.kusy_zad END, 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 (SELECT IDPrikaz=O1.IDPrikaz, Mnozstvi=SUM(O1.mnozstvi) + CASE WHEN @RespekExistDoklady=1 THEN MAX(P1.kusy_odved+P1.kusy_ztrac+P1.kusy_zmet) + (SELECT ISNULL(SUM(PZ1.prepmnozstvi*PZ1.mnozstvi), 0.0) FROM TabPohybyZbozi PZ1 WHERE PZ1.TypVyrobnihoDokladu=0 AND PZ1.IDPrikaz=O1.IDPrikaz AND PZ1.druhPohybuZbo=0 AND PZ1.SkutecneDatReal IS NULL) ELSE 0.0 END FROM #tabOdved O1 INNER JOIN TabPrikaz P1 ON (P1.ID=O1.IDPrikaz) GROUP BY O1.IDPrikaz) O INNER JOIN TabPrikaz P ON (P.ID=O.IDPrikaz AND P.StavPrikazu IN (20,30,50)) INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada) INNER JOIN TabPrKVazby PrKV ON (PrKV.IDPrikaz=O.IDPrikaz AND /*PrKV.predzpracovano=0 AND*/ PrKV.prednastaveno=1 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND PrKV.IDOdchylkyDo IS NULL) INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) WHERE (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) -- co neni v datech PH JSON, vymaz (pokud mam v kusovniku neco navic, ale standardne se to nepridava, tj. napr. pridavky do testa) DELETE FROM #TabPrKVazbyGen WHERE IDPrKV NOT IN (SELECT ID FROM @PrKVazby) UPDATE G SET MnozstviMax = CASE WHEN RP.NekontrolovatMnozMatPol=1 OR ISNULL(PKZ.VyraditZKontrMaxVydanehoMnozDoVyroby,0)=1 THEN NULL ELSE (CASE WHEN PrKV.splneno=1 THEN 0.0 ELSE PrKV.mnoz_zad-PrKV.VydanoRefMnoz*PrKV.mnoz_zad/PrKV.RefMnoz END) END FROM #TabPrKVazbyGen G INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabPrikaz P ON (P.ID=PrKV.IDPrikaz) INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada) LEFT OUTER JOIN TabParametryKmeneZbozi PKZ ON (PKZ.IDKmenZbozi=PrKV.nizsi) UPDATE G SET MnozstviPoz=ROUND(MnozstviPoz,4,1), MnozstviMax=ROUND(MnozstviMax,4,1) FROM #TabPrKVazbyGen G INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabPrikaz P ON (P.ID=PrKV.IDPrikaz) INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada AND RP.GenerVydejVMJEvid=1) UPDATE #TabPrKVazbyGen SET mnozstviPoz=CEILING(mnozstviPoz) FROM #TabPrKVazbyGen G INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi) INNER JOIN TabMJ MJ ON (MJ.kod=KZ.MJEvidence AND MJ.nedelitelna=1) WHERE G.PoKorekciDat=0 UPDATE #TabPrKVazbyGen SET mnozstviPoz=MnozstviMax WHERE MnozstviMax IS NOT NULL AND mnozstviPoz>MnozstviMax DELETE #TabPrKVazbyGen WHERE MnozstviPoz<=0.0 AND PoKorekciDat=0 UPDATE #TabPrKVazbyGen SET PuvodniMnozstviPoz=mnozstviPoz WHERE PuvodniMnozstviPoz IS NULL UPDATE G SET Dodavatel=CO.ID FROM #TabPrKVazbyGen G INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi) INNER JOIN TabCisOrg CO ON (CO.CisloOrg=KZ.Aktualni_Dodavatel) WHERE G.PoKorekciDat=0 AND G.Dodavatel IS NULL UPDATE #TabPrKVazbyGen SET PoKorekciDat=1 WHERE PoKorekciDat=0 UPDATE #TabPrKVazbyGen SET Generuj=1 SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) -- u michani odmaz vodu IF (@subtypDokum='michani') OR (@subtypDokum=N'') BEGIN DELETE FROM #TabPrKVazbyGen WHERE nizsi=(SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'921' AND RegCis=N'001000') MERGE #TabPrKVazbyGen AS T USING @PrKVazby AS S ON (T.IDPrKV=T.ID) WHEN MATCHED THEN UPDATE SET T.Mnozstvi=S.Mnozstvi, T.MnozstviPoz=S.Mnozstvi; END SET @gKV = (SELECT * FROM #TabPrKVazbyGen FOR XML AUTO) -- generuj vydejku BEGIN TRY EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=@radaDZVydejka, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, @IDExistDoklad=0, @SekejOperace=0 IF (@retVal=0) BEGIN DECLARE vy CURSOR LOCAL FOR SELECT ID FROM #TabGenRezVyd OPEN vy WHILE (1=1) BEGIN FETCH NEXT FROM vy INTO @idDZ IF (@@FETCH_STATUS<>0) BREAK SELECT @sklVydejMat=IDSklad FROM dbo.TabDokladyZbozi WHERE ID=@idDZ IF NOT EXISTS(SELECT ID FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) UPDATE dbo.TabDokladyZbozi_EXT SET _HDCAPI_PHident=@idPHIdentBak WHERE ID=@idDZ -- dopln na ext.info polozky cislo posledni sarze DECLARE vyPol CURSOR LOCAL FOR SELECT p.ID, k.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=@idDZ AND k.Sluzba=0 AND k.SkupZbo<>'921' OPEN vyPol WHILE (1=1) BEGIN FETCH NEXT FROM vyPol INTO @idPZ, @idKZ IF (@@FETCH_STATUS<>0) BREAK SET @paletList = ISNULL( (SELECT TOP(1) PaletList FROM @TabPolozky WHERE IDKmen=@idKZ), N'') SET @sarze = ISNULL( (SELECT TOP(1) Sarze FROM @TabPolozky WHERE IDKmen=@idKZ), N'') IF (@sarze=N'') SET @sarze = ISNULL( (SELECT TOP(1) se._Prevod_PosledniSarze FROM dbo.TabStavSkladu s INNER JOIN dbo.TabStavSkladu_EXT se ON (se.ID=s.ID) WHERE s.IDKmenZbozi=@idKZ AND s.IDSklad=@sklTechnicky), N'') IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=IIF(@sarze=N'', NULL, @sarze), _Vyroba_PaletList=IIF(@paletList=N'', NULL, @paletList) WHERE ID=@idPZ -- u michani a mouky zadat i silo IF (@subtypDokum='michani') OR (@subtypDokum=N'') BEGIN SELECT @jsemMouka = CONVERT(bit, CASE WHEN Nazev1 LIKE N'%mouka%' AND SkupZbo=N'101' THEN 1 ELSE 0 END) FROM dbo.TabKmenZbozi WHERE ID=@idKZ IF (@jsemMouka=1) UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@moukaSilo WHERE ID=@idPZ END END CLOSE vyPol DEALLOCATE vyPol UPDATE dbo._hdc_ph_PrijataJsonData SET IDDoklad=@idDZ WHERE ID=@idJson -- begin: pomocna prijemka nedostatecneho materialu (jen materialu !!!) SET @idDZPomocPrij=NULL DECLARE pomPrij CURSOR LOCAL FOR SELECT p.IDZboSklad, p.Mnozstvi 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=@idDZ -- doklad vydejky AND k.Material=1 AND k.Sluzba=0 OPEN pomPrij WHILE (1=1) BEGIN FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej IF (@@FETCH_STATUS<>0) BREAK -- spocitej jestli mam skladem mnozstvi na realizaci vydejky SET @mnozSklad = ISNULL( (SELECT Mnozstvi+MnozstviKPrijmu-MnozstviKVydeji FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPrij), 0) IF (@mnozVydej>@mnozSklad) BEGIN SET @mnozPrij = @mnozVydej - @mnozSklad IF (@idDZPomocPrij IS NULL) -- uz existuje doklad pomocne prijemky na sklade 261 (technologicky) ? BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZPomocPrij OUT, @Sklad=@sklTechnicky, @DruhPohybu=0, @RadaDokladu=@radaPrijem, @CisloOrg=0 SELECT @menaPrij=Mena, @kurzPrij=Kurz, @kurzPrijE=KurzEuro, @jednMPrij=JednotkaMeny, @vstCPrij=VstupniCena FROM dbo.TabDokladyZbozi WHERE ID=@idDZPomocPrij END IF (@idDZPomocPrij IS NOT NULL) BEGIN EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZPomocPrij OUT, @IDDoklad=@idDZPomocPrij, @DruhPohybu=0, @CisloOrg=0, @IDZboSklad=@idSSPomocPrij, @Mena=@menaPrij, @Kurz=@kurzPrij, @KurzEuro=@kurzPrijE, @JednotkaMeny=@jednMPrij, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=NULL, @VstupniCena=@vstCPrij, @Mnozstvi=@mnozPrij, @PovolitDuplicitu=1 END END END CLOSE pomPrij DEALLOCATE pomPrij IF (@idDZPomocPrij IS NOT NULL) -- pokud mam pomocnou prijemku, zkus ji realizovat nez budes realizovat vydejku BEGIN BEGIN TRY EXEC dbo.hp_Realizuj_Prijem @ID=@idDZPomocPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 END TRY BEGIN CATCH SET @errMsg = ERROR_MESSAGE() END CATCH END -- end: pomocna prijemka nedostatecneho materialu BEGIN TRY EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT END TRY BEGIN CATCH SET @errMsg = N'Chyba realizace výdejky příkazu: ' + ERROR_MESSAGE() IF (CHARINDEX(N'71553', @errMsg)>0) SET @errMsg = @errMsg + N' / nedostatek mnozstvi' INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, IdJsonData) SELECT 51, @errMsg, @idDZ, @IdJson UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson END CATCH UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ AND BlokovaniEditoru IS NOT NULL END CLOSE vy DEALLOCATE vy END END TRY BEGIN CATCH SET @errMsg = 'Chyba generovani vydeje prikazu: ' + ERROR_MESSAGE() INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, IdJsonData) SELECT 50, @errMsg, @idVPr, @idJson UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson END CATCH IF (@idDZ IS NOT NULL) AND ((@subtypDokum='michani') OR (@subtypDokum=N'')) BEGIN SET @hmotTesta = ISNULL( (SELECT SUM(p.Mnozstvi) 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=@idDZ AND k.Sluzba=0), 0) IF (@hmotTesta>0) BEGIN SET @hmotTesta = ROUND(@hmotTesta, 2) IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_HmotTesta=@hmotTesta WHERE ID=@idDZ END -- EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 -- UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ END END -- @idDZ uz existuje ? -- konec operace SET @idMzda = NULL DELETE FROM @TabIDMzdy SET @idPHIdent = @idPHIdentBak IF (@idStartStopOp IS NOT NULL) BEGIN IF (@idDZ IS NOT NULL) UPDATE dbo._TabVyroba_OperaceStartStop SET IDDokladOZ=@idDZ WHERE ID=@idStartStopOp SELECT @idEvROp=IDEvidRozpracOper FROM dbo._TabVyroba_OperaceStartStop WHERE ID=@idStartStopOp IF (@idEvROp IS NOT NULL) BEGIN SELECT @idPracovisteOld=IDPracoviste, @idZam=IDZamestnance FROM dbo.TabEvidRozpracOper WHERE ID=@idEvROp IF (@idZam IS NULL) BEGIN IF (ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)=1) SELECT TOP(1) @idZam=ID FROM dbo.TabCisZam IF (@idZam IS NOT NULL) UPDATE dbo.TabEvidRozpracOper SET IDZamestnance=@idZam WHERE ID=@idEvROp END UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT Cislo FROM dbo.TabCisZam WHERE ID=@idZam) WHERE ID=@idJson AND CisloZam IS NULL SET @skCasSek = DATEDIFF(s, @casStart, @casKonec) UPDATE dbo.TabEvidRozpracOperR SET Mnoz_odv=1, Sk_cas=CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END, Sk_cas_Obsluhy=CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END WHERE IDEvidRozpracOper=@idEvROp UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@casKonec, CelkovyCas_T=0, CelkovyCas=DATEDIFF(s, @casStart, @casKonec) WHERE ID=@idEvROp EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvROp, @CelkovyCas_S=@skCasSek, @KVO=1 IF (@idPracovisteOld IS NOT NULL) EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=1 ELSE EXEC dbo.hp_EvidRozpracOper_Uzavreni @IDEvidRozpracOper=@idEvROp, @GenerovatEvidenciOperaci=0 INSERT @TabIDMzdy (ID) SELECT m.ID FROM dbo.TabPrikazMzdyAZmetky m INNER JOIN dbo.TabEvidRozpracOperR er ON (er.ID=m.IDEvidRozpracOperR) WHERE er.IDEvidRozpracOper=@idEvROp SET @idMzda = NULL SET @idMezd = NULL IF EXISTS (SELECT * FROM @TabIDMzdy) BEGIN IF (1=(SELECT COUNT(*) FROM @TabIDMzdy)) SET @idMzda = (SELECT TOP(1) ID FROM @TabIDMzdy) ELSE SELECT @idMezd=STRING_AGG(ID,N',') FROM @TabIDMzdy END UPDATE dbo._TabVyroba_OperaceStartStop SET CasKonec=@casKonec, Ukonceno=1, IDMzda=@idMzda WHERE ID=@idStartStopOp UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=@idMzda, IDMezd=@idMezd WHERE ID=@idJson END END -- @idStartStopOp IS NOT NULL -- pripoj vydejku, resp. jeji polozky, k evidenci operace IF (@idMzda IS NOT NULL) AND (@idDZ IS NOT NULL) BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanaMatVydejka=1 AND ID=@idMzda) BEGIN INSERT dbo.TabPrikazMzdyAZmetkyGenPZ (IDMzdy, TypGen, IDPohybu) SELECT @idMzda, 0, ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZ UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@idMzda AND GenerovanaMatVydejka=0 END END SET @jeOdvOperace = 0 IF (@idMzda IS NOT NULL) SET @jeOdvOperace = (SELECT 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) WHERE pp.IDOdchylkyDo IS NULL AND pmz.ID=@idMzda) -- odved na vyssi prikaz -- zatim v pripade jen jednoho vyssiho IF (@subtypDokum=N'michani') OR (@subtypDokum=N'') BEGIN DECLARE vazP CURSOR LOCAL FOR SELECT vp.ID, vp.IDPrikazVyssi, vp.Mnozstvi, ISNULL(vpe._MnozstviOdv, 0) FROM dbo.TabVazbyPrikazu vp LEFT JOIN dbo.TabVazbyPrikazu_EXT vpe ON (vpe.ID=vp.ID) WHERE vp.IDPrikaz=@idVPr AND (1=0) -- !!! VYPNUTO !!! OPEN vazP WHILE (1=1) BEGIN FETCH FROM vazP INTO @idVazVP, @idVPrVyssi, @mnozVyssiReq, @mnozVyssiOdv IF (@@FETCH_STATUS<>0) BREAK SELECT @dilecVyssi=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPrVyssi SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr -- pokud jsem testo, odved me na vyssi prikaz IF EXISTS (SELECT 1 FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701' AND ID=@dilec) BEGIN SELECT TOP(1) @doklKV=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 -- v pripade necelociselneho mnozstvi davky testa to na vyssim prikazu zaokrouhli vcetne vypoctu ztrat IF (@doklKV IS NOT NULL) AND EXISTS (SELECT 1 FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad)) BEGIN SELECT TOP(1) @mnDavkaPred=mnoz_zad, @mnDavkaPo=CEILING(mnoz_zad), @mnBezZtrat=mnozstvi, @mnSeZtrat=mnozstviSeZtratou FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) SET @mnSeZtrat = ROUND(@mnSeZtrat * (@mnDavkaPo/@mnDavkaPred), 6) UPDATE dbo.TabPrKVazby SET mnoz_zad=CEILING(mnoz_zad), mnozstviSeZtratou=@mnSeZtrat, ProcZtrat= ROUND(100*((@mnSeZtrat/@mnBezZtrat)-1), 2) WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) -- uprav i vazbu prikazu testa na vyssi UPDATE dbo.TabVazbyPrikazu SET Mnozstvi=CEILING(Mnozstvi) WHERE ID=@idVazVP AND Mnozstvi<>CEILING(Mnozstvi) END -- pripoj to k evidenci operace IF (@idMzda IS NOT NULL) BEGIN DELETE FROM #TabOdved_IDMzdy INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idVPr, @idMzda END /* EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idVPr, @IDPrikazCil=@IDVPrVyssi, @Doklad=@doklKV, @IDDilec=@dilec, @mnozstvi=1, @IDOdvedeniVC=0, @IDZakazModif=@idZakazModif IF (@idPZ>0) BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.TabVazbyPrikazu_EXT WHERE ID=@idVazVP) INSERT dbo.TabVazbyPrikazu_EXT (ID) VALUES (@idVazVP) UPDATE dbo.TabVazbyPrikazu_EXT SET _MnozstviOdv = 1 + ISNULL(_MnozstviOdv,0) WHERE ID=@idVazVP END DELETE FROM #TabOdved_IDMzdy */ END -- jsem SZ 701 END CLOSE vazP DEALLOCATE vazP IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVazbyPrikazu WHERE IDPrikaz=@idVPr), 0) BEGIN SELECT @idVazVP=ID, @idVPrVyssi=IDPrikazVyssi FROM dbo.TabVazbyPrikazu WHERE IDPrikaz=@idVPr SELECT @dilecVyssi=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPrVyssi SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr -- pokud jsem testo, odved me na vyssi prikaz IF EXISTS (SELECT 1 FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701' AND ID=@dilec) BEGIN SELECT TOP(1) @doklKV=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 -- v pripade necelociselneho mnozstvi davky testa to na vyssim prikazu zaokrouhli vcetne vypoctu ztrat IF (@doklKV IS NOT NULL) AND EXISTS (SELECT 1 FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad)) BEGIN SELECT TOP(1) @mnDavkaPred=mnoz_zad, @mnDavkaPo=CEILING(mnoz_zad), @mnBezZtrat=mnozstvi, @mnSeZtrat=mnozstviSeZtratou FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) SET @mnSeZtrat = ROUND(@mnSeZtrat * (@mnDavkaPo/@mnDavkaPred), 6) UPDATE dbo.TabPrKVazby SET mnoz_zad=CEILING(mnoz_zad), mnozstviSeZtratou=@mnSeZtrat, ProcZtrat= ROUND(100*((@mnSeZtrat/@mnBezZtrat)-1), 2) WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDVPrVyssi AND nizsi=@dilec AND Splneno=0 AND mnoz_zad<>CEILING(mnoz_zad) END -- pripoj to k evidenci operace IF (@idMzda IS NOT NULL) BEGIN DELETE FROM #TabOdved_IDMzdy INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idVPr, @idMzda END EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idVPr, @IDPrikazCil=@IDVPrVyssi, @Doklad=@doklKV, @IDDilec=@dilec, @mnozstvi=1, @IDOdvedeniVC=0, @IDZakazModif=@idZakazModif IF (@idPZ>0) BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.TabVazbyPrikazu_EXT WHERE ID=@idVazVP) INSERT dbo.TabVazbyPrikazu_EXT (ID) VALUES (@idVazVP) UPDATE dbo.TabVazbyPrikazu_EXT SET _MnozstviOdv = 1 + ISNULL(_MnozstviOdv,0) WHERE ID=@idVazVP END DELETE FROM #TabOdved_IDMzdy END -- jsem SZ 701 END -- jen 1 nadrizeny prikaz -- zapis pro pocitani spotreby testa INSERT dbo._TabVyroba_TestoVyroba (IdPHIdent, IDPrikaz, IDDokladVydejMat, IDKmenZbozi, SkupZbo, RegCis, DatPriprava, VyrobniDen, Smena, DatVypousteni, IDStrojPek, Viskozita, VodaLitry, MoukaHmot, MoukaSilo) SELECT @idPHIdent, @idVPr, @idDZ, @dilec, SkupZbo, RegCis, @casStart, @vyrobniDen, @smena, @casKonec, @idStroj, @viskoz, @vodaLitry, @moukaKgFin, @moukaSilo FROM dbo.TabKmenZbozi WHERE ID=@dilec UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData END -- @subtypDokum michani IF (@subtypDokum IN (N'maceni', N'baleni')) AND (@jeOdvOperace=1) AND (@idMzda IS NOT NULL) BEGIN SELECT @nazevDilce=k.Nazev1 FROM dbo.TabPrikazMzdyAZmetky pmz INNER JOIN dbo.TabKmenZbozi k ON (k.ID=pmz.IDTabKmen) WHERE pmz.ID=@idMzda IF (@nazevDilce LIKE N'%polotovar%') EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda, @bezVyrCis=0, @radaOdvod=N'283', @skladOdvod=@sklProPolo, @realizujPrijem=1, @errMsg=@errMsg OUT ELSE EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda, @bezVyrCis=0, @radaOdvod=N'273', @skladOdvod=@sklProFin, @realizujPrijem=1, @errMsg=@errMsg OUT IF (@errMsg<>N'') BEGIN IF (CHARINDEX(N'2003283', @errMsg)>0) SET @errMsg = @errMsg + N' / nenalezena rada dokladu' UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba='Odvod: ' + @errMsg WHERE ID=@idJson END END UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE() WHERE ID=@idJson END -- typ spotreba -- ODPIS ----------------------------------------------------------------- IF (@typDokum='odpis') BEGIN SET @sklMat = N'211' -- odpis ze skladu Pekarna nebo z 311 - sklad Material ??????? SET @radaDZVydejka = N'242' SET @dpz=4 SELECT @jsonString2=u2.vydej FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH (akce NVARCHAR(50), [data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH ( vydej NVARCHAR(MAX) AS JSON) AS u2 DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString2 DECLARE p CURSOR LOCAL FOR SELECT u.skupzbo, u.regcis, u.sarze, u.paletovylist, u.mnozstvi, u.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ( skupzbo NVARCHAR(3), regcis NVARCHAR(30), sarze NVARCHAR(30), paletovyList NVARCHAR(30), mnozstvi NUMERIC(19,6), datazoneId INT) AS u OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @sz, @rc, @sarze, @paletList, @mnoz, @idPHIdent IF (@@FETCH_STATUS<>0) BREAK SET @paletList = ISNULL(@paletList, N'') SET @sarze = ISNULL(@sarze, N'') IF (@idDZ IS NULL) BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @CisloOrg=0 SELECT @datumDZ=DatPorizeni, @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak FROM dbo.TabDokladyZbozi WHERE ID=@idDZ UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0 WHERE ID=@idDZ END IF (@idDZ IS NOT NULL) BEGIN SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) IF (@idKZ IS NOT NULL) BEGIN SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) IF (@idSS IS NULL) EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT IF (@idSS IS NOT NULL) BEGIN EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz IF (@idPZ IS NOT NULL) BEGIN UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) IF (ISNULL(@sarze,N'')=N'') SET @sarze = (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent, _Vyroba_Sarze=@sarze WHERE ID=@idPZ IF (@paletList<>N'') BEGIN SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) IF (@idVCK IS NULL) EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) IF (@idVCS IS NULL) EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz END END -- @idPZ IS NOT NULL END -- @idSS IS NOT NULL END -- @idKZ IS NOT NULL END -- @idDZ IS NOT NULL END CLOSE p DEALLOCATE p IF (@idDZ IS NOT NULL) BEGIN EXEC dbo.hp_VypCenOZPolozek_IDDokladu @idDZ, 0 UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ -- musim odepsat i z technologickeho skladu EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @Mena=@menaDZ, @CisloOrg=0, @DatumPorizeni=@datumDZ IF (@idDZDst IS NOT NULL) BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZDst) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZDst) UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_IDPuvodniDoklad=@idDZ WHERE ID=@idDZDst SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@idDZ EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@idDZ, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=@menaDZ, @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 IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) AND EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1 AND ID=@idDZ) EXEC dbo.hp_Realizuj_Vydej @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT, @RealMnoz=1, @RealFin=1 END UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDDoklad=@idDZ WHERE ID=@idJson END IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData END -- typ odpis END -- akce: vyroba_spotreba -- END: SPOTREBA/ODPIS -- BEGIN: OBJEDNAVKA IF (@akce=N'objednavka') BEGIN -- smaz pomocnou tabulku DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString DELETE FROM @TabPHObj DECLARE p CURSOR LOCAL FOR SELECT u2.datazoneId, u3.datazoneId, u2.paletovyList, u2.created, u2.skupzbo, u2.regcis, u3.sarze, u3.mnozstvi, u2.typ, u2.subtyp FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), paletovyList NVARCHAR(50), created DATETIME, items NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (items) WITH ( datazoneId BIGINT, heliosId INT, sarze NVARCHAR(30), mnozstvi NUMERIC(19,6) ) AS u3 OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @idPHIdent, @idPHIdent2, @paletList, @datPorizeni, @sz, @rc, @sarze, @mnoz, @typDokum, @subtypDokum IF (@@FETCH_STATUS<>0) BREAK INSERT dbo._TabVyroba_Objednavky (IDPrijataDataJson, IdPHIdent, IdPHIdent2, SkupZbo, RegCis, PaletovyList, Sarze, Mnozstvi, DatPorizeni) SELECT @idJson, @idPHIdent, @idPHIdent2, @sz, @rc, @paletList, @sarze, @mnoz, @datPorizeni SET @idPHObj = SCOPE_IDENTITY() INSERT @TabPHObj (ID, IDPHIdent) VALUES (@idPHObj, @idPHIdent) IF (@typDokum='micharna') AND (@subtypDokum='nocni') UPDATE dbo._TabVyroba_Objednavky SET NocniObjednavka=1 WHERE ID=@idPHObj END CLOSE p DEALLOCATE p IF (@typDokum='micharna') AND (@subtypDokum='nocni') AND EXISTS (SELECT 1 FROM @TabPHObj) BEGIN SET @idDZ = NULL SET @prevodka = 1 SET @radaDZPrevodV = N'231' SET @dpz = 4 DECLARE p CURSOR LOCAL FOR SELECT ID, IDPHIdent FROM @TabPHObj OPEN p WHILE (1=1) BEGIN FETCH NEXT FROM p INTO @idPHObj, @idPHIdent IF (@@FETCH_STATUS<>0) BREAK IF (@idDZ IS NULL) BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklMat, @DruhPohybu=@dpz, @RadaDokladu=@radaDZPrevodV, @CisloOrg=0 UPDATE dbo.TabDokladyZbozi SET DruhPohybuPrevod=0, TypPrevodky=N'281', IdSkladPrevodu=@sklPek, PrevodRealizovat=1 WHERE ID=@idDZ SELECT @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @parZnak=ParovaciZnak FROM dbo.TabDokladyZbozi WHERE ID=@idDZ UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=0, Poznamka=N'Noční výdej' WHERE ID=@idDZ UPDATE dbo._TabVyroba_Objednavky SET IDDokladOZ=@idDZ WHERE ID=@idPHObj END IF (@idDZ IS NOT NULL) BEGIN SELECT @sz=SkupZbo, @rc=RegCis, @paletList=PaletovyList, @sarze=Sarze FROM dbo._TabVyroba_Objednavky WHERE ID=@idPHObj SET @sarze = ISNULL(@sarze, N'') SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) IF (@idKZ IS NOT NULL) BEGIN SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklMat) IF (@idSS IS NULL) EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklMat, @IDZboSklad=@idSS OUT IF (@idSS IS NOT NULL) BEGIN EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, @Kurz=@kurzDZ, @JednotkaMeny=@jednM, @KurzEuro=@kurzEDZ, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, @VstupniCena=@vstC, @Mnozstvi=@mnoz IF (@idPZ IS NOT NULL) BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ IF (@sarze<>N'') BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabKmenZbozi_EXT WHERE ID=@idKZ) INSERT dbo.TabKmenZbozi_EXT (ID) VALUES (@idKZ) UPDATE dbo.TabKmenZbozi_EXT SET _Prevod_PosledniSarze=@sarze WHERE ID=@idKZ END SET @idVCP = NULL IF (@paletList<>N'') BEGIN SET @idVCK = (SELECT ID FROM dbo.TabVyrCK WHERE IDKmenZbozi=@idKZ AND Nazev1=@paletList) IF (@idVCK IS NULL) EXEC dbo.hp_OZInsertVyrCK @IDVyrCK=@idVCK OUT, @IDKmenZbozi=@idKZ, @Nazev1=@paletList, @Selectem=0 SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDVyrCK=@idVCK AND IDStavSkladu=@idSS AND Nazev1=@paletList) IF (@idVCS IS NULL) EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDVyrCK=@idVCK, @IDZboSklad=@idSS INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz SET @idVCP = SCOPE_IDENTITY() END INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, IDVyrCP, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis) SELECT @idPHObj, @idDZ, @idPZ, @idVCP, @mnoz, @sarze, @paletList, @sz, @rc SET @idPHObjPol = SCOPE_IDENTITY() END -- @idPZ IS NOT NULL END -- @idSS IS NOT NULL END -- @idKZ IS NOT NULL END -- @idDZ IS NOT NULL END CLOSE p DEALLOCATE p IF (@idDZ IS NOT NULL) BEGIN UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ SET @logTyp=3 SET @logInt=@idDZ SET @logStr = @parZnak SET @log4Mail = 1 SET @logText = N'Nelze realizovat výdejka noční převodky' SET @aktDatum = GETDATE() EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ, @DatumRealizace=@aktDatum, @Uzivatel=0, @Hlidat=0, @BylaChyba=@bChyba OUT IF (@bChyba=0) BEGIN -- je vygenerovana prijemka na druhe strane ? pokud ne, vygeneruj ji IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDOldPolozka IN (SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZ)) BEGIN SET @aktDatum = GETDATE() EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklPek, @DruhPohybu=0, @RadaDokladu='281', @Mena=@menaDZ, @CisloOrg=0, @DatumPorizeni=@aktDatum IF (@idDZDst IS NOT NULL) BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZDst) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZDst) UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_IDPuvodniDoklad=@idDZ WHERE ID=@idDZDst SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@idDZ EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@idDZ, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=@menaDZ, @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=1, @VytvaretPolozkovouVazbu=1, @ChybaSkladana=@errMsg OUT, @KopirovaniDokladu=1 IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) AND EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1 AND ID=@idDZ) EXEC dbo.hp_Realizuj_Prijem @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @BylaChyba=@bChyba OUT, @RealMnoz=1, @RealFin=1, @VypnoutUpozorneniPriZajistovani=1 END END SET @logTyp=0 SET @logInt=0 SET @logStr = N'' SET @log4Mail = 0 SET @logText = N'' END END END -- @subtypDokum='nocni' UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0, IDDoklad=@idDZ WHERE ID=@idJson END -- akce: objednavka -- END: OBJEDNAVKA -- BEGIN: ZAHAJENI OPERACE IF (@akce=N'vyroba_zacatek') BEGIN SELECT @typDokum=u2.typ, @subtypDokum=ISNULL(u2.subtyp, N''), @idPHIdent=u2.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), subtyp NVARCHAR(50), datazoneId BIGINT) AS u2; IF (@idPHIdent IS NOT NULL) UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idPHIdent WHERE ID=@idJson; SELECT @idVPr=u3.heliosId, @casStart=u3.zacatek, @casKonec=u3.konec FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH (typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (prikaz) WITH (heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME) u3; -- smaz pomocnou tabulku DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString IF (1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabCisZam), 0)) UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=(SELECT TOP(1)Cislo FROM dbo.TabCisZam) WHERE ID=@idJson AND CisloZam IS NULL ELSE UPDATE dbo._hdc_ph_PrijataJsonData SET CisloZam=999999 WHERE ID=@idJson AND CisloZam IS NULL SET @cisZam = NULL SET @idZam = NULL SELECT @typDokum=u2.typ, @idVPr=u3.heliosId, @idPHIdent=u2.datazoneId, @idPracoviste=u4.idprac, @idStroj=u4.heliosId, @statusStroje=u3.[status], @casStart=u3.zacatek, @sz=u3.skupzbo, @rc=u3.regcis, @idPHIdent2=u4.datazoneId FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([data] NVARCHAR(MAX) AS JSON) AS u CROSS APPLY OPENJSON ([data]) WITH ( typ NVARCHAR(50), prikaz NVARCHAR(MAX) AS JSON, datazoneId INT, stroj NVARCHAR(MAX) AS JSON) AS u2 CROSS APPLY OPENJSON (prikaz) WITH ( heliosId INT, datazoneId INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), [status] NVARCHAR(20), zacatek DATETIME, konec DATETIME ) AS u3 CROSS APPLY OPENJSON (stroj) WITH ( heliosId INT, datazoneId INT, idprac INT, kod NVARCHAR(20) ) AS u4; IF (@cisZam IS NULL) SELECT @cisZam=CisloZam FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson IF (@cisZam IS NOT NULL) SELECT @idZam=ID FROM dbo.TabCisZam WHERE Cislo=@cisZam IF (@idVPr IS NOT NULL) AND (@idPracoviste IS NULL) BEGIN IF (@subtypDokum=N'maceni') SET @idPracoviste = (SELECT TOP(1) pracoviste FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Typ=1 AND priorita=0 AND IDStroje IN (SELECT se.ID FROM dbo.TabCisStroju s INNER JOIN dbo.TabCisStroju_EXT se ON (se.ID=s.ID) WHERE s.Blokovano=0 AND se._MaceciStroj=1)) IF (@subtypDokum=N'baleni') SET @idPracoviste = (SELECT TOP(1) pracoviste FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Typ=0 AND priorita=0 AND LOWER(Nazev) LIKE N'%balení%') END IF (@idVPr IS NOT NULL) AND (@idPracoviste IS NOT NULL) BEGIN -- INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 1, N'Zpracovavam PrijataJsonData jako Vyroba_zacatek', @idJson SET @doklPrP = NULL SET @altPrP = NULL SELECT @cisloPrikazu = RadaPrikaz FROM dbo.TabPrikaz WHERE ID=@idVPr SET @idStartStopOp = (SELECT ID FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IdPHIdent=@idPHIdent) IF (@idStartStopOp IS NULL) BEGIN INSERT dbo._TabVyroba_OperaceStartStop (IDPrijataDataJson, IdPHIdent, IdPHIdent2, IDPrikaz, SkupZbo, RegCis, IDStroj, IDPracoviste, CasStart) SELECT @idJson, @idPHIdent, @idPHIdent2, @idVPr, @sz, @rc, @idStroj, @idPracoviste, @casStart SET @idStartStopOp = SCOPE_IDENTITY() END IF EXISTS (SELECT 1 FROM dbo._TabVyroba_OperaceStartStop WHERE IDPrijataDataJson=@idJson AND IDEvidRozpracOper IS NULL) BEGIN SELECT @strojPec = Nazev FROM dbo.TabCisStroju WHERE ID=@idStroj SET @doklPrP = NULL IF (@subtypDokum=N'michani') IF (@sz='701') SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Míchání pro stroj ' FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(nazev) LIKE N'%míchání%' AND Typ=1 IF (@subtypDokum=N'maceni') SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Máčení ' FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(Nazev) LIKE N'%máčení%' AND Typ=1 IF (@subtypDokum=N'baleni') SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste, @popisOper=N'Balení ' FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND priorita=0 AND LOWER(Nazev) LIKE N'%balení%' AND Typ=0 IF (@doklPrP IS NOT NULL) BEGIN INSERT dbo.TabEvidRozpracOper (IDZamestnance, IDPracoviste, IDStroje, CasZahajeni, Poznamka) SELECT @idZam, @idPracoviste, NULL, @casStart, @popisOper + ISNULL(@strojPec, N'') + N' *** příkaz ' + ISNULL(@cisloPrikazu, N'') SET @idEvROp = SCOPE_IDENTITY() INSERT dbo.TabEvidRozpracOperR (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, Mnoz_odv) SELECT @idEvROp, @idVPr, @doklPrP, @altPrP, 1 UPDATE dbo._TabVyroba_OperaceStartStop SET IDEvidRozpracOper=@idEvROp, DokladPrP=@doklPrP, AltPrP=@altPrP WHERE ID=@idStartStopOp UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), Blokovano=0, IDEvidRozpOp=@idEvROp WHERE ID=@idJson END END END END -- akce: vyroba_zacatek -- END: ZAHAJENI OPERACE -- BEGIN: ZAHAJENI OPERACE IF (@akce=N'prikaz_zamena_material') BEGIN SELECT @idVPr=u2.Id, @sz=u3.skupzbo, @rc=u3.regcis FROM #TabJSONData d CROSS APPLY OPENJSON (d.doc, '$') WITH ([prikaz] NVARCHAR(MAX) AS JSON, [material] NVARCHAR(max) AS JSON) AS u CROSS APPLY OPENJSON (prikaz) WITH (id INT) AS u2 CROSS APPLY OPENJSON (material) WITH (skupzbo NVARCHAR(3), regcis NVARCHAR(30), nazev NVARCHAR(100)) AS u3; IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu=30) BEGIN SET @idKZn = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) SELECT @idKZv = (SELECT IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr) IF (@idVPr IS NOT NULL) AND (@idKZn IS NOT NULL) AND (@idKZn<>@idKZv) BEGIN SET @idPrKVazbyPolot = (SELECT v.ID FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi vn ON (vn.ID=v.nizsi) WHERE v.IDPrikaz=@idVPr AND v.IDOdchylkyDo IS NULL AND v.Priorita=0 AND vn.Dilec=1) SET @idPrKVazbyNova = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND vyssi=@idKZv AND nizsi=@idKZn) IF (@idPrKVazbyNova IS NULL) AND (@idPrKVazbyPolot IS NOT NULL) BEGIN SELECT @doklPrV=Doklad, @mnozVaz=Mnozstvi, @mnozZadVaz=mnoz_zad, @idOdchylVaz=IdOdchylkyOd, @procZtrVaz=ProcZtrat FROM dbo.TabPrKVazby WHERE ID=@idPrKVazbyPolot EXEC @idPrKVazbyNova=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZn, @Alt_K_Dokladu=@doklPrV, @Mnozstvi=@mnozVaz, @Mnoz_zad=@mnozZadVaz, @ProcZtrat=@procZtrVaz, @IDOdchylky=@idOdchylVaz END IF (@idPrKVazbyNova IS NOT NULL) BEGIN SELECT @novaPriorita=Priorita FROM dbo.TabPrKVazby WHERE ID=@idPrKVazbyNova IF (@novaPriorita>0) BEGIN UPDATE dbo.TabPrKVazby SET priorita=CASE WHEN priorita=@novaPriorita THEN @novaPriorita-1 ELSE @novaPriorita END WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV AND (priorita=@novaPriorita OR priorita=@novaPriorita-1) UPDATE dbo.TabPrKVazby SET prednastaveno=0 WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV UPDATE dbo.TabPrKVazby SET prednastaveno=1 WHERE IDPrikaz=@idVPr AND Doklad=@doklPrV AND nizsi=@idKZn END END -- (@idPrKVazbyNova IS NOT NULL) END -- (@idVPr IS NOT NULL) AND (@idKZn IS NOT NULL) END -- prikaz ve stavu 30 END -- akce: -- END: ZAHAJENI OPERACE IF (@tranPred=0) AND (@@TRANCOUNT>0) COMMIT TRAN END TRY BEGIN CATCH IF (@tranPred=0) AND (@@TRANCOUNT>0) ROLLBACK TRAN SET @errMsg = ERROR_PROCEDURE() + N'/r.' + CONVERT(nvarchar, ERROR_LINE()) + N' >> ' + ERROR_MESSAGE() UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson IF (@logTyp>0) INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail ELSE INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 END CATCH SET @logTyp=0 END CLOSE j DEALLOCATE j -- 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 #TabPrKVazbyGen DROP TABLE IF EXISTS #TabGenRezVyd DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy DROP TABLE IF EXISTS #TabPrKVazbyGenVC -- pro jistotu IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData