Problem mit GETRANGEMIN/GETRANGEMAX

6. Februar 2007 10:17

Hallo zusammen,

ich hab hier mal wieder ein kleines Problem. Wir haben hier eine Form, die eine Auswertung der Kreditorenposten im Bezug auf verschiedene Filter vornimmt. Unter anderem ist es auch möglich, die Posten in bestimmte Zeiträumen anzuzeigen (Tag, Woche, Monat, Quartal, Jahr). Das funktioniert alles wunderbar, bis auf die Anzeige pro Jahr, hier sind 2 Zeilen eingefügt, die das erste und letzte Buchungsdatum der Artikelposten abrufen:

Code:
Datum1 := "Item Ledger Entry".GETRANGEMIN("Posting Date");
Datum2 := "Item Ledger Entry".GETRANGEMAX("Posting Date");


Ich denke es hängt definitiv mit diesen beiden Zeilen zusammen, weiß jemand wie man diese Befehle einfach ersetzen kann?

Danke schonmal

Gruß
Alez
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

6. Februar 2007 10:28

Nun, aus der Fehlermeldung kann man schließen, daß hier überhaupt kein Filter auf "Posting Date" gesetzt wurde, daher greifen GETRANGEMIN und GETRANGEMAX ins Leere ...
Wie wird der Filer "Pro Jahr" denn gesetzt?

Re: Problem mit GETRANGEMIN/GETRANGEMAX

6. Februar 2007 10:44

Hallo Alez,
Alez hat geschrieben:[...] hier sind 2 Zeilen eingefügt, die das erste und letzte Buchungsdatum der Artikelposten abrufen:

Code:
Datum1 := "Item Ledger Entry".GETRANGEMIN("Posting Date");
Datum2 := "Item Ledger Entry".GETRANGEMAX("Posting Date");



Ich glaube, du verwechselst da was,
Getrangemin und getrangemax holen nicht etwa den kleinsten bzw größten Wert in vorhandenen Datensätzen, sondern den kleinsten bzw größten Wert eines gesetzten Filters.
Wie Stryk schon sagte läuft dieser Befehl ins leere, wenn kein Filter gesetzt ist und zeigt Deine Fehlermeldung.

6. Februar 2007 12:44

Hallo zusammen,

danke erstmal für die Antworten.

Welche Werte GETRANGEMIN/MAX holt war mit schon bewusst, ich hatte das hier wohl etwas missverständlich ausgedrückt :wink:
Das der Befehl ins Lerre läuft hatte ich ebenfalls schon vermutet, allerdings ist diese Form (übrigens eine Matrixform) ziemlich komplex aufgebaut, ich bin noch nicht ganz durchgestiegen wo was wie gemacht wird. Deswegen war meine Frage eigentlich auch, ob man diese beiden Befehle durch andere ersetzen kann, dass würde mir ersparen, den kompletten Code verstehen zu müssen :roll:

Der Datumsfilter generell wird über 2 Variablen (Anfang und Ende) gesetzt. Die verschiedenen Ansichten (pro Jahr, Quartal, usw.) werden über Optionfelder ausgewählt.
Was ich jetzt noch gefunden habe ist dieser Befehl, hier wird nochmal ein Filter auf die Artikelposten gesetzt:
Code:
"Item Ledger Entry".SETFILTER("Posting Date",'%1..%2',CurrForm.Matrix.MatrixRec."Period Start",CurrForm.Matrix.MatrixRec."Period End");

Das müsste doch eigentlich als Filter ausreichen, oder?

Hoffe ihr könnt mir dahingehend helfen. Ansonsten hoffe ich dass ich in nächster Zeit mal Ruhe habe um mir das anzuschauen, dann kann ich euch auch weitere Informationen zukommen lassen.

Gruß
Alez

6. Februar 2007 14:04

Vielleicht kannst Du ja prüfen, ob der Filter wirklich "ankommt", z.B.

Code:
IF "Item Ledger Entry".GETFILTER("Posting Date") THEN BEGIN
  Datum1 := "Item Ledger Entry".GETRANGEMIN("Posting Date");
  Datum2 := "Item Ledger Entry".GETRANGEMAX("Posting Date");
END ELSE BEGIN  // Nur'n Vorschlag
  Datum1 := CALCDATE('<-CY>', TODAY);
  Datum2 := CALCDATE('<+CY>', TODAY);
END;

6. Februar 2007 18:19

Hallo Jörg,

damit würde ich zumindest die Fehlermeldung abfangen. Aber mir ist heute noch was anderes aufgefallen und zwar hat ein Mitarbeiter unseres NSCs Mitte Dezember einen großen Teil der Prozedur auskommentiert, in dem unter anderem die von mir erwähnte Zeile war, dadurch wird der Filter natürlich nicht gesetzt. Ich muss jetzt erst mal nachvollziehen, warum das Ganze vorgenommen wurde und melde mich dann nochmal.
Das ist teilweise echt bescheiden, wenn man mehrere Mandante auf einer Datenbank laufen hat, weil dann immer wieder Anpassungen vorgenommen werden, die nicht wirklich für alle Mandanten ohne Nebenwirkungne sind :-(

Ich meld mich nochmal wenn ich näheres dazu weiß

Gruß
Alez

6. Februar 2007 19:37

Alez hat geschrieben:[...] Ich muss jetzt erst mal nachvollziehen, warum das Ganze vorgenommen wurde und melde mich dann nochmal.

Wenn der Programmierer die Auskommentierung nicht ala "QuickAndDirty" vorgenommen hat, steht der Änderungsgrund ganz oben im C/AL-Code.

Gruß, Marc

7. Februar 2007 11:23

Marc Teuber hat geschrieben:Wenn der Programmierer die Auskommentierung nicht ala "QuickAndDirty" vorgenommen hat, steht der Änderungsgrund ganz oben im C/AL-Code.

Gruß, Marc


Ja, wenn es dokumentiert wurde steht es da :wink: :-(

Gruß
Alez