Files
HDCApi/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql
2026-03-03 16:18:27 +01:00

1081 lines
48 KiB
Transact-SQL
Raw Blame History

-- dbo.ep_HDCDZApi_ZpracujPrijataData
CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData
@idJson INT=NULL
AS
SET NOCOUNT ON
-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !
DECLARE
@errMsg NVARCHAR(500)=N'',
@errProc NVARCHAR(100),
@tranPred INT,
@iChyba INT,
@bChyba BIT,
@iTemp INT,
@debugXML XML,
@idUziv INT
DECLARE
@operJson NVARCHAR(max),
@idDatazoneOper INT,
@prikJson NVARCHAR(max),
@materialJson NVARCHAR(max),
@objekt NVARCHAR(50),
@akce NVARCHAR(50),
@trida NVARCHAR(50),
@statusOp NVARCHAR(50),
@typOperJson NVARCHAR(50),
@jsonString NVARCHAR(max),
@cisZam INT,
@idZam INT,
@idVPr INT,
@radaVPr NVARCHAR(10),
@radaDZVydej NVARCHAR(3),
@dpzVydej TINYINT,
@idVCPrik INT,
@vc NVARCHAR(100),
@pocetVC INT,
@dokl INT,
@alt NCHAR(1),
@idPrP INT,
@idPrPOdv INT,
@doklOdv INT,
@doklNew INT,
@doklAutomat INT,
@altAutomat NCHAR(1),
@jeOdvadeci BIT=0,
@datStart DATETIME,
@datKonec DATETIME,
@skCasSek INT,
@mnoz NUMERIC(19,6),
@idPrednaOp INT,
@idPrednaOpOdv INT,
@operPrednaOdv NVARCHAR(4),
@cisloOdvOper NVARCHAR(4),
@operPrednaPrac INT,
@typOper TINYINT,
@idPrac INT,
@idPracOld INT,
@idPracAutomat INT,
@idStroj INT,
@nazevOp NVARCHAR(100),
@operPredna NVARCHAR(4),
@odvadeciPredna BIT=0,
@prvniOperace BIT=0, -- priznak prvni operace (neodvadeci)
@prvniOperaceVPrInt INT,
@cisOper INT,
@cisOperMax INT,
@operMax NVARCHAR(4),
@nazevOpMax NVARCHAR(100),
@idKoop INT,
@idEvidROp INT,
@idEvidROpPol INT,
@cntEvidROpPol INT,
@idMzdy INT,
@pocetMezd INT=0,
@idMezdStr NVARCHAR(max),
@idPrednaOpAutomat INT,
@operPrednaOpAutomat NVARCHAR(4),
@casSekOperPrednaAutomat INT,
@casSekVypalovani INT,
@idMzdyAutomat INT,
@datKonecOp DATETIME,
@ksZive NUMERIC(19,6),
@ksEvid NUMERIC(19,6),
@pocetEvidOp INT,
@mamVypaleno BIT=0,
@pocetVypalovani INT=0
DECLARE
@idDZ INT,
@idDZ2 INT,
@sz NVARCHAR(3),
@rc NVARCHAR(30),
@szJeMat BIT=0,
@idKZ INT,
@idPrKVazby INT,
@idDilec INT,
@idVCS INT,
@mnozstviPomer_A NUMERIC(19,6),
@mnozstviPomer_B NUMERIC(19,6),
@idGenVydejPrednaPol INT,
@sklProVydej NVARCHAR(30),
@sklProVydejRP NVARCHAR(30),
@sklSurovyDil NVARCHAR(30),
@sklSurovyJeIMaterial BIT=0 -- priznak ze sklad pro vydej suroveho dilu (SK 100) je i pro vydej materialu (ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat)
DECLARE @prikOperProEvid TABLE (IDPrikaz INT NOT NULL, DokladOp INT, AltOp NCHAR(1) )
DECLARE @evidOperR TABLE (ID INT NOT NULL, IDEvidRozpracOper INT, IDPrikaz INT, Doklad INT, Alt NCHAR(1), JeOdvadeci BIT NOT NULL DEFAULT 0, Smazat BIT NOT NULL DEFAULT 0)
DECLARE @evidMzdy TABLE (ID INT NOT NULL)
DECLARE @evidMzdyVypalovani TABLE (ID INT NOT NULL)
DROP TABLE IF EXISTS #TabJSONData
CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) )
DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna
CREATE TABLE #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz int, Doklad int, IDMzdy int)
DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna
CREATE TABLE #HDCTabPrKVazbyGenVCPredna (
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 #HDCTabPrKVazbyGenPredna
CREATE TABLE #HDCTabPrKVazbyGenPredna (
ID INT IDENTITY NOT NULL,
Generuj BIT NOT NULL DEFAULT 1,
PoKorekciDat BIT NOT NULL DEFAULT 0,
IDPrKV INT NOT NULL,
Doklad INT NOT NULL,
IDPrikaz INT NOT NULL,
Prednastaveno BIT NOT NULL DEFAULT 1,
Sklad NVARCHAR(30) NULL,
VyrStredisko NVARCHAR(30) NULL,
IDPracoviste INT NULL,
mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0,
Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0,
Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
MnozstviMax NUMERIC(19,6) NULL,
PuvodniMnozstviPoz NUMERIC(19,6) NULL,
MnozstviPoz NUMERIC(19,6) NOT NULL,
PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0,
IDPohZbo INT NULL,
PoznamkaNaDoklad NTEXT NULL,
priorita INT NOT NULL DEFAULT 0,
vyssi INT NOT NULL,
nizsi INT NOT NULL,
DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1,
pozice NVARCHAR(100) NULL DEFAULT N'',
Operace NCHAR(4) NULL,
FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0,
mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1,
ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0,
mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0,
Prirez NUMERIC(19,6) NOT NULL DEFAULT 1,
Poznamka NTEXT NULL,
pom_pomer_A NUMERIC(19,6) NULL,
pom_pomer_B NUMERIC(19,6) NULL,
Dodavatel INT NULL,
mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))),
PRIMARY KEY (ID)
)
-- cisteni seedu
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPrikazMzdyAZmetky)
DBCC CHECKIDENT (TabPrikazMzdyAZmetky, RESEED, @iTemp)
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabDokladyZbozi)
DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp)
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPohybyZbozi)
DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp)
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)
SET @operPrednaOdv = N''
SET @idPrednaOpOdv = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _OdvadeciOperace=1)
IF (@idPrednaOpOdv IS NOT NULL)
SET @operPrednaOdv = (SELECT _CIsloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpOdv)
IF (@idJson IS NOT NULL)
DECLARE j CURSOR LOCAL FOR
SELECT ID, JsonData, Objekt, Akce FROM dbo._hdc_ph_PrijataJsonData WITH(NOLOCK) WHERE ID=@idJson
ELSE
DECLARE j CURSOR LOCAL FOR
SELECT ID, JsonData, Objekt, Akce
FROM dbo._hdc_ph_PrijataJsonData WITH(NOLOCK)
WHERE Blokovano=0
AND DatZpracovani IS NULL
AND ISNULL(JSONData,N'')<>N''
ORDER BY DatPorizeni
OPEN j
WHILE (1=1)
BEGIN
FETCH NEXT FROM j INTO @idJson, @jsonString, @objekt, @akce
IF (@@FETCH_STATUS<>0) BREAK
IF (ISJSON(@jsonString)=0)
BEGIN
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson
END
SET @objekt = TRIM(ISNULL(@objekt, N''))
SET @akce = TRIM(ISNULL(@akce, N''))
BEGIN TRY
SET @tranPred=@@TRANCOUNT
IF (@tranPred=0)
BEGIN TRAN
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) VALUES (@jsonString)
IF (@objekt=N'')
SELECT TOP(1) @objekt = JSON_VALUE(doc, '$.object') FROM #TabJSONData
IF (@akce=N'')
SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action') FROM #TabJSONData
IF (@objekt=N'operace')
BEGIN
SELECT TOP(1) @cisZam = JSON_VALUE(doc, '$.operace.worker.code') FROM #TabJSONData
SET @idZam = (SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cisZam)
END
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam, Blokovano=1 WHERE ID=@idJson
IF (@objekt=N'operace') AND (@idZam IS NOT NULL)
BEGIN
IF (@akce=N'start')
BEGIN
SET @idDatazoneOper = NULL
SET @idEvidROp = NULL
SET @errMsg = N''
SET @operPredna = N''
SET @odvadeciPredna = 0
SET @nazevOp = N''
SET @operMax = N''
SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'),
@idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'),
@statusOp = JSON_VALUE(d3.operace, '$.status'), @typOperJson=JSON_VALUE(d3.operace, '$.typ'),
@prikJson = d4.prikazy, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId')
FROM #TabJSONData d
CROSS APPLY OPENJSON(d.doc, N'$')
WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2
CROSS APPLY OPENJSON(d.doc, N'$')
WITH ([operace] NVARCHAR(max) AS JSON) AS d3
CROSS APPLY OPENJSON(d3.operace, N'$')
WITH ([prikazy] NVARCHAR(max) AS JSON) AS d4
IF (@idVPr IS NOT NULL)
UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson
IF (@idDatazoneOper IS NOT NULL)
UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson
DELETE FROM @prikOperProEvid
SET @idPrP = NULL
IF (@idPrednaOp IS NOT NULL)
BEGIN
SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
END
IF (@idPrednaOp IS NOT NULL)
BEGIN
SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace
FROM dbo.TabPredna WHERE ID=@idPrednaOp
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL)
SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL)
SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
END
SET @operPredna = ISNULL(@operPredna,N'')
IF (@operPredna=N'')
BEGIN
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: p<>ednastaven<65> ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nem<65> zadan<61> <20><>slo operace.' WHERE ID=@idJson
CONTINUE
END
IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL)
INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL)
BEGIN
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) SELECT @prikJson
SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO)
DECLARE hop CURSOR LOCAL FOR
SELECT d1.id
FROM #TabJSONData d
CROSS APPLY OPENJSON(d.doc, N'$')
WITH (id INT) AS d1
OPEN hop
WHILE (1=1)
BEGIN
FETCH NEXT FROM hop INTO @idVPr
IF (@@FETCH_STATUS<>0) BREAK
INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
END
CLOSE hop
DEALLOCATE hop
END -- hromadny
-- sklad pro vydej si zjisti z rady prikazu nebo ext.info na dilci
SET @sklProVydej = NULL
DECLARE p CURSOR LOCAL FOR
SELECT IDPrikaz FROM @prikOperProEvid
OPEN p
WHILE (1=1)
BEGIN
FETCH NEXT FROM p INTO @idVPr
IF (@@FETCH_STATUS<>0) BREAK
SELECT @idDilec=p.IDTabKmen, @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ
FROM dbo.TabPrikaz p WITH(NOLOCK) JOIN dbo.TabRadyPrikazu rp WITH(NOLOCK) ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr
-- SET @operPredna=dbo.hf_ZarovnejOperaciTechPos(@operPredna)
/*
SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND nazev=@nazevOp
AND ISNULL(pracoviste,0)=ISNULL(@idPrac,0) AND ISNULL(IDkooperace,0)=ISNULL(@idKoop,0) AND ISNULL(IDStroje,0)=ISNULL(@idStroj,0))
*/
SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE Prednastaveno=1 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@operPredna)
-- existuje odvadeci operace v Prednastaveni pro operace a v prikazu ? pokud neni v prikazu, pridej ji do prikazu
SET @doklOdv = NULL
SET @idPrPOdv = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Operace=@operPrednaOdv AND Odvadeci=1)
-- pokud prednastavena Odvadeci jeste neni v prikazu, pridej ji tam
IF (@idPrPOdv IS NULL) AND (@idPrednaOpOdv IS NOT NULL)
BEGIN
EXEC @idPrPOdv = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpOdv, @Operace=@operPrednaOdv
IF (@idPrPOdv IS NOT NULL)
BEGIN
-- korekce cisla dokladu odvadeci operace, posun na konec seznamu operaci
SET @doklOdv=9990
UPDATE dbo.TabPrPostup SET Odvadeci=0 WHERE ID<>@idPrPOdv AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL
UPDATE dbo.TabPrPostup SET Doklad=@doklOdv, Odvadeci=1 WHERE ID=@idPrPOdv
END
END
IF (@doklOdv IS NULL) AND (@idPrPOdv IS NOT NULL)
SELECT @doklOdv=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrPOdv
-- prednastavena operace v prikazu jeste neni, pridej ji
IF (@idPrP IS NULL)
BEGIN
EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOp, @Operace=@operPredna,
@VyraditZKontrolyPosloupOper=1
IF (@idPrP IS NOT NULL)
BEGIN
-- korekce cisla dokladu, pred odvadeci opeaci
SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad<9990
UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0 WHERE ID=@idPrP
END
END
SET @idPrednaOpAutomat = NULL
SET @operPrednaOpAutomat = N''
IF (@idPrP IS NOT NULL)
BEGIN
SELECT @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP
UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE ID=@idPrP AND Odvadeci=0
-- korekce cisla dokladu aby bylo pred odvadeci operaci
IF (@doklOdv IS NOT NULL)
IF (@dokl>@doklOdv)
BEGIN
SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup
WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0)
IF (@doklNew IS NOT NULL)
BEGIN
UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP
SET @dokl = @doklNew
END
END
IF (@idEvidROp IS NULL)
EXEC @idEvidROp = dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZam, @IDPracoviste=@idPrac, @IDStroje=@idStroj, @CasZahajeni=@datStart, @errMsg = @errMsg OUT
IF (@idEvidROp IS NOT NULL)
BEGIN
IF NOT EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOper_EXT WHERE ID=@idEvidROp)
INSERT dbo.TabEvidRozpracOper_EXT (ID) VALUES (@idEvidROp)
IF (@idDatazoneOper IS NOT NULL)
UPDATE dbo.TabEvidRozpracOper_EXT SET _PHIdent=@idDatazoneOper WHERE ID=@idEvidROp
SET @idVCPrik = NULL
IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0)
SET @idVCPrik = (SELECT TOP(1) ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr)
EXEC @idEvidROpPol = dbo.ep_Vyroba_InsertEvidRozpracOperPol @IDEvidRozpOper=@idEvidROp, @IdPrikaz=@idVPr, @doklPrPost=@dokl,
@altPrPost=@alt, @IdVyrCis=@idVCPrik, @errMsg = @errMsg OUT
END -- idEvidROp IS NOT NULL
END -- idPrP IS NOT NULL
-- pokud mam naslednou automatickou operaci, zkontrolu a pripadne ji pridej na prikaz
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL)
SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL)
SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat
SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'')
IF (@operPrednaOpAutomat<>N'')
BEGIN
SET @idPrP = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat)
IF (@idPrP IS NULL)
EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpAutomat, @Operace=@operPrednaOpAutomat,
@VyraditZKontrolyPosloupOper=1
IF (@idPrP IS NOT NULL)
BEGIN
-- korekce cisla dokladu
SELECT @dokl=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrP
IF (@dokl>@doklOdv)
BEGIN
SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup
WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0)
IF (@doklNew IS NOT NULL)
BEGIN
UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP AND Operace=@operPrednaOpAutomat
SET @dokl = @doklNew
END
END -- @dokl>@doklOdv
END -- @idPrP IS NOT NULL
END -- @operPrednaOpAutomat<>N''
END
CLOSE p
DEALLOCATE p
IF (@errMsg<>N'')
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDEvidRozpOp=@idEvidROp WHERE ID=@idJson
END -- akce Start
IF (@akce=N'stop')
BEGIN
SET @idDatazoneOper = NULL
SET @idEvidROp = NULL
SET @errMsg = N''
SET @operPredna = N''
SET @odvadeciPredna = 0
SET @operPrednaOpAutomat = N''
SET @idPrednaOpAutomat = NULL
SET @nazevOp = N''
SET @operMax = N''
DELETE FROM @prikOperProEvid
DELETE FROM @evidOperR
DELETE FROM @evidMzdy
SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'),
@idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'),
@datKonec = JSON_VALUE(d3.operace, '$.stopAt'), @statusOp = JSON_VALUE(d3.operace, '$.status'),
@typOperJson=JSON_VALUE(d3.operace, '$.typ'),
@prikJson = d4.prikazy, @materialJson=d4.material, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId')
FROM #TabJSONData d
CROSS APPLY OPENJSON(d.doc, N'$')
WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2
CROSS APPLY OPENJSON(d.doc, N'$')
WITH ([operace] NVARCHAR(max) AS JSON) AS d3
CROSS APPLY OPENJSON(d3.operace, N'$')
WITH ([prikazy] NVARCHAR(max) AS JSON, [material] NVARCHAR(max) AS JSON) AS d4
SET @materialJson = ISNULL(@materialJson, N'')
IF (CHARINDEX('skupina', @materialJson)>0)
UPDATE dbo._hdc_ph_PrijataJsonData SET MamMaterial=1 WHERE ID=@idJson
IF (@idVPr IS NOT NULL)
UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson
IF (@idDatazoneOper IS NOT NULL)
UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson
SET @idPrP = NULL
SET @idPrac = NULL
IF (@idPrednaOp IS NOT NULL)
BEGIN
SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
END
IF (@idPrednaOp IS NOT NULL)
BEGIN
SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace
FROM dbo.TabPredna WHERE ID=@idPrednaOp
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL)
SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL)
SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
END
SET @operPredna = ISNULL(@operPredna,N'')
IF (@operPredna=N'')
BEGIN
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: p<>ednastaven<65> ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nem<65> zadan<61> <20><>slo operace.' WHERE ID=@idJson
CONTINUE
END
SET @idPrednaOpAutomat = NULL
SET @operPrednaOpAutomat = N''
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL)
SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL)
SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat
SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'')
SET @casSekOperPrednaAutomat = ISNULL( (SELECT TAC_J_S FROM dbo.TabPredna WHERE ID=@idPrednaOpAutomat), 0)
SET @casSekVypalovani = 0
IF (@operPrednaOpAutomat=N'9260')
SET @casSekVypalovani = @casSekOperPrednaAutomat
IF (@idPrac IS NULL)
BEGIN
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'Z operace nelze identifikovat pracoviste, neslo by identifikovat EvidRozpracOper' WHERE ID=@idJson
CONTINUE
END
IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL)
INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL)
BEGIN
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) SELECT @prikJson
SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO)
DECLARE hop CURSOR LOCAL FOR
SELECT d1.id
FROM #TabJSONData d
CROSS APPLY OPENJSON(d.doc, N'$')
WITH (id INT) AS d1
OPEN hop
WHILE (1=1)
BEGIN
FETCH NEXT FROM hop INTO @idVPr
IF (@@FETCH_STATUS<>0) BREAK
INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
END
CLOSE hop
DEALLOCATE hop
END -- hromadny
DECLARE p CURSOR LOCAL FOR
SELECT IDPrikaz FROM @prikOperProEvid
OPEN p
WHILE (1=1)
BEGIN
FETCH NEXT FROM p INTO @idVPr
IF (@@FETCH_STATUS<>0) BREAK
SET @idEvidROpPol = (SELECT TOP(1) r.ID FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper)
LEFT JOIN dbo.TabEvidRozpracOper_EXT he ON (he.ID=h.ID)
INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=r.IDPrikaz AND pp.Doklad=r.DokladPrPostup AND pp.Alt=r.AltPrPostup)
INNER JOIN dbo.TabPrikaz p ON (p.ID=r.IDPrikaz)
WHERE pp.IDOdchylkyDo IS NULL AND h.IDPracoviste=@idPrac AND r.IDPrikaz=@idVPr AND p.StavPrikazu IN (30)
AND pp.Operace=@operPredna AND pp.Prednastaveno=1 AND h.IDZamestnance=@idZam
AND ISNULL(he._PHIdent,0)=ISNULL(@idDatazoneOper,0)
AND h.CasUkonceni IS NULL)
IF (@idEvidROpPol IS NOT NULL)
INSERT @evidOperR (ID, IDEvidRozpracOper, IDPrikaz, Doklad, Alt)
SELECT ID, IDEvidRozpracOper, @idVPr, DokladPrPostup, AltPrPostup FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol
END
CLOSE p
DEALLOCATE p
IF EXISTS (SELECT 1 FROM @evidOperR)
BEGIN
IF (@datKonec<=@datStart) OR (@datKonec IS NULL)
SET @datKonec = DATEADD(s, 5, @datStart)
SET @skCasSek = DATEDIFF(s, @datStart, @datKonec)
SET @cntEvidROpPol = ISNULL( (SELECT COUNT(ID) FROM TabEvidRozpracOperR
WHERE IDEvidRozpracOper=(SELECT TOP(1) IDEvidRozpracOper FROM @evidOperR)), 0)
SET @pocetEvidOp = ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0)
-- pokud mam stejny pocet rozpracovanych operaci vuci prikazum v json, zkontroluj jestli nejaka neni odvadeci
IF (@cntEvidROpPol=@pocetEvidOp)
BEGIN
DECLARE e CURSOR LOCAL FOR
SELECT ID FROM @evidOperR
OPEN e
WHILE (1=1)
BEGIN
FETCH NEXT FROM e INTO @idEvidROpPol
IF (@@FETCH_STATUS<>0) BREAK
SELECT @idVPr=r.IDPrikaz, @dokl=r.DokladPrPostup, @alt=r.AltPrPostup, @idVCPrik=r.IDVyrCis, @idPracOld=h.IDPracoviste
FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper)
WHERE r.ID=@idEvidROpPol
SELECT @ksZive=kusy_zive FROM dbo.TabPrikaz WHERE ID=@idVPr
SET @ksEvid = ISNULL( (SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM dbo.TabPrikazMzdyAZmetky
WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt
AND ISNULL(IDVyrCis,0)=ISNULL(@idVCPrik,0)
), 0)
SET @jeOdvadeci=0
IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL
AND Prednastaveno=1 AND Odvadeci=1)
SET @jeOdvadeci=1
UPDATE @evidOperR SET JeOdvadeci=@jeOdvadeci WHERE ID=@idEvidROpPol
IF (@jeOdvadeci=1) AND (@ksEvid>=@ksZive)
BEGIN
DELETE FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol
UPDATE @evidOperR SET Smazat=1 WHERE ID=@idEvidROpPol
END
END
CLOSE e
DEALLOCATE e
DELETE FROM @evidOperR WHERE Smazat=1 OR IDEvidRozpracOper IS NULL
END -- mam v json stejny pocet prikazu jako v EvidROp
-- mam jen jednu EvidRozpracOper hlavicku ?
IF (1=ISNULL( (SELECT COUNT(*) FROM (SELECT DISTINCT(IDEvidRozpracOper) FROM @evidOperR GROUP BY IDEvidRozpracOper) x), 0))
BEGIN
SELECT TOP(1) @idEvidROp=IDEvidRozpracOper FROM @evidOperR
UPDATE dbo.TabEvidRozpracOperR
SET Mnoz_odv = IIF(@jeOdvadeci=1, 1, 0)
-- ,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=@idEvidROp
UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@datKonec, CelkovyCas_T=0, CelkovyCas=@skCasSek WHERE ID=@idEvidROp
EXEC hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvidROp, @CelkovyCas_S=@skCasSek, @KVO=1
-- evidence vsech mezd
DELETE FROM @evidMzdy
DELETE FROM @evidMzdyVypalovani
DECLARE e CURSOR LOCAL FOR
SELECT ID, IDPrikaz, Doklad, Alt, JeOdvadeci FROM @evidOperR
OPEN e
WHILE (1=1)
BEGIN
FETCH NEXT FROM e INTO @idEvidROpPol, @idVPr, @dokl, @alt, @jeOdvadeci
IF (@@FETCH_STATUS<>0) BREAK
-- vypni kontrolu posloupnosti pro operaci
UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL
EXEC @idMzdy = dbo.hp_EvidenceOperace @IDEvidRozpracOperR=@idEvidROpPol, @Stav=0
IF (@idMzdy IS NOT NULL)
BEGIN
INSERT @evidMzdy (ID) VALUES (@idMzdy)
IF (@idPracOld IS NOT NULL)
EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdy, @Stav=1, @ZapisZmenu=0
IF (@idVPr IS NULL)
SELECT @idVPr=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
UPDATE dbo.TabPrikazMzdyAZmetky SET Datum = dbo.hf_TruncDate(@datKonec) WHERE ID=@idMzdy
SELECT @datKonecOp=DatumUkonceniOp FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
-- zaeviduj i automatickou operaci
IF (@operPrednaOpAutomat<>N'')
BEGIN
SET @datStart = DATEADD(second, 1, @datKonecOp)
SET @datKonec = DATEADD(second, @casSekOperPrednaAutomat, @datStart)
SELECT @doklAutomat=Doklad, @altAutomat=Alt, @idPracAutomat=pracoviste FROM dbo.TabPrPostup
WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat
IF (@doklAutomat IS NOT NULL)
BEGIN
SET @idMzdyAutomat = NULL
EXEC @idMzdyAutomat = dbo.hp_EvidenceOperace @IDPrikaz=@idVPr, @Doklad=@doklAutomat, @Alt=@altAutomat, @Datum=@datStart,
@Sk_Cas_S=@casSekOperPrednaAutomat, @Sk_Cas_Obsluhy_S=0, @IDZam=@idZam,
@DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec
IF (@idMzdyAutomat IS NOT NULL) AND (@idPracAutomat IS NOT NULL)
EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdyAutomat, @Stav=1, @ZapisZmenu=0
-- poznamenej operaci vypalovani, bude se na ni rozpocitavat cas
IF (@idMzdyAutomat IS NOT NULL) AND (@operPrednaOpAutomat=N'9260')
INSERT @evidMzdyVypalovani (ID) VALUES (@idMzdyAutomat)
END -- @doklAutomat IS NOT NULL
END -- @operPrednaOpAutomat <> ''
END -- @idMzdy IS NOT NULL
END
CLOSE e
DEALLOCATE e
SET @pocetMezd = ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0)
IF (@pocetMezd=ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0))
UPDATE dbo.TabEvidRozpracOper SET DatumUzavreni=GETDATE(), AutorUzavreni=SUSER_SNAME() WHERE ID=@idEvidROp
SET @pocetVypalovani = ISNULL( (SELECT COUNT(*) FROM @evidMzdyVypalovani), 0)
IF (@pocetVypalovani>0) AND (@casSekVypalovani>0)
BEGIN
SET @casSekVypalovani = CEILING(@casSekVypalovani / @pocetVypalovani)
DECLARE v CURSOR LOCAL FOR
SELECT ID FROM @evidMzdyVypalovani
OPEN v
WHILE (1=1)
BEGIN
FETCH NEXT FROM v INTO @idMzdy
IF (@@FETCH_STATUS<>0) BREAK
UPDATE dbo.TabPrikazMzdyAZmetky SET Sk_Cas=dbo.hf_PrepoctiCas(@casSekVypalovani, 0, Sk_Cas_T) WHERE ID=@idMzdy
EXEC dbo.hp_EvidenceOperace_OpravaMzdy @IDMzdy=@idMzdy
END
CLOSE v
DEALLOCATE v
END
END -- mam jen jednu EvidRozpOper
END -- mam EvidRozpOperR k evidenci
-- pokud mam mzdy, koukni jestli mam delat vydej/odvod
SET @materialJson = ISNULL(@materialJson, N'')
IF EXISTS(SELECT 1 FROM @evidMzdy)
BEGIN
SET @idDZ = NULL -- vydejka materialu
SET @idDZ2 = NULL -- vydejka suroveho dilu (SK 100)
DECLARE ev CURSOR LOCAL FOR
SELECT ID FROM @evidMzdy
OPEN ev
WHILE (1=1)
BEGIN
FETCH NEXT FROM ev INTO @idMzdy
IF (@@FETCH_STATUS<>0) BREAK
SELECT @idVPr=IDPrikaz, @dokl=DokladPrPostup, @alt=AltPrPostup FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
SELECT @idDilec=p.IDTabKmen, @radaVPr=p.Rada, @radaDZVydej=rp.RadaDokl_GenerRezVyd_Mat, @dpzVydej=rp.DruhPohybu_GenerRezVyd,
@sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ, @sklSurovyDil=rpe._SkladSurovychDilu
FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) LEFT JOIN dbo.TabRadyPrikazu_EXT rpe ON (rpe.ID=rp.ID)
WHERE p.ID=@idVPr
SET @sklSurovyDil = ISNULL(@sklSurovyDil, @sklProVydejRP)
SET @prvniOperaceVPrInt = ISNULL( (SELECT MIN(TRY_PARSE(Operace AS int)) FROM dbo.TabPrPostup WHERE ISNULL(Operace,N'')<>N'' AND IDPrikaz=@idVPr
AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Odvadeci=0 AND ISNULL(TRY_PARSE(Operace AS int),0)>0)
, 0)
SET @prvniOperace=0
IF (CONVERT(int,@operPredna)=@prvniOperaceVPrInt)
SET @prvniOperace=1
-- pokud jsem prvni operace na prikazu (ne odvadeci) a jsem prvni evidence, udelej vydej suroveho materialu (SK 100), sklad 001
IF (@prvniOperace=1) AND NOT EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND ID<>@idMzdy)
BEGIN
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGenPredna
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenVCPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGenVCPredna
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
DECLARE m CURSOR LOCAL FOR
SELECT v.ID, v.mnozstvi
FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi kN ON (kN.ID=v.nizsi)
WHERE v.IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND kN.SkupZbo IN (N'100') AND v.vyssi=@idDilec
OPEN m
WHILE (1=1)
BEGIN
FETCH NEXT FROM m INTO @idPrKVazby, @mnoz
IF (@@FETCH_STATUS<>0) BREAK
SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby
SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr),
@mnozstviPomer_B=PrP.kusy_zad
FROM dbo.TabPrikazMzdyAZmetky MZ
INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL)
WHERE MZ.ID=@idMzdy
INSERT INTO #HDCTabPrKVazbyGenPredna
(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, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B, PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko,
PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane,
PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi,
PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou,
PrKV.Prirez, PrKV.Poznamka
FROM dbo.TabPrKVazby PrKV
WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0
SET @iTemp = SCOPE_IDENTITY()
-- pokud mam na prikazu jen jedno VC, pridej ho pro vydej suroveho dilce
SET @pocetVC = ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0)
IF (@pocetVC=1) AND (@iTemp IS NOT NULL)
BEGIN
SELECT TOP(1) @vc=VyrCislo FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr
IF (@mnoz<=ISNULL( (SELECT Mnozstvi-Odvedeno-Zmetky FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr AND VyrCislo=@vc), 0))
IF NOT EXISTS (SELECT 1 FROM #HDCTabPrKVazbyGenVCPredna WHERE IDPolozky=@iTemp AND VyrCislo=@vc)
INSERT #HDCTabPrKVazbyGenVCPredna (IDPolozky, VyrCislo, Mnozstvi, Sklad) SELECT @iTemp, @vc, @mnoz, @sklProVydejRP
END
-- dopln vazbu na mzdu
IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy
-- sklad pro vydej suroveho dilu je nastaven ext.info na rade prikazu
UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklSurovyDil
UPDATE #HDCTabPrKVazbyGenVCPredna SET Sklad=@sklSurovyDil
END
CLOSE m
DEALLOCATE m
IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna) -- mam nejaky material pro vydejku ?
IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL
BEGIN
UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydejRP
SET @idDZ2 = NULL
BEGIN TRY
EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ2 OUT, @errMsg=@errMsg OUT, @realizujVydej=0
IF (@errMsg<>N'') OR (@iChyba>0)
BEGIN
UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
END
END TRY
BEGIN CATCH
IF (CHARINDEX(N'50014', @errMsg)>0)
SET @errMsg = N'Nesoulad mno<6E>stv<74> v<>robn<62>ch <20><>sel a polo<6C>ky' + NCHAR(13)+NCHAR(10) + @errMsg
IF (@errMsg<>N'')
UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
END CATCH
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGenPredna
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
END -- mam ep_Vyroba_GenVydejZeMzdy
END -- @prvniOperace=1
-- mam vydat nejaky material, naskenovany s ukoncenim operace ?
IF (CHARINDEX('skupina', @materialJson)>0)
BEGIN
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGenPredna
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
SELECT @sklProVydej=ISNULL(ke._SkladProVydejMat, rp.VydejMatPol_SkladProGenHlavDZ)
FROM dbo.TabPrikaz p
INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada)
INNER JOIN dbo.TabKmenZbozi k ON (k.ID=p.IDTabKmen)
LEFT JOIN dbo.TabKmenZbozi_EXT ke ON (ke.ID=k.ID)
WHERE p.ID=@idVPr
SET @sklSurovyJeIMaterial=0
-- IF (@sklProVydejRP=@sklProVydej)
-- SET @sklSurovyJeIMaterial=1
DELETE FROM #TabJSONData
INSERT #TabJSONData (doc) SELECT @materialJson
DECLARE m CURSOR LOCAL FOR
SELECT ma.skupina, ma.regcis, ma.quantity
FROM #TabJSONData d
CROSS APPLY OPENJSON (d.doc, N'$')
WITH (skupina NVARCHAR(3), regcis NVARCHAR(30), quantity NUMERIC(19,6) ) AS ma
OPEN m
WHILE (1=1)
BEGIN
FETCH NEXT FROM m INTO @sz, @rc, @mnoz
IF (@@FETCH_STATUS<>0) BREAK
-- pokud jsem material/polotovar SK 100 (surovy dilec), vydej me jinym vydejem (viz vyse), mozna i z jineho skladu
-- (Rada prikazu sklad pro vydej x ext.param na dilci TabKmenZbozi_EXT._SkladProVydejMat)
IF (@sz IN (N'100'))
CONTINUE
SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc)
IF (@idKZ IS NOT NULL)
BEGIN
IF (@pocetMezd>1)
SET @mnoz = (@mnoz / @pocetMezd)
-- pokud neni urceno ze naskenovana karta je material, nastav to, pri tom zkontroluj i jestli je to nastavene na rade, at neprepises polotovar
SELECT @szJeMat=Material FROM dbo.TabSkupinyZbozi WHERE SkupZbo=@sz
SELECT @szJeMat=@szJeMat | Material FROM dbo.TabKmenZbozi WHERE ID=@idKZ
UPDATE dbo.TabKmenZbozi SET Material=1 WHERE ID=@idKZ AND Dilec=0 AND Material=0 AND @szJeMat=1
SET @idPrKVazby = (SELECT TOP(1) ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL
AND vyssi=@idDilec AND nizsi=@idKZ ORDER BY Prednastaveno DESC)
IF (@idPrKVazby IS NULL)
EXEC @idPrKVazby = dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz
SET @dokl = NULL
IF (@idPrKVazby IS NOT NULL)
BEGIN
SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby
SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr),
@mnozstviPomer_B=PrP.kusy_zad
FROM dbo.TabPrikazMzdyAZmetky MZ
INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL)
WHERE MZ.ID=@idMzdy
INSERT INTO #HDCTabPrKVazbyGenPredna
(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, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B, PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko,
PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane,
PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi,
PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou,
PrKV.Prirez, PrKV.Poznamka
FROM dbo.TabPrKVazby PrKV
WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0
SET @iTemp = SCOPE_IDENTITY()
-- pokud neni prednastaveny sklad pro vydej, zkus to z rady prikazu, pripadne z ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat
UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydej WHERE ID=@iTemp AND @sklProVydej IS NOT NULL
IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy
END -- idPrKVazby IS NOT NULL
END -- idKZ IS NOT NULL
END
CLOSE m
DEALLOCATE m
-- mam nejaky material pro vydejku ?
IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna)
IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL
BEGIN
SET @idDZ = NULL
-- pokud je sklad pro vydej materialu na rade VPr stejny jako na ext.info dilce prikazu, udelej vydej v jednom dokladu
IF (@sklSurovyJeIMaterial=1) AND (@idDZ2 IS NOT NULL)
BEGIN
SET @idDZ = @idDZ2
SET @idDZ2 = NULL
END
-- pokud je sklad jiny nez na rade VPr, zaloz hlavicku a predej ji do generovaci procedury, jinak se v "hp_generujRezVydNew" bere sklad z rady VPr
IF (@idDZ IS NULL) AND (@sklProVydej<>@sklProVydejRP)
EXEC dbo.hp_InsertHlavickyOZ_Full @Ident=@idDZ OUT, @Sklad=@sklProVydej, @DruhPohybu=@dpzVydej, @RadaDokladu=@radaDZVydej, @CisloOrg=0
BEGIN TRY
EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ OUT, @errMsg=@errMsg OUT, @realizujVydej=1
IF (@errMsg<>N'') OR (@iChyba>0)
BEGIN
UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
END
END TRY
BEGIN CATCH
IF (CHARINDEX(N'50014', @errMsg)>0)
SET @errMsg = N'Nesoulad mno<6E>stv<74> v<>robn<62>ch <20><>sel a polo<6C>ky' + NCHAR(13)+NCHAR(10) + @errMsg
IF (@errMsg<>N'')
UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
END CATCH
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGenPredna
IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
END -- mam ep_Vyroba_GenVydejZeMzdy
END -- (CHARINDEX('skupina', @materialJson)>0)
-- pokud je odvadeci, generuj odvod na sklad
SET @jeOdvadeci=0
SET @cisloOdvOper=NULL
IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL
AND Prednastaveno=1 AND Odvadeci=1)
BEGIN
SET @jeOdvadeci=1
SET @cisloOdvOper = (SELECT Operace FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Prednastaveno=1
AND Odvadeci=1 AND IDOdchylkyDo IS NULL)
END
IF (@jeOdvadeci=1)
BEGIN
IF OBJECT_ID(N'dbo.ep_Vyroba_GenOdvodZeMzdy', N'P') IS NOT NULL
BEGIN
SET @idDZ = NULL
BEGIN TRY
EXEC @iChyba = dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzdy, @bezVyrCis=0, @errMsg=@errMsg OUT, @realizujPrijem=1, @IDDoklad=@idDZ OUT
IF (@errMsg<>N'')
UPDATE dbo.TabDokladyZbozi SET BLokovaniEditoru=NULL WHERE ID=@idDZ
END TRY
BEGIN CATCH
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
END CATCH
END -- existuje ep_Vyroba_GenOdvodZeMzdy
END -- jeOdvadeci=1
END
CLOSE ev
DEALLOCATE ev
-- pokud mam vydejku na surovy dil na jinem dokladu/skladu, realizuj ji
IF (@idDZ2 IS NOT NULL) AND NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idDZ2 AND Realizovano=1)
BEGIN
BEGIN TRY
EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ2, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT
END TRY
BEGIN CATCH
SET @errMsg = ERROR_MESSAGE()
IF (CHARINDEX(N'50014', @errMsg)>0)
SET @errMsg = N'Nesoulad mno<6E>stv<74> v<>robn<62>ch <20><>sel a polo<6C>ky' + NCHAR(13)+NCHAR(10) + @errMsg
IF (@errMsg<>N'')
UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy
UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
END CATCH
END
END -- mam evidovane mzdy
IF (ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0)>1)
SET @idMezdStr = (SELECT STRING_AGG(ID, N',') FROM @evidMzdy)
SET @idMezdStr = ISNULL(@idMezdStr, N'')
SET @errMsg = ISNULL(@errMsg,N'')
IF (@errMsg<>N'')
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDMzda=IIF(@idMezdStr<>N'',NULL,@idMzdy),
IDMezd=IIF(@idMezdStr=N'', NULL, @idMezdStr)
WHERE ID=@idJson
END -- akce Stop
END -- objekt Operace AND idZam IS NOT NULL
UPDATE dbo._hdc_ph_PrijataJsonData SET Blokovano=0 WHERE ID=@idJson
IF (@tranPred=0) AND (@@TRANCOUNT>0)
COMMIT TRAN
END TRY
BEGIN CATCH
SET @errMsg = ERROR_MESSAGE()
SET @errProc = ERROR_PROCEDURE()
IF (@tranPred=0) AND (@@TRANCOUNT>0)
ROLLBACK TRAN
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
END CATCH
END
CLOSE j
DEALLOCATE j
-- cisteni
DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna
DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna
DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna
DROP TABLE IF EXISTS #TabJSONData