Files
Rootvin-pluginHDCRTN/ComObjekt.pas
2025-06-10 19:43:13 +02:00

888 lines
28 KiB
ObjectPascal

unit ComObjekt;
INTERFACE
uses System.Types, System.SysUtils, Win.ComObj, System.Classes,
ddPlugin_TLB, plgKonfig;
//{$DEFINE IHePlugin3}
const
plgHDCRTNParams_class: TGUID = '{FEDE87D4-E557-48DD-9A35-B13DEF5FE1BB}';
CRLF = #13#10;
type
TPlgHDCRootvinParams = class (TComObject, IHePlugin)
private
procedure Run (const Helios: IHelios); safecall;
end;
// !!! pri zmene IHePluginXX upravit take v plgAbout - info o jadru !!!
TPlgHDCRootvin = class(TComObject, {$IFDEF IHePlugin3} IHePlugin3 {$ELSE} IHePlugin {$ENDIF})
private
FHelios : IHelios;
function PartnerIdentification: WideString; safecall;
function DelphiCompilerVersion: Single; safecall;
procedure OnException(Sender: TObject; E: Exception);
procedure Run (const Helios: IHelios); safecall;
// procedure Work (const Helios: IHelios); safecall;
// procedure About (const Helios: IHelios); safecall;
procedure Install (const Helios: IHelios); safecall;
procedure ZkotrolujDefiniceSQL (const Helios: IHelios);
function NactiKonfig (const Helios: IHelios): boolean;
end;
IMPLEMENTATION
uses Vcl.Controls, System.Win.ComServ, Winapi.Windows, Vcl.Graphics, Vcl.Forms, Vcl.Dialogs, System.Variants,
System.StrUtils, System.Hash, System.AnsiStrings,
plgType, plgMain, plgSpravce,
// [RK 13.04.2012] nove komponenty DevExpress toto vyzaduji, jinak zatuhne Helios
dxGDIPlusAPI{!initialization!},
NativeXml, datMod, helUtils, helTabsBIDs, frmPekarna, frmPlan, frmRamcovyPlan;
var oVar1, oVar2: OleVariant;
LocalFormatSettings: TFormatSettings;
apiMod, jeTest: boolean;
apiServer, plgHDCRTN_Name: string;
tBid, fId: integer;
delkaRC, idKZrodic, idDZrodic, cOrgRodic, cOrgMU, cOrgPrijem, dpzOZ: integer;
radaDZ: string;
function TPlgHDCRootvin.DelphiCompilerVersion: Single;
begin
Result:= System.CompilerVersion;
end;
function TPlgHDCRootvin.PartnerIdentification: WideString;
begin
Result:= 'HEOR0400-00044';
end;
procedure TPlgHDCRootvin.OnException (Sender: TObject; E: Exception);
begin
try
LockWindowUpdate (0);
FHelios.Error (plgPrelozException(E.Message));
except
Vcl.Forms.Application.ShowException(E); //pro jistotu
end;
end;
{
procedure TPlgHDCRootvin.Work (const Helios: IHelios);
var s: WideString;
begin
s := Concat('Nacházíte se v tabulce ', Helios.MainBrowseTable(), '.');
Helios.Info(s);
end;
procedure TPlgHDCRootvin.About (const Helios: IHelios);
var s: WideString;
begin
s := 'Tento plugin je určen pro testování základních funkcí HELIOS iNuvio Interface.';
Helios.Info(s);
end;
}
procedure TPlgHDCRootvin.Install (const Helios: IHelios);
var s: WideString;
begin
ZkotrolujDefiniceSQL (Helios);
s := 'Instalace proběhla úspěšně.';
Helios.Info(s);
end;
function TPlgHDCRootvin.NactiKonfig (const Helios: IHelios): Boolean;
var xml: TNativeXml;
r, n1, n2: TXmlNode;
fn: string;
begin
result:= true;
datMod.phServer:= 'http://rootvin.datazone.cloud/helios/api';
fn:= GetModuleName(HInstance);
fn:= ChangeFileExt(fn, '.xml');
if (FileExists(fn)) then
begin
xml:= TNativeXml.Create(nil);
try
xml.LoadFromFile(fn);
if not(xml.IsEmpty) then
begin
r:= xml.Root;
if (r<>nil) then
begin
n1:= r.NodeByName('cfgPluginHDCRTN');
if (n1<>nil) then
datMod.phServer:= n1.ReadAttributeString('phServer', '');
end;
end;
finally
xml.Free;
end;
end;
end;
procedure TPlgHDCRootvin.ZkotrolujDefiniceSQL (const Helios: IHelios);
var lSQL, lSQL2, lSQLX, errMsg, srcNazev, objectNazev, trgName, sqlDefDB, sqlDefPlg: string;
rs: TResourceStream;
ms: TMemoryStream;
arrDefs: TStringList;
i, pCRLF: integer;
canCont, canCont2: boolean;
hash1, hash2: string;
function LoadStringFromStream (const AStream: TStream): String;
var lenX: Integer;
begin
AStream.Seek(0,0);
lenX:= AStream.Size - AStream.Position;
SetLength(Result, lenX);
if (lenX>0) then
AStream.ReadBuffer(Result[1], lenX);
end;
function MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString;
begin
SetString(Result, PAnsiChar(M.Memory), M.Size);
end;
begin
lSQL:= helUtils.getHeliosStrVal(Helios, '', 'SELECT DATEPART(week, CONVERT(datetime, N''11.12.2023'', 104))');
lSQL2:= helUtils.getHeliosStrVal(Helios, '', 'SELECT DATEPART(iso_week, CONVERT(datetime, N''11.12.2023'', 104))');
if (lSQL='51') and (lSQL2='50') then
datMod.sqlLang:= 'czech'
else
datMod.sqlLang:= 'english';
arrDefs:= TStringList.Create;
arrDefs.Add('tbl_hdc_ph_Log');
arrDefs.Add('tbl_hdc_ph_PrijataJsonData');
arrDefs.Add('trg__hdc_ph_PrijataJsonData_D');
arrDefs.Add('ef_GetDatumASmenu');
arrDefs.Add('ef_Bit2Int');
arrDefs.Add('col_TabEvidRozpracOperR_EXT');
arrDefs.Add('col_TabStavSkladu_EXT');
arrDefs.Add('col_TabVazbyPrikazu_EXT');
arrDefs.Add('col_TabKmenZbozi_EXT');
arrDefs.Add('col_TabPohybyZbozi_EXT');
arrDefs.Add('col_TabDokladyyZbozi_EXT');
arrDefs.Add('tbl__TabVyrobaVydejMatSarze');
arrDefs.Add('tbl__TabVyrobaPalety');
arrDefs.Add('tbl__TabVyrobaPaletyUkonceni');
arrDefs.Add('tbl__TabVyrobaPaletyPohybOZ');
arrDefs.Add('tbl__TabVyrobaStrojCinnost');
arrDefs.Add('tbl__TabVyrobaTestoVyroba');
arrDefs.Add('tbl__TabVyrobaTestoSpotreba');
arrDefs.Add('ef_Vyroba_VratNovyPaletovyList');
arrDefs.Add('ef_Vyroba_VratCisloSarze');
arrDefs.Add('ef_Kmen_VratPocetKsVKartonu');
// arrDefs.Add('tbl__TabVyrobaObjednavky');
// arrDefs.Add('tbl__TabVyrobaOperaceStartStop');
arrDefs.Add('ep_P01_HDC1');
arrDefs.Add('ep_P01');
arrDefs.Add('ep_P03_HDC1');
arrDefs.Add('ep_P03');
arrDefs.Add('ep_V03_HDC1');
arrDefs.Add('ep_V03');
arrDefs.Add('ep_Vyroba_VyrobaMimoPlan');
arrDefs.Add('ep_Vyroba_Doklady_Micharna');
arrDefs.Add('ep_Vyroba_Doklady_PomocPrijemka');
arrDefs.Add('ep_Vyroba_GenVydejZeMzdy');
arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy');
arrDefs.Add('ep_Vyroba_DoplnSkladProVydejDleDokl');
arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol');
arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper');
arrDefs.Add('ep_Vyroba_PrijemNestandard');
arrDefs.Add('ep_Vyroba_VyrobaMimoPlan');
arrDefs.Add('ep_Vyroba_GenObjednavkuMatDoVyroby');
arrDefs.Add('ep_HDC_PZ_ZapisPolozek');
arrDefs.Add('ep_Vyroba_GenerujPalety');
arrDefs.Add('ep_Vyroba_GenSouhrnnyVydej');
arrDefs.Add('tbl__TabVyrobaVzorky');
arrDefs.Add('tbl__TabKontrolyCCP1');
arrDefs.Add('tbl__TabVyrobaOdpadPek');
// planovani
arrDefs.Add('col_Prikaz_EXT');
arrDefs.Add('col_AdvKPDavky_EXT');
arrDefs.Add('tbl__TabVyrobaPlanRozpad');
arrDefs.Add('ef_Vyroba_GenerujRozpadCasu');
arrDefs.Add('ep_Vyroba_ZapisDoPlanu');
arrDefs.Add('ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu');
arrDefs.Add('ep_Vyroba_AdvPlan_ZapisDavkyPrikazu');
arrDefs.Add('trg__TabPlan_HDC_D');
arrDefs.Add('trg__TabAdvKPDavky_HDC_D');
// arrDefs.Add('spec_Clear');
// arrDefs.Add('trg__TabVyrobaObjednavky_IU');
// arrDefs.Add('trg__TabVyrobaObjednavky_Pol_D');
arrDefs.Add('trg__TabVyrobaPalety_IU');
arrDefs.Add('trg__TabVyrobaPalety_D');
arrDefs.Add('trg__TabPohybyZbozi_HDC_IU');
arrDefs.Add('trg__TabPohybyZbozi_HDC_D');
arrDefs.Add('trg__TabVyrCP_HDC_IU');
arrDefs.Add('trg__TabVyrCP_HDC_D');
arrDefs.Add('trg__TabVyrobaPaletyUkonceni_D');
arrDefs.Add('trg__TabVyrobaVydejMatSarze_IU');
arrDefs.Add('trg__TabVyrCisPrikaz_HDC_D');
arrDefs.Add('trg__TabPrikazMzdyAZmetky_HDC_D');
for i:=0 to arrDefs.Count-1 do
begin
ms:= TMemoryStream.Create;
try
srcNazev:= arrDefs.Strings[i];
canCont:= true;
if (canCont) then
begin
rs:= TResourceStream.Create(HInstance, srcNazev.ToUpper, RT_RCDATA);
ms.CopyFrom(rs, rs.Size);
lSQL:= MemoryStreamToAnsiString(ms);
objectNazev:= LeftStr(lSQL, lSQL.IndexOf(Chr(13))).Replace('-- ', '');
if (srcNazev.StartsWith('ep_', true)) or (srcNazev.StartsWith('ef_', true)) or (srcNazev.StartsWith('trg_')) then
begin
canCont:= false;
hash1:= '';
hash2:= '';
if (srcNazev.StartsWith('trg_')) then
lSQLX:= 'SELECT m.definition FROM ' + Helios.CurrentDB + '.sys.triggers t INNER JOIN ' + Helios.CurrentDB + '.sys.objects o on t.object_id = o.object_id'
+ ' INNER JOIN ' + Helios.CurrentDB + '.sys.sql_modules m on m.object_id = o.object_id WHERE t.name=N' + objectNazev.Replace('dbo.','').QuotedString
else
lSQLX:= 'SELECT OBJECT_DEFINITION(OBJECT_ID(N' + (Helios.CurrentDB + '.' + objectNazev).QuotedString + '))';
sqlDefDB:= helUtils.getHeliosStrVal(Helios, '', lSQLX);
if (sqlDefDB<>'') then
begin
sqlDefDB:= sqlDefDB.Replace('/*' + plgHDCRTN_Name + '*/', '');
hash1:= THashMD5.GetHashString(sqlDefDB);
if (srcNazev.StartsWith('trg_')) then
sqlDefPlg:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length)
else
sqlDefPlg:= lSQL;
if (sqlDefPlg.StartsWith(CRLF)) then
sqlDefPlg:= MidStr(sqlDefPlg, 3, sqlDefPlg.Length);
if (sqlDefPlg.EndsWith(CRLF)) then
sqlDefPlg:= LeftStr(sqlDefPlg, sqlDefPlg.Length-2);
hash2:= THashMD5.GetHashString(sqlDefPlg);
if (hash1<>hash2) then
canCont:= true;
end
else
canCont:= true;
end;
if not(canCont) then
Continue;
if (srcNazev.StartsWith('ep_', true)) then
Helios.ExecSQL ('DROP PROCEDURE IF EXISTS dbo.' + srcNazev);
if (srcNazev.StartsWith('ef_', true)) then
Helios.ExecSQL ('DROP FUNCTION IF EXISTS dbo.' + srcNazev);
if (srcNazev.StartsWith('trg_')) then
begin
if (lSQL.StartsWith('-- ')) then
lSQL:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length);
trgName:= LeftStr(lSQL, lSQL.IndexOf(' ON dbo.'));
trgName:= trgName.Replace ('CREATE TRIGGER ', '');
Helios.ExecSQL ('DROP TRIGGER IF EXISTS ' + trgName);
end;
if (srcNazev.StartsWith('tbl_', true)) then
lSQL:= lSQL.Trim;
if (lSQL<>'') then
try
Helios.ExecSQL (lSQL);
except on E:Exception do
if not(E.Message.Contains('already')) then
Helios.Error(#1'Chyba definice ' + srcNazev + #1 + CRLF + E.Message);
end;
end;
finally
ms.Free;
rs.Free;
end;
end;
arrDefs.Free;
end;
procedure TPlgHDCRootvin.Run (const Helios: IHelios);
const HeliosMinVersion = $030020240620;
BrowseID_PluginInfo = 871;
var extId: Integer;
errMsg: String;
typAkce: integer;
browID, cRec, cntID, l_loop, idDZ, dpz, cOrg, newBid: integer;
lSQL, lSQLx, autor, radDokl, IDcka, params, paramsBak, vlastPar, vlastPar2, contInfo, sz, rc, podm, sTemp: string;
iTemp, iTemp2: integer;
arrId: TArray<integer>;
term: boolean;
i: Integer;
Browse: TplgBrowse;
GUIDAkce: String;
Q: IHeQuery;
Porovnani: TplgPorovnaniVerzi;
VerzeDB: String;
ZmenyOK: Boolean;
MinVerze: Int64;
PomHandle: THandle;
SlepaProcName: string;
SlepaProcGUID: string;
SlepaProcBrowse: string;
fPekarna: TformPekarna;
fPlan: TformPlan;
fRamcovyPlan: TformRamcovyPlan;
begin
UseLatestCommonDialogs:= true;
LocalFormatSettings:= TFormatSettings.Create;
try
FHelios:= Helios;
SpravceHeliosu.PridejHelios (FHelios);
try
Application.OnException:= Self.OnException;
// [RK 10.04.2006] zavedeni PomHandle, problemy s realokaci ikonky
// [RK 02.04.2009] doplneno pretypovani na THandle
PomHandle := THandle(FHelios.MainApplicationHandle);
if PomHandle <> Application.Handle then
Application.Handle := PomHandle;
PomHandle := THandle(FHelios.MainApplicationIconHandle);
if PomHandle <> Application.Icon.Handle then
Application.Icon.Handle := PomHandle;
with Application.DefaultFont do
begin
CharSet := FHelios.Charset;
Name := FHelios.Font;
Height := FHelios.FontHeight;
Screen.MenuFont.CharSet := CharSet;
Screen.MenuFont.Name := Name;
Screen.MenuFont.Height := Height;
end;
// ### INICIALIZACE ###
InicializaceJadraPluginu (FHelios);
PluginKonfig.VlastniInicializacePluginu (FHelios);
VerzeDB:= plgNactiVerziPluginuZDB (FHelios, ZmenyOK);
Porovnani:= plgPorovnejVerziPluginuSVerziDB (VerzeDB);
// ### INSTALACE PLUGINU ###
if (FHelios.BrowseID = BrowseID_PluginInfo) and plgExtKomIDInstalace(FHelios) then
begin
InstalacePluginu (FHelios, (FHelios.ExtKomID = Cplg_ExtKomID_TichaInstalace));
Exit;
end;
NactiKonfig (Helios);
if (Helios.HeVersion<HeliosMinVersion) then
begin
errMsg := 'Plugin vyžaduje min verzi Heliosu ' + IntToHex(HeliosMinVersion, 12) + '; Aktuální verze je ' + IntToHex(Helios.HeVersion, 12);
Helios.Error(errMsg);
raise Exception.Create(errMsg);
Exit;
end;
extId:= Helios.ExtKomID;
lSQLx:= 'SELECT UP FROM ' + tblExtKom + ' WHERE ID=' + extId.ToString;
plgHDCRTN_Name:= helUtils.getHeliosStrVal(Helios, '', lSQLx);
ZkotrolujDefiniceSQL (Helios);
helUtils.ReseedTable (Helios, tblDZ);
helUtils.ReseedTable (Helios, tblPZ);
helUtils.ReseedTable (Helios, tblPrikazVC);
with Helios.OpenSQL('SELECT CONVERT(nvarchar(128),CONTEXT_INFO(),2)') do
if VarIsNull(FieldValues(0)) then
contInfo:= 'NULL'
else
contInfo:= VarToStr(FieldValues(0));
Helios.ExecSQL('SET CONTEXT_INFO 0x48444334526F6F7476696E'); // nastav context v sys.sysprocesses (hexadecimalne HDC4Rootvin)
lSQL:= 'IF OBJECT_ID(''tempdb..#TabExtKom'', N''U'') IS NULL CREATE TABLE #TabExtKom (Typ TINYINT DEFAULT NULL, Poznamka NVARCHAR(255))' + CRLF;
lSQL:= lSQL + 'IF OBJECT_ID(N''tempdb..#TabTempUziv'') IS NULL CREATE TABLE #TabTempUziv (Tabulka';
lSQL:= lSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)';
Helios.ExecSQL(lSQL);
delkaRC:= helUtils.getHeliosIntVal(Helios, 30, 'SELECT TOP(1) DelkaRegCislaZbozi FROM ' + tblHGlob);
term:= false;
params:= '';
vlastPar:= '';
vlastPar2:= '';
typAkce:= -1;
browID:= 0;
jeTest:= false;
lSQL:= lSQLx.Replace('T UP F', 'T Parametry F');
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
params:= VarToStr(FieldValues(0));
if (params.ToLower.Contains(';test')) then
jeTest:= true;
paramsBak:= VarToStr(FieldValues(0));
if (params.Contains(';')) then
begin
typAkce:= StrToInt(LeftStr(params,Pos(';',params)-1));
params:= MidStr(params,Pos(';',params)+1,255);
if (params.Contains(';')) then
begin
if not(TryStrToInt(LeftStr(params,Pos(';',params)-1), browID)) then
browID:= 0;
params:= MidStr(params,Pos(';',params)+1,255);
end
else
if not(TryStrToInt(params, browID)) then
browID:= 0;
if (params.Contains(';')) then // zadany 3 parametry (akce, browID, vlastnikID)
begin
params:= MidStr(params,Pos(';',params)+1,255);
if (params.Contains(';')) then
begin
vlastPar:= LeftStr(params,Pos(';',params)-1);
vlastPar2:= MidStr(params,Pos(';',params)+1,255);
end
else
vlastPar:= params;
end;
end
else
if (params<>'') then
if not(TryStrToInt(params, typAkce)) then
typAkce:= -1;
end;
if (browID>0) then
if (Helios.BrowseID<>browID) then
begin
typAkce:= 0;
Helios.Error('Tento plugin lze volat pouze z přehledu: '#1 + IntToStr(browID) + #1'.');
Exit;
end;
IDcka:= '';
cRec:= 0;
if (Helios.SelectedRecordIDs<>'') then
IDcka:= Helios.SelectedRecordIDs
else
if not VarIsNull(Helios.CurrentRecordID) then
begin
cRec:= StrToInt(VarToStr(Helios.CurrentRecordID));
IDcka:= IntToStr(cRec);
end;
if (IDcka<>'') then
begin
cntID:= 1 + Length(IDcka)-Length(StringReplace(IDcka,',','',[rfReplaceAll]));
SetLength(arrID,cntID);
for l_loop:=0 to cntID-1 do
begin
if Pos(',',IDcka)>0 then
begin
arrID[l_loop]:= StrToInt(LeftStr(IDcka,Pos(',',IDcka)-1));
IDcka:= MidStr(IDcka,Pos(',',IDcka)+1,262140) // 65535 * 4 (max. delka pole)
end
else
arrID[l_loop]:= StrToInt(IDcka);
end;
cRec:= arrID[0];
end;
idDZrodic:= -1;
idDZ:= -1;
cOrgRodic:= -1;
cOrg:= -1;
cOrgMU:= -1;
cOrgPrijem:= -1;
dpzOZ:= -1;
if (Helios.HeliosVlastnik<>nil) then
begin
if (Helios.HeliosVlastnik.QueryEdit<>nil) then
begin
try
if (Helios.HeliosVlastnik.QueryEdit.FieldByName('ID')<>nil) then
if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('ID')), idDZrodic)) then
idDZrodic:= -1;
finally
end;
try
dpzOZ:= VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('DruhPohybuZbo')).ToInteger;
finally
end;
try
radaDZ:= VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('RadaDokladu'));
finally
end;
try
if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('CisloOrg')), cOrgRodic)) then
cOrgRodic:= -1;
finally
end;
try
if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('MistoUrceni')), cOrgMU)) then
cOrgMU:= -1;
finally
end;
try
if not(TryStrToInt(VarToStr(Helios.HeliosVlastnik.QueryEdit.FieldByNameValues('Prijemce')), cOrgPrijem)) then
cOrgPrijem:= -1;
finally
end;
end;
if (Helios.QueryEdit<>nil) then
begin
try
if (Helios.QueryEdit.FieldByName('ID')<>nil) then
if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('ID').Value), idDZ)) then
idDZ:= -1;
finally
end;
if (browID<>959) and (browID<>962) then // ne pro DObj
begin
try
dpzOZ:= VarToStr(Helios.QueryEdit.FieldByName('DruhPohybuZbo').Value).ToInteger;
finally
end;
try
radaDZ:= VarToStr(Helios.QueryEdit.FieldByName('RadaDokladu').Value);
finally
end;
end;
try
if (Helios.QueryEdit.FieldByName('CisloOrg')<>nil) then
if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('CisloOrg').Value), cOrg)) then
cOrg:= -1;
finally
end;
try
if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('MistoUrceni').Value), cOrgMU)) then
cOrgMU:= -1;
finally
end;
try
if not(TryStrToInt(VarToStr(Helios.QueryEdit.FieldByName('Prijemce').Value), cOrgPrijem)) then
cOrgPrijem:= -1;
finally
end;
end;
end;
if FHelios.ExtKomID = Cplg_ExtKomID_EditorController then
SpustControllerEditoru (FHelios)
else
if FHelios.ExtKomID = Cplg_ExtKomID_Zpravy then
PluginKonfig.ExtKomIDJeRovnoNule (FHelios)
else
if FHelios.ExtKomID = Cplg_ExtKomID_Konfigurace then
PluginKonfig.PluginConfiguration (FHelios)
else
begin
apiMod:= false;
datMod.apiMod:= apiMod;
apiServer:= '';
datMod.apiServer:= apiServer;
with Helios.OpenSQL('SELECT CONVERT(nvarchar(255), Poznamka) AS Poznamka FROM ' + tblExtKomPar + ' WHERE IdExtKom=' + extId.ToString + ' AND Popis=N''APIServer''') do
if (RecordCount=1) then
if (VarToStr(FieldByNameValues('Poznamka'))<>'') then
begin
datMod.apiMod:= true;
datMod.apiServer:= VarToStr(FieldByNameValues('Poznamka'));
// fPekarna.apiMod:= datMod.apiMod;
// fPekarna.apiServer:= datMod.apiServer;
end;
case typAkce of
-1: begin
Install (Helios)
{
else if extId = -2 then
About (Helios)
else
Work (Helios);
}
end;
1: begin
fPekarna:= TformPekarna.Create(nil);
try
try
fPekarna.Helios:= Helios;
fPekarna.apiMod:= apiMod;
fPekarna.apiServer:= apiServer;
fPekarna.ShowModal;
except on E:Exception do
if not(term) then
begin
errMsg:= 'Chyba fPekarna: ' + E.Message;
Helios.Error(errMsg);
raise Exception.Create(errMsg);
end;
end;
finally
fPekarna.Free;
end;
end;
2: begin
if not((dpzOZ=4) and (radaDZ='231')) then
Helios.Error(#1'Akci můžete spustit jen nad dokladem Výdejky/převodky řady 231'#1)
else
begin
tBid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_ObjednavkyMat''');
if (tBid>0) then
begin
lSQL:= 'DROP TABLE IF EXISTS #TabZapisPolozekOZ' + CRLF + 'CREATE TABLE #TabZapisPolozekOZ (ID INT IDENTITY(1,1) NOT NULL, IDPolozky INT NOT NULL, PRIMARY KEY (ID))' + CRLF;
podm:= '(hvw_Vyroba_ObjednavkyMat.Blokovano=0 OR hvw_Vyroba_ObjednavkyMat.MnozKVydeji>0) AND hvw_Vyroba_ObjednavkyMat.Splneno=0';
if Helios.Prenos2 (tBid, 'ID', 'ID', oVar1, oVar2, podm, 'Vyberte položky', false, true, false, 1) then
begin
arrId:= helUtils.StrToArrayInt (VarToStr(oVar1), ',');
for i:=Low(arrId) to High(arrId) do
lSQL:= lSQL + 'INSERT #TabZapisPolozekOZ (IDPolozky) SELECT ' + arrId[i].ToString + CRLF;
end;
if (helUtils.SQLObjectExists(Helios, 'dbo.ep_HDC_PZ_ZapisPolozek')) and (Length(arrId)>0) then
begin
lSQL:= lSQL + 'EXEC dbo.ep_HDC_PZ_ZapisPolozek @typ=1, @idDokladOZDst=' + idDZ.ToString; // 1=zapis z dbo._TabVyroba_Objednavky do dokladu OZ
try
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Chyba zápisu položek:'#1 + CRLF + E.Message);
end;
end;
end;
end;
end;
3: begin
fRamcovyPlan:= TformRamcovyPlan.Create (nil);
try
fRamcovyPlan.Helios:= Helios;
fRamcovyPlan.ShowModal;
finally
fRamcovyPlan.Free;
end;
end;
101: begin
fPlan:= TformPlan.Create (nil);
try
try
fPlan.Helios:= Helios;
fPlan.ShowModal;
except on E:Exception do
if not(term) then
begin
errMsg:= 'Chyba fPlan: ' + E.Message;
Helios.Error(errMsg);
raise Exception.Create(errMsg);
end;
end;
finally
FreeAndNil(fPlan);
end;
end;
end;
Helios.Refresh(true);
if (contInfo='NULL') then
Helios.ExecSQL('SET CONTEXT_INFO 0x')
else
Helios.ExecSQL('SET CONTEXT_INFO 0x' + contInfo);
// ukoncit Helios, lze pouzit v Automatech
if (term) then
Application.Terminate;
end;
finally
SpravceHeliosu.OdeberHelios (FHelios);
end;
except
// neni to pres Application.HandleException() kvuli probublani vyjimky
// do Heliosu (konkretni pouziti napr. v Automatu)
on E: EExternal do
begin
LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset
raise EExternal.Create(E.Message);
end;
on E: Exception do
begin
LockWindowUpdate(0); // jistota, kdyby nekde zustalo viset
E.Message:= plgPrelozException(E.Message);
raise;
end;
end;
end;
// param plugin ????
procedure TPlgHDCRootvinParams.Run (const Helios: IHelios);
var lSQL: string;
begin
lSQL:= 'DECLARE @p1 NVARCHAR(10)=N''''' + CRLF
+ 'IF OBJECT_ID(N''tempdb..#TabExtKomParPlugin'',''U'') IS NOT NULL' + CRLF
+ ' SELECT TOP(1) @p1=HIQPar1 FROM #TabExtKomParPlugin' + CRLF
+ 'SELECT @p1 AS Par1';
with Helios.OpenSQL(lSQL) do
Helios.Info('Par1: ' + VarToStr(FieldByName('Par1').Value));
end;
{ =========================================================================== }
function PluginGetSysAndClassName(Vysl: PAnsiChar): DWORD; stdcall;
begin
with PluginKonfig do
begin
Result := Length(PluginSystemoveJmeno + '.' + PluginClassName);
if Assigned(Vysl) then
System.AnsiStrings.StrPCopy(Vysl, AnsiString(PluginSystemoveJmeno + '.' + PluginClassName));
end;
end;
{ --------------------------------------------------------------------------- }
(*
procedure PluginGetDelphiVersion(Vysl: PAnsiChar); stdcall;
var
LVer: AnsiString;
begin
if Assigned(Vysl) then
begin
{$IFDEF VER220} { Embarcadero Delphi 15 XE}
LVer := 'XE';
{$ELSE}
{$IFDEF VER240} { Embarcadero Delphi 17 XE3}
LVer := 'XE3';
{$ELSE}
LVer := '??';
{$ENDIF}
{$ENDIF}
StrPCopy(Vysl, LVer);
end;
end;
*)
{ --------------------------------------------------------------------------- }
procedure PluginReadyForSilentInstall; stdcall;
begin
// nic, pouze flag pro pouziti tiche instalace
end;
{ --------------------------------------------------------------------------- }
// AJ, 8.12.2015 - Administrátorská podpora v HeO
procedure PluginReadyForSuperSilentInstall; stdcall;
begin
// nic, pouze flag pro použití super tiché instalace (tj. instalace, která požírá SQL raiserrory, hlášky a chyby a vše zaloguje do logu)
end;
{ --------------------------------------------------------------------------- }
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
PluginGetSysAndClassName,
// PluginGetDelphiVersion,
PluginReadyForSilentInstall,
PluginReadyForSuperSilentInstall // AJ, 8.12.2015 - Administrátorská podpora v HeO
;
initialization
TComObjectFactory.Create(ComServer, TPlgHDCRootvin, PluginKonfig.PluginClass_ID, PluginKonfig.PluginClassName, '', ciMultiInstance, tmSingle);
// TComObjectFactory.Create(ComServer, TPlgHDCRootvin, plgHDCRTN_class, 'run', '', ciMultiInstance, tmSingle);
// TComObjectFactory.Create(ComServer, TPlgHDCRootvinParams, plgHDCRTNParams_class, 'params', '', ciMultiInstance, tmSingle);
END.