From 1258a27a4e49508a0e605fe793ac5e949c001dbb Mon Sep 17 00:00:00 2001 From: TomBuz Date: Mon, 13 Apr 2026 12:20:09 +0200 Subject: [PATCH] Po hlavnich upravach sdileni sponeni a uvolnovani connection poolu --- _custom/INCOSystems/zdroje.RES | Bin 79576 -> 79608 bytes .../ep_Vyroba_GenObjednavkuMatDoVyroby.sql | 2 +- _custom/Rootvin/uSvcCustom.pas | 624 +++--- _custom/Rootvin/winSvc/impl.inc | 199 +- _custom/Rootvin/zdroje.RES | Bin 293244 -> 293244 bytes hdcDZApi.dpr | 2 - hdcDZApi.dproj | 11 +- hdcDZApi.res | Bin 6972 -> 7276 bytes uCtrlObehZbozi.pas | 8 +- uCtrlVyroba.pas | 38 +- uDataMod.pas | 188 +- uSvc_KmenZbozi.pas | 33 +- uSvc_ObehZbozi.pas | 361 ++-- uSvc_Vyroba.pas | 1802 +++++++++++------ uWinService.pas | 60 +- ukazBlokovanePorty.cmd | 2 + 16 files changed, 2006 insertions(+), 1324 deletions(-) create mode 100644 ukazBlokovanePorty.cmd diff --git a/_custom/INCOSystems/zdroje.RES b/_custom/INCOSystems/zdroje.RES index d987bf318fce6604a298ac21a0137dc39c99d364..e6ec36666711d97da89172cbb22a9675234c459b 100644 GIT binary patch delta 94 zcmccdmgUD=mJJ7r7;kPqSd<|?S%^tw@~*wyldZe*coo7uLp(J6{C)hLy)`$l>`D;k fK^B?JH%|sdV6*1DT^y6;ugh;1T7ImbiGcwC-T)#4 delta 67 zcmV-J0KEVB?F88E1hBwz0lTxoa%dNmbGH(cNQ!Q=!-`-NlV|ZYvuvKF2o6b9NFXRw ZK|)MVLrYjGmvAZp80) BREAK SET @cnt = (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl - AND CAST(d.DatPorizeni AS DATE)=IIF(@material=0, CAST(@datumDokladuMat AS DATE), CAST(@datumDokladuFin AS DATE)) AND s.BlokovaniEditoru IS NULL + AND CAST(d.DatPorizeni AS DATE)=IIF(@material=0, CAST(@datumDokladuMat AS DATE), CAST(@datumDokladuFin AS DATE)) AND d.BlokovaniEditoru IS NULL AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=(@material+1) ) IF (@cnt<=1) diff --git a/_custom/Rootvin/uSvcCustom.pas b/_custom/Rootvin/uSvcCustom.pas index b65e7ae..e3caeef 100644 --- a/_custom/Rootvin/uSvcCustom.pas +++ b/_custom/Rootvin/uSvcCustom.pas @@ -794,6 +794,7 @@ uses var lQry: TFDQuery; sqlConnX: TFDConnection; lSQL, where, errMsg: string; + lokIDcka: TList; cnt, rNo, idVPr: integer; typPrikazu: integer; operace, material, spustene: boolean; @@ -804,311 +805,346 @@ uses p: TVyrobniPrikaz; vpSvr: TVyrobniPrikazService; locParams: TDictionary; + lokIDcko: TObject; begin cisOper:= ''; locParams:= TDictionary.Create; - - - operace:= false; - if (params.ContainsKey('operace')) then - if (params.Items['operace']='1') then - begin - operace:= true; - locParams.Add('operace', params.Items['operace']); - end; - - material:= false; - if (params.ContainsKey('material')) then - if (params.Items['material']='1') then - begin - material:= true; - locParams.Add('material', params.Items['material']); - end; - - spustene:= false; - if (params.ContainsKey('spustene')) then - if (params.Items['spustene']='1') then - begin - spustene:= true; - locParams.Add('spustene', params.Items['spustene']); - end; - - - - where:= ''; - lSQL:= 'SELECT DISTINCT(main.ID) AS ID FROM ' + tblVPr + ' main'; - - - if (spustene) then - where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblRozpracOperR - + ' r ON (r.DokladPrPostup=pp.Doklad AND r.AltPrPostup=pp.Alt AND r.IDPrikaz=pp.IDPrikaz)' - + ' INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper)' - + ' WHERE pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=main.ID AND h.DatumUzavreni IS NULL)'; - - - typPrikazu:= 0; - if (params.ContainsKey('typ')) then - if not(TryStrToInt(params.Items['typ'], typPrikazu)) then - typPrikazu:= 0; - - locParams.Add('rtn', '1'); - locParams.Add('typPrikazu', typPrikazu.ToString); - - if (typPrikazu=0) then // obecny - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0)'; - - - - if (typPrikazu=1) then // pro micharnu se nacitaji vyssi prikazy, tj. kde testo skonci - begin - locParams.Add('nazevOp', 'michani'); - - where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''003'' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')'; - - - if (params.ContainsKey('idstroj')) then - begin - if (params.Items['idstroj']<>'') then - where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.IDOdchylkyDo IS NULL' - + ' AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' - + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz - + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' - + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' - + ' WHERE ppx.IDOdchylkyDo IS NULL' - + ' AND px.StavPrikazu IN (30,40)' - + ' AND ppx.IDStroje=' + params.Items['idstroj'] + '))' - + ')'; -{ - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.IDOdchylkyDo IS NULL' - + ' AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')' -} - end; -{ - else - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')'; -} - if (params.ContainsKey('idstroju')) then - begin - if (params.Items['idstroju']<>'') then - where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.IDOdchylkyDo IS NULL' - + ' AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN ' + params.Items['idstroju'] + ')' - + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz - + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' - + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' - + ' WHERE ppx.IDOdchylkyDo IS NULL' - + ' AND px.StavPrikazu IN (30,40)' - + ' AND ppx.IDStroje IN ' + params.Items['idstroju'] + '))' - + ')'; - -{ - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.IDOdchylkyDo IS NULL' - + ' AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')' -} - end; - end; - - - if (typPrikazu=2) then // pro macirnu - begin - locParams.Add('nazevOp', 'máčení'); - where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada IN (N''004'', N''002'') AND EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCisStroj + ' cs' - + ' ON (cs.ID=pp.IDStroje) INNER JOIN ' + tblCisStrojE + ' cse ON (cse.ID=cs.ID) WHERE pp.IDPrikaz=main.ID' - + ' AND pp.IDOdchylkyDo IS NULL AND pp.priorita=0 AND cse._MaceciStroj=1)'; -{ - where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''004'' AND main.IDZakazModif IN (SELECT ID FROM ' - + tblZakazModif + ' WHERE Schvaleno=1 AND Kod LIKE N''COKO%'')'; -} -{ - if (params.ContainsKey('idpracovist')) then - if (params.Items['idpracovist']<>'') then - begin - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.IDOdchylkyDo IS NULL' - + ' AND p.StavPrikazu IN (30,40)' - + ' AND pp.pracoviste IN (' + params.Items['idpracovist'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' - end; -} - if (params.ContainsKey('idstroju')) then - begin - if (params.Items['idstroju']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' - end; - - if (params.ContainsKey('idstroj')) then - begin - if (params.Items['idstroj']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' - end; -{ - else - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; -} - end; - - - if (typPrikazu=3) then // pro baleni (interni) - begin - locParams.Add('nazevOp', 'balení'); - where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' - + ' AND LOWER(Nazev) LIKE N''%balení%'' AND IDStroje NOT IN (SELECT ID FROM ' + tblCisStroj - + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%'') AND priorita=0)'; // main.Rada=N''004'' -{ - if (params.ContainsKey('idstroj')) then - begin - if (params.Items['idstroj']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo<>N''701'')' - end; - - if (params.ContainsKey('idstroju')) then - begin - if (params.Items['idstroju']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' - + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' - + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' - + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; - end; -} - end; - - - if (typPrikazu=4) then // pro balicku finalu - begin - locParams.Add('nazevOp', 'balení'); - where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' - + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%''))'; - end; - - - if (typPrikazu=5) then // pro EWB - begin - locParams.Add('nazevOp', 'balení'); - where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' - + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''EWB%''))'; - end; - - - - if (params.ContainsKey('odDatum')) then - if (params.Items['odDatum']<>'') then - odDatum:= params.Items['odDatum']; - if (odDatum<>'') then - begin - if (Length(odDatum)=8) then - odDatum:= odDatum + '000000'; - if (Length(odDatum)=10) then - odDatum:= odDatum + '00'; - odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); - if not(TryStrToDateTime(odDatum, datOd)) then - datOd:= IncDay(Now, -180) - end - else - datOd:= IncDay(Now, -180); - - if (params.ContainsKey('doDatum')) then - if (params.Items['doDatum']<>'') then - odDatum:= params.Items['doDatum']; - if (doDatum<>'') then - begin - if (Length(doDatum)=8) then - doDatum:= doDatum + '235959'; - if (Length(doDatum)=10) then - doDatum:= doDatum + '59'; - doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); - if not(TryStrToDateTime(doDatum, datDo)) then - datDo:= Now - end - else - datDo:= Now; - - if (odDatum<>'') then - begin - strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)'; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; - end; - - if (doDatum<>'') then - begin - strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; - end; - - -// pro micharnu nejsou prikazy pozastavovany - where:= where + IfThen(where<>'', ' AND ', '') + 'main.StavPrikazu IN (30' + IfThen(typPrikazu<>1, ',40', '') + ')'; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada<>N''009'''; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada LIKE N''0%'''; - - - if (where<>'') then - lSQL:= lSQL + ' WHERE ' + where; - lSQL:= lSQL + ' GROUP BY main.ID ORDER BY main.ID'; - - - vpSvr:= TVyrobniPrikazService.Create (self.FDM); - - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - - lQry:= TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; - vpList:= TObjectList.Create; - try - if not(lQry.Active) then - lQry.Open(lSQL); - lQry.First; - rNo:= 1; - while (rNo<=cnt) do - begin - lQry.RecNo:= rNo; - idVPr:= lQry.FieldByName('ID').AsInteger; - p:= vpSvr.GetByID (idVPr, locParams); - vpList.Add(p); - if not(lQry.Active) then - lQry.Open; - Inc(rNo); - end; - result:= vpList; - except on E:Exception do + + operace:= false; + if (params.ContainsKey('operace')) then + if (params.Items['operace']='1') then begin - errMsg:= e.Message; - raise EServiceException.Create('Chyba načítání naskenované položky/položek dokladu: ' + E.Message); + operace:= true; + locParams.Add('operace', params.Items['operace']); end; + + material:= false; + if (params.ContainsKey('material')) then + if (params.Items['material']='1') then + begin + material:= true; + locParams.Add('material', params.Items['material']); + end; + + spustene:= false; + if (params.ContainsKey('spustene')) then + if (params.Items['spustene']='1') then + begin + spustene:= true; + locParams.Add('spustene', params.Items['spustene']); + end; + + + + where:= ''; + lSQL:= 'SELECT DISTINCT(main.ID) AS ID FROM ' + tblVPr + ' main'; + + + if (spustene) then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblRozpracOperR + + ' r ON (r.DokladPrPostup=pp.Doklad AND r.AltPrPostup=pp.Alt AND r.IDPrikaz=pp.IDPrikaz)' + + ' INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper)' + + ' WHERE pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=main.ID AND h.DatumUzavreni IS NULL)'; + + + typPrikazu:= 0; + if (params.ContainsKey('typ')) then + if not(TryStrToInt(params.Items['typ'], typPrikazu)) then + typPrikazu:= 0; + + locParams.Add('rtn', '1'); + locParams.Add('typPrikazu', typPrikazu.ToString); + + if (typPrikazu=0) then // obecny + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0)'; + + + + if (typPrikazu=1) then // pro micharnu se nacitaji vyssi prikazy, tj. kde testo skonci + begin + locParams.Add('nazevOp', 'michani'); + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''003'' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')'; + + + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' + + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz + + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' + + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' + + ' WHERE ppx.IDOdchylkyDo IS NULL' + + ' AND px.StavPrikazu IN (30,40)' + + ' AND ppx.IDStroje=' + params.Items['idstroj'] + '))' + + ')'; + { + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')' + } + end; + { + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')'; + } + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN ' + params.Items['idstroju'] + ')' + + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz + + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' + + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' + + ' WHERE ppx.IDOdchylkyDo IS NULL' + + ' AND px.StavPrikazu IN (30,40)' + + ' AND ppx.IDStroje IN ' + params.Items['idstroju'] + '))' + + ')'; + + { + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')' + } + end; + end; + + + if (typPrikazu=2) then // pro macirnu + begin + locParams.Add('nazevOp', 'máčení'); + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada IN (N''004'', N''002'') AND EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCisStroj + ' cs' + + ' ON (cs.ID=pp.IDStroje) INNER JOIN ' + tblCisStrojE + ' cse ON (cse.ID=cs.ID) WHERE pp.IDPrikaz=main.ID' + + ' AND pp.IDOdchylkyDo IS NULL AND pp.priorita=0 AND cse._MaceciStroj=1)'; + { + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''004'' AND main.IDZakazModif IN (SELECT ID FROM ' + + tblZakazModif + ' WHERE Schvaleno=1 AND Kod LIKE N''COKO%'')'; + } + { + if (params.ContainsKey('idpracovist')) then + if (params.Items['idpracovist']<>'') then + begin + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.pracoviste IN (' + params.Items['idpracovist'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; + } + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; + + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; + { + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; + } + end; + + + if (typPrikazu=3) then // pro baleni (interni) + begin + locParams.Add('nazevOp', 'balení'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND LOWER(Nazev) LIKE N''%balení%'' AND IDStroje NOT IN (SELECT ID FROM ' + tblCisStroj + + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%'') AND priorita=0)'; // main.Rada=N''004'' + { + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo<>N''701'')' + end; + + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; + end; + } + end; + + + if (typPrikazu=4) then // pro balicku finalu + begin + locParams.Add('nazevOp', 'balení'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%''))'; + end; + + + if (typPrikazu=5) then // pro EWB + begin + locParams.Add('nazevOp', 'balení'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''EWB%''))'; + end; + + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -180) + end + else + datOd:= IncDay(Now, -180); + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + doDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + if (odDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; + end; + + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; + end; + + + // pro micharnu nejsou prikazy pozastavovany + where:= where + IfThen(where<>'', ' AND ', '') + 'main.StavPrikazu IN (30' + IfThen(typPrikazu<>1, ',40', '') + ')'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada<>N''009'''; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada LIKE N''0%'''; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' GROUP BY main.ID ORDER BY main.ID'; + + + vpSvr := TVyrobniPrikazService.Create (self.FDM); + try + sqlConnX := TFDConnection.Create (nil); + try + sqlConnX.ConnectionDefName := sqlPoolName; + sqlConnX.Open; + + lokIDcka := TList.Create; + try + lQry := TFDQuery.Create (nil); + try + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); + + cnt := lQry.RecordCount; + + if not lQry.Active then + lQry.Open (lSQL); + + lQry.First; + rNo := 1; + + try + while (rNo <= cnt) do + begin + lQry.RecNo := rNo; + idVPr := lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (idVPr); + if not lQry.Active then + lQry.Open (lSQL); + Inc(rNo); + end; + + except + on E: Exception do + begin + {$IF CompilerVersion >= 37.0} // Delphi 13+ + raise EServiceException.Create ('Chyba načítání naskenované položky/položek dokladu') from E; + {$ELSE} + raise EServiceException.Create ('Chyba načítání naskenované položky/položek dokladu: ' + E.Message) at ExceptAddr; + {$ENDIF} + end; + end; + + finally + lQry.Free; + end; + + vpList := TObjectList.Create; + try + for idVPr in lokIDcka do + begin + p := vpSvr.GetByID (idVPr, locParams, sqlConnX); + vpList.Add (p); + end; + result := vpList; + vpList := nil; // zabrani uvolneni v finally + finally + vpList.Free; + end; + + finally + lokIDcka.Free; + end; + + finally + sqlConnX.Free; + end; + + finally + vpSvr.Free; end; + finally - begin - vpSvr.Free; - FreeAndNil(lQry); - end; + locParams.Free; end; - locParams.Free; - sqlConnX.Close; - sqlConnX.Free; end; diff --git a/_custom/Rootvin/winSvc/impl.inc b/_custom/Rootvin/winSvc/impl.inc index 8a16c39..8fb97a6 100644 --- a/_custom/Rootvin/winSvc/impl.inc +++ b/_custom/Rootvin/winSvc/impl.inc @@ -55,7 +55,7 @@ var lSQL, errMsg, url, outData, fName, loopCasTyp: string; lLoop, idDigiFile, cnt, idx: Integer; lLoopMax, koefProCas: integer; - logRunCnt: integer; + logRunCnt, intTemp: integer; Msg: TMsg; firstRun, inProg, inDL: boolean; lQry: TFDQuery; @@ -95,137 +95,140 @@ attrIdx:= attribs.IndexOf('zapisObjMatExpPrIntMins'); if (attrIdx>-1) then - if (attribs.Get(attrIdx).NodeValue<>null) then - lLoopMax:= attribs.Get(attrIdx).NodeValue; + if TryStrToInt(VarToStr(attribs.Get(attrIdx).NodeValue), intTemp) then + lLoopMax:= intTemp; end; // n1 = config end; // specCfgXML.DocumentElement<>nil end; // not specCfgXML.IsEmptyDoc end; // FileExists(cfgFile) except + on E: Exception do + datMod.LogInfo (Quick.Logger.etError, 'Chyba cteni konfigu THeoRTNZapisObjMatThread: ' + E.Message); end; finally begin if (specCfgXML<>nil) then - specCfgXML:= nil; + specCfgXML := nil; CoUninitialize; end; end; - + datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavek materialu do ExpPr - interval: ' + lLoopMax.ToString + ' min.'); - lLoopMax:= lLoopMax * 60; // minuty na vteriny + lLoopMax := lLoopMax * 60; // minuty na vteriny - firstRun:= true; - inProg:= false; - FRunning:= true; + firstRun := true; + inProg := false; + FRunning := true; if (1=1) then // pro rychle vypnuti begin - FTimer:= CreateWaitableTimer (nil, true, 'RTNZapisObjMatExpPrWaitableTimer'); - liDueTime.QuadPart:= -1*_Second; + FTimer := CreateWaitableTimer (nil, true, 'RTNZapisObjMatExpPrWaitableTimer'); + liDueTime.QuadPart := -1*_Second; - sqlConnX:= TFDConnection.Create (nil); - sqlConnX.Params.SetStrings (datMod.sqlConnParams); - lSQL:= 'DECLARE @errMsg NVARCHAR(500)=N''''' + CRLF +'IF OBJECT_ID(N''dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew'', N''P'') IS NOT NULL' + CRLF - + ' EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew @errMsg OUT' + CRLF + 'SELECT @errMsg AS ErrMsg'; - lQry:= TFDQuery.Create(nil); - - try - lQry.Connection:= sqlConnX; - - while not(Terminated) or not(FRunning) do - begin - if (HDCDZApiService<>nil) then - if (HDCDZApiService.Terminated) then - begin - Terminate; - FRunning:= false; - end; - - PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } - - if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu + while not(Terminated) and FRunning do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then begin - idDigiFile:= 0; - firstRun:= false; + Terminate; + FRunning:= false; + end; - if (logRunCnt<4) then - datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky materialu do ExpPr c.' + logRunCnt.toString + '...'); - if (logRunCnt=4) then - datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky - bezi, ale dal neloguju'); + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } - try - if not(inProg) then // nebezi uz ? - begin + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu + begin - if (1=1) then // pro rychle vypnuti + sqlConnX := TFDConnection.Create (nil); + try + sqlConnX.Params.SetStrings (datMod.sqlConnParams); + lQry := TFDQuery.Create(nil); + try + lQry.Connection := sqlConnX; + + idDigiFile:= 0; + firstRun:= false; + + if (logRunCnt<4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky materialu do ExpPr c.' + logRunCnt.toString + '...'); + if (logRunCnt=4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky - bezi, ale dal neloguju'); + + try + if not(inProg) then // nebezi uz ? + begin + + if (1=1) then // pro rychle vypnuti + begin + sqlConnX.Open; + if (sqlConnX.Connected) then + begin + inProg:= true; + + lSQL:= 'DECLARE @errMsg NVARCHAR(500)=N''''' + CRLF +'IF OBJECT_ID(N''dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew'', N''P'') IS NOT NULL' + CRLF + + ' EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew @errMsg OUT' + CRLF + 'SELECT @errMsg AS ErrMsg'; + + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + lQry.First; + errMsg:= lQry.FieldByName('ErrMsg').AsString; + if (errMsg<>'') then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); + {$IFDEF DEBUG} + WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); + {$ENDIF} + end; + end; + + inProg:= false; + end; // sql Connected + end; // 1=1 + end; + + except on E:Exception do begin - sqlConnX.Open; - if (sqlConnX.Connected) then + inProg:= false; + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + if (mamTabPrijataData) then begin - inProg:= true; - lQry.Open(lSQL); - if (lQry.RecordCount>0) then - begin - lQry.First; - errMsg:= lQry.FieldByName('ErrMsg').AsString; - if (errMsg<>'') then - begin - datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); -{$IFDEF DEBUG} - WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); -{$ENDIF} - end; - end; - lQry.Close; - inProg:= false; - end; // sql Connected + datMod.LogInfo (Quick.Logger.etError, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); + {$IFDEF DEBUG} + WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); + {$ENDIF} + end; end; end; + finally + lQry.Free; + end; - except on E:Exception do - begin - inProg:= false; - errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; - if (mamTabPrijataData) then - begin - datMod.LogInfo (Quick.Logger.etError, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); -{$IFDEF DEBUG} - WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); -{$ENDIF} - end; - end; - end; - - - lLoop:= 0; - if (logRunCnt<5) then - Inc (logRunCnt); + finally + sqlConnX.Free; end; - Inc (lLoop); - if (FTimer<>0) then - SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); - repeat - lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); - until lBusy = WAIT_OBJECT_0; + lLoop:= 0; + if (logRunCnt<5) then + Inc (logRunCnt); + end; // if lLoop=lLoopMax... + + Inc (lLoop); + + + if (FTimer<>0) then + SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); + repeat + lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); + until lBusy = WAIT_OBJECT_0; // Sleep (998); - end; - finally - end; + end; // while not(Terminated) and FRunning - if (lQry<>nil) then - begin - lQry.Close; - FreeAndNil (lQry); - end; - if (sqlConnX<>nil) then - begin - sqlConnX.Close; - FreeAndNil (sqlConnX); - end; + if (FTimer<>0) then + CloseHandle (FTimer); end; // 1=1 diff --git a/_custom/Rootvin/zdroje.RES b/_custom/Rootvin/zdroje.RES index 317e9bd65c0616938474d2a82c073aad25ceefeb..65aa689479d9cfa3a407eb30ad9dfedc7b112e70 100644 GIT binary patch delta 34 ncmezKN$}4n!G-@764<|5!V0! diff --git a/hdcDZApi.dpr b/hdcDZApi.dpr index fdb477e..ab2fa69 100644 --- a/hdcDZApi.dpr +++ b/hdcDZApi.dpr @@ -13,9 +13,7 @@ uses Winapi.Windows, System.Classes, -{$IFDEF DEBUG} Web.WebReq, -{$ENDIF} MVCFramework.Middleware.Swagger, MVCFramework.Swagger.Commons, diff --git a/hdcDZApi.dproj b/hdcDZApi.dproj index e698b8e..7a6ab64 100644 --- a/hdcDZApi.dproj +++ b/hdcDZApi.dproj @@ -5,7 +5,7 @@ VCL hdcDZApi.dpr True - Debug + Release Win64 2 Application @@ -131,9 +131,9 @@ 700000 true 3 - 2025 - 1205 - CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator (API);FileVersion=3.0.2025.1205;InternalName=;LegalCopyright=(c) 2022-25 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;LastCompiledTime=2025.12.05 12:42:18 + 2026 + 412 + CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator (API);FileVersion=3.0.2026.412;InternalName=;LegalCopyright=(c) 2022-25 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;LastCompiledTime=2026.04.12 16:03:18 api2-5.ico 3 2 @@ -251,7 +251,7 @@ Ethea SVGIconImageList VCL components TurboPack Essentials Delphi Runtime package Png Components for Delphi - DMVCFramework - CopyRight (2010-2024) Daniele Teti and the DMVCFramework Team + DMVCFramework - CopyRight (2010-2025) Daniele Teti and the DMVCFramework Team JVCL Application and Form Components JVCL Band Objects JVCL Non-Visual Components @@ -282,6 +282,7 @@ Devart Universal Data Access Components Ethea SVGIconImageList FMX components Express Cross Platform Library Icon Library by Developer Express Inc. + (untitled) File C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl\VirtualTreesDD290.bpl not found Helios Orange Components TurboPack LockBox 3 Delphi runtime package diff --git a/hdcDZApi.res b/hdcDZApi.res index fec891c564010ea031a7dc90ff08e584e44ec5fc..85e68a4f147508e0e5f0956bfa4c38b3d1102751 100644 GIT binary patch delta 511 zcma)2O-lk%6g_Vy2nni1i*~-;l!9L~YSJcB3!{jjAZV4COyYdVXiz~2{(^?tMt>rg zML(r|wCEq$dCzJck8|(i-E+@9_q|j;s}C|YF#!o+I$b6NZ$JTwIelT6m{HBjJc^Hb zU{>A!DJjbA<(CVrn9);e^kt|@0VSfW^DZosE;vb`jsPC|Xu-!Vj+i}kv_umPGF08i z0M~FaM3;AmuLI-|5&;Vg%(OE>Xm>o@*H|d0}eY}ZNJaOLTWg; z;smh2jWl&Eeul-9CCb{-e;3Y^eX8BH7Wo$vHQKyWtHcN5)yyCfFBnN-$Lq#sQW;dg VpVKBKV+C7$u^Ee~KHnQ}tKSdfQB(i` delta 205 zcmaE3vBzwJf>H|;1A_ts1H=FS0zk|NWHB%pFmSSf89<_iX`+*nmJ#C%b_NEBtUXW^ z!~!XShyWQ-@Pu*VJSFJ^Kw(CpDJDQ{3Z`8djDRYv7&s?eGph1uFr+XfGq^BBF*q_5 zFl0{N&S=bO!l1`s3{-12xtwV)vl;{YWOHWu$x+NE@}@u;1E8E9&3J&1;$WO8@}jKOgA; diff --git a/uCtrlObehZbozi.pas b/uCtrlObehZbozi.pas index ec65bb0..54d2d7a 100644 --- a/uCtrlObehZbozi.pas +++ b/uCtrlObehZbozi.pas @@ -246,7 +246,7 @@ uses try - Render(ObjectDict().Add('data', GetStavSkladuService.GetByParams(params))); // viz uSvc_ObehZbozi.pas + Render(ObjectDict().Add('data', GetStavSkladuService.GetByParams(params, FDM.sqlConn))); // viz uSvc_ObehZbozi.pas except {$IFDEF NORENDER400} RenderStatusMessage (200); @@ -343,7 +343,7 @@ uses try - Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); // viz uSvc_ObehZbozi.pas + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params, FDM.sqlConn))); // viz uSvc_ObehZbozi.pas except {$IFDEF NORENDER400} RenderStatusMessage (200); @@ -410,7 +410,7 @@ uses begin params.Add('id', iId.ToString); try - Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); // viz uSvc_ObehZbozi.pas + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params, FDM.sqlConn))); // viz uSvc_ObehZbozi.pas except {$IFDEF NORENDER400} RenderStatusMessage (200); @@ -550,7 +550,7 @@ uses params.Add('iddoklad', iIdDoklad.ToString); try - Render(ObjectDict().Add('data', GetPolozkaOZService.GetByParams(params))); // viz uSvc_ObehZbozi.pas + Render(ObjectDict().Add('data', GetPolozkaOZService.GetByParams(params, FDM.sqlConn))); // viz uSvc_ObehZbozi.pas except {$IFDEF NORENDER400} RenderStatusMessage (200); diff --git a/uCtrlVyroba.pas b/uCtrlVyroba.pas index 6589a51..e9c03e6 100644 --- a/uCtrlVyroba.pas +++ b/uCtrlVyroba.pas @@ -854,7 +854,7 @@ uses try - Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params))); + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -886,7 +886,7 @@ uses params.Add('id', iId.ToString); try - Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params))); + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -974,7 +974,7 @@ uses if (iId>0) then begin try - Render(ObjectDict().Add('data', GetVyrobaEvidenceOperaciService.GetByID (iId))); + Render(ObjectDict().Add('data', GetVyrobaEvidenceOperaciService.GetByID (iId, nil, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1040,7 +1040,7 @@ uses params.Add('id', iId.ToString); try - Render(ObjectDict().Add('data', GetTPVCisKoopService.GetByParams (params))); + Render(ObjectDict().Add('data', GetTPVCisKoopService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1122,7 +1122,7 @@ uses params.Add('spustene', '1'); try - Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params) )); + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params, FDM.sqlConn) )); except on E:Exception do begin RenderStatusMessage (200); @@ -1161,7 +1161,7 @@ uses params.Add('jenId', '1'); try - Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params))); + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); end; @@ -1204,7 +1204,7 @@ uses try - Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByID (iId, params))); + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByID (iId, params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1330,7 +1330,7 @@ uses try - Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1420,7 +1420,7 @@ uses mnReq:= 0; try - Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetKusovnik (idVPr, mnReq, jenPlatne, 0))); + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetKusovnik (idVPr, mnReq, jenPlatne, 0, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1477,7 +1477,7 @@ uses params.Add('stavPrikazu', iStav.ToString); try - Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1570,7 +1570,7 @@ uses try - Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1680,7 +1680,7 @@ uses try - Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetByParams (p))); // viz uSvc_Vyroba.pas + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetByParams (p, FDM.sqlConn))); // viz uSvc_Vyroba.pas except RenderStatusMessage (200); { @@ -1721,7 +1721,7 @@ uses params.Add ('kontrolnipostupy', '1'); try - Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetByID (iid, params))); + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetByID (iid, params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1840,7 +1840,7 @@ uses try - Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByParams(params))); + Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByParams(params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -1876,7 +1876,7 @@ uses bPol:= (p=1); try - Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByID(iId, bPol))); + Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByID(iId, bPol, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -2100,7 +2100,7 @@ uses params.Add('dilec', idDilce.ToString); try - Render(ObjectDict().Add('data', GetTPVOperaceDilceService.GetByParams (params))); + Render(ObjectDict().Add('data', GetTPVOperaceDilceService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); end; @@ -2176,7 +2176,7 @@ uses params.Add('id', iId.ToString); try - Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params, FDM.sqlConn))); except RenderStatusMessage (200); { @@ -2382,7 +2382,7 @@ uses params.Add ('id', iId.ToString); try - Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByID (iId, params))); + Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByID (iId, params, FDM.sqlConn))); except // RenderStatusMessage (200); { @@ -2424,7 +2424,7 @@ uses {$ENDIF} try - Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByParams (params))); + Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByParams (params, FDM.sqlConn))); except // RenderStatusMessage (200); { diff --git a/uDataMod.pas b/uDataMod.pas index 65d1c70..97ec344 100644 --- a/uDataMod.pas +++ b/uDataMod.pas @@ -9,7 +9,7 @@ uses Data.DB, FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Phys.MSSQLDef, FireDAC.Phys.ODBCBase, FireDAC.Phys.MSSQL, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Stan.Consts, - Winapi.ActiveX, + Winapi.ActiveX, System.RegularExpressions, MVCFramework.Logger, Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files; @@ -44,6 +44,7 @@ type function SQLRecordExists (sqlText: string): Boolean; function SQLColumnExists (const tabName: string; const colName: string): Boolean; function SQLIDsToString (const tabName: string=''; where: string=''): string; + function SQLIsSafe (const S: string): boolean; function SQLGetString (sqlCmd: string=''; sqlConnLoc: TFDConnection=nil): string; function StreamToString (const M: TStream): string; @@ -57,6 +58,8 @@ type var datMod: TdatMod; ConnDef: IFDStanConnectionDef; + ConnInit: Boolean = false; + ConnInitLock: TObject; implementation @@ -91,7 +94,7 @@ uses System.StrUtils, Data.Win.ADODB, - procedure TdatMod.DataModuleDestroy(Sender: TObject); + procedure TdatMod.DataModuleDestroy (Sender: TObject); begin if (sqlConnParams<>nil) then sqlConnParams.Free; @@ -156,90 +159,13 @@ uses System.StrUtils, Data.Win.ADODB, dbConnOleDB:= false; -{ - drvList:= TStringList.Create; - try - GetProviderNames(drvList); - -{$IFDEF DEBUG} -{ - if (drvList.Count>0) then - begin - Writeln(CRLF+'Registrovane drivery:'); - for idx:=0 to drvList.Count-1 do - Writeln(drvList.Strings[idx]); - end; - Writeln(''); -{$ENDIF} -{ - if (drvList.IndexOf('MSOLEDBSQL') >= 0) then - mamOleDb:= true; - if (drvList.IndexOf('MSOLEDBSQL19') >= 0) then - dbEncConn:= true; - if not(mamOleDb) or (odbc) then - begin - mamOleDb:= false; - idx:= -1; - if (drvList.Find('ODBC Driver 17', idx)) then - drvName2:= drvList.Strings[idx]; - if (drvList.Find('ODBC Driver 18', idx)) then - begin - drvName2:= drvList.Strings[idx]; - dbEncConn:= true; - end; - if (drvList.Find('ODBC Driver 19', idx)) then - begin - drvName2:= drvList.Strings[idx]; - dbEncConn:= true; - end; - end; - - sqlMSSQLDrv.ODBCDriver:= drvName2; - if (drvName.Contains('ODBC')) then - drvName:= 'ODBC'; -// sqlMSSQLDrv.DriverID:= drvName; - - dbConnOleDB:= mamOleDb; - -{$IFDEF DEBUG} -{ Writeln('Vybrany driver: ' + sqlMSSQLDrv.ODBCDriver); -{$ENDIF} -{ - finally - drvList.Free; - end; -} if not(sqlConn.Connected) and (dbServer<>'') and (dbName<>'') then begin try - sqlConnParams:= TStringList.Create; - sqlConnParams.Clear; oPars:= TStringList.Create; try -// sqlConn.Params.Clear; -// sqlConn.DriverName:= drvName; -// sqlConn.Params.Add(S_FD_ConnParam_Common_DriverID + '=' + drvName); - - - sqlConnParams.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); - sqlConnParams.Add(S_FD_ConnParam_Common_Server + '=' + dbServer); - sqlConnParams.Add(S_FD_ConnParam_Common_Port + '=' + dbPort.ToString); - sqlConnParams.Add(S_FD_ConnParam_Common_Database + '=' + dbName); - sqlConnParams.Add(S_FD_ConnParam_Common_UserName + '=' + dbUser); - sqlConnParams.Add(S_FD_ConnParam_Common_Password + '=' + dbPwd); - sqlConnParams.Add(S_FD_ConnParam_Common_OSAuthent + '=No'); - sqlConnParams.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); - sqlConnParams.Add(S_FD_ConnParam_Common_LoginTimeout + '=15'); - sqlConnParams.Add(S_FD_ConnParam_MSSQL_MARS + '=Yes'); -// sqlConnParams.Add(S_FD_ConnParam_Common_Pooled + '=True'); -// sqlConnParams.Add(S_FD_ConnParam_Common_Pool_MaximumItems + '=100'); - sqlConnParams.Add(S_FD_ConnParam_Common_ExtendedMetadata + '=True'); - sqlConnParams.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc2'); - sqlConnParams.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes'); - - - oPars.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); +// oPars.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); // je definovan v AddConnectionDef oPars.Add(S_FD_ConnParam_Common_Server + '=' + dbServer); oPars.Add(S_FD_ConnParam_Common_Port + '=' + dbPort.ToString); oPars.Add(S_FD_ConnParam_Common_Database + '=' + dbName); @@ -249,42 +175,58 @@ uses System.StrUtils, Data.Win.ADODB, oPars.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); oPars.Add(S_FD_ConnParam_Common_LoginTimeout + '=15'); oPars.Add(S_FD_ConnParam_MSSQL_MARS + '=Yes'); - oPars.Add(S_FD_ConnParam_Common_ExtendedMetadata + '=True'); + oPars.Add(S_FD_ConnParam_Common_ExtendedMetadata + '=False'); // True jen pri pouziti AutoGenerate SQL / CachedUpdates / UpdateObject oPars.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc'); oPars.Add(S_FD_ConnParam_Common_Pooled + '=True'); - oPars.Add(S_FD_ConnParam_Common_Pool_MaximumItems + '=100'); + oPars.Add(S_FD_ConnParam_Common_Pool_MaximumItems + '=300'); + oPars.Add(S_FD_ConnParam_Common_Pool_ExpireTimeout + '=30000'); // FireDAC v intervalu 30 sekund testuje platnost spojeni, jestli to SQL server neukoncil + oPars.Add(S_FD_ConnParam_Common_Pool_CleanupTimeout + '=90000'); // FireDAC v intervalu 90 sekund cisti nepouzivana spojeni oPars.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes'); +// oPars.Add('CommandTimeout=120'); + if (dbEncConn) then + oPars.Add(S_FD_ConnParam_MSSQL_Encrypt + '=Yes'); - if (FDManager.FindConnection(sqlPoolName)=nil) then + if not(ConnInit) then begin - FDManager.AddConnectionDef (sqlPoolName, 'MSSQL', oPars, true); - if (FDManager.State<>dmsInactive) then - Sleep(0); + TMonitor.Enter(ConnInitLock); + try + if not(ConnInit) then + begin + if (FDManager.ConnectionDefs.FindConnectionDef(sqlPoolName) = nil) then + FDManager.AddConnectionDef(sqlPoolName, 'MSSQL', oPars); + if (FDManager.State = dmsInactive) then + FDManager.Open; + ConnInit := True; + end; + finally + TMonitor.Exit (ConnInitLock); + end; end; - FDManager.Open; // sqlConn.Params.SetStrings(oPars); sqlConn.ConnectionDefName:= sqlPoolName; - sqlQry1.ConnectionName:= sqlConn.ConnectionDefName; - sqlQry2.ConnectionName:= sqlConn.ConnectionDefName; - sqlQry3.ConnectionName:= sqlConn.ConnectionDefName; - sqlQry10.ConnectionName:= sqlConn.ConnectionDefName; - sqlQry11.ConnectionName:= sqlConn.ConnectionDefName; + sqlQry1.Connection:= sqlConn; + sqlQry2.Connection:= sqlConn; + sqlQry3.Connection:= sqlConn; + sqlQry10.Connection:= sqlConn; + sqlQry11.Connection:= sqlConn; // if (dbConnOleDB) then // sqlMSSQLDrv.ODBCDriver:= ''; + connStr:= ''; if (dbEncConn) then begin if (dbConnOleDB) then - connStr:= 'Encrypt=True;TrustServerCertificate=True;UseEncryptionForData=True' + connStr:= ';Encrypt=True;TrustServerCertificate=True;UseEncryptionForData=True' else - connStr:= 'Encrypt=yes;TrustServerCertificate=yes;Encrypt=yes'; + connStr:= ';Encrypt=yes;TrustServerCertificate=yes;Encrypt=yes'; // sqlConn.Params.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=' + connStr); end; + connStr:= FDManager.ConnectionDefs.ConnectionDefByName(sqlPoolName).Params.Text + connStr; - connStr:= sqlConn.Params.DelimitedText; sqlConn.Open; + sqlConn.ExecSQL('SET LOCK_TIMEOUT 60000'); // čekej max 60 sekund na lock, ne nekonecne jako je default (-1) except on E:Exception do begin result:= E.Message; @@ -294,8 +236,8 @@ uses System.StrUtils, Data.Win.ADODB, end; end; // try finally - if (oPars<>nil) then - oPars.Free; +// sqlConnParams.Free; + oPars.Free; end; // try end; end; @@ -458,19 +400,37 @@ uses System.StrUtils, Data.Win.ADODB, + function TdatMod.SQLIsSafe (const S: string): boolean; + var UpperS: string; + begin + result:= TRegEx.IsMatch (S, '^[A-Za-z0-9_ \(\)=<>!\.,]+$', [roIgnoreCase]); + if not result then + Exit; + + UpperS := UpperCase(S); +// zakázaná klíčová slova + if TRegEx.IsMatch(UpperS, '\b(SELECT|INSERT|UPDATE|DELETE|DROP|EXEC|UNION)\b') then + Exit (False); + + result := True; + end; + + + + function TdatMod.SQLIDsToString (const tabName: string = ''; where: string = ''): string; var lSQL, s, t: string; c: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; begin - result:= ''; + result := ''; try if (self.sqlConn.Connected) then begin - s:= ''; - t:= tabName; + s := ''; + t := tabName; if not(t.Contains('dbo.')) and not(t.Contains('dbo].')) then t:= '[' + t; if not(t.EndsWith(']')) then @@ -479,8 +439,8 @@ uses System.StrUtils, Data.Win.ADODB, t:= '[dbo].' + t; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; try sqlConnX.Open; finally @@ -491,15 +451,23 @@ uses System.StrUtils, Data.Win.ADODB, begin lQry:= TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; + result := ''; + lQry.Connection := sqlConnX; where:= where.Replace(';', '').Replace('--', '').Trim; // sanitace podminky lSQL:= 'SELECT STRING_AGG(ID,'','') AS IDs FROM ' + t + IfThen(where<>'', ' WHERE ' + where, ''); - try - lQry.Open(lSQL); - result:= lQry.FieldByName('IDs').AsString; - except on E:Exception do - result:= ''; - end; + + if not(SQLIsSafe(where)) then + lSQL:= ''; + + if (lSQL<>'') then + begin + try + lQry.Open (lSQL); + result := lQry.FieldByName('IDs').AsString; + except on E:Exception do + result := ''; + end; + end; finally lQry.Free; end; @@ -608,10 +576,12 @@ uses System.StrUtils, Data.Win.ADODB, initialization + ConnInitLock := TObject.Create; // CoInitialize(nil); finalization + ConnInitLock.Free; // CoUninitialize; end. diff --git a/uSvc_KmenZbozi.pas b/uSvc_KmenZbozi.pas index 2a33c09..e14dc83 100644 --- a/uSvc_KmenZbozi.pas +++ b/uSvc_KmenZbozi.pas @@ -6,6 +6,9 @@ interface uses System.Generics.Collections, System.SysUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, JsonDataObjects, uSvc_Base, uCommons, @@ -36,7 +39,7 @@ type TKmenZboziService = class(TServiceBase) public function GetAll: TObjectList; virtual; - function GetByID (const AID: Integer; params: TDictionary=nil): TKmenZbozi; virtual; + function GetByID (const AID: Integer; params: TDictionary=nil; AConn: TFDConnection = nil): TKmenZbozi; virtual; function GetByParams (params: TDictionary): TObjectList; virtual; function GetMeta: TJSONObject; virtual; function GetPrepocetMJ (idKmen: integer): TObjectList; virtual; @@ -49,9 +52,6 @@ implementation uses System.StrUtils, System.Variants, - FireDAC.Stan.Option, - FireDAC.Comp.Client, - FireDAC.Stan.Param, Quick.Logger, MVCFramework.Commons, MVCFramework.FireDAC.Utils, @@ -211,6 +211,7 @@ uses sqlConnX:= TFDConnection.Create (nil); sqlConnX.ConnectionDefName:= sqlPoolName; + lSQL:= 'SELECT ' + sqlSelKmen + ' FROM ' + tblKZ + ' ORDER BY ID'; lQry:= TFDQuery.Create (nil); @@ -220,10 +221,9 @@ uses lQry.Open (lSQL); result:= lQry.AsObjectList; finally + lQry.Free; end; - lQry.Free; - sqlConnX.Close; sqlConnX.Free; end; @@ -231,18 +231,25 @@ uses - function TKmenZboziService.GetByID (const AID: Integer; params: TDictionary=nil): TKmenZbozi; + function TKmenZboziService.GetByID (const AID: Integer; params: TDictionary=nil; AConn: TFDConnection = nil): TKmenZbozi; {$IFDEF CUSTOM_CTRL_Rootvin} const rtnASOLTrideni = '_ASOL_IdentifTrideni'; {$ENDIF} var lSQL, extInfoStr: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; - sqlConnX:= TFDConnection.Create (nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + lokalniConnection:= (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; extInfoStr:= ''; if (SQLTableExists ('dbo', tblKZe)) then @@ -288,11 +295,11 @@ uses raise EServiceException.Create ('Chyba nacitani kmenove karty: ' + E.Message); end; finally + lQry.Free; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + sqlConnX.Free; end; diff --git a/uSvc_ObehZbozi.pas b/uSvc_ObehZbozi.pas index 03f4722..b191e13 100644 --- a/uSvc_ObehZbozi.pas +++ b/uSvc_ObehZbozi.pas @@ -7,6 +7,9 @@ interface uses System.Generics.Collections, System.SysUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, JsonDataObjects, uSvc_Base, uCommons, @@ -40,7 +43,7 @@ type TSerioveCisloPohybOZService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; virtual; end; @@ -48,15 +51,15 @@ type TStavSkladuService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; virtual; end; TDokladOZService = class(TServiceBase) public - function GetByID (const AID: integer; sdServer: boolean=false; params: TDictionary=nil): TDokladOZ; virtual; function GetMeta: TJSONObject; virtual; - function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByID (const AID: integer; sdServer: boolean=false; params: TDictionary=nil; AConn: TFDConnection = nil): TDokladOZ; virtual; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; virtual; function GetDruhyDokladu (druhpohybu: string): TObjectList; virtual; end; @@ -64,8 +67,8 @@ type TPolozkaOZService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByID (const AID: integer; sdServer: boolean=false): TPohybOZ; virtual; - function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByID (const AID: integer; sdServer: boolean=false; AConn: TFDConnection = nil): TPohybOZ; virtual; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; virtual; end; @@ -76,9 +79,6 @@ implementation uses System.StrUtils, System.DateUtils, - FireDAC.Stan.Option, - FireDAC.Comp.Client, - FireDAC.Stan.Param, MVCFramework.FireDAC.Utils, MVCFramework.DataSet.Utils, MVCFramework.Serializer.Commons; @@ -90,15 +90,26 @@ uses { TStavSkladuService } - function TStavSkladuService.GetByParams (params: TDictionary): TObjectList; + function TStavSkladuService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, odDatum, doDatum, strTemp: string; datOd, datDo: TDateTime; id: integer; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSS) + ' FROM ' + tblSS; where:= ''; @@ -129,14 +140,14 @@ uses lQry:= TFDQuery.Create(nil); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; try + sqlConnX.Connected := true; lQry.Connection:= sqlConnX; try lQry.Open(lSQL); result:= lQry.AsObjectList; + lQry.Close; except on E:Exception do raise EServiceException.Create('Chyba natn dokladu: ' + E.Message); end; @@ -144,9 +155,11 @@ uses lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; - + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; @@ -245,21 +258,33 @@ uses - function TDokladOZService.GetByParams (params: TDictionary): TObjectList; + function TDokladOZService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, lSQLmin, where, odDatum, doDatum, sklad, strTemp: string; lQry: TFDQuery; sqlConnX: TFDConnection; datOd, datDo: TDateTime; id, iDZ, idPrikaz, cnt, rNo: integer; jenSeznam, polozky, minimum: Boolean; - d: TDokladOZ; - dList: TObjectList; + resList: TObjectList; + resObj: TDokladOZ; noDatum, snZSDServeru: boolean; radyD, sklady, dpz: string; p: TDictionary; + lokalniConnection: boolean; + lokIDcka: TList; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + p:= TDictionary.Create; radyD:= ''; dpz:= ''; @@ -421,20 +446,19 @@ uses end; {$ENDIF} - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + cnt := lQry.RecordCount; if (cnt>0) then begin + lQry.Close; + lokIDcka:= TList.Create; try - d:= TDokladOZ.Create; - dList:= TObjectList.Create; try rNo:= 1; lQry.First; @@ -442,44 +466,71 @@ uses begin lQry.RecNo:= rNo; iDZ:= lQry.FieldByName('ID').AsInteger; - d:= self.GetByID (iDZ, snZSDServeru, p); - dList.Add(d); + lokIDcka.Add (iDZ); if not(lQry.Active) then lQry.Open; Inc(rNo); end; - result:= dList; // FDM.sqlQry1.AsObjectList; + lQry.Close; except on E:Exception do raise EServiceException.Create('Chyba natn dokladu: ' + E.Message); end; // FreeAndNil(dList); + resList:= TObjectList.Create; + try + for iDZ in lokIDcka do + begin + resObj:= self.GetByID (iDZ, snZSDServeru, p, sqlConnX); + resList.Add (resObj); + end; + result:= resList; + resList:= nil; + finally + resList.Free; + end; + finally + lokIDcka.Free; end; end else raise EServiceException.Create('Vybranm podmnkm neodpovd dn doklad'); finally + p.Free; lQry.Close; - FreeAndNil(lQry); + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - p.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TDokladOZService.GetByID (const AID: Integer; sdServer: boolean=false; params: TDictionary=nil): TDokladOZ; + function TDokladOZService.GetByID (const AID: Integer; sdServer: boolean=false; params: TDictionary=nil; AConn: TFDConnection = nil): TDokladOZ; var lSQL, extInfoStr, errMsg: string; minimumDat, polozky: boolean; p: TDictionary; ps: TPolozkaOZService; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; + + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; + extInfoStr:= ''; if (SQLTableExists ('dbo', tblDZe)) then @@ -491,6 +542,7 @@ uses lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then extInfoStr:= lQry.AsJSONObject; + lQry.Close; finally lQry.Free; end; @@ -532,11 +584,9 @@ uses lSQL:= lSQL + ' FROM ' + tblDZ + ' WHERE ID=:ID'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL, [AID]); @@ -550,16 +600,19 @@ uses result.PohybyOZ:= ps.GetByParams (p); end else - raise EServiceException.Create('Doklad obhu zbo s ID ' + AID.ToString + ' nebyl nalezen.'); + raise EServiceException.Create('Doklad obhu zbo s ID ' + AID.ToString + ' nebyl nalezen.'); finally p.Free; ps.Free; - FreeAndNil(lQry); + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; - end; @@ -589,19 +642,28 @@ uses { TPolozkaOZService } - function TPolozkaOZService.GetByParams (params: TDictionary): TObjectList; + function TPolozkaOZService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where: string; id, AID, cnt, rNo: integer; lQry: TFDQuery; sqlConnX: TFDConnection; - pList: TObjectList; - p: TPohybOZ; + resList: TObjectList; + resObj: TPohybOZ; sdServer: boolean; + lokalniConnection: boolean; + lokIDcka: TList; begin result:= nil; - p:= TPohybOZ.Create; -// pList:= TObjectList.Create; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ; @@ -634,48 +696,61 @@ uses // lSQL:= lSQL.Replace('TabPohybyZbozi.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - + sqlConnX.Connected := true; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; - pList:= TObjectList.Create; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + cnt := lQry.RecordCount; + lokIDcka := TList.Create; try lQry.First; - rNo:= 1; + rNo := 1; while (rNo<=cnt) do begin - lQry.RecNo:= rNo; - AID:= lQry.FieldByName('ID').AsInteger; - p:= self.GetByID (AID, sdServer); - pList.Add(p); + lQry.RecNo := rNo; + AID := lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (AID); if not(lQry.Active) then lQry.Open; - Inc(rNo); + Inc (rNo); end; - result:= pList; except on E:Exception do raise EServiceException.Create('Chyba natn poloky/poloek dokladu: ' + E.Message); end; // pList.Free; + + resList := TObjectList.Create; + try + for AID in lokIDcka do + begin + resObj := self.GetByID (AID, sdServer, sqlConnX); + resList.Add (resObj); + end; + result := resList; + resList := nil; + finally + resList.Free; + end; + finally + lokIDcka.Free; lQry.Close; - FreeAndNil(lQry); + FreeAndNil (lQry); end; - sqlConnX.Close; - sqlConnX.Free; - + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - function TPolozkaOZService.GetByID (const AID: Integer; sdServer: boolean=false): TPohybOZ; + function TPolozkaOZService.GetByID (const AID: Integer; sdServer: boolean=false; AConn: TFDConnection = nil): TPohybOZ; var lSQL, lSQL2, sz, rDokl, dpz, skl, sTemp: string; p: TDictionary; pds: TSerioveCisloPohybOZService; @@ -684,6 +759,8 @@ uses lQry, lQry2: TFDQuery; sqlConnX, sqlConnX2: TFDConnection; extInfoStr: string; + lokalniConnection: boolean; + lokIDcka: TList; {$IFDEF CUSTOM_CTRL_Rootvin} silo: string; siloInt, idMzdy: integer; @@ -691,12 +768,21 @@ uses begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + {$IFDEF CUSTOM_CTRL_Rootvin} silo:= ''; {$ENDIF} - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + sqlConnX.Connected := true; lQry:= TFDQuery.Create(nil); lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; @@ -757,48 +843,53 @@ uses {$IFDEF CUSTOM_CTRL_Rootvin} lQry2:= TFDQuery.Create(nil); try - lQry2.FetchOptions.Mode:= fmAll; - lQry2.Connection:= sqlConnX; + lQry2.FetchOptions.Mode := fmAll; + lQry2.Connection := sqlConnX; if (sz='101') and (dpz='0') and ((rDokl='251') or (rDokl='261')) then if (silo='') then begin - lSQL:= 'SELECT TOP(1) p.IDUmisteni, u.Kod FROM ' + tblPuvodniVC + ' p INNER JOIN ' + tblUmisteni + ' u ON (u.ID=p.IDUmisteni) WHERE p.IDPohybZbozi=:ID'; + lSQL := 'SELECT TOP(1) p.IDUmisteni, u.Kod FROM ' + tblPuvodniVC + ' p INNER JOIN ' + tblUmisteni + ' u ON (u.ID=p.IDUmisteni) WHERE p.IDPohybZbozi=:ID'; lQry2.Open (lSQL, [AID]); lQry2.First; - u:= lQry2.FieldByName('IDUmisteni').AsInteger; - silo:= lQry2.FieldByName('Kod').AsString; + u := lQry2.FieldByName('IDUmisteni').AsInteger; + silo := lQry2.FieldByName('Kod').AsString; if (silo<>'') then begin TryStrToInt (silo, siloInt); if (siloInt>0) then begin - lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPZe + ' WHERE ID=:ID) INSERT ' + tblPZe + ' (ID) SELECT :ID' + CRLF; - lSQL:= lSQL + 'UPDATE ' + tblPZe + ' SET _Mouka_Silo=' + siloInt.ToString + ' WHERE ID=:ID'; + lSQL := 'IF NOT EXISTS (SELECT 1 FROM ' + tblPZe + ' WHERE ID=:ID) INSERT ' + tblPZe + ' (ID) SELECT :ID' + CRLF; + lSQL := lSQL + 'UPDATE ' + tblPZe + ' SET _Mouka_Silo=' + siloInt.ToString + ' WHERE ID=:ID'; sqlConnX.ExecSQL (lSQL, [AID]); end; end; end; - lSQL:= 'SELECT IDMzdy FROM ' + tblPMZGenPZ + ' WHERE IDPohybu=:ID'; + lSQL := 'SELECT IDMzdy FROM ' + tblPMZGenPZ + ' WHERE IDPohybu=:ID'; lQry2.Open (lSQL, [AID]); if (lQry2.RecordCount=1) then - result.IDMzdy:= lQry2.FieldByName('IDMzdy').AsInteger; + result.IDMzdy := lQry2.FieldByName('IDMzdy').AsInteger; finally lQry2.Close; - FreeAndNil(lQry2); + FreeAndNil (lQry2); end; - {$ENDIF} + if (lokalniConnection) then + begin + sqlConnX2 := TFDConnection.Create(nil); + sqlConnX2.ConnectionDefName := sqlPoolName; + end + else + sqlConnX2 := AConn; - sqlConnX2:= TFDConnection.Create(nil); - lQry2:= TFDQuery.Create (nil); + sqlConnX2.Connected := true; + lQry2 := TFDQuery.Create (nil); try - sqlConnX2.ConnectionDefName:= sqlPoolName; lQry2.Connection:= sqlConnX2; @@ -880,13 +971,16 @@ uses finally lQry2.Free; - sqlConnX2.Close; - sqlConnX2.Free; + if (lokalniConnection) then + begin + sqlConnX2.Close; + sqlConnX2.Free; + end; end; if (extInfoStr<>'') then result.ExtInfo:= ExtInfoStr; - result.SerialNums:= pds.GetByParams (p); + result.SerialNums:= pds.GetByParams (p, sqlConnX); if (u>0) then begin Result.Umisteni:= us.GetByID (u); @@ -905,15 +999,18 @@ uses else raise EServiceException.Create('Poloka dokladu obhu zbo s ID ' + AID.ToString + ' nebyla nalezena.'); finally + lokIDcka.Free; p.Free; pds.Free; lQry.Close; - FreeAndNil(lQry); + FreeAndNil (lQry); end; - sqlConnX.Close; - sqlConnX.Free; - + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; @@ -1021,15 +1118,16 @@ uses lSQL:= 'SELECT ' + GetTabCols('dbo', tblVyrCP, '', false) + IfThen(sp<>'', ', ' + sp, '') + ' FROM ' + tblVyrCP + ' WHERE 1=0'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - Result:= lQry.MetadataAsJSONObject(); + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + Result := lQry.MetadataAsJSONObject(); + lQry.Close; finally lQry.Free; end; @@ -1043,54 +1141,62 @@ uses - function TSerioveCisloPohybOZService.GetByParams (params: TDictionary): TObjectList; + function TSerioveCisloPohybOZService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, lSQL2, where: string; lQry: TFDQuery; sqlConnX: TFDConnection; id, idPZ: integer; s: TSerioveCisloPohybOZ; sdServer: boolean; + lokalniConnection: boolean; + lokIDcka: TList; begin result:= nil; - lSQL:= 'SELECT ' + GetTabCols('', tblVyrCP, 'main') + IfThen(selSpecVyrCP<>'', ', ' + selSpecVyrCP.Replace('#', ''), '') - + ', 0 AS ZdrojSD, 0 AS IDDokladGSD FROM ' + tblVyrCP + ' main'; - where:= ''; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - sdServer:= false; + + lSQL := 'SELECT ' + GetTabCols('', tblVyrCP, 'main') + IfThen(selSpecVyrCP<>'', ', ' + selSpecVyrCP.Replace('#', ''), '') + + ', 0 AS ZdrojSD, 0 AS IDDokladGSD FROM ' + tblVyrCP + ' main'; + where := ''; + + sdServer := false; if (params.ContainsKey('sdServer')) then if (params.Items['sdServer']='1') then - sdServer:= true; + sdServer := true; - id:= 0; + id := 0; if (params.ContainsKey('id')) then if (params.Items['id']<>'') then if (params.Items['id']<>'0') then - id:= params.Items['id'].ToInteger; + id := params.Items['id'].ToInteger; - idPZ:= 0; + idPZ := 0; if (params.ContainsKey('idPolozkaOZ')) then if (params.Items['idPolozkaOZ']<>'') then if (params.Items['idPolozkaOZ']<>'0') then begin - idPZ:= params.Items['idPolozkaOZ'].ToInteger; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPolozkaDokladu=' + idPZ.ToString; + idPZ := params.Items['idPolozkaOZ'].ToInteger; + where := where + IfThen(where<>'', ' AND ', '') + 'main.IDPolozkaDokladu=' + idPZ.ToString; end; if (where<>'') then - lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'main.ID=' + id.ToString, where); - lSQL:= lSQL + ' ORDER BY main.ID'; + lSQL := lSQL + ' WHERE ' + IfThen(id>0, 'main.ID=' + id.ToString, where); + lSQL := lSQL + ' ORDER BY main.ID'; - lSQL:= lSQL.Replace('TabVyrCP.', 'main.'); + lSQL := lSQL.Replace('TabVyrCP.', 'main.'); if (selSpecVyrCP='') then - lSQL:= lSQL.Replace('main.', ''); - - - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); + lSQL := lSQL.Replace('main.', ''); + lQry := TFDQuery.Create(nil); {$IF DEFINED(CUSTOM_CTRL_Rootvin) or DEFINED(CUSTOM_CTRL_GatemaSD)} // test zda polozky pochazi z SD serveru @@ -1102,7 +1208,7 @@ uses // typ 510=prijemka (potvrzeni/kontrola) lSQL2:= 'SELECT 1 AS A FROM ' + tblGSDScanData + ' p INNER JOIN ' + tblGSDDoklady + ' h ON (h.Id=p.IDDokladSD) WHERE h.DatGenerovani IS NOT NULL AND h.TypDokladu IN (500,510) AND p.IDPohZbo_New=' + idPZ.ToString; lSQL2:= lSQL2 + ' ORDER BY p.ID'; - lQry.Open(lSQL2); + lQry.Open (lSQL2); if (lQry.RecordCount>0) then lSQL:= lSQL2.Replace(' 1 AS A ', ' 1000000000+p.ID AS ID, p.IDPohZbo_New AS IDPolozkaDokladu, 0 AS IDVyrCis, p.VyrCislo AS VyrCis, p.PopisSarze AS Nazev, p.Mnozstvi' + ', p.MnozstviEvidence AS MnozstviEvid, p.DatPorizeni AS DatVstup, p.DatumExpirace AS DatExpirace, 1 AS ZdrojSD, h.ID AS IDDokladGSD '); @@ -1112,19 +1218,22 @@ uses end; {$ENDIF} - try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected:= true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + result := lQry.AsObjectList; + lQry.Close; finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; - + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; end. diff --git a/uSvc_Vyroba.pas b/uSvc_Vyroba.pas index ea9e5d3..84356b0 100644 --- a/uSvc_Vyroba.pas +++ b/uSvc_Vyroba.pas @@ -1,4 +1,4 @@ -unit uSvc_Vyroba; +unit uSvc_Vyroba; interface {$I 'GlobalDefs.inc'} @@ -7,6 +7,11 @@ uses System.Generics.Collections, System.SysUtils, Winapi.ActiveX, + + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + System.JSON, JsonDataObjects, @@ -89,7 +94,7 @@ const sqlSelKPs = 'SELECT ID, Kategorie, (SELECT k.Popis FROM ' + tblKategKJ + ' k WHERE k.Cislo=Kategorie) AS PopisKategorie, PoradoveCislo, IDKmenZbozi'; - sqlSelKPParams = 'SELECT ID, IDKPLHlav, Poradi, TypHodnoty, CASE TypHodnoty WHEN 0 THEN N''slo'' WHEN 1 THEN N''Text'' WHEN 2 THEN N''Ano/Ne'' END AS TypHodnotyText' + sqlSelKPParams = 'SELECT ID, IDKPLHlav, Poradi, TypHodnoty, CASE TypHodnoty WHEN 0 THEN N''Číslo'' WHEN 1 THEN N''Text'' WHEN 2 THEN N''Ano/Ne'' END AS TypHodnotyText' + ', Popis, HodnotaPozadovanaI, ToleranceDolni, ToleranceHorni, HodnotaNamerena, HodnotaText'; @@ -101,8 +106,8 @@ type TKooperacniObjednavkaService = class(TServiceBase) public function GetMeta: TJSONObject; - function GetByParams (params: TDictionary): TObjectList; - function GetByID (const AID: integer; const polozky: Boolean=false): TKooperacniObjednavka; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; + function GetByID (const AID: integer; const polozky: Boolean=false; AConn: TFDConnection = nil): TKooperacniObjednavka; end; @@ -146,8 +151,8 @@ type public function GetMeta: TJSONObject; function GetAll (params: TDictionary=nil): TObjectList; - function GetByID (const AID: integer=0; params: TDictionary=nil): TTPVPrednastaveniOperaci; - function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer=0; params: TDictionary=nil; AConn: TFDConnection = nil): TTPVPrednastaveniOperaci; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; @@ -156,8 +161,8 @@ type public function GetMeta: TJSONObject; virtual; function RadekGetMeta: TJSONObject; virtual; - function GetByID (const AID: integer; incOper: boolean): TEvidRozpracOperace; - function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer; incOper: boolean; AConn: TFDConnection = nil): TEvidRozpracOperace; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; @@ -165,7 +170,7 @@ type TVyrobaEvidRozpracOperaciOperaceService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil): TEvidRozpracOperaceOperace; + function GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil; AConn: TFDConnection = nil): TEvidRozpracOperaceOperace; function GetByParams (params: TDictionary): TObjectList; end; @@ -174,38 +179,38 @@ type TVyrobaEvidenceOperaciService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByID (const AID: integer; params: TDictionary=nil): TVyrobaEvidovanaOperace; - function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobaEvidovanaOperace; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; TVyrobniPrikazService = class(TServiceBase) public - function GetAll (params: TDictionary=nil): TObjectList; - function GetByID (const AID: integer; params: TDictionary=nil): TVyrobniPrikaz; - function GetByParams (params: TDictionary): TObjectList; + function GetAll (params: TDictionary=nil; AConn: TFDConnection = nil): TObjectList; + function GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobniPrikaz; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; function GetMeta: TJSONObject; virtual; function GetDokumentaci (const AID: integer; jenSeznam: boolean=false; oblast: byte=3; operace: string=''; base64: boolean=false): TObjectList; - function GetDokladyOZ (const AID: integer; polozky: Boolean=false): TObjectList; - function GetKusovnik (idVPr: integer; mnozReq: extended; jenPlatne: boolean=true; idKmen: integer = 0): TObjectList; + function GetDokladyOZ (const AID: integer; polozky: Boolean=false; AConn: TFDConnection = nil): TObjectList; + function GetKusovnik (idVPr: integer; mnozReq: extended; jenPlatne: boolean=true; idKmen: integer = 0; AConn: TFDConnection = nil): TObjectList; end; TVyrobaVyrCisPrikazService = class(TServiceBase) public - function GetByParams (params: TDictionary): TObjectList; - function GetByID (const AID: integer; params: TDictionary=nil): TVyrCisPrikaz; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; + function GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrCisPrikaz; function GetMeta: TJSONObject; virtual; end; TMaterialPrikazuService = class(TServiceBase) public - function GetAll (params: TDictionary=nil; jenPlatne: boolean=true): TObjectList; - function GetByParams (params: TDictionary): TObjectList; - function GetByID (const AID: Integer): TMaterialPrikazu; - function GetByIDVPr (idVPr: integer; jenPlatne: boolean=true): TObjectList; + function GetAll (params: TDictionary=nil; jenPlatne: boolean=true; AConn: TFDConnection = nil): TObjectList; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; + function GetByID (const AID: Integer; AConn: TFDConnection = nil): TMaterialPrikazu; + function GetByIDVPr (idVPr: integer; jenPlatne: boolean=true; AConn: TFDConnection = nil): TObjectList; function GetMeta: TJSONObject; virtual; function GetMetaKusovniku: TJSONObject; end; @@ -215,7 +220,7 @@ type TTPVKusovnikDilceService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByParams (params: TDictionary): TObjectList; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; @@ -223,19 +228,19 @@ type TTPVOperaceDilceService = class(TServiceBase) public function GetMeta: TJSONObject; virtual; - function GetByParams (params: TDictionary): TObjectList; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; TVyrobniOperaceService = class(TServiceBase) public - function GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVPr: Boolean=true): TObjectList; - function GetByParams (params: TDictionary): TObjectList; virtual; - function GetByID (const AID: Integer; params: TDictionary=nil): TVyrobniOperace; virtual; - function GetByIDPrikazu (const AID: Integer): TObjectList; virtual; + function GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVPr: Boolean=true; AConn: TFDConnection = nil): TObjectList; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; virtual; + function GetByID (const AID: Integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobniOperace; virtual; + function GetByIDPrikazu (const AID: Integer; AConn: TFDConnection = nil): TObjectList; virtual; function GetKPsByID (const AID: Integer): TObjectList; - function GetByBarCode (const ABarCode: string): TVyrobniOperace; virtual; + function GetByBarCode (const ABarCode: string; AConn: TFDConnection = nil): TVyrobniOperace; virtual; function GetMeta: TJSONObject; virtual; procedure Update (AOperace: TVyrobniOperace); procedure ZapisDZTasku (jsonData: string; var respString: string); @@ -277,17 +282,17 @@ type public function GetAll (params: TDictionary=nil): TObjectList; function GetMeta: TJSONObject; - function GetByID(const AID: integer): TTPVStroj; - function GetByParams(params: TDictionary): TObjectList; + function GetByID (const AID: integer): TTPVStroj; + function GetByParams (params: TDictionary): TObjectList; end; TTPVCisKoopService = class(TServiceBase) public - function GetAll (params: TDictionary=nil): TObjectList; + function GetAll (params: TDictionary=nil; AConn: TFDConnection = nil): TObjectList; function GetMeta: TJSONObject; - function GetByID(const AID: integer): TTPVCisKoop; - function GetByParams(params: TDictionary): TObjectList; + function GetByID (const AID: integer; AConn: TFDConnection = nil): TTPVCisKoop; + function GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; end; @@ -295,7 +300,7 @@ type public function GetMeta: TJSONObject; function GetByID (const AID: Integer): TTPVCiselnikZmen; - function GetByParams(params: TDictionary): TObjectList; + function GetByParams (params: TDictionary): TObjectList; end; @@ -307,9 +312,6 @@ uses System.DateUtils, System.RegularExpressions, REST.Json, - FireDAC.Stan.Option, - FireDAC.Comp.Client, - FireDAC.Stan.Param, MVCFramework.FireDAC.Utils, MVCFramework.DataSet.Utils, MVCFramework.Serializer.Commons; @@ -331,102 +333,135 @@ uses sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); - result:= lQry.MetadataAsJSONObject(); + sqlConnX.Connected := true; + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); + result := lQry.MetadataAsJSONObject(); finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Free; end; - function TTPVCisKoopService.GetAll (params: TDictionary=nil): TObjectList; + + function TTPVCisKoopService.GetAll (params: TDictionary=nil; AConn: TFDConnection = nil): TObjectList; var lSQL, ordBy, errMsg: string; jenSeznam: boolean; sqlConnX: TFDConnection; lQry: TFDQuery; + lokalniConnection: boolean; begin - result:= nil; + result := nil; - jenSeznam:= false; - ordBy:= 'main.Rada, main.kod'; + lokalniConnection := (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create (nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + + jenSeznam := false; + ordBy := 'main.Rada, main.kod'; if (params<>nil) then begin if (params.ContainsKey('seznam')) then if (params.Items['seznam']='1') then - jenSeznam:= true; + jenSeznam := true; if (params.ContainsKey('ordBy')) then if (params.Items['ordBy']<>'') then - ordBy:= params.Items['ordBy']; + ordBy := params.Items['ordBy']; end; - lSQL:= 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') - + ' FROM ' + tblCisKoop + ' main'; - lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL := 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') + + ' FROM ' + tblCisKoop + ' main'; + lSQL := lSQL + ' ORDER BY ' + ordBy; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); result:= lQry.AsObjectList; finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Free; end; - function TTPVCisKoopService.GetByID (const AID: Integer): TTPVCisKoop; + + function TTPVCisKoopService.GetByID (const AID: Integer; AConn: TFDConnection = nil): TTPVCisKoop; var lSQL: string; p: TDictionary; sqlConnX: TFDConnection; lQry: TFDQuery; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create (nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + lSQL:= 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') + ' FROM ' + tblCisKoop + ' main WHERE main.ID=:ID'; - p:= TDictionary.Create; + p := TDictionary.Create; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.Open (lSQL, [AID]); lQry.First; try if (lQry.RecordCount=1) then - result:= lQry.AsObject + result := lQry.AsObject else raise EServiceException.Create('Kooperace s ID ' + AID.ToString + ' nebyla nalezena.'); except on E:Exception do raise EServiceException.Create('Kooperace s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); end; - finally + finally + p.Free; + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - p.Free; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TTPVCisKoopService.GetByParams (params: TDictionary): TObjectList; + function TTPVCisKoopService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, errMsg, ordBy: string; AID, cnt, rNo: integer; jenSeznam: boolean; @@ -434,9 +469,20 @@ uses lQry: TFDQuery; lVPr: TObjectList; vpr: TTPVCisKoop; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection:= (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; + + vpr:= TTPVCisKoop.Create; lVPr:= TObjectList.Create; @@ -475,10 +521,9 @@ uses lSQL:= lSQL.Replace('main.', ''); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.Connection:= sqlConnX; lQry.FetchOptions.Mode:= fmAll; lQry.Open(lSQL); @@ -492,7 +537,7 @@ uses begin lQry.RecNo:= rNo; AID:= lQry.FieldByName('ID').AsInteger; - vpr:= self.GetByID (AID); + vpr:= self.GetByID (AID, sqlConnX); lVPr.Add(vpr); if not(lQry.Active) then lQry.Open; @@ -506,11 +551,15 @@ uses else raise EServiceException.Create('Vybranym podminkam neodpovida zadna kooperace'); finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; @@ -526,35 +575,48 @@ uses begin lSQL:= 'SELECT ' + GetTabCols('', tblKObj) + ' FROM ' + tblKObj + ' WHERE 1=0'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + lQry := TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - Result:= lQry.MetadataAsJSONObject(); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + Result := lQry.MetadataAsJSONObject(); finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TKooperacniObjednavkaService.GetByParams (params: TDictionary): TObjectList; + function TKooperacniObjednavkaService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, errMsg, ordBy: string; jenSeznam: boolean; cnt, rNo, pol: integer; bPol: boolean; sqlConnX: TFDConnection; lQry: TFDQuery; - koopObj: TKooperacniObjednavka; lKoopObj: TObjectList; + koopObj: TKooperacniObjednavka; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection:= (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; + + jenSeznam:= false; ordBy:= 'ID'; @@ -612,54 +674,69 @@ uses pol:= 0; bPol:= (pol=1); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + cnt := lQry.RecordCount; if (cnt>0) then begin try lQry.First; - rNo:= 1; + rNo := 1; while (rNo<=cnt) do begin - lQry.RecNo:= rNo; - koopObj:= self.GetByID(lQry.FieldByName('ID').AsInteger, bPol); - lKoopObj.Add(koopObj); + lQry.RecNo := rNo; + koopObj := self.GetByID(lQry.FieldByName('ID').AsInteger, bPol); + lKoopObj.Add (koopObj); if not(lQry.Active) then lQry.Open; - Inc(rNo); + Inc (rNo); end; - result:= lKoopObj; + result := lKoopObj; + lKoopObj := nil; finally end; end else raise EServiceException.Create('Vybranym podminkam neodpovida zadna kooperacni objednavka'); finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TKooperacniObjednavkaService.GetByID (const AID: Integer; const polozky: boolean=false): TKooperacniObjednavka; + function TKooperacniObjednavkaService.GetByID (const AID: Integer; const polozky: boolean=false; AConn: TFDConnection = nil): TKooperacniObjednavka; var lSQL, where: string; sqlConnX: TFDConnection; lQry: TFDQuery; p: TDictionary; pols: TObjectList; koS: TKooperacniObjednavkaPolozkaService; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection:= (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; + + if (polozky) then begin p:= TDictionary.Create; @@ -669,29 +746,32 @@ uses lSQL:= 'SELECT ' + GetTabCols('', tblKObj, '', true) + ' FROM ' + tblKObj + ' WHERE ID=:ID'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); - Result:= lQry.AsObject; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); + Result := lQry.AsObject; if (polozky) then begin - p.Add('idobj', AID.ToString); - pols:= koS.GetByParams (p); - Result.Polozky:= pols; + p.Add ('idobj', AID.ToString); + pols := koS.GetByParams (p); + Result.Polozky := pols; end; except end; finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Free; - if (polozky) then begin p.Free; @@ -720,14 +800,17 @@ uses sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); Result := lQry.MetadataAsJSONObject(); finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Free; end; @@ -800,10 +883,12 @@ uses lQry.Open(lSQL); Result := lQry.AsObjectList; finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Free; end; @@ -817,8 +902,8 @@ uses { TVyrobniPrikazService } - function TVyrobniPrikazService.GetByID (const AID: integer; params: TDictionary=nil): TVyrobniPrikaz; - var lSQL, strTemp, stav: string; + function TVyrobniPrikazService.GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobniPrikaz; + var lSQL, lSQLBak, strTemp, stav: string; id, rNum, iStav: integer; p: TDictionary; debug, stopDebug, operace, material: boolean; @@ -835,31 +920,21 @@ uses lNadrizenePrikazy: TObjectList; lPodrizenePrikazy: TObjectList; vprSrv: TVyrobniPrikazService; + lokalniConnection: Boolean; sqlConnX: TFDConnection; lQry: TFDQuery; extInfoStr: string; begin result:= nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - - extInfoStr:= ''; - if (SQLTableExists ('dbo', tblPrikazE)) then - begin - lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrikazE, '', true, 'ID') + ' FROM ' + tblPrikazE + ' WHERE ID=:ID'; - - lQry:= TFDQuery.Create(nil); - try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); - if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObject; - finally - lQry.Free; - end; - end; + lokalniConnection:= (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX:= AConn; operace:= false; @@ -888,7 +963,6 @@ uses end; - lSQL:= 'SELECT ' + GetTabCols('', tblVPr, 'main', false) + IfThen(selPrikazSpec<>'', ',' + selPrikazSpec, '') + ' FROM ' + tblVPr + ' main' + ' INNER JOIN ' + tblKZ + ' kz ON (kz.ID=main.IDTabKmen) LEFT JOIN ' + tblZak + ' zak ON (zak.ID=main.IDZakazka)' + ' LEFT JOIN ' + tblZakazModif + ' zmod ON (zmod.ID=main.IDZakazModif) WHERE main.ID=:ID'; @@ -901,25 +975,31 @@ uses end; if (selPrikazSpec='') then lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); + lSQLBak := lSQL; rNum:= 0; - lQry:= TFDQuery.Create(nil); + lQry:= TFDQuery.Create (nil); try try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.Open (lSQL, [AID]); rNum:= lQry.RecordCount; except on E:Exception do raise EServiceException.Create ('Vyrobni prikaz s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); end; finally + lQry.Close; lQry.Free; end; if (rNum=0) then begin - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; Exit; end; @@ -954,12 +1034,33 @@ uses {$ENDIF} + extInfoStr:= ''; + lQry:= TFDQuery.Create(nil); try try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + + if (SQLTableExists ('dbo', tblPrikazE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrikazE, '', true, 'ID') + ' FROM ' + tblPrikazE + ' WHERE ID=:ID'; + + try + lQry.Open (lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObject; + finally + lQry.Close; + end; + end; + + + if (lSQLBak<>'') then + lSQL:= lSQLBak; + + lQry.Open (lSQL, [AID]); rNum:= lQry.RecordCount; if (rNum>0) then begin @@ -1035,34 +1136,50 @@ uses vcSrv.Free; matSrv.Free; opSrv.Free; + + if (debug) or (stopDebug) then + begin + self.FDM.Logger.Drain; + Sleep(50); + self.FDM.Logger.Stop; + end; + + lQry.Close; lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; + end; - if (debug) or (stopDebug) then - begin - self.FDM.Logger.Drain; - Sleep(50); - self.FDM.Logger.Stop; - end; - - sqlConnX.Close; - sqlConnX.Free; - // strTemp:= TJson.ObjectToJsonString(result); end; - function TVyrobniPrikazService.GetAll (params: TDictionary=nil): TObjectList; + function TVyrobniPrikazService.GetAll (params: TDictionary=nil; AConn: TFDConnection = nil): TObjectList; var lSQL, errMsg, ordBy: string; jenSeznam: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + jenSeznam:= false; ordBy:= 'main.ID'; @@ -1083,26 +1200,29 @@ uses lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + result := lQry.AsObjectList; finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Free; end; - function TVyrobniPrikazService.GetDokladyOZ (const AID: Integer; polozky: Boolean = False): TObjectList; + function TVyrobniPrikazService.GetDokladyOZ (const AID: Integer; polozky: Boolean = False; AConn: TFDConnection = nil): TObjectList; var lSQL: string; lQry: TFDQuery; sqlConnX: TFDConnection; @@ -1111,21 +1231,31 @@ uses d: TDokladOZ; s: uSvc_ObehZbozi.TDokladOZService; lDokl: TObjectList; + lokalniConnection: boolean; begin result:= nil; + + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + s:= uSvc_ObehZbozi.TDokladOZService.Create(self.FDM); lSQL:= 'SELECT DISTINCT(d.ID) FROM ' + tblDZ + ' d INNER JOIN ' + tblPZ + ' p ON (p.IDDoklad=d.ID) WHERE d.IDPrikaz=' + AID.ToString; lSQL:= lSQL + ' OR p.IDPrikaz= ' + AID.ToString + ' GROUP BY d.ID ORDER BY d.DatPorizeni'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; lQry.Open(lSQL); cnt:= lQry.RecordCount; if (cnt>0) then @@ -1144,16 +1274,20 @@ uses end; result:= lDokl; finally - lQry.Free; end; end else raise EServiceException.Create('Vybranym podminkam neodpovida zadny doklad OZ'); finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; @@ -1191,23 +1325,26 @@ uses try lQry.FetchOptions.Mode:= fmAll; try - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + result := lQry.AsObjectList; + lQry.Close; except end; finally + lQry.Close; lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; - function TVyrobniPrikazService.GetByParams (params: TDictionary): TObjectList; + function TVyrobniPrikazService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, errMsg, ordBy: string; jenSeznam: boolean; operace, material, spustene: boolean; @@ -1215,11 +1352,23 @@ uses lQry: TFDQuery; sqlConnX: TFDConnection; retObj: TVyrobniPrikaz; - lsRetObj: TObjectList; + retList: TObjectList; locParams: TDictionary; + lokalniConnection: boolean; + lokIDcka: TList; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + jenSeznam:= false; ordBy:= 'main.ID'; @@ -1357,39 +1506,54 @@ uses end; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; + lokIDcka := TList.Create; try - retObj:= TVyrobniPrikaz.Create; - lsRetObj:= TObjectList.Create; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + lQry.First; rNo:= 1; while (rNo<=cnt) do begin lQry.RecNo:= rNo; AID:= lQry.FieldByName('ID').AsInteger; - retObj:= self.GetByID (AID, locParams); - lsRetObj.Add (retObj); + lokIDcka.Add (AID); if not(lQry.Active) then lQry.Open; Inc(rNo); end; - result:= lsRetObj; - finally + except end; + + retList := TObjectList.Create; + try + for AID in lokIDcka do + begin + retObj:= self.GetByID (AID, locParams, sqlConnX); + retList.Add (retObj); + end; + result:= retList; + retList:= nil; + finally + retList.Free; + end; + finally + lokIDcka.Free; + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; @@ -1408,8 +1572,9 @@ uses lQry.Connection:= FDM.sqlConn; try lQry.Open(lSQL); - Result := lQry.MetadataAsJSONObject(); + result := lQry.MetadataAsJSONObject(); finally + lQry.Close; lQry.Free; end; end; @@ -1417,16 +1582,24 @@ uses - function TVyrobniPrikazService.GetKusovnik (idVPr: Integer; mnozReq: Extended; jenPlatne: Boolean = True; idKmen: Integer = 0): TObjectList; + function TVyrobniPrikazService.GetKusovnik (idVPr: Integer; mnozReq: Extended; jenPlatne: Boolean = True; idKmen: Integer = 0; AConn: TFDConnection = nil): TObjectList; var lSQL, lSQL2, where: string; lQry: TFDQuery; sqlConnX: TFDConnection; idModif: integer; + lokalniConnection: boolean; begin result:= nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + idModif:= 0; if (idVPr>0) and (idKmen=0) then @@ -1434,58 +1607,70 @@ uses lSQL:= 'SELECT IDTabKmen, IDZakazModif FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - idKmen:= lQry.FieldByName('IDTabKmen').AsInteger; - idModif:= lQry.FieldByName('IDZakazModif').AsInteger; - except on E:Exception do - raise EServiceException.Create (errMaterialy + E.Message); + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open(lSQL); + idKmen:= lQry.FieldByName('IDTabKmen').AsInteger; + idModif:= lQry.FieldByName('IDZakazModif').AsInteger; + except on E:Exception do + raise EServiceException.Create (errMaterialy + E.Message); + end; + finally + lQry.Close; + lQry.Free; end; - lQry.Free; end; // nacti kusovnik z TPV pro pozadovany pocet ks - if ((idKmen>0)) and (mnozReq>=0) then - begin - lSQL:= 'SET NOCOUNT ON' + CRLF + 'DECLARE @dat DATETIME=GETDATE()' + CRLF - + 'IF OBJECT_ID(N''tempdb..#apiKusovnik'', N''U'') IS NOT NULL DROP TABLE #apiKusovnik' + CRLF + createTabAPIKusovnik + CRLF - + 'INSERT INTO #apiKusovnik EXEC dbo.hp_generujKusovnik @IDFinal=' + idKmen.ToString + ', @MNF=' + mnozReq.ToString + ', @datum=@dat, @Can_raise=0' + CRLF - + ', @IDZakazModif=' + IfThen(idModif=0, 'NULL', idModif.ToString); - lQry:= TFDQuery.Create(nil); - try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.ExecSQL(lSQL); - lQry.ExecSQL('DELETE FROM #apiKusovnik WHERE uroven=0'); - lSQL:= 'ALTER TABLE #apiKusovnik ADD SZNizsi NVARCHAR(3)' + CRLF - + 'ALTER TABLE #apiKusovnik ADD RCNizsi NVARCHAR(30)' + CRLF - + 'ALTER TABLE #apiKusovnik ADD Nazev1Nizsi NVARCHAR(100)' + CRLF -// + 'ALTER TABLE #apiKusovnik ADD SZVyssi NVARCHAR(3)' + CRLF -// + 'ALTER TABLE #apiKusovnik ADD RCVyssi NVARCHAR(30)' + CRLF - + 'ALTER TABLE #apiKusovnik ADD IDPrikaz INT' + CRLF - + 'ALTER TABLE #apiKusovnik ADD MJNizsi NVARCHAR(10)' + CRLF - + 'ALTER TABLE #apiKusovnik DROP COLUMN prirez' + CRLF - + 'ALTER TABLE #apiKusovnik DROP COLUMN RezijniMat' + CRLF - + 'ALTER TABLE #apiKusovnik DROP COLUMN VyraditZKalkulace' + CRLF - + 'ALTER TABLE #apiKusovnik DROP COLUMN uroven'; - lQry.ExecSQL(lSQL); - lSQL:= 'MERGE #apiKusovnik AS T USING ' + tblKZ + ' AS S ON (S.ID=T.IDKmenZbozi) WHEN MATCHED AND T.IDKmenZbozi IS NOT NULL THEN UPDATE SET T.SZNizsi=S.SkupZbo' - + ', T.RCNizsi=S.RegCis, T.Nazev1Nizsi=S.Nazev1, T.MJNizsi=S.MJEvidence, T.IDPrikaz=' + idVPr.ToString + ';'; - lQry.ExecSQL(lSQL); - lQry.ExecSQL(lSQL); - lQry.Open('SELECT * FROM #apiKusovnik'); - result:= lQry.AsObjectList; - except on E:Exception do - raise EServiceException.Create(errMaterialy + E.Message); + try + if ((idKmen>0)) and (mnozReq>=0) then + begin + lSQL := 'SET NOCOUNT ON' + CRLF + 'DECLARE @dat DATETIME=GETDATE()' + CRLF + + 'IF OBJECT_ID(N''tempdb..#apiKusovnik'', N''U'') IS NOT NULL DROP TABLE #apiKusovnik' + CRLF + createTabAPIKusovnik + CRLF + + 'INSERT INTO #apiKusovnik EXEC dbo.hp_generujKusovnik @IDFinal=' + idKmen.ToString + ', @MNF=' + mnozReq.ToString + ', @datum=@dat, @Can_raise=0' + CRLF + + ', @IDZakazModif=' + IfThen(idModif=0, 'NULL', idModif.ToString); + lQry:= TFDQuery.Create(nil); + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.ExecSQL(lSQL); + lQry.ExecSQL('DELETE FROM #apiKusovnik WHERE uroven=0'); + lSQL:= 'ALTER TABLE #apiKusovnik ADD SZNizsi NVARCHAR(3)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD RCNizsi NVARCHAR(30)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD Nazev1Nizsi NVARCHAR(100)' + CRLF +// + 'ALTER TABLE #apiKusovnik ADD SZVyssi NVARCHAR(3)' + CRLF +// + 'ALTER TABLE #apiKusovnik ADD RCVyssi NVARCHAR(30)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD IDPrikaz INT' + CRLF + + 'ALTER TABLE #apiKusovnik ADD MJNizsi NVARCHAR(10)' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN prirez' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN RezijniMat' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN VyraditZKalkulace' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN uroven'; + lQry.ExecSQL (lSQL); + lSQL:= 'MERGE #apiKusovnik AS T USING ' + tblKZ + ' AS S ON (S.ID=T.IDKmenZbozi) WHEN MATCHED AND T.IDKmenZbozi IS NOT NULL THEN UPDATE SET T.SZNizsi=S.SkupZbo' + + ', T.RCNizsi=S.RegCis, T.Nazev1Nizsi=S.Nazev1, T.MJNizsi=S.MJEvidence, T.IDPrikaz=' + idVPr.ToString + ';'; + lQry.ExecSQL (lSQL); + lQry.Open ('SELECT * FROM #apiKusovnik'); + result := lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + end + else + raise Exception.Create('Kusovnik nelze vygenerovat, nemam ID kmenove karty nebo je mnozstvi mensi nez 0.'); + finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - end - else - raise Exception.Create('Kusovnik nelze vygenerovat, nemam ID kmenove karty nebo je mnozstvi mensi nez 0.'); - - sqlConnX.Free; + end; end; @@ -1496,7 +1681,7 @@ uses { TVyrobaEvidenceOperaciService} - function TVyrobaEvidenceOperaciService.GetByParams (params: TDictionary): TObjectList; + function TVyrobaEvidenceOperaciService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, ordBy: string; cnt, rNo, AID: integer; retObj: TVyrobaEvidovanaOperace; @@ -1504,9 +1689,20 @@ uses jenPosledni: boolean; sqlConnX: TFDConnection; lQry: TFDQuery; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + jenPosledni:= false; where:= ''; @@ -1553,11 +1749,9 @@ uses if (where<>'') then // poustej to jen s nejakou podminkou, jinak se z toho zblaznis begin - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL); @@ -1571,7 +1765,7 @@ uses begin lQry.RecNo:= rNo; AID:= lQry.FieldByName('ID').AsInteger; - retObj:= self.GetByID (AID); + retObj:= self.GetByID (AID, nil, sqlConnX); lsRetObj.Add (retObj); if not(lQry.Active) then lQry.Open; @@ -1581,8 +1775,13 @@ uses finally end; finally + lQry.Close; lQry.Free; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; end; @@ -1593,17 +1792,25 @@ uses - function TVyrobaEvidenceOperaciService.GetByID (const AID: integer; params: TDictionary=nil): TVyrobaEvidovanaOperace; + function TVyrobaEvidenceOperaciService.GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobaEvidovanaOperace; var lSQL: string; p: TDictionary; sqlConnX: TFDConnection; + lokalniConnection: boolean; lQry: TFDQuery; extInfoStr: string; begin - result:= nil; + result := nil; + + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; extInfoStr:= ''; if (SQLTableExists ('dbo', tblPMZE)) then @@ -1612,12 +1819,14 @@ uses lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then extInfoStr:= lQry.AsJSONObject; finally + lQry.Close; lQry.Free; end; end; @@ -1629,9 +1838,10 @@ uses lQry:= TFDQuery.Create(nil); try try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); lQry.First; if not(lQry.EOF) then begin @@ -1644,16 +1854,21 @@ uses except on E:Exception do raise EServiceException.Create('Evidence vyrobni operace s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); end; - finally - lQry.Free; + finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; + function TVyrobaEvidenceOperaciService.GetMeta: TJsonObject; var lSQL: string; lQry: TFDQuery; @@ -1669,15 +1884,18 @@ uses lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL); result:= lQry.MetadataAsJSONObject(); finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Free; end; @@ -1687,26 +1905,37 @@ uses { TMaterialPrikazuService } - function TMaterialPrikazuService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true): TObjectList; + function TMaterialPrikazuService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true; AConn: TFDConnection = nil): TObjectList; var lSQL, errMsg, ordBy: string; jenSeznam: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; - jenSeznam:= false; - ordBy:= 'main.ID'; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + + jenSeznam := false; + ordBy := 'main.ID'; if (params<>nil) then begin if (params.ContainsKey('seznam')) then if (params.Items['seznam']='1') then - jenSeznam:= true; + jenSeznam := true; if (params.ContainsKey('ordBy')) then if (params.Items['ordBy']<>'') then - ordBy:= params.Items['ordBy']; + ordBy := params.Items['ordBy']; end; @@ -1717,53 +1946,67 @@ uses lSQL:= lSQL + ' ORDER BY ' + ordBy; lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + result := lQry.AsObjectList; finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TMaterialPrikazuService.GetByID (const AID: Integer): TMaterialPrikazu; + + function TMaterialPrikazuService.GetByID (const AID: Integer; AConn: TFDConnection = nil): TMaterialPrikazu; var lSQL: string; p: TDictionary; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; - lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main', false) + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main ' - + ' INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) INNER JOIN ' + tblKZ + ' kzV ON (kzV.ID=main.vyssi) ' - + ' WHERE main.ID=:ID AND main.IDOdchylkyDo IS NULL'; - lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + lSQL := 'SELECT ' + GetTabCols('', tblPrKVazby, 'main', false) + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main ' + + ' INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) INNER JOIN ' + tblKZ + ' kzV ON (kzV.ID=main.vyssi) ' + + ' WHERE main.ID=:ID AND main.IDOdchylkyDo IS NULL'; + lSQL := lSQL.Replace('TabPrKVazby.', 'main.'); - p:= TDictionary.Create; + p := TDictionary.Create; + + + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); lQry.First; try if not(lQry.EOF) then begin - result:= lQry.AsObject; + result := lQry.AsObject; {$IFDEF CUSTOM_CTRL_Rootvin} var typDilce: string; @@ -1779,10 +2022,10 @@ uses lQry2.Open(lSQL, [lQry.FieldByName('nizsi').AsInteger]); if (lQry2.RecordCount=1) then typDilce:= lQry2.FieldByName('TypDilce').AsString; - lQry2.Close; except end; finally + lQry2.Close; FreeAndNil (lQry2); end; @@ -1803,21 +2046,26 @@ uses end else - raise EServiceException.Create('Materiálový poždavek s ID ' + AID.ToString + ' nebyl nalezen.'); + raise EServiceException.Create('MateriálovĂ˝ poĹľdavek s ID ' + AID.ToString + ' nebyl nalezen.'); except on E:Exception do - raise EServiceException.Create('Materiálový požadavek s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); + raise EServiceException.Create('MateriálovĂ˝ poĹľadavek s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); end; finally p.Free; + lQry.Close; lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; + function TMaterialPrikazuService.GetMetaKusovniku: TJSONObject; var lSQL: string; sqlConnX: TFDConnection; @@ -1840,35 +2088,39 @@ uses sqlConnX:= TFDConnection.Create(nil); sqlConnX.ConnectionName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; + sqlConnX.Connected := true; + lQry := TFDQuery.Create(nil); + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; try - lQry.Open(lSQL); + lQry.Open (lSQL); lQry.First; result:= lQry.MetadataAsJSONObject(); finally + lQry.Close; lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; - function TMaterialPrikazuService.GetByParams (params: TDictionary): TObjectList; + function TMaterialPrikazuService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, lSQL2, where, errMsg, ordBy: string; AID, cnt, rNo: integer; - retObj: TMaterialPrikazu; - lsRetObj: TObjectList; + resList: TObjectList; + resObj: TMaterialPrikazu; jenSeznam, vcNeplatnychMat: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; jenPlatne: Boolean; idPrikaz: integer; nazevOp: string; + lokalniConnection: boolean; + lokIDcka: TList; {$IFDEF CUSTOM_CTRL_Rootvin} typPrikazu: integer; {$ENDIF} @@ -1876,6 +2128,16 @@ uses begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + idPrikaz:= 0; nazevOp:= ''; @@ -1964,81 +2226,117 @@ uses lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; - if (cnt>0) then - begin - lsRetObj:= TObjectList.Create; - try - lQry.First; - rNo:= 1; - while (rNo<=cnt) do - begin - lQry.RecNo:= rNo; - AID:= lQry.FieldByName('ID').AsInteger; - retObj:= self.GetByID (AID); - lsRetObj.Add(retObj); - if not(lQry.Active) then - lQry.Open; - Inc (rNo); - end; - Result:= lsRetObj; - except on E:Exception do - raise EServiceException.Create('Chyba nacitani materialovych pozadavku: ' + E.Message); - end; - end; - except on E:Exception do - raise EServiceException.Create(errMaterialy + E.Message); - end; - lQry.Free; + lokIDcka:= TList.Create; + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + cnt := lQry.RecordCount; + if (cnt>0) then + begin + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (AID); + if not(lQry.Active) then + lQry.Open; + Inc (rNo); + end; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani materialovych pozadavku: ' + E.Message); + end; + + resList:= TObjectList.Create; + try + for AID in lokIDcka do + begin + resObj:= self.GetByID (AID, sqlConnX); + resList.Add (resObj); + end; + result:= resList; + resList:= nil; + finally + resList.Free; + end; + end; + except + on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + finally + lokIDcka.Free; + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; + end; - sqlConnX.Close; - sqlConnX.Free; end; - function TMaterialPrikazuService.GetByIDVPr (idVPr: integer; jenPlatne: boolean=true): TObjectList; + function TMaterialPrikazuService.GetByIDVPr (idVPr: integer; jenPlatne: boolean=true; AConn: TFDConnection = nil): TObjectList; var lSQL: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; - lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main') + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main' - + ' INNER JOIN ' + tblKZ + ' kzV ON (main.vyssi=kzV.ID) INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi)'; - lSQL:= lSQL + IfThen(jenPlatne, ' WHERE main.IDOdchylkyDo IS NULL', ''); - lSQL:= lSQL + IfThen(lSQL.Contains('WHERE'), ' AND ', ' WHERE') + ' main.IDPrikaz=:ID'; - lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); + lSQL := 'SELECT ' + GetTabCols('', tblPrKVazby, 'main') + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main' + + ' INNER JOIN ' + tblKZ + ' kzV ON (main.vyssi=kzV.ID) INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi)'; + lSQL := lSQL + IfThen(jenPlatne, ' WHERE main.IDOdchylkyDo IS NULL', ''); + lSQL := lSQL + IfThen(lSQL.Contains('WHERE'), ' AND ', ' WHERE') + ' main.IDPrikaz=:ID'; + lSQL := lSQL.Replace('TabPrKVazby.', 'main.'); + + lQry := TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [idVPr]); - result:= lQry.AsObjectList; - except on E:Exception do - raise EServiceException.Create(errMaterialy + E.Message); + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [idVPr]); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + finally + lQry.Close; + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - sqlConnX.Close; - sqlConnX.Free; end; + function TMaterialPrikazuService.GetMeta: TJSONObject; var lSQL: string; lQry: TFDQuery; @@ -2052,16 +2350,18 @@ uses lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL); Result := lQry.MetadataAsJSONObject(); finally + lQry.Close; lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; @@ -2090,24 +2390,33 @@ uses lQry.Open(lSQL); result:= lQry.MetadataAsJSONObject(); finally + lQry.Close; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - lQry.Free; - sqlConnX.Free; end; - function TVyrobaVyrCisPrikazService.GetByID (const AID: integer; params: TDictionary=nil): TVyrCisPrikaz; + function TVyrobaVyrCisPrikazService.GetByID (const AID: integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrCisPrikaz; var lSQL, extInfoStr: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; lSQL:= 'SELECT ' + GetTabCols('', tblPrikazVC, 'main') + IfThen(selVyrCisPrikazSpec<>'', ',' + selVyrCisPrikazSpec, '') + ' FROM ' + tblPrikazVC + ' main WHERE main.ID=:ID'; @@ -2118,28 +2427,42 @@ uses lQry.Open (lSQL, [AID]); Result := lQry.AsObject; finally + lQry.Close; lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; - function TVyrobaVyrCisPrikazService.GetByParams (params: TDictionary): TObjectList; + function TVyrobaVyrCisPrikazService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, ordBy: string; AID, cnt, rNo: integer; - retObj: TVyrCisPrikaz; - lsRetObj: TObjectList; + resList: TObjectList; + resObj: TVyrCisPrikaz; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; + lokIDcka: TList; begin result:= nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + ordBy:= 'main.ID'; if (params<>nil) then @@ -2164,37 +2487,54 @@ uses lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); + lokIDcka := TList.Create; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); cnt:= lQry.RecordCount; if (cnt>0) then begin - lsRetObj:= TObjectList.Create; try lQry.First; - rNo:= 1; + rNo := 1; while (rNo<=cnt) do begin - lQry.RecNo:= rNo; - AID:= lQry.FieldByName('ID').AsInteger; - retObj:= self.GetByID (AID); - lsRetObj.Add (retObj); + lQry.RecNo := rNo; + AID := lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (AID); if not(lQry.Active) then lQry.Open; Inc (rNo); end; - Result:= lsRetObj; except on E:Exception do raise EServiceException.Create('Chyba nacitani vyrobnich prikazu: ' + E.Message); end; + + resList:= TObjectList.Create; + try + for AID in lokIDcka do + begin + resObj := self.GetByID (AID, nil, sqlConnX); + resList.Add (resObj); + end; + result := resList; + resList := nil; + finally + resList.Free; + end; + end; finally + lokIDcka.Free; + lQry.Close; lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; @@ -2205,14 +2545,25 @@ uses { TVyrobniOperaceService } - function TVyrobniOperaceService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVpr: boolean=true): TObjectList; + function TVyrobniOperaceService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVpr: boolean=true; AConn: TFDConnection = nil): TObjectList; var lSQL, errMsg, ordBy: string; jenSeznam: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + jenSeznam:= false; ordBy:= 'main.ID'; @@ -2239,50 +2590,62 @@ uses lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - lQry.First; - result:= lQry.AsObjectList; - except on E:Exception do - raise EServiceException.Create(errPostupy + E.Message); + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + lQry.First; + result := lQry.AsObjectList; + lQry.Close; + except on E:Exception do + raise EServiceException.Create(errPostupy + E.Message); + end; + finally + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - - sqlConnX.Close; - sqlConnX.Free; end; - function TVyrobniOperaceService.GetByID (const AID: Integer; params: TDictionary=nil): TVyrobniOperace; + function TVyrobniOperaceService.GetByID (const AID: Integer; params: TDictionary=nil; AConn: TFDConnection = nil): TVyrobniOperace; var lSQL: string; lQry: TFDQuery; sqlConnX: TFDConnection; extInfoStr: string; + lokalniConnection: Boolean; begin - result:= nil; + result := nil; + + lokalniConnection := (AConn=nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create (nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; extInfoStr:= ''; if (SQLTableExists ('dbo', tblPrPostE)) then begin lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrPostE, '', true, 'ID') + ' FROM ' + tblPrPostE + ' WHERE ID=:ID'; - lQry:= TFDQuery.Create(nil); - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; + lQry:= TFDQuery.Create (nil); try - lQry.Open(lSQL, [AID]); + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObject; + extInfoStr := lQry.AsJSONObject; finally lQry.Free; end; @@ -2300,9 +2663,10 @@ uses lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); lQry.First; try result:= lQry.AsObject; @@ -2314,23 +2678,37 @@ uses end; finally lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - sqlConnX.Close; - sqlConnX.Free; end; - function TVyrobniOperaceService.GetByParams (params: TDictionary): TObjectList; + function TVyrobniOperaceService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, errMsg, ordBy: string; jenSeznam: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + jenSeznam:= false; ordBy:= 'main.ID'; @@ -2403,22 +2781,27 @@ uses lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL); - result:= lQry.AsObjectList; - except on E:Exception do - raise EServiceException.Create(errPostupy + E.Message); + try + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL); + result := lQry.AsObjectList; + lQry.Close; + except on E:Exception do + raise EServiceException.Create (errPostupy + E.Message); + end; + finally + lQry.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - lQry.Free; - - sqlConnX.Close; - sqlConnX.Free; end; @@ -2446,51 +2829,71 @@ uses - function TVyrobniOperaceService.GetByIDPrikazu (const AID: Integer): TObjectList; + function TVyrobniOperaceService.GetByIDPrikazu (const AID: Integer; AConn: TFDConnection = nil): TObjectList; var lSQL: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE main.IDOdchylkyDo IS NULL AND main.IDPrikaz=:ID'; lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); + result := lQry.AsObjectList; finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + sqlConnX.Free; end; - function TVyrobniOperaceService.GetByBarCode (const ABarCode: string): TVyrobniOperace; + function TVyrobniOperaceService.GetByBarCode (const ABarCode: string; AConn: TFDConnection = nil): TVyrobniOperace; var lSQL: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE main.IDOdchylkyDo IS NULL AND main.BarCode=:BC'; // + ABarCode.QuotedString; lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; lQry.Open(lSQL, [ABarCode]); @@ -2498,13 +2901,13 @@ uses if not(lQry.EOF) then result:= lQry.AsObject else - raise EServiceException.Create('Výrobní operace s čárovým kódem ' + ABarCode + ' nebyla nalezena.'); + raise EServiceException.Create('VĂ˝robnĂ­ operace s čárovĂ˝m kĂłdem ' + ABarCode + ' nebyla nalezena.'); finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + sqlConnX.Free; end; @@ -2827,20 +3230,21 @@ uses lQry: TFDQuery; sqlConnX: TFDConnection; begin - result:= nil; + result := nil; - lSQL:= 'SELECT ' + GetTabCols('', tblCPrac, 'main') + ' FROM ' + tblCPrac + ' main WHERE main.ID=:ID'; - lSQL:= lSQL.Replace('TabCPrac.', 'main.'); + lSQL := 'SELECT ' + GetTabCols('', tblCPrac, 'main') + ' FROM ' + tblCPrac + ' main WHERE main.ID=:ID'; + lSQL := lSQL.Replace('TabCPrac.', 'main.'); - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); - result:= lQry.AsObject; + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); + result := lQry.AsObject; + lQry.Close; finally lQry.Free; end; @@ -2851,6 +3255,7 @@ uses + function TTPVPracovisteService.GetAll (params: TDictionary=nil): TObjectList; var lSQL, errMsg, ordBy: string; jenSeznam: boolean; @@ -2888,16 +3293,18 @@ uses lQry.Connection:= sqlConnX; lQry.Open(lSQL); result:= lQry.AsObjectList; + lQry.Close; finally lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; + function TTPVPracovisteService.GetMeta: TJSONObject; var lSQL: string; lQry: TFDQuery; @@ -2916,12 +3323,13 @@ uses lQry.Connection:= sqlConnX; lQry.Open(lSQL); Result := lQry.MetadataAsJSONObject(); + lQry.Close; finally lQry.Free; + sqlConnX.Close; + sqlConnX.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; @@ -2943,14 +3351,15 @@ uses lQry:= TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); result:= lQry.AsObjectList; + lQry.Close; except on E:Exception do raise EServiceException.Create(errPostupy + E.Message); end; - lQry.Free; + lQry.Free; sqlConnX.Close; sqlConnX.Free; @@ -2980,6 +3389,7 @@ uses try lQry.Open(lSQL); Result := lQry.MetadataAsJSONObject(); + lQry.Close; finally lQry.Free; end; @@ -2987,6 +3397,7 @@ uses + function TTPVStrojService.GetAll (params: TDictionary=nil): TObjectList; var lSQL, errMsg, ordBy: string; jenSeznam: boolean; @@ -3188,6 +3599,7 @@ uses + function TQMSKontrolniPostupyService.GetByID (const AID: Integer): TQMSKontrolniPostup; var lSQL: string; lQry: TFDQuery; @@ -3215,6 +3627,7 @@ uses + function TQMSKontrolniPostupyService.GetListByIDPostup (const AID: Integer): TObjectList; var lSQL: string; lQry: TFDQuery; @@ -3242,6 +3655,7 @@ uses + function TQMSKontrolniPostupyService.GetMeta: TJSONObject; var lSQL: string; lQry: TFDQuery; @@ -3260,6 +3674,7 @@ uses + function TQMSKontrolniPostupyService.GetParamsByIDHlav (const AID: Integer): TObjectList; var lSQL: string; lQry: TFDQuery; @@ -3358,6 +3773,7 @@ uses end; finally lQry.Free; + sqlConnX.Close; sqlConnX.Free; end; @@ -3365,54 +3781,69 @@ uses - function TVyrobaEvidRozpracOperaciOperaceService.GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil): TEvidRozpracOperaceOperace; + + function TVyrobaEvidRozpracOperaciOperaceService.GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil; AConn: TFDConnection = nil): TEvidRozpracOperaceOperace; var lSQL, extInfoStr: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; + + lokalniConnection := (AConn = nil); if (AID>0) then begin + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - extInfoStr:= ''; + extInfoStr := ''; if (SQLTableExists ('dbo', tblRozpracOperRE)) then begin - lSQL:= 'SELECT ' + GetTabCols ('dbo', tblRozpracOperRE, '', true, 'ID') + ' FROM ' + tblRozpracOperRE + ' WHERE ID=:ID'; - lQry:= TFDQuery.Create(nil); + lSQL := 'SELECT ' + GetTabCols ('dbo', tblRozpracOperRE, '', true, 'ID') + ' FROM ' + tblRozpracOperRE + ' WHERE ID=:ID'; + lQry := TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObject; + extInfoStr := lQry.AsJSONObject; finally lQry.Free; end; end; - lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOperR, 'main') + IfThen(selNazevOperaceEvidROpR<>'', ',' + selNazevOperaceEvidROpR, ''); - lSQL:= lSQL + ' FROM ' + tblRozpracOperR + ' main WHERE main.ID=:ID'; - lQry:= TFDQuery.Create(nil); + lSQL := 'SELECT ' + GetTabCols('', tblRozpracOperR, 'main') + IfThen(selNazevOperaceEvidROpR<>'', ',' + selNazevOperaceEvidROpR, ''); + lSQL := lSQL + ' FROM ' + tblRozpracOperR + ' main WHERE main.ID=:ID'; + lQry := TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); - result:= lQry.AsObject; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); + result := lQry.AsObject; if (extInfoStr<>'') then - result.ExtInfo:= ExtInfoStr; + result.ExtInfo := ExtInfoStr; finally lQry.Free; end; - sqlConnX.Free; + + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; end; + function TVyrobaEvidRozpracOperaciOperaceService.GetMeta; var lSQL: string; lQry: TFDQuery; @@ -3433,7 +3864,7 @@ uses { TVyrobaEvidRozpracOperaciService } - function TVyrobaEvidRozpracOperaciService.GetByParams (params: TDictionary): TObjectList; + function TVyrobaEvidRozpracOperaciService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, customSel, datum, odDatum, doDatum: string; AID, cnt, rNo: integer; d, datOd, datDo: TDateTime; @@ -3442,9 +3873,20 @@ uses resObj: TEvidRozpracOperace; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + customSel:= ''; where:= ''; @@ -3571,13 +4013,11 @@ uses lSQL:= lSQL + ' ORDER BY main.DatumPripadu, main.CasZahajeni'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try + sqlConnX.Connected := true; lQry.Connection:= sqlConnX; - lQry.Open(lSQL); + lQry.Open (lSQL); cnt:= lQry.RecordCount; resList:= TObjectList.Create; @@ -3600,81 +4040,99 @@ uses lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - function TVyrobaEvidRozpracOperaciService.GetByID (const AID: integer; incOper: boolean): TEvidRozpracOperace; + + function TVyrobaEvidRozpracOperaciService.GetByID (const AID: integer; incOper: boolean; AConn: TFDConnection = nil): TEvidRozpracOperace; var lSQL, extInfoStr: string; p: TDictionary; lOper: TObjectList; opSrv: TVyrobaEvidRozpracOperaciOperaceService; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; + + lokalniConnection := (AConn = nil); if (AID>0) then begin - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + try - extInfoStr:= ''; + extInfoStr := ''; if (SQLTableExists ('dbo', tblRozpracOperE)) then begin - lSQL:= 'SELECT ' + GetTabCols ('dbo', tblRozpracOperE, '', true, 'ID') + ' FROM ' + tblRozpracOperE + ' WHERE ID=:ID'; - lQry:= TFDQuery.Create(nil); + lSQL := 'SELECT ' + GetTabCols ('dbo', tblRozpracOperE, '', true, 'ID') + ' FROM ' + tblRozpracOperE + ' WHERE ID=:ID'; + lQry := TFDQuery.Create(nil); try lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.Open (lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObject; + extInfoStr := lQry.AsJSONObject; finally lQry.Close; end; end; - p:= TDictionary.Create; + p := TDictionary.Create; p.Add('idEvodROp', AID.ToString); - opSrv:= TVyrobaEvidRozpracOperaciOperaceService.Create (self.FDM); + opSrv := TVyrobaEvidRozpracOperaciOperaceService.Create (self.FDM); try - lQry.Connection:= sqlConnX; - lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOper, 'main') + IfThen(selNazevOperaceEvidROp<>'', ',' + selNazevOperaceEvidROp, ''); - lSQL:= lSQL + ' FROM ' + tblRozpracOper + ' main WHERE main.ID=:ID'; + sqlConnX.Connected := true; + lQry.Connection := sqlConnX; + lSQL := 'SELECT ' + GetTabCols('', tblRozpracOper, 'main') + IfThen(selNazevOperaceEvidROp<>'', ',' + selNazevOperaceEvidROp, ''); + lSQL := lSQL + ' FROM ' + tblRozpracOper + ' main WHERE main.ID=:ID'; lQry.Open(lSQL, [AID]); lQry.First; if not(lQry.EOF) then begin - result:= lQry.AsObject; + result := lQry.AsObject; if (extInfoStr<>'') then result.ExtInfo:= ExtInfoStr; if (incOper) then begin - lOper:= opSrv.GetByParams (p); - Result.Operace:= lOper; + lOper := opSrv.GetByParams (p); + Result.Operace := lOper; end; p.Free; end else begin p.Free; - raise EServiceException.Create('Evidence rozpracovaných operací s ID ' + AID.ToString + ' nebyla nalezena.'); + raise EServiceException.Create('Evidence rozpracovanych operací s ID ' + AID.ToString + ' nebyla nalezena.'); end; finally end; except on E:Exception do - raise EServiceException.Create('Evidence rozpracovaných operací s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + raise EServiceException.Create('Evidence rozpracovanych operaci s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); end; finally lQry.Free; - if (sqlConnX<>nil) then - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; if (opSrv<>nil) then opSrv.Free; end; @@ -3684,6 +4142,7 @@ uses + function TVyrobaEvidRozpracOperaciService.GetMeta: TJsonObject; var lSQL: string; lQry: TFDQuery; @@ -3701,15 +4160,16 @@ uses + function TVyrobaEvidRozpracOperaciService.RadekGetMeta: TJsonObject; var lSQL: string; lQry: TFDQuery; begin - lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOperR, '') + ' FROM ' + tblRozpracOperR + ' WHERE (1=0)'; - lQry:= TFDQuery.Create(nil); - lQry.Connection:= FDM.sqlConn; + lSQL := 'SELECT ' + GetTabCols('', tblRozpracOperR, '') + ' FROM ' + tblRozpracOperR + ' WHERE (1=0)'; + lQry := TFDQuery.Create(nil); + lQry.Connection := FDM.sqlConn; try - lQry.Open(lSQL); + lQry.Open (lSQL); Result := lQry.MetadataAsJSONObject(); finally lQry.Free; @@ -3762,6 +4222,7 @@ uses + function TTPVCiselnikZmenService.GetByParams (params: TDictionary): TObjectList; var lSQL, where, datum: string; d: TDateTime; @@ -3870,6 +4331,7 @@ uses resObj: TTPVPrednastaveniOperaci; lQry: TFDQuery; sqlConnX: TFDConnection; + lokIDcka: TList; begin result:= TObjectList.Create; @@ -3915,116 +4377,151 @@ uses sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try + sqlConnX.Open; lQry.Connection:= sqlConnX; lQry.FetchOptions.Mode:= fmAll; lQry.Open(lSQL); cnt:= lQry.RecordCount; if (cnt>0) then begin + lokIDcka:= TList.Create; try - resList:= TObjectList.Create; - resObj:= TTPVPrednastaveniOperaci.Create; - rNo:= 1; - lQry.First; - while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! - begin - lQry.RecNo:= rNo; - AID:= lQry.FieldByName('ID').AsInteger; - resObj:= self.GetByID (AID, locParams); - resList.Add (resObj); - if not(lQry.Active) then - lQry.Open; - Inc(rNo); - end; - result.AddRange (resList); // FDM.sqlQry1.AsObjectList; - resList.Free; - resObj.Free; - except on E:Exception do - raise EServiceException.Create('Chyba nacitani seznamu Prednastaveni pro operace postupu: ' + E.Message); + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (AID); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + lQry.Close; + except + on E: Exception do + begin +{$IF CompilerVersion >= 37.0} // Delphi 13+ + raise EServiceException.Create ('Chyba načítání naskenované položky/položek dokladu') from E; +{$ELSE} + raise EServiceException.Create ('Chyba nacitani seznamu Prednastaveni pro operace postupu: ' + E.Message) at ExceptAddr; +{$ENDIF} + end; + end; + + try + for AID in lokIDcka do + result.Add ( self.GetByID (AID, locParams, sqlConnX) ); + except + on E: Exception do + begin + result.Free; +{$IF CompilerVersion >= 37.0} // Delphi 13+ + raise EServiceException.Create ('Chyba načítání naskenované položky/položek dokladu') from E; +{$ELSE} + raise EServiceException.Create ('Chyba nacitani seznamu Prednastaveni pro operace postupu: ' + E.Message) at ExceptAddr; +{$ENDIF} + end; + end; + + finally + lokIDcka.Free; end; end; // result:= lQry.AsObjectList; finally lQry.Free; + sqlConnX.Free; + sqlConnX.Close; + locParams.Free; end; - locParams.Free; - sqlConnX.Close; - sqlConnX.Free; end; - function TTPVPrednastaveniOperaciService.GetByID (const AID: Integer = 0; params: TDictionary=nil): TTPVPrednastaveniOperaci; + function TTPVPrednastaveniOperaciService.GetByID (const AID: Integer = 0; params: TDictionary=nil; AConn: TFDConnection = nil): TTPVPrednastaveniOperaci; var lSQL, where, extInfoStr, erMsg: string; minimumDat: boolean; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin - result:= nil; + result := nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; - extInfoStr:= ''; + extInfoStr := ''; if (SQLTableExists ('dbo', tblPrednaE)) then begin - lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrednaE, '', true, 'ID') + ' FROM ' + tblPrednaE + ' WHERE ID=:ID'; - lQry:= TFDQuery.Create(nil); + lSQL := 'SELECT ' + GetTabCols ('dbo', tblPrednaE, '', true, 'ID') + ' FROM ' + tblPrednaE + ' WHERE ID=:ID'; + lQry := TFDQuery.Create(nil); try - lQry.FetchOptions.Mode:= fmAll; - lQry.Connection:= sqlConnX; - lQry.Open(lSQL, [AID]); + lQry.FetchOptions.Mode := fmAll; + lQry.Connection := sqlConnX; + lQry.Open (lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObject; + extInfoStr := lQry.AsJSONObject; finally lQry.Free; end; end; - minimumDat:= true; + minimumDat := true; if (params<>nil) then begin if (params.ContainsKey('minimumDat')) then if (params.Items['minimumDat']='0') then - minimumDat:= false; + minimumDat := false; end; if (minimumDat) then - lSQL:= 'SELECT ID, Typ, nazev, idPracoviste, idStroje, IDKooperace, Poznamka FROM ' + tblPredna + ' main' + lSQL := 'SELECT ID, Typ, nazev, idPracoviste, idStroje, IDKooperace, Poznamka FROM ' + tblPredna + ' main' else - lSQL:= 'SELECT ' + GetTabCols('', tblPredna, 'main') + ' FROM ' + tblPredna + ' main'; + lSQL := 'SELECT ' + GetTabCols('', tblPredna, 'main') + ' FROM ' + tblPredna + ' main'; - where:= ''; - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=:ID'; + where := ''; + where := where + IfThen(where<>'', ' AND ', '') + 'main.ID=:ID'; if (where<>'') then - lSQL:= lSQL + ' WHERE ' + where; + lSQL := lSQL + ' WHERE ' + where; - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL, [AID]); - result:= lQry.AsObject; + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL, [AID]); + result := lQry.AsObject; if (extInfoStr<>'') then - Result.ExtInfo:= extInfoStr; + Result.ExtInfo := extInfoStr; + lQry.Close; finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; - function TTPVPrednastaveniOperaciService.GetByParams (params: TDictionary): TObjectList; + function TTPVPrednastaveniOperaciService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where, errMsg, ordBy: string; {$IFDEF CUSTOM_CTRL_INCOSystems} cislo: string; @@ -4036,11 +4533,19 @@ uses sqlConnX: TFDConnection; resList: TObjectList; resObj: TTPVPrednastaveniOperaci; + lokalniConnection: boolean; + lokIDcka: TList; begin - result:= nil; + result := nil; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end + else + sqlConnX := AConn; locParams:= TDictionary.Create; @@ -4093,37 +4598,57 @@ uses lQry:= TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); - cnt:= lQry.RecordCount; + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); + cnt := lQry.RecordCount; if (cnt>0) then begin + lokIDcka:= TList.Create; try - resList:= TObjectList.Create; + try - rNo:= 1; + rNo := 1; lQry.First; while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! begin - lQry.RecNo:= rNo; - AID:= lQry.FieldByName('ID').AsInteger; - resObj:= self.GetByID (AID, locParams); - resList.Add (resObj); + lQry.RecNo := rNo; + AID := lQry.FieldByName('ID').AsInteger; + lokIDcka.Add (AID); if not(lQry.Active) then lQry.Open; - Inc(rNo); + Inc (rNo); + end; + lQry.Close; + except + on E: Exception do + begin +{$IF CompilerVersion >= 37.0} // Delphi 13+ + raise EServiceException.Create ('Chyba načítání naskenované položky/položek dokladu') from E; +{$ELSE} + raise EServiceException.Create ('Chyba nacitani Prednastaveni pro operace postupu: ' + E.Message) at ExceptAddr; +{$ENDIF} end; - result:= resList; - except on E:Exception do - begin - errMsg:= E.Message; - raise EServiceException.Create('Chyba nacitani Prednastaveni pro operace postupu: ' + errMsg); - end; end; + + resList:= TObjectList.Create; + try + for AID in lokIDcka do + begin + resObj := self.GetByID (AID, locParams, sqlConnX); + resList.Add (resObj); + end; + result := resList; + resList := nil; + finally + resList.Free; + end; + // FreeAndNil(resList); finally + lokIDcka.Free; end; + end else raise EServiceException.Create('Vybranym podminkam neodpovida zadne Prednastaveni pro operace postupu'); @@ -4132,8 +4657,11 @@ uses end; locParams.Free; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; @@ -4312,64 +4840,77 @@ uses - function TTPVOperaceDilceService.GetByParams (params: TDictionary): TObjectList; + function TTPVOperaceDilceService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; - lSQL:= 'SELECT ' + GetTabCols('', tblPostup, 'main') + ' FROM ' + tblPostup + ' main'; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; - where:= ''; + + lSQL := 'SELECT ' + GetTabCols('', tblPostup, 'main') + ' FROM ' + tblPostup + ' main'; + + where := ''; if (params<>nil) then begin if (params.ContainsKey('zmenaDo')) then begin if (params.Items['zmenaDo']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ZmenaDo=' + params.Items['zmenaDo'] + where := where + IfThen(where<>'', ' AND ', '') + 'main.ZmenaDo=' + params.Items['zmenaDo'] else - where:= 'ZmenaDo IS NULL'; + where := 'ZmenaDo IS NULL'; end else - where:= 'ZmenaDo IS NULL'; + where := 'ZmenaDo IS NULL'; if (params.ContainsKey('id')) then if (params.Items['id']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + where := where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; if (params.ContainsKey('dilec')) then if (params.Items['dilec']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.vyssi=' + params.Items['dilec']; + where := where + IfThen(where<>'', ' AND ', '') + 'main.vyssi=' + params.Items['dilec']; if (params.ContainsKey('idZakazModif')) then if (params.Items['idZakazModif']<>'') then - where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif=' + params.Items['idZakazModif']; + where := where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif=' + params.Items['idZakazModif']; end; if (where<>'') then - lSQL:= lSQL + ' WHERE ' + where; - lSQL:= lSQL + ' ORDER BY main.ID'; + lSQL := lSQL + ' WHERE ' + where; + lSQL := lSQL + ' ORDER BY main.ID'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); + result := lQry.AsObjectList; + lQry.Close; finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; end; @@ -4404,13 +4945,24 @@ uses - function TTPVKusovnikDilceService.GetByParams (params: TDictionary): TObjectList; + function TTPVKusovnikDilceService.GetByParams (params: TDictionary; AConn: TFDConnection = nil): TObjectList; var lSQL, where: string; lQry: TFDQuery; sqlConnX: TFDConnection; + lokalniConnection: boolean; begin result:= nil; + lokalniConnection := (AConn = nil); + if (lokalniConnection) then + begin + sqlConnX := TFDConnection.Create(nil); + sqlConnX.ConnectionDefName := sqlPoolName; + end + else + sqlConnX := AConn; + + lSQL:= 'SELECT ' + GetTabCols('', tblKVaz, 'main') + ' FROM ' + tblKVaz + ' main'; where:= ''; @@ -4454,21 +5006,23 @@ uses lSQL:= lSQL + ' ORDER BY main.ID'; - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; lQry:= TFDQuery.Create(nil); try - lQry.Connection:= sqlConnX; - lQry.FetchOptions.Mode:= fmAll; - lQry.Open(lSQL); - result:= lQry.AsObjectList; + sqlConnX.Connected := true; + lQry.Connection := sqlConnX; + lQry.FetchOptions.Mode := fmAll; + lQry.Open (lSQL); + result := lQry.AsObjectList; finally lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; + if (lokalniConnection) then + begin + sqlCOnnX.Close; + sqlConnX.Free; + end; end; diff --git a/uWinService.pas b/uWinService.pas index f5af5ed..7d48a37 100644 --- a/uWinService.pas +++ b/uWinService.pas @@ -451,7 +451,7 @@ uses logRun: Int64; Msg: TMsg; mamTabPrijataData, firstRun, inProg, canCont: boolean; - lQry, lQry2: TFDQuery; + lQry, lQry2, lQry3: TFDQuery; sqlConnX: TFDConnection; begin lLoop:= 0; @@ -507,49 +507,49 @@ uses {$ENDIF} begin - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - sqlConnX.Open; +// sqlConnX:= TFDConnection.Create(nil); +// sqlConnX.ConnectionDefName:= sqlPoolName; +// sqlConnX.Open; - if (sqlConnX.Connected) then + if (1=1) then // (sqlConnX.Connected) begin - lSQL:= 'SELECT d.ID FROM ' + tblPrijataJsonData + ' d WITH(NOLOCK) WHERE d.Blokovano=0 AND d.DatZpracovani IS NULL'; - lSQL:= lSQL + ' AND ISNULL(d.PosledniChyba,N'''')=N'''''; - lSQL:= lSQL + ' AND d.Blokovano=0 '; // AND ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE LogText=N''Zpracovani API json'' AND IntValue=d.ID), 0)<4'; - lSQL:= lSQL + ' ORDER BY d.ID'; + lSQL := 'SELECT d.ID FROM ' + tblPrijataJsonData + ' d WITH(NOLOCK) WHERE d.Blokovano=0 AND d.DatZpracovani IS NULL'; + lSQL := lSQL + ' AND ISNULL(d.PosledniChyba,N'''')=N'''' AND d.Nezpracovat=0'; + lSQL := lSQL + ' AND d.Blokovano=0 '; // AND ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE LogText=N''Zpracovani API json'' AND IntValue=d.ID), 0)<4'; + lSQL := lSQL + ' ORDER BY d.ID'; - lQry:= TFDQuery.Create(nil); + lQry := TFDQuery.Create(nil); + lQry2:= TFDQuery.Create(nil); +// lQry2.Connection:= sqlConnX; try - lQry.Connection:= sqlConnX; +// lQry.Connection:= sqlConnX; + lQry.ConnectionName := sqlPoolName; + lQry2.ConnectionName := sqlPoolName; + lQry.Open(lSQL); lQry.First; - inProg:= true; + inProg := true; while not(lQry.EOF) do begin - idTask:= lQry.FieldByName('ID').asInteger; - canCont:= true; + idTask := lQry.FieldByName('ID').asInteger; + canCont := true; - lQry2:= TFDQuery.Create(nil); - lQry2.Connection:= sqlConnX; - lQry2.Open('SELECT COUNT(ID) AS Pocet FROM dbo._hdc_ph_Log WITH(NOLOCK) WHERE IntValue=' + idTask.ToString + ' AND LogText LIKE N''%Zpracova%'''); + lQry2.Open ('SELECT COUNT(ID) AS Pocet FROM dbo._hdc_ph_Log WITH(NOLOCK) WHERE IntValue=' + idTask.ToString + ' AND LogText LIKE N''%Zpracova%'''); lQry2.First; - cnt:= lQry2.FieldByName('Pocet').AsInteger; - FreeAndNil(lQry2); + cnt := lQry2.FieldByName('Pocet').AsInteger; if (cnt>3) then canCont:= false; - if (canCont) then begin - - sqlConnX.ExecSQL('INSERT dbo._hdc_ph_Log (IntValue, LogText) SELECT ' + idTask.ToString + ', N''Zpracovani API json'''); + lQry2.ExecSQL('INSERT dbo._hdc_ph_Log (IntValue, LogText) SELECT ' + idTask.ToString + ', N''Zpracovani API json'''); datMod.LogInfo (Quick.Logger.etInfo, 'Zpracovani prijatych JSON dat - idTask ' + idTask.ToString); // LogInfo(Quick.Logger.etError, 'Zpracovani PrijataJSONData ID ' + idTask.ToString); try - sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=1 WHERE ID=' + idTask.ToString); + lQry2.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=1 WHERE ID=' + idTask.ToString); lSQL:= ''; {$IFDEF DEBUG} Write ('Zpracovani prijateho JSON id ' + idTask.ToString); @@ -559,8 +559,8 @@ uses {$ELSE} lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_HDCDZApi_ZpracujPrijataData'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_HDCDZApi_ZpracujPrijataData @idJson=' + idTask.ToString; {$ENDIF} - sqlConnX.ExecSQL(lSQL); - sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=NULL WHERE ID=' + idTask.ToString); + lQry2.ExecSQL(lSQL); + lQry2.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=NULL WHERE ID=' + idTask.ToString); {$IFDEF DEBUG} Writeln(' - OK'); @@ -572,7 +572,7 @@ uses {$IFDEF DEBUG} WriteLn ('Chyba zpracovani prijateho JSON id ' + idTask.ToString + ' >> ' + errMsg); {$ENDIF} - sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idTask.ToString); + lQry2.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idTask.ToString); {$IFDEF CUSTOM_CTRL_Rootvin} datMod.LogInfo (Quick.Logger.etError, 'Chyba evidence start/stop operace PrijataJSONData ID ' + idTask.ToString + ' : ' + errMsg); {$ELSE} @@ -580,19 +580,21 @@ uses {$ENDIF} end; end; - sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=0 WHERE ID=' + idTask.ToString); + lQry2.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=0 WHERE ID=' + idTask.ToString); end; lQry.Next; end; finally + lQry2.Close; + FreeAndNil (lQry2); lQry.Close; FreeAndNil (lQry); end; inProg:= false; end; // sql Connected - sqlConnX.Close; - FreeAndNil (sqlConnX); + if Assigned(sqlConnx) then + sqlConnX.Free; end; end; diff --git a/ukazBlokovanePorty.cmd b/ukazBlokovanePorty.cmd new file mode 100644 index 0000000..0610fc3 --- /dev/null +++ b/ukazBlokovanePorty.cmd @@ -0,0 +1,2 @@ +@echo off +netsh interface ipv4 show excludedportrange protocol=tcp