644 lines
25 KiB
ObjectPascal
644 lines
25 KiB
ObjectPascal
unit ComObjekt;
|
|
|
|
INTERFACE
|
|
|
|
uses System.SysUtils, System.Win.ComObj, Vcl.Dialogs, ddPlugin_TLB;
|
|
|
|
|
|
const
|
|
Class_EMPDeleniTrubek: TGUID = '{2857E134-4CA9-457C-85BD-EDDE86029314}';
|
|
plgSysName = 'plgEMPDeleniTrubek';
|
|
CRLF = #13#10;
|
|
tblPredpisH = '[dbo].[_hdc_TabRezaciPredpis]';
|
|
tblPredpisR = '[dbo].[_hdc_TabRezaciPredpisR]';
|
|
tblTemp = 'tempdb..';
|
|
CF_TEXT = 1;
|
|
|
|
|
|
type
|
|
TplgEMPDeleniTrubek = class(TComObject, IHePlugin)
|
|
private
|
|
FHelios: IHelios;
|
|
procedure OnException (Sender: TObject; E: Exception);
|
|
procedure Run (const Helios: IHelios); safecall;
|
|
procedure VytvorRezaciPredpis (const Helios: IHelios; arrID: System.TArray<integer>); // v arrID jsou vybrane radky
|
|
end;
|
|
|
|
|
|
|
|
IMPLEMENTATION
|
|
uses Vcl.StdActns, VCL.Forms, Win.ComServ, Winapi.Windows, System.Variants, System.StrUtils, datModul,
|
|
frmMain, helUtils;
|
|
|
|
var
|
|
verText, verText2: string;
|
|
jeTest: boolean;
|
|
oVar1, oVar2: OleVariant;
|
|
dm: Tdm;
|
|
idPrac: integer;
|
|
|
|
|
|
|
|
|
|
function VratTabName(tbl: string): string;
|
|
begin
|
|
result:= tbl.Replace('[', '').Replace(']', '').Replace('dbo.', '');
|
|
end;
|
|
|
|
|
|
|
|
|
|
function HexToString(H: AnsiString): AnsiString;
|
|
{ var I,L: Integer;
|
|
begin
|
|
result:= '';
|
|
L:= length(H);
|
|
for I:= 1 to L div 2 do
|
|
result:= result + Char(StrToInt('$'+Copy(H,(I-1)*2+1,2)));
|
|
end;
|
|
}
|
|
const Convert: array['0'..'f'] of byte =
|
|
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,16,16,16,16,16,16,
|
|
16,10,11,12,13,14,15,16,16,16,16,16,16,16,16,16,
|
|
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
|
16,10,11,12,13,14,15);
|
|
var FPos, Check, len, len2: Integer;
|
|
ch: AnsiChar;
|
|
begin
|
|
FPos:= 0;
|
|
Check:= 0;
|
|
len:= Length(H);
|
|
len2:= len div 2;
|
|
SetLength(Result, len2);
|
|
if len < 2 then Exit; {Too small}
|
|
repeat
|
|
ch := H[2*FPos+1];
|
|
if (not(ch in['0'..'f']))or(Convert[ch]>15) then break;
|
|
Result[FPos+1]:= AnsiChar((Convert[ch] shl 4));
|
|
ch:= H[2*FPos+2];
|
|
if (not(ch in['0'..'f']))or(Convert[ch]>15) then break;
|
|
inc(FPos);
|
|
Result[FPos]:= AnsiChar(ord(Result[FPos])+Convert[ch]);
|
|
Check:= Check + ord(Result[FPos]);
|
|
Dec(len2);
|
|
until (len2=0);
|
|
SetLength(Result, FPos);
|
|
end;
|
|
|
|
|
|
|
|
|
|
function OtevriSoubor(const adresar, flt1, flt2: string; var nazev: string): Boolean;
|
|
var dlgOpenW7: TFileOpenDialog; // dialog pro Windows Vista a novejsi
|
|
titulek, filtr1, filtr2: string;
|
|
iniDir: string;
|
|
begin
|
|
result:= false;
|
|
titulek:= 'Vyberte soubor pro import';
|
|
filtr1:= IfThen(flt1<>'',flt1,'XLS/X soubory');
|
|
filtr2:= IfThen(flt2<>'',flt2,'*.xls, *.xlsx');
|
|
nazev:= '';
|
|
if (adresar<>'') then
|
|
begin
|
|
if (DirectoryExists(adresar)) then
|
|
iniDir:= adresar;
|
|
end
|
|
else
|
|
iniDir:= GetEnvironmentVariable('USERPROFILE') + '\Desktop';
|
|
try
|
|
dlgOpenW7:= TFileOpenDialog.Create(nil);
|
|
dlgOpenW7.Title:= titulek;
|
|
dlgOpenW7.OkButtonLabel:= 'Vybrat';
|
|
with dlgOpenW7.FileTypes.Add do
|
|
begin
|
|
DisplayName:= filtr1;
|
|
FileMask:= filtr2;
|
|
end;
|
|
dlgOpenW7.DefaultFolder:= iniDir;
|
|
if dlgOpenW7.Execute then
|
|
begin
|
|
nazev:= dlgOpenW7.FileName;
|
|
result:= true;
|
|
end;
|
|
finally
|
|
dlgOpenW7.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
function VyberAdresar(var Foldr: string; Title: string): Boolean;
|
|
var bf: TBrowseForFolder;
|
|
begin
|
|
bf:= TBrowseForFolder.Create(nil);
|
|
try
|
|
if (Foldr<>'') then
|
|
bf.Folder:= Foldr;
|
|
if (Title<>'') then
|
|
bf.DialogCaption:= Title;
|
|
bf.BrowseOptions := [bifEditBox, bifNewDialogStyle, {bifNoTranslateTargets, bifReturnFSAncestors,} bifUseNewUI];
|
|
bf.Execute; // pozor návratová hodnota Execute znamená jen že se nepodařilo akci spusti nebo tak
|
|
if (bf.Folder<>'') then
|
|
Foldr:= bf.Folder;
|
|
finally
|
|
FreeAndNil(bf);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TplgEMPDeleniTrubek.OnException (Sender: TObject; E: Exception);
|
|
begin
|
|
try
|
|
LockWindowUpdate (0);
|
|
FHelios.Error (E.Message);
|
|
except
|
|
Application.ShowException(E); //pro jistotu
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TplgEMPDeleniTrubek.VytvorRezaciPredpis(const Helios: IHelios; arrID: System.TArray<Integer>);
|
|
var lSQL: string;
|
|
i: integer;
|
|
begin
|
|
if (Length(arrID)>0) then // INT0000187
|
|
begin
|
|
lSQL:= 'IF OBJECT_ID(N''temp..#RezaciPredpisR'', N''U'') IS NOT NULL DROP TABLE #RezaciPredpisR' + CRLF;
|
|
lSQL:= lSQL + 'CREATE TABLE #RezaciPredpisR (ID INT IDENTITY(1,1) NOT NULL, IDPrKVazba INT NOT NULL)' + CRLF;
|
|
for i in arrID do
|
|
lSQL:= lSQL + 'INSERT #RezaciPredpisR (IDPrKVazba) SELECT ' + i.ToString + CRLF;
|
|
lSQL:= lSQL + 'DECLARE @x INT=NULL' + CRLF + 'IF OBJECT_ID(N''dbo.ep_hdc_RezaciPredpis_NewEdit'', N''P'') IS NOT NULL EXEC dbo.ep_hdc_RezaciPredpis_NewEdit @jeEdit=0, @ID=@x OUT';
|
|
Helios.ExecSQL(lSQL);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TplgEMPDeleniTrubek.Run (const Helios: IHelios);
|
|
const MinVerzeHelios = $030020240902;
|
|
var typAkce: byte;
|
|
browID, cRec, cRecRodic, cntID, l_loop, idDZ, idDZrodic, dpz, cOrg, newBid: integer;
|
|
lSQL, autor, radDokl, IDcka, IDckaRodic, params, paramsBak, vlastPar, vlastPar2, contInfo, sz, podm, sTemp: string;
|
|
arrID, arrID2, arrIdRodic: System.TArray<integer>;
|
|
term, canCont: boolean;
|
|
verMoje, verDB: Int64;
|
|
fMain: TformMain;
|
|
tmpInt: integer;
|
|
bidRezaciPredpis, filtrPolozek: integer;
|
|
retBool: boolean;
|
|
idTiskForm: integer;
|
|
PomHandle: THandle;
|
|
begin
|
|
try
|
|
FHelios:= Helios;
|
|
Application.OnException:= Self.OnException;
|
|
|
|
|
|
// ReportMemoryLeaksOnShutdown:= true;
|
|
|
|
// inicializace datoveho modulu
|
|
if (dm=nil) then
|
|
dm:= Tdm.Create (nil);
|
|
|
|
|
|
dm.Helios:= Helios;
|
|
datModul.devID:= dm.ZjistiDeviceID;
|
|
datModul.tiskJenPlgRP:= false;
|
|
datModul.sqlUserName:= helUtils.getHeliosStrVal(Helios, '', 'SELECT SUSER_SNAME()');
|
|
|
|
|
|
lSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabExtKom') + ') IS NULL CREATE TABLE #TabExtKom (Poznamka NVARCHAR(255), Typ TINYINT DEFAULT NULL)' + CRLF;
|
|
lSQL:= lSQL + 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv (Tabulka';
|
|
lSQL:= lSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)';
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
term:= false;
|
|
jeTest:= false;
|
|
if (Helios.HeVersion<MinVerzeHelios) then
|
|
raise Exception.Create('Plugin vyžaduje min verzi Heliosu ' + IntToHex(MinVerzeHelios, 12))
|
|
else
|
|
begin
|
|
|
|
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 0x48444334454D506F6C617244656C656E6954727562656B'); // nastav context v sys.sysprocesses (hexadecimalne HDC4EMPolarDeleniTrubek)
|
|
|
|
UseLatestCommonDialogs:= true;
|
|
// LocalFormatSettings:= TFormatSettings.Create;
|
|
|
|
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabExtKom'') IS NOT NULL DROP TABLE #TabExtKom' + CRLF;
|
|
lSQL:= lSQL + 'CREATE TABLE #TabExtKom (Poznamka nvarchar(255), Typ TINYINT DEFAULT NULL)';
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
// lSQL:= 'IF OBJECT_ID(''tempdb..#TabExtKom'') IS NULL CREATE TABLE #TabExtKom (Poznamka NVARCHAR(255))' + CRLF;
|
|
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);
|
|
|
|
params:= '';
|
|
vlastPar:= '';
|
|
vlastPar2:= '';
|
|
typAkce:= 0;
|
|
|
|
if (Helios.ExtKomID>-1) then
|
|
begin
|
|
with Helios.OpenSQL('SELECT Parametry FROM ' + tblExtKom + ' WHERE ID=' + IntToStr(Helios.ExtKomID)) do
|
|
begin
|
|
params:= VarToStr(FieldValues(0));
|
|
paramsBak:= VarToStr(FieldValues(0));
|
|
if Pos(';',params)>0 then
|
|
begin
|
|
typAkce:= StrToInt(LeftStr(params,Pos(';',params)-1));
|
|
params:= MidStr(params,Pos(';',params)+1,255);
|
|
if Pos(';',params)>0 then
|
|
browID:= StrToInt(LeftStr(params,Pos(';',params)-1))
|
|
else
|
|
browID:= StrToInt(params);
|
|
if Pos(';',params)>0 then // zadany 3 parametry (akce, browID, vlastnikID)
|
|
begin
|
|
params:= MidStr(params,Pos(';',params)+1,255);
|
|
if Pos(';', params)>0 then
|
|
begin
|
|
vlastPar:= LeftStr(params,Pos(';',params)-1);
|
|
vlastPar2:= MidStr(params,Pos(';',params)+1,255);
|
|
end
|
|
else
|
|
vlastPar:= params;
|
|
end;
|
|
end
|
|
else
|
|
raise Exception.Create('Nemám potřebný počet parametrů !');
|
|
end;
|
|
end
|
|
else
|
|
begin // instalace
|
|
|
|
end;
|
|
|
|
|
|
// kontrola verze pluginu
|
|
verText:= GetFileVersion2(GetModuleName(HInstance));
|
|
if Length(verText)=12 then
|
|
verText:= LeftStr(verText,9) + '0' + RightStr(verText,3);
|
|
verText2:= verText.Replace('.', '');
|
|
if (Length(verText2)=10) then
|
|
verText2:= '0' + LeftStr(verText2,1) + '0' + RightStr(verText2, 9);
|
|
verMoje:= verText2.ToInt64;
|
|
|
|
lSQL:= 'IF NOT EXISTS(SELECT ID FROM ' + tblPlgInfo + ' WHERE NazevSys=N' + plgSysName.QuotedString + ') INSERT ' + tblPlgInfo;
|
|
lSQL:= lSQL + ' (NazevSys, NazevObjektu, NazevVerejny, VerzePluginu, ZmenyOK) SELECT N' + plgSysName.QuotedString + ', N''runMe'',';
|
|
lSQL:= lSQL + ' N''HDC - plugin Deleni trubek pro EM Polar Blatna'', N' + verText2.QuotedString + ', 1';
|
|
Helios.ExecSQL(lSQL);
|
|
verDB:= helUtils.getHeliosStrVal(Helios, verText2, 'SELECT VerzePluginu FROM ' + tblPlgInfo + ' WHERE NazevSys=N' + plgSysName.QuotedString).ToInt64;
|
|
if (verMoje<verDB) then
|
|
begin
|
|
Helios.Error(#1'Vaše verze pluginu je nižší než je verze v databázi'#1 + CRLF + 'Prosím kontaktujte administrátory a nechce si instalovat novou verzi (' + #1 + plgSysName + #1 + ')');
|
|
Exit;
|
|
end;
|
|
|
|
|
|
vlastPar:= Trim(vlastPar);
|
|
vlastPar2:= Trim(vlastPar2);
|
|
|
|
// vnucene ID pily (_hdc_TabRezaciPredpisPily)
|
|
datModul.idPilaForce:= 0;
|
|
if (vlastPar<>'') then
|
|
if not(TryStrToInt(vlastPar, datModul.idPilaForce)) then
|
|
datModul.idPilaForce:= 0;
|
|
|
|
if (vlastPar2<>'') then
|
|
if not(TryStrToInt(vlastPar2, datModul.idTiskForm)) then
|
|
datModul.idTiskForm:= 0;
|
|
|
|
|
|
|
|
// lSQL:= 'SELECT TOP(1) ID FROM ' + tblRezPredpisPily + ' WHERE Aktivni=1 AND DeviceID=N' + datModul.devID.QuotedString;
|
|
lSQL:= 'SELECT TOP(1) ID FROM ' + tblRezPredpisPily + ' WHERE Aktivni=1 AND LoginName=SUSER_SNAME()';
|
|
datModul.idPila:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
|
|
// vnucene ID pily, z pevnych parametru externi akce
|
|
if (datModul.idPilaForce>0) then
|
|
datModul.idPila:= datModul.idPilaForce;
|
|
|
|
if (datModul.idPila=0) and not(helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblRezPredpisPily + ' WHERE Aktivni=1 AND LoginName=SUSER_SNAME()')) then
|
|
begin
|
|
lSQL:= 'INSERT ' + tblRezPredpisPily + ' (DeviceID, LoginName) SELECT N' + datModul.devID.QuotedString + ', SUSER_SNAME()' + CRLF + 'SELECT SCOPE_IDENTITY() AS newID';
|
|
with Helios.OpenSQL(lSQL) do
|
|
datModul.idPila:= VarToStr(FieldByNameValues('newID')).ToInteger;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jeTest:= UpperCase(vlastPar)='TEST';
|
|
if (vlastPar2<>'') then
|
|
jeTest:= UpperCase(vlastPar2)='TEST';
|
|
|
|
|
|
if AnsiContainsText(UpperCase(paramsBak), ';TEST') then
|
|
jeTest:= true;
|
|
|
|
if AnsiContainsText(UpperCase(paramsBak), ';JENRP') then
|
|
datModul.tiskJenPlgRP:= true;
|
|
|
|
|
|
end;
|
|
|
|
if (Helios.BrowseID<>browID) then
|
|
begin
|
|
typAkce:= 0;
|
|
Helios.Error('Tento plugin lze volat pouze z přehledu: '#1 + IntToStr(browID) + #1'.');
|
|
end;
|
|
|
|
IDcka:= '';
|
|
cRec:= 0;
|
|
SetLength(arrId, 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;
|
|
|
|
|
|
cRecRodic:= -1;
|
|
IDckaRodic:= '';
|
|
SetLength(arrIdRodic, 0);
|
|
if (Helios.HeliosVlastnik<>nil) then
|
|
begin
|
|
if (Helios.HeliosVlastnik.SelectedRecordIDs<>'') then
|
|
IDckaRodic:= Helios.HeliosVlastnik.SelectedRecordIDs
|
|
else
|
|
if not VarIsNull(Helios.HeliosVlastnik.CurrentRecordID) then
|
|
cRecRodic:= StrToInt(VarToStr(Helios.HeliosVlastnik.CurrentRecordID));
|
|
SetLength(arrIdRodic, 1);
|
|
arrIdRodic[0]:= cRecRodic;
|
|
|
|
if (IDckaRodic<>'') then
|
|
begin
|
|
cntID:= 1 + Length(IDckaRodic)-Length(StringReplace(IDckaRodic, ',', '', [rfReplaceAll]));
|
|
SetLength(arrIDRodic, cntID);
|
|
for l_loop:=0 to cntID-1 do
|
|
begin
|
|
if Pos(',', IDckaRodic)>0 then
|
|
begin
|
|
arrIDRodic[l_loop]:= StrToInt(LeftStr(IDckaRodic, Pos(',',IDckaRodic)-1));
|
|
IDckaRodic:= MidStr(IDckaRodic, Pos(',',IDckaRodic)+1, 262140) // 65535 * 4 (max. delka pole)
|
|
end
|
|
else
|
|
arrIDRodic[l_loop]:= StrToInt(IDckaRodic);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
case typAkce of
|
|
// 0: Helios.PrintForm3 (11050, datModul.idTiskFormStitek, 'TabPrKVazby.ID=3284');
|
|
|
|
|
|
1: begin
|
|
// ohlidej jednorazove prihlaseni
|
|
lSQL:= 'SELECT 1 AS A FROM ' + tblRezPredpisPily + ' WHERE ID<>' + datModul.idPila.ToString + ' AND Aktivni=1 AND LoginName=SUSER_SNAME() AND Prihlasen=1';
|
|
if (datModul.idPila>0) and (helUtils.sqlExistsTestGeneral(Helios, lSQL)) then
|
|
begin
|
|
Helios.Error('Uživatele ' + #1 + datModul.sqlUserName + #1 + ' lze do systému přihlásit jen jedenkrát !' + CRLF + 'Pokud jste si jistí že přihlášen není, změňte příznak v přehledu Pily');
|
|
Exit;
|
|
end;
|
|
Helios.ExecSQL('UPDATE ' + tblRezPredpisPily + ' SET Prihlasen=1, PosledniPrihlaseni=GETDATE(), PocetTisku=0, PocetTiskuMimo=0 WHERE LoginName=SUSER_SNAME() AND Aktivni=1');
|
|
|
|
// colPokracujVTisku
|
|
// datModul.tiskarnaNazev:= ''; // ZDesigner ZD421 PILA
|
|
if (datModul.idPila>0) then
|
|
begin
|
|
datModul.tiskarnaNazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TiskFronta FROM ' + tblRezPredpisPily + ' WHERE ID=' + datModul.idPila.ToString);
|
|
if (datModul.idTiskForm=0) then
|
|
datModul.idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ISNULL(IDTiskFormStitek,0) FROM ' + tblRezPredpisPily + ' WHERE ID=' + datModul.idPila.ToString);
|
|
end;
|
|
|
|
if (datModul.idTiskForm=0) then
|
|
begin
|
|
lSQL:= 'SELECT TOP(1) ID FROM ' + tblFormDef + ' WHERE Nazev=N''EMP - Štítek pro pilu'' AND Skupina=2043 AND PlatnostDo IS NULL'; // 2043 = materialy VPr, 2101 = evidence operaci
|
|
datModul.idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
|
|
end;
|
|
|
|
if (datModul.idTiskForm=0) then
|
|
datModul.idTiskForm:= datModul.idTiskFormStitek;
|
|
|
|
|
|
|
|
if (datModul.tiskarnaNazev='') then
|
|
begin
|
|
lSQL:= 'SELECT TOP(1) TiskFronta FROM ' + tblTiskDef + ' WHERE FormDefID=' + datModul.idTiskForm.ToString;
|
|
lSQL:= lSQL + ' AND Implicitni=0 AND LoginName IS NULL OR LoginName=SUSER_SNAME() ORDER BY ISNULL(LoginName, N'''')';
|
|
datModul.tiskarnaNazev:= helUtils.getHeliosStrVal(Helios, '', lSQL);
|
|
end;
|
|
|
|
if not(helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 FROM ' + tblTiskDef + ' WHERE TiskDoSouboru=1 AND FormDefID=' + datModul.idTiskForm.ToString)) then
|
|
if (datModul.idTiskForm>0) and (datModul.tiskarnaNazev<>'') then
|
|
if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT 1 AS A FROM ' + tblTiskDef + ' WHERE FormDefID=' + datModul.idTiskForm.ToString + ' AND Implicitni=0')) then
|
|
if not(dm.IsPrinterActiveFrmId (datModul.tiskarnaNazev, datModul.idTiskForm)) then
|
|
Helios.Error('POZOR !! Přednastavená tiskárna "' + datModul.tiskarnaNazev + '" nenalezena nebo není aktivní');
|
|
|
|
|
|
|
|
idPrac:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCPrac + ' WHERE TRIM(Pracoviste)=N''30'' AND IDTabStrom=N''101001''');
|
|
datModul.idPracovistePila:= idPrac;
|
|
|
|
lSQL:= 'SELECT pp.ID, mvaz.ID AS IDMVaz, kzvp.SkupZbo, kzvp.RegCis, kzvp.Nazev1, kzmvaz.SkupZbo AS SkupZboMat, kzmvaz.RegCis AS RegCisMat, kzmvaz.Nazev1 AS Nazev1Mat, mvaz.pozice' + CRLF;
|
|
lSQL:= lSQL + ', zak.Nazev AS CisloNadoby, kzf.Nazev1, kzf.Vykres, pp.operace, mvaz.mnozstvi*1000 AS MnozMat, mvaz.mnoz_Nevydane*1000 AS MnozMatCelkem' + CRLF;
|
|
lSQL:= lSQL + ', ISNULL(mvazv.mnoz_Nevydane, (mvaz.mnoz_Nevydane/mvaz.mnozstvi)) AS MnozVys, vp.RadaPrikaz, ISNULL(kzmvazE._Rozmer, N'''') AS Rozmer' + CRLF;
|
|
lSQL:= lSQL + ', ISNULL(pp.Plan_zadani, vp.Plan_zadani) AS Datum, vp.RadaPrikaz, ISNULL(kzmvazE._JakostMaterialu, N'''') AS JakostMat' + CRLF;
|
|
lSQL:= lSQL + ', ISNULL(kzmvazE._S1_X, N'''') AS SilaMat' + CRLF;
|
|
lSQL:= lSQL + ' FROM ' + tblPrPost + ' pp INNER JOIN ' + tblPrikaz + ' vp ON (vp.ID=pp.IDPrikaz) INNER JOIN ' + tblKZ + ' kzvp ON (kzvp.ID=vp.IdTabKmen)' + CRLF;
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tblPrikaz + ' vpv ON (vpv.ID=vp.IDPrikazVyssi) LEFT JOIN ' + tblPrikaz + ' vpf ON (vpf.ID=vp.IDPrikazRidici)' + CRLF;
|
|
lSQL:= lSQL + ' INNER JOIN ' + tblPrVaz + ' mvaz ON (mvaz.Splneno=0 AND mvaz.IDPrikaz=vp.ID AND mvaz.operace=pp.operace AND mvaz.IDOdchylkyDo IS NULL)' + CRLF;
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tblZak + ' zak ON (zak.ID=vpf.IDZakazka) INNER JOIN ' + tblKZ + ' kzf ON (kzf.ID=vpf.IdTabKmen)' + CRLF;
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tblPrVaz + ' mvazv ON (mvazv.IDPrikaz=vpv.ID AND mvazv.IDOdchylkyDo IS NULL AND mvazv.nizsi=mvaz.vyssi)' + CRLF;
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tblKZ + ' kzmvaz ON (kzmvaz.ID=mvaz.nizsi) LEFT JOIN ' + tblKZe + ' kzmvazE ON (kzmvazE.ID=kzmvaz.ID)' + CRLF;
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tblSZ + ' szkzm ON (szkzm.SkupZbo=kzmvaz.SkupZbo) LEFT JOIN ' + tblSZe + ' szkzme ON (szkzme.ID=szkzm.ID)' + CRLF;
|
|
lSQL:= lSQL + ' WHERE vp.StavPrikazu=30 AND pp.prednastaveno=1 AND pp.splneno=0 AND pp.IDOdchylkyDo IS NULL AND pp.pracoviste=' + idPrac.ToString + CRLF;
|
|
lSQL:= lSQL + ' AND szkzme._MaterialProPilu=1' + CRLF;
|
|
lSQL:= lSQL + ' ORDER BY ISNULL(pp.Plan_zadani, vp.Plan_zadani)';
|
|
with helios.OpenSQL(lSQL) do
|
|
if (RecordCount=0) then
|
|
Helios.Error(#1'Žádný hutní materiál, požadovaný na zadaných výrobních příkazech,'#1 + CRLF + #1'není zaplánován do výroby.'#1)
|
|
// Helios.Error(#1'Žádný hutní materiál, požadovaný na zadaných výrobních příkazech,'#1 + CRLF + #1'na sobě nemá navázanou operaci.'#1)
|
|
else
|
|
begin
|
|
fMain:= TformMain.Create(nil);
|
|
try
|
|
try
|
|
fMain.Helios:= Helios;
|
|
fMain.dm:= dm;
|
|
fmain.idDP:= 0;
|
|
fMain.ShowModal;
|
|
except
|
|
end;
|
|
finally
|
|
fMain.Free;
|
|
end;
|
|
end;
|
|
|
|
// zrus priznak prihlaseni
|
|
Helios.ExecSQL('UPDATE ' + tblRezPredpisPily + ' SET Prihlasen=0 WHERE LoginName=SUSER_SNAME() AND Aktivni=1');
|
|
|
|
end;
|
|
|
|
|
|
3: begin
|
|
Helios.Info('Krok 1');
|
|
|
|
if (datModul.idPila>0) then
|
|
begin
|
|
datModul.tiskarnaNazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TiskFronta FROM ' + tblRezPredpisPily + ' WHERE ID=' + datModul.idPila.ToString);
|
|
if (datModul.idTiskForm=0) then
|
|
datModul.idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDTiskFormStitek FROM ' + tblRezPredpisPily + ' WHERE ID=' + datModul.idPila.ToString);
|
|
end;
|
|
|
|
if (datModul.idTiskForm=0) then
|
|
begin
|
|
lSQL:= 'SELECT TOP(1) ID FROM ' + tblFormDef + ' WHERE Nazev=N''EMP - Štítek pro pilu'' AND Skupina=2043 AND PlatnostDo IS NULL';
|
|
datModul.idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
|
|
end;
|
|
|
|
if (datModul.idTiskForm=0) then
|
|
datModul.idTiskForm:= datModul.idTiskFormStitek;
|
|
|
|
|
|
if (datModul.tiskarnaNazev= '') then // ZDesigner ZD421 PILA
|
|
begin
|
|
lSQL:= 'SELECT TOP(1) TiskFronta FROM ' + tblTiskDef + ' WHERE FormDefID=' + datModul.idTiskForm.ToString;
|
|
lSQL:= lSQL + ' AND Implicitni=0 AND LoginName IS NULL OR LoginName=SUSER_SNAME() ORDER BY ISNULL(LoginName, N'''')';
|
|
datModul.tiskarnaNazev:= helUtils.getHeliosStrVal(Helios, '', lSQL);
|
|
end;
|
|
if not(dm.IsPrinterActive(datModul.tiskarnaNazev)) then
|
|
Helios.Error('POZOR !! Přednastavená tiskárna "' + datModul.tiskarnaNazev + '" nenalezena nebo není aktivní');
|
|
|
|
|
|
Helios.Info('Krok 2');
|
|
fMain:= TformMain.Create(nil);
|
|
try
|
|
try
|
|
fMain.Helios:= Helios;
|
|
fMain.dm:= dm;
|
|
fMain.idDP:= cRec; // id Delici/Rezaci plan
|
|
fMain.ShowModal;
|
|
except
|
|
end;
|
|
finally
|
|
fMain.Free;
|
|
end;
|
|
Helios.Info('Krok 3');
|
|
end;
|
|
|
|
|
|
2: begin
|
|
bidRezaciPredpis:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_RezaciPredpis''');
|
|
if (bidRezaciPredpis>0) then
|
|
begin
|
|
if (Helios.BrowseID=bidRezaciPredpis) then
|
|
begin
|
|
filtrPolozek:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFiltr + ' WHERE Nazev=N''Řezací plán - materiál pro výběr'' AND BrowseID=' + bidPrKVaz.ToString);
|
|
podm:= '<$PR_WhereSys>TabPrKVazby.IDOdchylkyDo IS NULL</$PR_WhereSys><$PR_MultiSelect>1</$PR_MultiSelect>';
|
|
podm:= podm + IfThen(filtrPolozek>0, '<$PR_IDFiltr>' + filtrPolozek.ToString + '</$PR_IDFiltr>', '');
|
|
if (Helios.Prenos(bidPrKVaz, 'ID', oVar1, podm, 'Vyberte položky pro Řezací předpis', false)) then
|
|
begin
|
|
SetLength(arrID2, 0);
|
|
IDcka:= VarToStr(oVar1);
|
|
if (IDcka<>'') then
|
|
begin
|
|
tmpInt:= 1 + Length(IDcka)-Length(StringReplace(IDcka,',','',[rfReplaceAll]));
|
|
SetLength(arrID2, tmpInt);
|
|
for l_loop:=0 to tmpInt-1 do
|
|
begin
|
|
if Pos(',',IDcka)>0 then
|
|
begin
|
|
arrID2[l_loop]:= StrToInt(LeftStr(IDcka, Pos(',',IDcka)-1));
|
|
IDcka:= MidStr(IDcka, Pos(',',IDcka)+1,262140) // 65535 * 4 (max. delka pole)
|
|
end
|
|
else
|
|
arrID2[l_loop]:= StrToInt(IDcka);
|
|
end;
|
|
end;
|
|
VytvorRezaciPredpis (Helios, arrID2);
|
|
end;
|
|
end
|
|
else
|
|
Helios.Error(#1'Akci lze spouštět jen z přehledu Řezací předpis'#1);
|
|
end
|
|
else
|
|
Helios.Error(#1'Nebyl nalezen definovaný přehled Řezací předpis'#1);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
Helios.Refresh (true);
|
|
|
|
try
|
|
if (helUtils.HeliosObjectExists(Helios, '#TabExtKom', '')) then
|
|
with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do
|
|
if (RecordCount>0) then
|
|
Helios.OpenBrowse(541,'');
|
|
finally
|
|
end;
|
|
|
|
if (dm<>nil) then
|
|
FreeAndNil(dm);
|
|
|
|
|
|
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
|
|
raise;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
INITIALIZATION
|
|
TComObjectFactory.Create(ComServer, TplgEMPDeleniTrubek, Class_EMPDeleniTrubek, 'runMe', '', ciMultiInstance, tmSingle);
|
|
|
|
END.
|