[Gelöst] Filter Eingaben in ein weiteres DataItem übergeben

21. Juni 2006 07:57

Hallo,

ich habe einen Bericht erstellt, der mir alle aktiven und alle bereits archivierten Beststellungen anzeigt.
Die Tabellen Purchase Line und Purchase Line Archive haben aber keine Relation zueinannder. Als ReqFilterFields sind jeweils ProjektNr und AuftragsNr eingerichtet.
Wenn der Bericht jetzt gestartet wird muss jeweis in 39 und 5110 die Projekt oder AuftragsNr eingegeben werden.

wie kann ich den Filter von einer Tabelle zur anderen übergeben?

Hat jemand einen Tipp?

Danke schon mal

Gruss Roland
Zuletzt geändert von Roland am 10. Juli 2006 15:31, insgesamt 1-mal geändert.

21. Juni 2006 08:26

Hallo Roland

Du kannst das auf dem OnPreDataItem-Trigger des zweiten DataItems lösen. Im ersten DataItem gibt der Anwender ja die Filterbedingungen ein, für das zweite DataItem würde ich keine ReqFilterFields anzeigen lassen.

Mit dem Befehl GETFILTER kannst du dann die eingegebenen Filterkriterien auslesen, und mit SETFILTER wieder auf das zweite DataItem übertragen.

Beispiel GETFILTER:
Code:
CustomerEntry.SETRANGE(Amount, -100, 100);
String := CustomerEntry.GETFILTER(Amount);


Die Variable String kannst du jetzt als Filterkriterium weiterverwenden

27. Juni 2006 15:45

Hallo Roger,

Sorry, dass ich mich jetzt erst melde.

Mir fehlt es gerade an der nötigne Zeit dass ich mich um das Problem kümmern kann.
Sbald ich etwas Zeit hab melde ich mich nochmals.

Denke das wird auch nötig sein. :lol:

Dennoch besten DANK

Roland

27. Juni 2006 17:44

Danke für die Rückmeldung, ist kein Problem, ich warte hier ... :wink:

7. Juli 2006 10:41

Hallo Roger,

da bin ich wieder :-)

Leider kenne ich mich noch nicht so aus in der Programmierung wie andere hier im Forum - ich arbeite daran, deshalb will ich Dir erst mal kurz beschreiben, was ich alles gemancht habe:

Variable "CustomerEntry" als Code angelegt
Variable "String" als Text angelegt

im OnPreDataItem-Trigger des zweiten DataItems folgenden
CODE
Code:
 
CustomerEntry.SETRANGE("job no.");
String := CustomerEntry.GETFILTER("job no.");
SETFILTER("job No.", '%1', "string");


Beim Compilieren kommt dann folgende Fehlermeldung:

"Die Variable ist kein Datensatz.'Variable.Feld'ist kein Datensatz."

Der Curser bleibt dann zwischen "CustomerEntry" und "." stehen.

Irgendetwas stimmt noch nicht.
Was mache ich falsch?

Gruss
Roland

7. Juli 2006 11:03

Du hast CustomerEntry als Variable vom Typ Code angelegt? Müsste das nicht eine Variable des Typs Record sein?

Dann ist der SETRANGE auf CustomerEntry aus meiner Sicht nicht korrekt. So wie du ihn definiert hast, wird der Filter gelöst, anstatt gesetzt, In der Variable String wird also nie etwas drin sein. Du musst die Filterkriterien mit angeben im SETRANGE-Befehl.

10. Juli 2006 08:49

Hallo Roger,

ich habe den SETRANGE jetzt korrigiert - und schon funktioniert's!!
Der Code sieht jetzt so aus:

Code:

CustomerEntry.SETRANGE("Job No.","Purchase Line"."Job No.");
String := CustomerEntry.GETFILTER("Job No.");
SETFILTER("Job No.", '%1', String);



Da ich aber zwei Filterkriterien eingeben kann (Projekt Nr. oder AB Nr.) hab ich die Codezeilen einfach drunter kopiert und entsprechend geändert.

Code:

CustomerEntry.SETRANGE("Zugehörige Verkaufsauftragsnr.","Purchase Line"."Zugehörige Verkaufsauftragsnr.");
String2 := CustomerEntry.GETFILTER("Zugehörige Verkaufsauftragsnr.");
SETFILTER("Zugehörige Verkaufsauftragsnr.", '%1', String2)




