-- 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 !! SET NOCOUNT ON DECLARE @tranPred INT, @cnt INT, @errMsg NVARCHAR(500), @bChyba BIT, @iChyba INT, @debugXml XML, @aktDatum DATETIME, @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), @radaTechVydej NVARCHAR(30)=N'222', @radaDZVydejka NVARCHAR(3)=N'', @radaDZPrevodV NVARCHAR(3)=N'', @prevodka BIT=0, @parZnak NVARCHAR(20) DECLARE @idPHIdent INT, @idPHIdentBak INT, @idPHIdent2 INT, @idPHObj INT, @idPHObjPol INT DECLARE @datPorizeni DATETIME, @idVPr INT, @radaVPr NVARCHAR(10), @cisloPrikazu NVARCHAR(20), @idVPrNizsi INT, @radaVPrNizsi NVARCHAR(10), @idVPrVyssi INT, @radaVPrVyssi NVARCHAR(10), @dilec 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, @hmotTesta NUMERIC(19,6), @idMzda INT, @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 @idPrKVazby INT, @doklPrV INT, @altPrV NCHAR(1), @oper NVARCHAR(4), @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) 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 @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT ) DECLARE @PrKVazby TABLE (ID INT NOT NULL, Sklad NVARCHAR(30) ) -- vytvor pomocnou tabulku IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) IF OBJECT_ID(N'tempdb..#TabDefiniceProMicharnu', N'U') IS NOT NULL SELECT TOP(1) @sklMat=HlavniSkladMat, @sklPek=SkladVyrobaPekarna, @sklTechnicky=TechnologickySklad, @radaTechVydej=RadaTechnologickyVydej FROM #TabDefiniceProMicharnu IF (@sklMat IS NULL) SELECT @sklMat=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' IF (@sklTechnicky IS NULL) SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%' 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 DROP TABLE IF EXISTS #TabDefiniceProMicharnu IF (@radaTechVydej IS NOT NULL) SET @radaDZVydejka = @radaTechVydej 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'' 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 IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'') 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 SET @logTyp = 0 SET @logInt = NULL SET @logStr = N'' SET @log4Mail = 0 SET @logText = N'' BEGIN TRY SET @tranPred = @@TRANCOUNT IF (@tranPred=0) BEGIN TRAN -- BEGIN: SPOTREBA/ODPIS IF (@akce=N'vyroba_spotreba') BEGIN DELETE FROM @PrKVazby DELETE FROM #TabJSONData INSERT #TabJSONData (doc) SELECT @jsonString SELECT @typDokum=u2.typ, @subtypDokum=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)) AS u2 -- SPOTREBA PLUS UKONCENI OPERACE MICHANI ---------------------------------------------------- IF (@typDokum='vyroba') 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 INT, 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 INT, skupzbo NVARCHAR(3), regcis NVARCHAR(30), zacatek DATETIME, konec DATETIME, viskozita TINYINT, silo TINYINT) u3 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, @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 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'101') AND (@rc=N'001000') SET @vodaLitry = @mnoz IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') BEGIN SET @moukaKgFin = @mnoz SET @moukaKgNorma = @mnoz2 END IF (@idDZ IS NULL) BEGIN SET @dpz = 4 EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaDZVydejka, @CisloOrg=0 IF (@idDZ IS NOT NULL) BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idDZ) INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDZ) UPDATE dbo.TabDokladyZbozi_EXT SET _HDCAPI_PHident=@idJson WHERE ID=@idDZ SELECT @datumDZ=DatPorizeni, @menaDZ=Mena, @kurzDZ=Kurz, @kurzEDZ=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena FROM dbo.TabDokladyZbozi WHERE ID=@idDZ UPDATE dbo.TabDokladyZbozi SET IDPrikaz=@idVPr, BlokovaniEditoru=0 WHERE ID=@idDZ IF (@cisloZak IS NOT NULL) UPDATE dbo.TabDokladyZbozi SET CisloZakazky=@cisloZak WHERE ID=@idDZ END END IF (@idDZ IS NOT NULL) BEGIN SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE Nazev1 NOT LIKE N'%Voda%' AND SkupZbo=@sz AND RegCis=@rc AND (Material=1 OR Dilec=1) AND Sluzba=0) IF (@idKZ IS NOT NULL) BEGIN -- 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) BEGIN EXEC @idPrKVazby=dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz, @Mnoz_zad=@mnoz, @VychoziSklad=@sklMat END -- pridej do vydejky IF (@idPrKVazby IS NOT NULL) BEGIN INSERT @PrKVazby (ID, Sklad) SELECT ID, Sklad 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 IF (@idSS IS NOT NULL) BEGIN -- mnoz = mnozstvi realne spotrebovane / mnoz2 = mnozstvi vychozi normovane /* UPDATE dbo.TabPrKVazby SET mnozstvi=@mnoz, mnoz_zad=@mnoz*@mnozDilec WHERE ID=@idPrKVazby AND mnozstvi<>@mnoz */ /* SELECT @mnozReq=mnoz_zad, @doklPrV=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby SET @mnozVyd = ISNULL( (SELECT SUM(pz.Mnozstvi) FROM dbo.TabPohybyZbozi pz INNER JOIN dbo.TabDokladyZbozi dz ON (dz.ID=pz.IDDoklad) WHERE dz.DruhPohybuZbo=@dpz AND dz.RadaDokladu=@radaDZVydejka AND pz.IDPrikaz=@idVPr AND pz.TypVyrobnihoDokladu=0), 0) SET @mnozNew = @mnozReq - @mnozVyd - @mnoz IF (@mnozNew<=0) BEGIN SET @mnozNew = @mnozVyd + @mnoz UPDATE dbo.TabPrKVazby SET mnoz_zad = @mnozNew WHERE ID=@idPrKVazby END */ 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) IF (@sz=N'101') AND (@nazev1 LIKE N'%mouka%') AND (@moukaSilo IS NOT NULL) BEGIN UPDATE dbo.TabPohybyZbozi_EXT SET _Mouka_Silo=@moukaSilo WHERE ID=@idPZ /* SET @idUmist = (SELECT ID FROM dbo.TabUmisteni WHERE Kod=CONVERT(nvarchar,@moukaSilo) AND IDSklad=@sklTechnicky) IF (@idUmist IS NOT NULL) UPDATE dbo.TabPohybyZbozi SET IdUmisteni=@idUmist WHERE ID=@idPZ */ END INSERT dbo._TabVyroba_OperaceStartStopVydej (IDHlava, IDKmenZbozi, Mnozstvi, MnozstviPuvodni, IDPohybZbozi) SELECT @idStartStopOp, @idKZ, @mnoz, @mnoz2, @idPZ UPDATE dbo.TabPohybyZbozi SET IDPrikaz=@idVPr, TypVyrobnihoDokladu=1, DokladPrikazu=@doklPrV WHERE ID=@idPZ UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ IF (ISNULL(@sarze,N'')=N'') SET @sarze = (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS) UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PrikazMnoz=@mnoz2, _Vyroba_Sarze=@sarze, _Vyroba_PaletList=@paletList WHERE ID=@idPZ END -- @idPZ IS NOT NULL END -- @idSS IS NOT NULL END -- @idPrKVazby IS NOT NULL END -- @idKZ IS NOT NULL END -- @idDZ IS NOT NULL END CLOSE p DEALLOCATE p IF (@idDZ IS NOT NULL) 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 @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 SET @idMzda=NULL IF (1=(SELECT COUNT(ID) FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@idEvROp)) SET @idMzda = (SELECT TOP(1) m.ID FROM dbo.TabPrikazMzdyAZmetky m INNER JOIN dbo.TabEvidRozpracOperR er ON (er.ID=m.IDEvidRozpracOperR) WHERE er.IDEvidRozpracOper=@idEvROp) UPDATE dbo._TabVyroba_OperaceStartStop SET CasKonec=@casKonec, Ukonceno=1, IDMzda=@idMzda WHERE ID=@idStartStopOp UPDATE dbo._hdc_ph_PrijataJsonData SET IDMzda=@idMzda WHERE ID=@idJson END END MERGE dbo.TabPrKVazby AS T USING @PrKVazby AS S ON (T.ID=S.ID) WHEN MATCHED THEN UPDATE SET T.Sklad=S.Sklad; -- 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 -- 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=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_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 INT, 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 WHERE ID=@idDZ 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 UPDATE dbo.TabPohybyZbozi_EXT SET _HDCAPI_PHident=@idPHIdent WHERE ID=@idPZ IF (@@ROWCOUNT=0) INSERT dbo.TabPohybyZbozi_EXT (ID, _HDCAPI_PHident) SELECT @idPZ, @idPHIdent IF (@sarze<>N'') BEGIN IF NOT EXISTS(SELECT 1 FROM dbo.TabKmenZbozi_EXT WHERE ID=@idKZ) INSERT dbo.TabKmenZbozi_EXT (ID) SELECT @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) SELECT @idPHObj, @idDZ, @idPZ, @idVCP, @mnoz, @paletList 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 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 WHERE ID=@idJson END -- akce: objednavka -- END: OBJEDNAVKA -- BEGIN: ZAHAJENI OPERACE IF (@akce=N'vyroba_zacatek') BEGIN -- 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 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 (@sz='701') SELECT TOP(1) @doklPrP=Doklad, @altPrP=Alt, @idPracoviste=pracoviste FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr AND nazev=N'Míchání' IF (@doklPrP IS NOT NULL) BEGIN INSERT dbo.TabEvidRozpracOper (IDZamestnance, IDPracoviste, IDStroje, CasZahajeni, Poznamka) SELECT @idZam, @idPracoviste, NULL, @casStart, N'Míchání pro stroj ' + 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 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 -- pro jistotu IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL DROP TABLE #TabJSONData