[gelöst] Datumsfelder filtern

16. November 2006 17:02

Hallo,
ich habe das Problem, dass ich in der Tabelle Artikelpreise einen Betrag ausfiltern muss.
Da stehen aber Zeilen mit verschiedenen Startdatum drin:
Startdatum Enddatum Preis / Preiseinheit Preis / Einheit 01.01.2004 22,2 22,2 STÜCK STÜCK
01.01.2006 23,9 23,9 STÜCK STÜCK
01.08.2006 24,3 24,3 STÜCK STÜCK

Ich brauche jetzt den Preis ab dem neuesten Startdatum (also Zeile 3)in Bezug auf z.B. das Belegdatum.
Mir fällt kein Filterkreterium ein, wie ich das abgrenzen kann.
Hat dazu jemand ne Idee ???

Danke Max
Zuletzt geändert von Max am 20. November 2006 16:36, insgesamt 1-mal geändert.

16. November 2006 17:35

Mit einem Filter wird das nicht gehen, denke ich. Zumindest nicht bis zum Schluss.

Versuche folgendes:
Sortierung auf Artikelpreise setzen nach Datum
Artikelpreise filtern auf den gewünschten Artikel
Mit FIND('+') auf den letzten Datensatz springen und dann dort den Preis lesen

17. November 2006 01:40

Dann bekommt Max evtl einen Preis, der zum Belegdatum noch nicht gültig war.
da muss vor dem find(+) noch ein
Code:
Setrange(Startdatum,0D,Belegdatum);

rein, dann findet Navision den zum Belegdatum gültigen Preis.
Achja, und damit dieser Preis nicht vielleicht schon abgelaufen ist, muss noch
Code:
Setfilter(Enddatum,format(Belegdatum)+'..');

davor gesetzt werden.

17. November 2006 08:38

Guten Morgen,
das mit dem Findlast hatte ich auch schon im Gedanken,
aber da hat er mir nicht immer zuverlässig den richtigen Datensatz
geliefert ( ??? Warum auch immer ??? )
Werden es gleich mal mit den Ergänzungen probieren

Bis dann erst mal vielen Dank
Max

18. November 2006 00:38

Mit den folgenden sieben Zeilen Code solltest du immer das richtige Ergebnis erhalten:
Code:
Artikelpreis.SETCURRENTKEY("Artikelnr.",Startdatum,Enddatum,Einheit); // Optimale Sortierung wählen
Artikelpreis.SETRANGE("Artikelnr.",VerkZeile."Nr.");
Artikelpreis.SETRANGE(Startdatum,0D,VerkZeile.Belegdatum);            // Startdatum <= Belegdatum
Artikelpreis.SETFILTER(Enddatum,'%1|%2..',0D,VerkZeile.Belegdatum);   // Enddatum >= Belegdatum
Artikelpreis.SETFILTER(Einheit,'%1|%2',VerkZeile.Einheitencode,'');   // Einheitencode muss passen
IF Artikelpreis.FIND('+') THEN
  VerkZeile."VK-Preis" := Artikelpreis."VK-Preis";

18. November 2006 01:38

Timo Lässer hat geschrieben:
Code:
Artikelpreis.SETFILTER(Enddatum,'%1|%2..',0D,VerkZeile.Belegdatum);   // Enddatum >= Belegdatum

Richtiiiiech,
Das 0D im Enddatum hatte ich vergessen, das kann ja auch leer sein ...

18. November 2006 02:18

Ich habe in den letzten Wochen und Monaten so oft solche Filter selber anwenden müssen bzw. meinen Kollegen erklären müssen, dass ich es heute schon im Schlaf runterbeten kann ;-)

19. November 2006 23:39

Leute,

jetzt funzt es, ich bin gebeistert

Vielen Dank

Max