Leider taucht jetzt folgendes Problem auf, wenn die Variable STRING gefüllt wird und STRING2 leer bleibt (muss auch so sein entweder-oder) dann wird im zweiten DataItem nichts angezeigt. Ich habe mir die Variablen mit MESSAGE in beiden Codeblöcken anzeigen lassen und komischerweise ist sie im ersten wirklich leer (kein Zeichen wird angezeigt
und im zweiten werden diese Zeichen '' angezeigt. Folglich ist der Filter für's zweite DataItem nicht leer.
Auch mit einer IF Schleife <>'''' kann ich die SETFILTER zeile nicht umgehen.
Mache ich da noch etwas falsch?

Gruss Roland

10. Juli 2006 08:57

Hallo Roland

Wenn String2 leer ist (also '') dann erfolgt die Filterung auf Datensätze, welche im Feld "Zugehörige Verkaufsauftragsnr." keine Werte aufweisen. Das sind wahrscheinlich die wenigsten, oder ev. sogar keiner, also kommt auch kein Record.

Versuche folgendes:

Code:
CustomerEntry.SETRANGE("Zugehörige Verkaufsauftragsnr.","Purchase Line"."Zugehörige Verkaufsauftragsnr.");
String2 := CustomerEntry.GETFILTER("Zugehörige Verkaufsauftragsnr.");

IF String2 <> '' THEN
  SETFILTER("Zugehörige Verkaufsauftragsnr.", '%1', String2)


Vielleicht klappt's dann.

10. Juli 2006 09:37

Hallo Roger,

das mit der IF Schleife hab ich vorher schon versucht, geht auch nicht.
offensichtlich ist STRING2 ist nicht leer.
zum Test habe ich folgendes gemacht:

Code:
String2:='';
MESSAGE(Text003, String,String2);
CustomerEntry.SETRANGE("Zugehörige Verkaufsauftragsnr.","Purchase Line"."Zugehörige Verkaufsauftragsnr.");
String2 := CustomerEntry.GETFILTER("Zugehörige Verkaufsauftragsnr.");
MESSAGE(Text003, String,String2);
IF String2 <> ''THEN
  SETFILTER("Zugehörige Verkaufsauftragsnr.", '%1', String2)

Der Debugger zeigt dann folgendes auf:
zuerst ist String2 leer (Anzeige im Wert Feld): "" (2x Anführungszeichen [Shift] und [2])
wenn String2 mit dem GETFILTER gesetzt wird spingt der Wert von
"" auf "''" (Anführungszeichen, 2x Hochkomma, Anführungszeichen) um.

Die MESSAGE Kontrolle bestätigt dies auch.

Meiner Meinung nach wird in der Zeile :
String2 := CustomerEntry.GETFILTER("Zugehörige Verkaufsauftragsnr.");
der Wert doppelt leer '''' ausgegeben

10. Juli 2006 11:08

Auf welchem Trigger hast du denn deinen Code eingefügt?

10. Juli 2006 11:15

Beide CODE Blöcke im zweiten DataItem im Purchase Line Archive - OnPreDataItem()

Jeder Block für sich funktioniert ja

Gruss
Roland

10. Juli 2006 11:28

Im Moment habe ich keine Idee mehr, woran das noch liegen könnte.

Weiss vielleicht jemand anders von was?

10. Juli 2006 13:10

Das liegt daran, dass im Filterstring eben der Filter auf leeres Feld steht und eben kein leerer Filter.

Du mußt also abfangen:
character:=39 //um das Zeichen Hochkomma zu erhalten (variable typ Char)
leerfilterstring:=character + character;
if getfilter=leefilterstring then
setrange("zug. Verkaufsauftr.Nr") //filter entfernen
else
setfilter(hier deine Filter setzen)

10. Juli 2006 13:48

Hallo Michael,

jetzt gibts Probleme mit Typkonvertierung Text:=Integer in der Zeile
leerfilterstring:= character + character;

leerfilterstring = Text
character = Char

10. Juli 2006 15:04

FORMAT konvertiert CHAR nach TEXT ;

leerfilterstring:= Format(character) + Format(character)

10. Juli 2006 15:30

SUPER!!!
jetzt läuft's


DANKE EUCH ALLEN