[gelöst] Filtern eines Codefeldes

28. September 2006 10:58

Hallo zusammen,

selbst auf die Gefahr hin mich hier jetzt als totaler Noob zu outen, aber ich hab hier ein komisches Problem mit einem Filter.

Sobald ich im C/AL-Code oder im TableView-Filter einen Filter auf ein Codefeld setzen will, der den Platzhalter * enthält, verhält sich Navision so, als ob kein Filter gesetzt wäre. Setze ich aber den Filter über die Requestform funktioniert es ohne Probleme, bloß das ist leider keine Lösung, weil ich die Filterung für die weitere Programmierung benötige.

Ich hab über die Suche nichts gefunden, vllt. noch zur Ergänzung, wir verwenden NAV 4 SP2 mit einer nativen Datenbank.

Danke schonmal im Vorraus.

Alez
Zuletzt geändert von Alez am 28. September 2006 17:19, insgesamt 1-mal geändert.

28. September 2006 11:40

Verstehe ich das richtig, im Codefeld ist irgendwo ein * drin? Wenn das so ist, interpretiert das Navision als Wildcard. Steht der * vor dem Filterbegriff (z.B. *osten) so werden all Begriffe gezeigt, die auf osten enden (also Posten, Kosten, usw.)

Liegt es ev. daran? Wenn nicht, wäre es hilfreich, wenn du mal den Code hier veröffentlichen würdest, mit welchem du den Filter setzt.

28. September 2006 12:04

Wenn es sich bei dem Codefeld um den Primärschlüssel handelt, wird der Filter auf der Karte sofort wieder entfernt. Das besorgt das

Code:
SETRANGE("No.");


im OnAfterGetRecord Trigger, welches man in allen Forms ( Artikel, Debitor, Kreditor usw. ) findet. Nur in den Übersichtforms kann auf den Primärschlüssel gefiltert werden.

28. September 2006 12:26

Ich denke es soll sowas gemacht werden:

Code:
SETRANGE("No.",'suchbegr*');


Also alle Einträge mit "suchbegr" am anfang anzeigen.

28. September 2006 13:13

Hallo zusammen,

wow ihr seit ja richtig schnell!

Also sorry erstmal, es war ein bißchen unglücklich ausgedrückt.
In diesem Fall handelt es sich um einen Report, beim dem in einem DataItem der folgende Code gesetzt werden soll:

Code:
SETFILTER(CodeFeld,'<>*/*');


Ich hab auch diese Variante schon probiert:
Code:
SETFILTER(CodeFeld,'<>%1','*/*');


Bedeutet also, dass alle Datensätze, die keinen Schrägstrich enthalten, angezeigt werden sollen (so wie es LuH schon gesagt hat). Aber genau das funktioniert nicht, es werden trotzdem immer alle angezeigt.
Ein Primärschlüsselfeld ist es auch nicht.

28. September 2006 14:46

Schreib
Code:
IF STRPOS(Codefeld,'/') <> 0 then
  CURRREPORT.SKIP;

in den OnAfterGetRecordTrigger vom DataItem. Ungleichfilterungen funktionieren nur mit konkreten Werten.

28. September 2006 15:04

Hey, danke, damit funktionierts. Ich hab STRPOS zwar schon mal verwendet, bin auf diese Lösung aber nicht gekommen.
Komisch zwar dass man nicht direkt filtern kann, aber egal, die eine Zeile mehr ist ja nicht tragisch.

Vielen Dank nochmal.

Datumsfeld filtern

2. Oktober 2006 15:46

Hallo nochmal,

hab jetzt noch ein ähnliches Problem beim Filtern eines Datumsfeldes. Es geht wieder um einen Report, bei dem ich das erste Datum eines Records benötige. Den Key hab ich schon soweit gesetzt, allerdings kann es jetzt vorkommen, dass dieses Datumsfeld nicht gefüllt ist. Deswegen benötige ich den ersten DS bei dem das Feld gefüllt ist.

Ich hab es schon über den "normalen" Weg versucht (SETRANGE(Datum,'<>0D') aber da bringt er eine Fehlermeldung bezüglich der Typenkonvertierung Date := Text.

Gibt es eine Möglichkeit ein Datum auf diesem Weg zu filtern?

Danke schonmal im Voraus.

Alez

2. Oktober 2006 16:11

SETRANGE nimmt bei dern Parametern nur konkrete Werte an ( entweder keinen (damit kann man Filter auf dem Feld wieder entfernen),einen oder von - bis).

Ein Filterausdruck bei SETFILTER wird immer so interpretiert, wie er im Code getippt wurde.
Wenn zur Laufzeit Variablen eingesetzt werden sollen, muss mit Platzhaltern gearbeitet werden.
Code:
SETFILTER(Datum,'<>%1',0D);

2. Oktober 2006 16:23

Schande über mich, am Donnerstag noch dran gedacht und heute schon wieder vergessen :oops:
Danke für den Schubs in die richtige Richtung, jetzt funktionierts :wink:

Gruß
Alez