[Gelöst] Filter dynamisch...

24. Juli 2008 15:43

Ciao,

die Frage dreht sich um den SETFILTER(Feld,Filterausdruck[,Wert]).
Ich würde gern ein Text-Array mit verschiedenen Filterausdrücken belegen (zB *EXW oder 100..200) um dann in einer For-Schleife anhand der Laufvariablen die verschiedenen Ausdrücke zu platzieren...

...aber irgendwie klappt das nicht. obwohl entsprechende Datensätze vorhanden sind, greift der Filter nicht :?:

Hab ich etwas übersehen, oder interpretiert NAV den Inhalt der Variablen nicht so, wie ich das gerne hätte...
Zuletzt geändert von GARMIN am 25. Juli 2008 10:23, insgesamt 1-mal geändert.

24. Juli 2008 15:44

Wie sieht denn dein Quelltext aus?

24. Juli 2008 15:53

also:
zuerst natürlich ein Text-Array welches mit Filterausdrücken belegt wird:

Code:
Versandcodes[1] := '*EXW';
Versandcodes[2] := '*FCA';
Versandcodes[3] := '*DDP';


und später wird per For eine Schleife durchlaufen, deren Laufvariable LOOP heisst. Dort drin liegt der SETFILTER

Code:
"Tabelle".SETFILTER("Shipment Method Code", Versandcodes[LOOP]);

24. Juli 2008 16:04

Das sieht gut aus.
Funktioniert dein Code, wenn du das Ganze für Durchlauf 1 hart codierst,
also
Code:
"Tabelle".SETFILTER("Shipment Method Code", '*EXW');
?

Falls es Differenzen bei der Groß- und Kleinschreibung gibt, arbeite mit *@EXW usw.

24. Juli 2008 16:15

hardkodiert klappt es so. deswegen ja meine frage, ob der Interpreter eine Textvariable anders interpretiert - zB könnte ich mir vorstellen, dass die sonderzeichen nicht mehr wie gewünscht interpretiert werden (<>*@ etc.) -> folge wäre zB dass SETFILTER nach *@EXW filtert anstatt nach einer beliebigen Zeichenkette welcher in Groß- oder Kleinbuchstaben EXW folgt!

24. Juli 2008 16:32

So doof das auch klingen mag aber ich hatte ein aehnliches Problem was ich so loesen konnte:

Code:
  Versandcode :=  'EXW';
  FilterVar := '@*'+ Versandcode +'*';
  Tabelle".SETFILTER("Shipment Method Code", '%1', FilterVar);


okay, mein Problem war noch etwas anders aber vll geht das ja so.
Oder versuch einfach mal nur
Code:
"Tabelle".SETFILTER("Shipment Method Code", '%1', Versandcodes[LOOP]);

24. Juli 2008 16:45

ciao matthias,

danke erstmal für die workaround-ideen. werd sie morgen gleich mal ausprobieren, denn jetze is feierabend...

was mich allerdings dennoch interessieren würde ist, zu wissen wie genau sich der NAV interpreter bei der interpretation von zusammengesetzten ausdrücken verhält. wenn ich mir deine vorschläge anschaue, bin ich mir ziemlich sicher, dass ich mit meinen befürchtungen recht habe...

24. Juli 2008 21:23

wenn du recht hast, erlaeuter diese bitte kurz :)

25. Juli 2008 10:17

also hier für alle meine erkenntnisse:

1.) FilterVar := '*EXW*'; SETFILTER("Shipment Code", FilterVar);
Der Filterausdruck ist laut Syntax ein String - hier also der Wert aus der Textvariablen FilterVar => der Wert wird nicht auf Sonderzeichen interpretiert und somit sucht das Programm ganz buchstäblich nach *EXW* (wie dämlich :roll: aber noch verständlich)

2.)der Versuch FilterVar := 'EXW'; SETFILTER("Shipment Codes", '*FilterVar*') ist ebenso zum Scheitern verurteilt, weil innerhalb des String Variablen nur durch das % eingeführt werden können (war vorher klar)

3.)FilterVar := 'EXW'; SETFILTER("Shipment Codes", '*%1*', FilterVar); führt interessanterweise auch nicht zum Ziel, was Rückschlüsse auf die Reihenfolge bei der Untersuchung von Filterausdruck und Wert ermöglicht.
Zuerst wird der Filterausdruck interpretiert, dann wird der Filterwert interpretiert und ersetzt und abschließend auf dieser Basis gesucht. In diesem Beispiel wird also zuerst '**' interpretiert, wobei der Interpreter keine bedeutsamen Sonderzeichen ausmachen kann :shock: , dann wird %1 durch EXW ersetzt (auch nurn String) - letztendlich sucht er wieder buchstäblich nach *EXW* (der Depp)

4.)also bleibt nur die Möglichkeit von MK einen Filterausdruck zu bauen und diesen dann über % als Filterwert einzuführen...