Problem Timer Object mit Lösung

Alles, was den Programmierer beschäftigt

Moderator: SYNERPY

Antworten
festus01
Beiträge: 515
Registriert: Di Okt 19, 2004 5:45 am
Wohnort: Diepholz

Problem Timer Object mit Lösung

Beitrag von festus01 »

Hallo,

wird in einem Formular ein Timer Object hinzugefügt und im OnTimerScript ein Code hinterlegt wie zum Beispiel:

Code: Alles auswählen

If q_1.State = dssBrowse Then q_1.Refresh;
funktioniert alles wie erwartet.

Hat man jedoch die Datenübersicht geöffnet und das Timerevent wird ausgelöst, wird der Query vom Auflistfenster geschlossen.

Lösung:

In der Unit fBasis die Procedure DoPascalScript entsprechend anpassen mit der Zeile:

Code: Alles auswählen

// letzter Stand: 02.06.2008 by KDP
// Timer Events nur ausführen wenn Formular den Focus hat
// sonst wird der Query von dem Formular geschlossen, das gerade den
// Focus hat.
      If (Sender is TTimer) Then Begin
        If not Active Then Exit;
      End;
Das ganz könnte hinter der Auswertung von sID stehen.

Tritt jetzt das Event ein, wird geprüft ob das Formular den Focus hat. Wenn nicht wird die Procedure DoPascalScript ohne Aktion verlassen.
MfG

KDP

----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
SYN17
Beiträge: 79
Registriert: Do Feb 16, 2006 8:10 am

RE: Timer

Beitrag von SYN17 »

Eine Abprüfung wie Sie es vorgeschlagen haben ist für das Gesamtsystem nicht sehr gut. Stellen Sie sich vor, Sie haben zwei Masken auf. Z.B. eine, die Ihnen immer die aktuelle Uhrzeit oder die anwesenden Mitarbeiter anzeigt und als zweites die Auftragsmaske. Wenn Sie sich jetzt in der Auftragsmaske befinden, so würden die andere Maske, die Sie auch im Blickpunkt haben, nie aktualisiert.

Der bessere Weg, wenn Sie soetwas umgehen möchten ist im Pascalscript zum Timer eine If-Bedingung hinzuzufügen.
Etwas so:

if Self.Active then
begin
Irgendwas Timermäßig machen
end;
festus01
Beiträge: 515
Registriert: Di Okt 19, 2004 5:45 am
Wohnort: Diepholz

Re: RE: Timer

Beitrag von festus01 »

Hallo SYSN17,
SYN17 hat geschrieben:Eine Abprüfung wie Sie es vorgeschlagen haben ist für das Gesamtsystem nicht sehr gut. Stellen Sie sich vor, Sie haben zwei Masken auf. Z.B. eine, die Ihnen immer die aktuelle Uhrzeit oder die anwesenden Mitarbeiter anzeigt und als zweites die Auftragsmaske. Wenn Sie sich jetzt in der Auftragsmaske befinden, so würden die andere Maske, die Sie auch im Blickpunkt haben, nie aktualisiert.

Der bessere Weg, wenn Sie soetwas umgehen möchten ist im Pascalscript zum Timer eine If-Bedingung hinzuzufügen.
Etwas so:

if Self.Active then
begin
Irgendwas Timermäßig machen
end;
was ist da der Unterschied :?:

Auch hier wird dann das darunterliegende Formular nie aktualisiert, da es den Focus nicht hat.
Außerdem ist es so, wenn ein Auflistfenster geöffnet ist und das TimerScript des aufrufenden Formulars
ausgeführt wird, sich der Query des Auflistfensters schliesst.
Das heisst, das Auflistfenster ist plötzlich leer.

Mit der Änderung im Quelltext, wie ich es vorgeschlagen habe, ist zumindest das Problem behoben.
MfG

KDP

----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Re: RE: Timer

Beitrag von Geri12 »

