[gelöst] SETFILTER mit Werten und 'leerem' Wert durch Pipe..

20. August 2024 18:19

Moin zusammen,

der Tag war lang und vllt. bin ich auch einfach nur überarbeitet, aber ich komme bei folgendem Problem einfach auf keinen grünen Zweig:

Ich habe eine Tabelle mit diversen Feldern, wovon eines (kein PK-Feld) ein Code-Feld ist, auf welches ich filtern möchte.

Sagen wir in diesem Code-Feld gibt es in der ganzen Tabelle Werte von 'A' bis 'F', es kann aber auch vorkommen, dass einzelne Datensätze keinen Wert enthalten.

Wie bereits gesagt, möchte ich jetzt einen Filter auf dieses Feld setzen, ich benötige aber nur die Werte 'B' + 'E' + leer, also ohne Wert.

In einer Page selber kann ich jetzt locker hingehen und mit ..
Code:
B|E|''

.. filtern und komme zum gewünschten Ergebnis.

Versuche ich das über das Coding, läßt mich der Compiler brav machen, aber im Run bekomme ich einen Error.

Ein Hinweis noch: B und E bekomme ich bereits mit Pipe getrennt in einem Text-Parameter in die Fkt. übergeben.

Folgende Versuche blieben erfolglos:

Parameter: Filterstring = 'B|E'

Versuch 1:
Code:
Filterstring += '|' + '';
Tabelle.SETFILTER(Code, Filterstring);

Versuch 2:
Code:
Filterstring += '|' + '''';
Tabelle.SETFILTER(Code, Filterstring);

Versuch 3:
Lokale Variable angelegt: Name = XYZ, Typ = Code10, Wert = leer (default)
Code:
Filterstring += '|' + XYZ;
Tabelle.SETFILTER(Code, Filterstring);

Versuch 4:
Textkonstante angelegt: Txt001 = '%1|%2'
Code:
Tabelle.SETFILTER(Code, STRSUBSTNO(Text001, Filterstring, ''));


Das Problem ist, dass im Filter nachher immer nur das ..
Code:
'B|E|'

.. und nicht das ..
Code:
'B|E|'''

ankommt.

Es muss doch möglich sein, in einem Code-Filter auf mehrere Werte und gleichzeitg noch auf 'leer' filtern zu können; wie man es ja auch manuell kann! :roll:

Wie gesagt, der Tag war lang und anstrengend und ich sehe vllt. einfach den Baum vor lauter Wald nicht mehr.

:!: Danke im Voraus schon einmal an alle Helfer :!:
Zuletzt geändert von HouseMeister am 21. August 2024 10:21, insgesamt 1-mal geändert.

Re: SETFILTER mit Werten und 'leerem' Wert durch ODER getren

20. August 2024 21:15

Spontan und ohne es getestet zu haben - hast du es mal mit indirektem Filtern versucht, also sinngemäß:
SETFILTER(Feldname, '%1', Filterstring);
oder wenn es getrennt kommt
SETFILTER(Feldname, '%1|%2', Filterstring, '');

Re: SETFILTER mit Werten und 'leerem' Wert durch ODER getren

21. August 2024 08:47

Moin enh,

danke für deine Vorschläge, ich habe sie ausprobiert.

Deine Version 1:
Sie schmeisst keinen Error, filtert aber prinzipiell wie meine Versuche, der Filterstring sieht dann so aus und filtert nur auf die 'gefüllten' Werte, nicht aber auf den 'leeren':
Code:
'B|E|'

Deine Version 2:
Sie scheint genau das zu machen, was ich brauche, so funkioniert es!


Allerdings hänge ich jetzt im nächsten Problem:

Mein Code-Feld hat die Länge 10 und ich filtere leider nicht nur mit 2-3 Werten die jeweils nur 1 Zeichen lang sind. In meinem expliziten Fall jetzt, muss ich 11 Werte zwischen 6 und 7 Zeichen zzgl. dem 'leeren' Wert mit Pipe trennen.

Und wenn ich jetzt diesen Filter in deine Verison 2 nutze, dann kommt wieder ein Error der die Zeichenlänge bemängelt: "Die Länge der Zeichenfolge beträgt 76, darf aber höchstens 10 Zeichen umfassen."

Filtere ich aber nur auf einen der 11 Werte und mit Pipe getrennt auf "leer", dann funktioniert es!

Das so ein trivialer Mist mich jetzt seit Stunden aufhält, nervt mich langsam tierisch.

Re: SETFILTER mit Werten und 'leerem' Wert durch ODER getren

21. August 2024 09:15

Hallo,

der Setfilter müsste eigentlich lauten SETFILTER(Wert, 'A|B|''''') -> für jedes Anführungszeichen im Filtertext musst du zwei Anführungsstriche innerhalb des Strings eingeben beim Programmieren.

Evtl. ist das das Problem, warum er den Filter nicht korrekt auswertet. Aber ich bin auch schon über dass Thema gestolpert und konnte nicht genau klären warum es nicht funktionierte.
Du solltest dir den erzeugten Filtertext per Message ausgeben lassen, bevor du den Filter setzt, evtl. entdeckst du etwas,

Gruß Fiddi

Re: SETFILTER mit Werten und 'leerem' Wert durch ODER getren

21. August 2024 10:20

Moin fiddi,

danke für deinen Beitrag, das war des Rätsels Lösung! 8-)

Hier nochmals deine Lösung als Code:
Code:
SETFILTER(Wert, 'A|B|''''');

DANKE, DANKE, DANKE :!:

Ich programmiere in NAV jetzt fast seit 20 Jahren, aber diese Art Filter musste ich irgendwie noch nie setzen.

Man lernt eben nie aus.

Sonnige Grüße aus dem Münsterland