[Gelöst] Ein Setfilter mit AND Verknüpfung möglich?!

17. August 2007 00:29

Hallo ich brauche einen Filter der mir alle Sätze ausblendet, bei denen 3 Felder befüllt sind. Als ergebnis Sollen mir also alle Sätze angezeigt bei denen in einem der Felder nichts steht.

So wie ich es jetzt habe filtert er nacheinander alles aus, ich will die 3 Filter mit einem AND verknüpfen, aber wie geht das?

SETFILTER(Signatur,'');
SETFILTER("Defektmat.",'');
SETFILTER("Arbeitsmin.",'');
Zuletzt geändert von tesarolle am 20. August 2007 14:47, insgesamt 1-mal geändert.

17. August 2007 06:59

Standardmäßig werden die einzelnen Felder AND-verknüpft, also alle Filter müssen erfüllt werden.

Wenn du die Felder miteinander OR-verknüpfen möchtest, musst du mit Satzmarken arbeiten:

Code:
SETFILTER(Signatur,'%1','')
IF FIND('-') THEN
  REPEAT
    MARK := TRUE;
  UNTIL NEXT = 0;
SETRANGE(Signatur);
SETFILTER("Defektmat.",'%1','');
IF FIND('-') THEN
  REPEAT
    MARK := TRUE;
  UNTIL NEXT = 0;
SETRANGE("Defektmat.",'%1','');
SETFILTER("Arbeitsmin.",'%1','');
IF FIND('-') THEN
  REPEAT
    MARK := TRUE;
  UNTIL NEXT = 0;
SETRANGE("Arbeitsmin.");
MARKEDONLY := TRUE;
IF FIND('-') THEN
  [...]

Sieht ziemlich umständlich aus, ist aber der einzige Weg, die Filter OR-verknüpft anzuwenden.

17. August 2007 07:04

Sofern das nicht Millionen von Datensätzen sind kannst du dir beim Öffnen der Form mit einer Schleife behelfen in der du die Felder per OR auf leer testest und im erfolgsfall den Datensatz per MARK(TRUE) markieren.

Zum Schluss noch ein MARKEDONLY(TRUE) und es werden alle markierten Datensätze (alle alle in denen eins der Felder leer ist) angezeigt.

EDIT: Pfff. Der Timo mal wieder :P

20. August 2007 14:47

Hallo,

vielen Dank Ihr beiden.

Das ist ganz schön aufwändig.

Ich werde es nun doch so machen das ich beim Validate jedes der 3 Felder prüfe ob nun alle befüllt sind und wenn ja ein neues Feld auf "TRUE" setzen und nach dem Filtern.

Aber trotzdem vielen DANK!

20. August 2007 15:48

Für den Fall, dass SQL eingesetzt wird, könnte eine Sicht (View) in SQL angelegt werden die dann die "OR-Filterung" durchführt. Dann eine neue Tabelle in NAV anlegen (Eigenschaft LinkedObject auf TRUE) und man hat die Daten wie in SQL gefiltert zur Verfügung.

Gruß, Marc