[Gelöst] Filtern von Tabellen und Anzeige der Ergebnisse

29. November 2006 12:22

Hallo,
kann man eigentlich in Navision ein Filter auf eine Tabelle setzen wobei 2 Felder in Kombination abgefragt werden? z.B

Feld2 <> '' | (Feld1 <>'' & Feld2 = ''))

Ich habe keine Möglichkeit gefunden ausser die Ergebnisse mir einzeln zu filtern und diese in einem temporären Tabelle zu übernehmen.

Nun ist aber das Problem, dass ich dieses Ergebnis nicht mit dem Table-Box anzeigen kann. Oder geht das irgendwie?

Also die Frage:
wie filter ich " Feld2 <> '' | (Feld1 <>'' & Feld2 = '')) " ?
bzw. wie zeige ich eine temporäre Tabelle in einem Formular an?

Ich bin am ENDE :-(

29. November 2006 12:50

Hi,

das geht mit der Filterfunktion von Navision nicht. Für so einen Fall kannst du die Satzmarken benutzen. Aber es muss was Programmiert werden.

Gruß, Marc

29. November 2006 13:00

Das ist ja Wahnsinn... Eine Datenbank, die die simpelste Abfrage nicht hinbekommt. Das macht mich rasend...

Ich habe es mit markieren der Sätze und dann deren anzeige versucht. Aber das ist nicht gerade schnell. Mit meiner Tabelle dauert dann die Anzeige ewig.
:-x

29. November 2006 13:53

vermutlich hast du Bedingung für den Mark-Befehl nicht optimiert sondern arbeitest mit OR
am schnellsten ist es so:
Code:
if feld2 <>'' then
  mark(true)
else
  mark(feld1<>'');


Hintergrund:
Wenn du in der IF Abfrage ein OR verwendest und das auch noch mit AND schachtelst, werden immer alle 3 abfragen ausgeführt:
feld2<>'' ,
feld1<>'' und
feld2=''

wenn du das wie vorgeschlagen machst, wird nur die erste abfrage ausgeführt, wenn was in Feld 2 steht, sonst eben noch die zweite, ob in Feld 1 was steht.
Das spart also mindestens 1, oft aber sogar 2 Abfragen pro datensatz.

29. November 2006 13:59

Hallo shah,
hast du bevor du die Felder Filters einen passenden Sortierschlüssel angegeben?
Die Filterung in einem Logikdiagramm wiedergegeben, willst du nur nach ungleich leeren Feldern in Feld1 und 2 Filtern!? -->Richtig?
Daher würde ich die Datensätze in zwei durchläufen Markieren
z.B.
Code:
RESET;
SETCURRETNKEY(Feld1);
SETFILTER(Feld1,'<>%1',''''');
IF FIND('-') THEN
  REPEAT
    MARK;
  UNTIL NEXT = 0;
RESET;
SETCURRETNKEY(Feld2);
SETFILTER(Feld2,'<>%1',''''');
IF FIND('-') THEN
  REPEAT
    MARK;
  UNTIL NEXT = 0;
MARKEDONLY(TRUE);
  CURRFORM.UPDATE(FALSE)

Gruß Mikka

29. November 2006 14:02

Schumi hat geschrieben:vermutlich hast du Bedingung für den Mark-Befehl nicht optimiert


Die Variante gefällt mir auch gut, die mit dem Passenden Key kombiniert, sollte eigentlich gut klappen :-P
Gruß Mikka

29. November 2006 14:19

Das mit dem Key hilft natürlich nur, wenn es einen solchen gibt.
für meinen Vorschlag würde der folgende optimal sein:
Code:
SETCURRENTKEY(Feld2,Feld1);

29. November 2006 14:36

Hallo Jungs,
danke für die Tipps.

ich bin in der tat genauso vorgegangen. habe die tabelle in 2 schritten gefiltert.
ich werde gleich mal prüfen ob man mit den keys was verbessern kann.


hätte nur gedacht (bzw. gehofft) dass man die ergebnisse von zwei filter kombinieren kann (d.h. das man zum ersten ergebnis das zweite hinzufügen kann) . wie gesagt das geht ja auch. und zwar mit einer temporäre tabelle.
aber die tabelle ist ja dann nix für die anzeige...

29. November 2006 14:42

shah hat geschrieben:hätte nur gedacht (bzw. gehofft) dass man die ergebnisse von zwei filter kombinieren kann (d.h. das man zum ersten ergebnis das zweite hinzufügen kann)


Wenn man den MARK Befehl nutzt, könnte man Prüfen, ob ein Datensatz Markiert ist.
[IsMarked := MARK(SETmarked)]
Gruß Mikka

29. November 2006 15:12

so... geschafft. die anzeige braucht zwar beim blättern jedesmal einen kleinen augenblick, aber das ist ok.

danke jungs