Hallo
Leider muss ich dieses Thema nochmals auffrischen ...
festus01 hat geschrieben:Außerdem ist es so, wenn ein Auflistfenster geöffnet ist und das TimerScript des aufrufenden Formulars ausgeführt wird, sich der Query des Auflistfensters schliesst. Das heisst, das Auflistfenster ist plötzlich leer.
Das ist bei uns im Moment immer noch so, die User sind da nicht sehr begeistert davon. Wir benutzen allerdings noch die AvERP.exe V4.2.5.2 (bis auf einen Rechner in der Produktion für die BDE, der läuft nur vernünftig mit der AvERP.exe V3.6.0.15).

Die neu AvERP.exe V4.2.5.96 hatte ich schon mal im Test (ob als Ersatz für die alte EXE sinnvoll), aber da hatte ich das Gefühl, dass mit unserer 2008er Datenbank bei fast jedem Maskenaufruf die Zeit stehen bleiben würde: Ich hatte den Eindruck, eine gefühlte Ewigkeit auf einzelne Masken warten zu müssen. Somit war diese Version leider schneller 'ad acta' als runtergeladen :cry:

Gibt es für obiges Problem denn nun eine Lösung ? Denn es nutzen doch diverse Fenster einen Timer (Nachrichtensystem, Anwesenheitsliste, ...) und andere Masken erzeugen temporäre Datenübersichten (Statistik, div. eigene Masken, ...)

Oder kann mir jemand eine EXE benennen, bei der dies nicht mehr der Fall ist ?
Ich möchte nicht all unsern Usern den Vorschlag machen müssen, zwei Instanzen von AvERP auf dem Rechner zu öffnen ?!
Gruß
Geri12

Software-Version: V4.2.5.2
FDB-Version: AvERP2008-A.14
festus01
Beiträge: 515
Registriert: Di Okt 19, 2004 5:45 am
Wohnort: Diepholz

Beitrag von festus01 »

Hallo Geri12,

irgendwie ist diese Änderung durch diverse Updates verloren gegangen.
Es hat sich auch niemand von unseren Anwendern über das Problem beschwert.

Ich könnte diese Änderung wieder einbauen und Ihnen die EXE zur Verfügung stellen, falls gewünscht.
Ich kann aber nicht Versprechen ob unsere EXE mit Ihrer Datenbank läuft.

Unsere EXE basiert auf die Version 4.2.5.35.
MfG

KDP

----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

Hallo festus01,
vielen Dank für Ihr nettes Angebot. Allerdings hatte ich eher auf eine 'All-inclusive-Lösung' von SYNERPY gehofft. So in der Art von 'Der Datenrefresh im Timerfenster funktioniert im Hintergrund (z.B. Nachrichtensystem) problemlos, während im Vordergrund das Statistikfenster seine Daten in der Datenübersicht beibehält'. Zudem ging ab einer gewissen AvERP.exe-Version die F2-Funktionalität verloren, was mich dazu brachte, erstmal keine 'spätere' Version in unserem System mehr zu installieren.

@SYNERPY
Gibt es dafür schon längst eine Lösung, von der ich nur nichts mitbekommen habe? Oder wie machen das alle Anderen? Nutzen andere Anwender keine Maske mit Timer zeitgleich mit einer Statistik bzw. temporär erzeugten Datenübersichten? (Könnte ich mir bei so vielen Installationen von AvERP eigentlich nicht vorstellen.)

P.S. So wie es aussieht, ist die Anwesenheitsliste in der aktuellen Art sowieso nicht nutzbar. Der ständige Datenrefresh läuft immer wieder über die schon angezeigten Datensätze drüber, scheint (nach meinem Empfinden) die Farbe des aktuell adressierten Satzes erst mal auf neutral zurückzusetzen, um ihn dann in der entspr. Farbe (je nach Anwesenheitsstatus) einzufärben. Das erzeugt alle 30 Sekunden eine Unruhe für die Augen und einige Nutzer wollen die Anzeige schon gar nicht mehr auf dem Bildschirm haben. Mal ganz abgesehen von dem Problem von oben ...
Gruß
Geri12

Software-Version: V4.2.5.2
FDB-Version: AvERP2008-A.14
Antworten