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); // 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); 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; 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-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'') 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_MultiSelect>1'; podm:= podm + IfThen(filtrPolozek>0, '<$PR_IDFiltr>' + filtrPolozek.ToString + '', ''); 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.