[Gelöst] Datum des letzten Wareneingangs

26. August 2008 15:15

Ich möchte in einem Report das Datum des letzten Wareneingangs ausgeben lassen. Hierzu habe ich eine Funktion erstellt mit Record auf die Tabelle "Item Ledger Entry".
Im grunde funktioniert das auch alles, nur die Sortierung in der Tabelle durch die Schlüssel ergeben eine falsche Ausgabe. Das "Posting Date" wird leider erst zum Schluss sortiert.
Da ich mit FINDLAST und EXIT versuche das Datum auszugeben, erhalte ich dann natürlich ein falsches.
Es ist mir auch anscheinend nich möglich gewesen da einen neuen Schlüssel hinzuzufügen.

Hat man eine andere Möglichkeit an das letzte Datum ran zu kommen?

Würde mich mal wieder über ein paar Tips freuen, danke schon mal :)
Zuletzt geändert von 3TageWach am 28. August 2008 13:24, insgesamt 1-mal geändert.

Re: Datum des letzten Wareneingangs

26. August 2008 15:38

3TageWach hat geschrieben:Es ist mir auch anscheinend nich möglich gewesen da einen neuen Schlüssel hinzuzufügen.

Inwiefern? Was hast du wie und wo versucht, einzugeben?

Re: Datum des letzten Wareneingangs

26. August 2008 16:13

Ich habe versucht einen neuen Schlüssel in der Tabelle "Item Ledger Entry" hinzuzufügen.
Und zwar brauche ich ja das Buchungsdatum möglichst als erstes sortiert, aber das erste Feld im Schlüssel muss ja einzigartig sein, also hab ich das so versucht: Entry No.,Posting Date

Wenn ich die Tabelle Speichern möchte, gibt er mir einen Fehler:

Der Schlüssel existiert bereits.

Hinweis: Die Felder des Primärschlüssels werden an alle Sekundärschlüssel angehängt, damit sie eindeutig werden.

Tabelle: Item Ledger Entry
Schlüsselfelder: Entry No.,Posting Date


Hier mal eine Auflistung der bisherigen Schlüssel:
1. Entry No.
2. Item No.,Entry Type,Variant Code,Drop Shipment,Location Code,Posting Date
3. Source Type,Source No.,Item No.,Variant Code,Posting Date
4. Item No.,Open,Variant Code,Positive,Location Code,Posting Date,Expiration Date,Lot No.,Serial No.
5. Country Code,Entry Type,Posting Date
6. Document No.,Posting Date
7. Prod. Order No.,Prod. Order Line No.,Entry Type,Prod. Order Comp. Line No.
8. Item No.,Applied Entry to Adjust
9. Item No.,Positive,Location Code,Variant Code
10. Item No.,Open,Entry Type,Location Code,Reason Location Code
11. Company Code,Entry No.
12. Company Code,Source Type,Source No.,Item No.,Variant Code,Posting Date
13. Item No.,Company Code,Open,Variant Code,Positive,Location Code,Posting Date,Expiration Date,Lot No.,Serial No.
14. Prod. Order No.,Prod. Order Line No.,Company Code,Entry Type,Prod. Order Comp. Line No.
15. IC Journal Nr.,Company Code
16. Item No.,Variant Code,Location Code
17. Serial No.
18. Document No.,Document Type,Document Line No.

zwischendurch sind noch 3-4 Schlüssel die aber nicht auf "enable" stehen.

// ah verstehe, der Primärschlüssel ist "Entry No.", daher der Fehler das er schon existiert. Habe jetzt mal einen Schlüssel nur mit "Posting Date" hinzugefügt... ma testen obs geht :)

// irgendwie scheint Navision beim speichern der Änderung zu hängen...

Re: Datum des letzten Wareneingangs

26. August 2008 17:16

3TageWach hat geschrieben:Ich habe versucht einen neuen Schlüssel in der Tabelle "Item Ledger Entry" hinzuzufügen.
Und zwar brauche ich ja das Buchungsdatum möglichst als erstes sortiert, aber das erste Feld im Schlüssel muss ja einzigartig sein, also hab ich das so versucht: Entry No.,Posting Date


