OnFormat Zeilen ausblenden

16. Juli 2013 15:45

Hallo...

ist es möglich in einer Form im OnFormat-Trigger oder in einem anderen Trigger Artikelzeilen auszublenden wenn bestimmte Bedingungen im Artikelstamm zutreffen?

Kennt das jemand?

Re: OnFormat Zeilen ausblenden

16. Juli 2013 17:07

Warum möchtest du das tun?
Soweit ich weiß wird der OnFormat Trigger ausgeführt sobald die Felder angezeigt werden ohne erforderlichen Benutzereingriff.

Wenn du Zeilen ausblenden möchtest ist ein anderer Trigger wohl besser.

Re: OnFormat Zeilen ausblenden

16. Juli 2013 21:17

Hallo,

also ich würde davon abraten das mit den Bedingungen dynamisch zu machen. Nach Möglichkeit sollte man es mit Filtern, oder aber durch vorfüllen einer Temporärtabelle auf OnOpenForm (SourceTableTemporary) machen. Wenn man es doch machen will/muss benutzt man OnFindRecord und OnNextRecord. Die Logik damit das unter allen Bedingungen wie vom Benutzer erwartet funktioniert ist aber recht komplex und auch je nach zu prüfender Bedingung rechenintensiv. Es gibt aber Anwendungsfälle da ist sowas die beste Lösung, z.B. zeige nur die Konten die in einem bestimmten Zeitraum auch bebucht wurden.

LG Jens

Re: OnFormat Zeilen ausblenden

17. Juli 2013 10:23

Der OnFormat-Trigger steuert nur, wie und was in einem Textfeld angezeigt wird, d. h. dort kann man den dargestellten Feldwert sowie die Schriftfarbe und fett/normal übersteuern.
Um ganze Datensätze zu überspringen müsste man die Trigger OnFindRecord und OnNextRecord entsprechend ausprogrammieren, was - wie Jens schon schrieb - nicht ganz ohne ist.

In deinem konkreten Fall würde ich eher dazu neigen, die entsprechenden Felder aus der Artikeltabelle mit in deine Tabelle (z. B. Sales Line) zu übertragen, sobald die Artikelnr. eingetragen wird.
Dann kannst du mit normalen Filtern deine Zeilen bedarfsgerecht herausfiltern.
Irgendwie mussten die Artikel ja in die Tabelle eingetragen worden sein, somit muss es logischerweise auch eine Bedingung geben, wann solche Zeilen trotzdem zu sehen sind.

Beispiel-Pseudocode:
Auf der Tabelle:
Code:
Item No. - OnValidate()
Item.GET("Item No.");
<
DeinFeld> := Item.<DeinFeld>; 

Auf der Form:
Code:
OnOpenForm()
UserSetup.GET(USERID);
IF UserSetup."Limited Item View" THEN BEGIN
  FILTERGROUP
(2);  // Filter verstecken, damit der Anwender ihn nicht lösen kann
  SETFILTER(<DeinFeld>,<DeinFilter>);
  FILTERGROUP(0);
END; 

Um die bereits bestehenden Daten ebenfalls so filtern zu können, schreibst du dir einen kurzen Report (ProcessingOnly=Yes), welcher die Werte gemäß dem OnValidate() aus der Artikeltabelle in deine Tabelle nachträgt.