[Gelöst]Ausgabe letzte x Belege

25. Juni 2011 09:24

Hallo Beisammen,

ich stehe grad irgendwie auf dem Schlauch und komme nicht weiter:
ich benötige einen Report (NAV 5.01) über die geb. Rechnungszeilen, bei dem ich als Filterkriterium angeben kann: zeige mir alle Zeilen der letzten x Belege (nach entspr. Schlüssel) --> also dann z.B. alle Zeilen der letzten gebuchten 5 Belege, 12 Belege, etc. etc.

Wie bekomme ich diese Abfrage auf die Ausgabe der Zeilen der letzten x-Belege hin...?!?! :?:
Zuletzt geändert von Beaker am 25. Juni 2011 19:29, insgesamt 3-mal geändert.

Re: Ausgabe letzte x Belege

25. Juni 2011 10:05

MIt NEXT kann man auch rückwärts durch die Tabelle laufen.
Analog zu diesem Beispiel, statt dem ersten den letzten Datensatz greifen und dann x-Schritte rückwärts. Ab der dort vorhandenen Buchungsnummer werden dann die geb. Rechungszeilen gefiltert.

Re: Ausgabe letzte x Belege

25. Juni 2011 15:33

Hallo Kai,

vielen Dank erst mal für Deinen Tip, ich steh´ aber immer noch auf dem Schlauch... :-(
Wie muß ich denn hier den "NEXT"-Befehl aufbauen bzw. wo hänge ich denn die Beleganzahl X hinein..?!?
Ich hab´ hier mal so angefangen, ist aber nix (SIL --> Sales Invoice Line):

SIL.RESET;
IF SIL.FINDLAST THEN
REPEAT
MESSAGE(FORMAT(SIL."Document No."));
UNTIL SIL.NEXT(-1)=0;
MESSAGE('Ende: ' + FORMAT(SIL."Document No."));

So findet er mir doch den letzten SIL-Datensatz und rennt dann rückwärts, bis er keinen mehr findet...oder..?!?! Und wie sage ich ihm hier, er soll bitte nur X Datensätze zurückrennen und dann die Belegnr. ausgeben..?!?!
*GrübelGrübel*

Re: Ausgabe letzte x Belege

25. Juni 2011 15:54

doppelpost, sorry
Zuletzt geändert von Freestyler am 25. Juni 2011 15:57, insgesamt 1-mal geändert.

Re: Ausgabe letzte x Belege

25. Juni 2011 15:54

Beaker hat geschrieben:Hallo Kai,

vielen Dank erst mal für Deinen Tip, ich steh´ aber immer noch auf dem Schlauch... :-(
Wie muß ich denn hier den "NEXT"-Befehl aufbauen bzw. wo hänge ich denn die Beleganzahl X hinein..?!?
Ich hab´ hier mal so angefangen, ist aber nix (SIL --> Sales Invoice Line):

SIL.RESET;
IF SIL.FINDLAST THEN
REPEAT
MESSAGE(FORMAT(SIL."Document No."));
UNTIL SIL.NEXT(-1)=0;
MESSAGE('Ende: ' + FORMAT(SIL."Document No."));

So findet er mir doch den letzten SIL-Datensatz und rennt dann rückwärts, bis er keinen mehr findet...oder..?!?! Und wie sage ich ihm hier, er soll bitte nur X Datensätze zurückrennen und dann die Belegnr. ausgeben..?!?!
*GrübelGrübel*


Ähm, ich wollt grad ne fertige Lösung schreiben, aber dann hab ich gesehen, dass du NAV-Freiberufler bist.

Ein Programmierer sollte wissen, wie man REPEAT UNTIL und FOR NEXT Schleifen benützt und gegenseitig austauscht. Beide Konstrukte sind austauschbar.

In einer Hochsprache würde man für das Dekrementieren schreiben:

for (int i = Startwert, i > Abbruchbedingung, i--)
{ ...
tue Anweisung1; tue Anweisung2;
<=>
i = Startwert; //Startwert wäre das Ergebnis von FINDLAST letzte Zeilennr. im Record InvoicesSalesLines
do {
tue A1;
tue A2;
i = i - 1,
}
while (i <= Abbruchbedingung)

Die FOR-Schleife hab ich explizit aufgeführt, da sie sich gut eignet für Situationen in denen der Startwert und die Anzahl der Iterationen VORHER bekannt sind. Bei den anderen Schleifen wie REPEAT UNTIL (= DO WHILE) ist der Startwert, aber nicht die Anzahl der Iterationen bekannt. Je nach Situation ist mal die eine oder die andere Konstruktion schneller.
In NAV wird IIRC FOR mit NEXT zusammen verwendet um die Inkrementierung bzw. Dekrementierung zu definieren.
Zuletzt geändert von Freestyler am 26. Juni 2011 00:31, insgesamt 1-mal geändert.

Re: Ausgabe letzte x Belege

25. Juni 2011 19:02

Beaker hat geschrieben:Und wie sage ich ihm hier, er soll bitte nur X Datensätze zurückrennen und dann die Belegnr. ausgeben..?!?!

Du gibst dir die Antwort doch quasi selbst: da fehlt ein zweites Abbruchkriterium. ZB, wenn zum elften Mal eine andere Belegnummer gekommen ist ...

Re: Ausgabe letzte x Belege

25. Juni 2011 19:27

..ich sag´ ja, heute war der "Auf-dem-Schlauch-Steh-Tag"... :oops:

Ich hab´s jetzt mittlerweile hinbekommen...Dank´ Euch nochmal für die Tips...!!!