Nein, der Navision Standard fügt (unsichtbar) an jeden Schlüssel die Primärschlüsselfelder hinten an, sodass die Datensätze immer eindeutig geordnet sind.
Vorne, wie du es versucht hast, würde es ja gar nichts bringen, da dann deine Sortierung nach Posting Date verloren gegangen wäre.
Lege einfach folgenden Schlüssel an: Posting Date.

Re: Datum des letzten Wareneingangs

26. August 2008 17:17

Wenn du keine Lust auf einen neuen Schlüssel hast, kannst du dir auch anders behelfen. Zuerst suchst du dir einen Schlüssel, der möglichst viel deiner Kriterien enthält, also hier Postenart Einkauf, und das Buchungsdatum. Dann suchst du die Tage rückwärts ab dem Arbeitsdatum durch, ob sich da ein oder mehrere Posten finden lassen. In deinem Fall ist also der Schlüssel "Country Code","Entry Type","Posting Date" schon super.
Code:
ItemLedgerEntry.SetCurrentKey("Country Code","Entry Type","Posting Date");
ItemLedgerEntry.SetRange("Entry Type",ItemLedgerEntry."Entry Type"::Purchase);
repeat
  FilterDate:=calcdate(strsubstno('<-%1D>',i),workdate);
  ItemLedgerEntry.SetRange("Posting Date",FilterDate);
  if ItemLedgerEntry.find('-') then
    RecFound:=true;
  i+=1;
until (RecFound or (FilterDate=calcdate('<-1Y>',DMY2DATE(1,1))));
if RecFound then
  message('%1',ItemLedgerEntry."Posting Date");


In dem Beispiel sucht er maximal bis zum 01.01. des Vorjahres. Das kannst du natürlich beliebig verkürzen.

Re: Datum des letzten Wareneingangs

28. August 2008 11:53

Ein hilfreicher Ansatz, leider schmeißt er mir damit aber das heutige Datum aus, anstatt das letzte Wareneingangs-Datum.

Einen neuen Schlüssel der Item Ledger Entry Tabelle hinzuzufügen ist ja nicht ganz problemlos möglich, da dort auch extrem viel dran hängt, daher finde ich die vorgeschlagene Workaround-Methode etwas ansprechender :)

Re: Datum des letzten Wareneingangs

28. August 2008 12:00

3TageWach hat geschrieben:Ein hilfreicher Ansatz, leider schmeißt er mir damit aber das heutige Datum aus, anstatt das letzte Wareneingangs-Datum.

Argh, kein Wunder. Ich hatte dich scheinbar falsch verstanden: Du möchtest du also nicht das höchste Datum wissen, sondern einfach das Datum des zuletzt erzeugten Datensatzes, Buchungsdatum egal?

Dann brauchst du keinen neuen Schlüssel, sondern diesen Code:
Code:
ItemLedgEntry.SETCURRENTKEY("Entry No.");
ItemLedgEntry.FINDLAST;
LetztesDatum := ItemLedgEntry."Posting Date";

Re: Datum des letzten Wareneingangs

28. August 2008 12:07

Also bei mir funktioniert mein Code. Allerdings kriegt man das aktuelle Tagesdatum, wenn heute der letzte WE war, logisch. So hatte ich das auch verstanden: du suchst das Datum des letzten Wareneingangs, egal was da geliefert wurde (?)

Ich möchte in einem Report das Datum des letzten Wareneingangs ausgeben lassen. Hierzu habe ich eine Funktion erstellt mit Record auf die Tabelle "Item Ledger Entry".

Re: Datum des letzten Wareneingangs

28. August 2008 13:23

Natalie hat geschrieben:
3TageWach hat geschrieben:Ein hilfreicher Ansatz, leider schmeißt er mir damit aber das heutige Datum aus, anstatt das letzte Wareneingangs-Datum.

Argh, kein Wunder. Ich hatte dich scheinbar falsch verstanden: Du möchtest du also nicht das höchste Datum wissen, sondern einfach das Datum des zuletzt erzeugten Datensatzes, Buchungsdatum egal?

Dann brauchst du keinen neuen Schlüssel, sondern diesen Code:
Code:
ItemLedgEntry.SETCURRENTKEY("Entry No.");
ItemLedgEntry.FINDLAST;
LetztesDatum := ItemLedgEntry."Posting Date";


Super Natalie, das wars :D

Ich hab wohl einfach zu kompliziert gedacht, manchmal ist es doch ganz einfach *g