SETRANGE oder SETFILTER

Im Code von Dynamics NAV sind viele Stellen zu finden, wo beispielsweise über eine Schleife Datensätze durch­lau­fen werden. Dabei werden häufig ein oder mehrere Filter gesetzt, um nur ganz bestimmte Datensätze für diesen Durchlauf zu berücksichtigen. Solche Filter werden mit den Befehlen SETRANGE oder SETFILTER gesetzt.

Beginnen wir mit SETRANGE. Die Verwendung von SETRANGE ist recht simpel.

Item.SETRANGE("No.", 1000, 9000);
Item.SETRANGE(Blocked, FALSE);

Die Variable Item liefert nach dem Setzen der beiden Filter letztendlich alle Artikel mit einer Nr. zwischen 1000 und 9000 und dann auch nur die Artikel, die nicht gesperrt sind.

Das gleiche Ergebnis würden wir auch mit SETFILTER erreichen:

Item.SETFILTER("No.", '%1..%2', '1000', '9000');
Item.SETFILTER(Blocked, '%1', FALSE);

Wenn möglich, nutze SETRANGE, da die Durchführung schneller läuft als die von SETFILTER. SETFILTER ist deshalb langsamer, weil dieser Befehl uns weitaus mehr Filtermöglichkeiten zur Verfügung stellt. Die Möglichkeiten sind identisch mit denen des Tabellenfilters (STRG+F7) bzw. Feldfilters, die zur Laufzeit durch den Endanwender gesetzt werden können.

Der Unterschied dieser beiden Befehlen ist also folgender: SETRANGE filtert nur einen Bereich (von/bis) und ist schnell, während SETFILTER umfangreicherer Filtermöglichkeiten bietet und deshalb auch etwas langsamer ist.

Egal ob SETRANGE oder SETFILTER genutzt wird, setzte wenn möglich immer einen sinnvollen Tabellen­schlüssel vor der Filterung, das macht die ganze Sache erheblich schneller.

Da sowohl der zweite als auch der dritte Parameter von SETRANGE optional sind, wird dieser Befehl auch oft dazu genutzt um eine bestehende Filterung wieder aufzuheben.