Report "Artikel ohne Zugang seit..."

5. Januar 2010 15:49

Hallo an Alle!
Ich bin der Neue. Mein erster Beitrag hier im Forum :wink:

Wir haben NAV Anfang Juni 2009 eingeführt. Dementsprechend ist dies der erste Jahreswechsel und die erste Inventur läuft gerade.

Jetzt zu meinem Problem: Ich soll einen Report entwerfen, der mir alle im Lager liegenden Artikel anzeigt, die seit einem einzugebenden Datum keinen Zugang mehr hatten. (Bei uns heisst sie netterweise "Pennerliste" :-P ). Da bei einer Datenübernahme aus dem Altsystem die Bewegungsdaten generell nicht übernommen wurden, haben wir uns zumindest das letzte Zugangsdatum von jedem Artikel über einen Dataport einspielen lassen, damit wir auch mit diesem Datum arbeiten können.

Da ich mich (noch) nicht so gut in NAV auskenne, habe ich erstmal angefangen mir einen Report über die Tabelle "Item" zu basteln und hier nur die Artikel mit Bestand anzeigen lassen. Danach habe ich dann einen Record "ItemLedger" zur Tabelle "Item Ledger Entry" erstellt, der mir zu jedem Artikel den letzten Posten anzeigen lassen soll. Dies erstmal nur als Vorbereitung, damit ich sehen kann, welche Zeilen er mir überhaupt ausgibt. Hier ist aber auch schon mein Problem. Ich bekomme eine Liste und unter Anderem wird auch das Feld ItemLedger."Posting Date" angezeigt. Wird hier in einer Zeile nichts ermittelt, so scheint es, dass hier der Wert aus der vorhergehenden Zeile nimmt. Wie kann ich das Abfangen? Ich habe es schon mit div. IF-Abfragen versucht, bin aber an der Typkonvertierung Date -> Text o.ä. gescheitert. Hier erstmal mein Code, um die Daten zu bekommen:

Code:
ItemLedger.SETCURRENTKEY(ItemLedger."Item No.","Posting Date");
ItemLedger.SETFILTER("Item No.","No.");
ItemLedger.SETFILTER("Entry Type", 'Einkauf|Istmeldung');
ItemLedger.SETFILTER(Positive, 'JA');
ItemLedger.SETFILTER("Document No.", '<>ALTDATEN'); // <-- Sonst würde hier das Datum der Datenübertragung aus dem Altsystem angezeigt werden.

IF ItemLedger.FINDLAST THEN;


Kann mir Jemand erklären, wo und wie ich hier ansetzten kann, damit immer nur die realen Daten angezeigt werden?
Falls ich mich unklar ausgedrückt haben sollt, bitte ich vorab schon mal um Verzeihung, aber seine eigenen Gedanken und Ideen in Text zu verfassen ist doch schwieriger als ich gedacht habe :roll:
Danke,
Arne

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 16:12

Hm. Von den Werten aus einem vorherigen Datensatz dürfte aber nichts übrig bleiben (der Code ist zwar nicht grad schön, sollte aber funktionieren :wink: ). Es sei denn, dass du die Werte aus dem ItemLedger-Record an Variablen übergibst und diese dann in den SourceExpressions der Felder stehen, die in dem Report angedruckt werden.

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 16:40

Erstmal danke für die schnelle Antwort.
Ich bin immer für Verbesserungsvorschläge des Codes offen, falls es was hübscheres gibt.
Für die ItemLedger-Record-Felder habe ich keine zusätzlichen Variablen deklariert. Ich habe neue Felder eingefügt und dann bin ich über die SourceExpr und das C/AL Symbol Menu gegangen und habe mir auf der linken Seite ItemLedger gesucht. Danach brauchte ich ja nur im rechten Bereich das "Posting Date" auszuwählen...

Gruss
Arne

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 16:46

Willkommen bei uns!

Ich antworte erst mal direkt auf deine eigentliche Frage und auf Basis deines Quelltextes:

Walter hat geschrieben:Wird hier in einer Zeile nichts ermittelt, so scheint es, dass hier der Wert aus der vorhergehenden Zeile nimmt. Wie kann ich das Abfangen?

Ganz einfach ;-)

Code:
ItemLedger.SETCURRENTKEY(ItemLedger."Item No.","Posting Date");
ItemLedger.SETFILTER("Item No.","No.");
ItemLedger.SETFILTER("Entry Type", 'Einkauf|Istmeldung');
ItemLedger.SETFILTER(Positive, 'JA');
ItemLedger.SETFILTER("Document No.", '<>ALTDATEN'); // <-- Sonst würde hier das Datum der Datenübertragung aus dem Altsystem angezeigt werden.

IF NOT ItemLedger.FINDLAST THEN
  CLEAR(ItemLedger);


CLEAR leert alle Felder des Records.

Wobei es dich noch immer nicht zum Ziel führen wird - aber ich bin gespannt, welchen Ansatz du als nächstes verfolgst :-)

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 16:51

Wo es geht, sollte man lieber SetRange anstelle eines SetFilter nehmen.

Und versuch doch mal ein
Code:
if ItemLedger.findlast then CurrReport.Skip;

anstelle von
Code:
if ItemLedger.findlast then;

,dann zeigt er in der Liste nur Artikel, bei denen kein gesuchter Artikelposten existiert.

Fehlt nur noch der Filter auf "Posting Date".

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 16:57

Ts ts, musste McClane wieder alles vorweg nehmen :roll: , dabei fand ich den Ansatz für einen relativen NAV-Neuling so schön ....

Re: Report "Artikel ohne Zugang seit..."

5. Januar 2010 17:23

Eh ich hab doch fast das Gleiche geschrieben wie du :cry:

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 09:50

Guten Morgen und danke für die Tipps. Sie haben mir schon etwas weitergeholfen.

Ich habe jetzt erstmal den Weg von Natalie gewählt, da es mir sinnvoller erschien, weil er damit ja erstmal alle Artikel mit Bestand auflistet und mir die korrekten Buchungsdati (Datumse? Daten? :lol: ) zeigt.
Natalie hat geschrieben:
Code:
IF NOT ItemLedger.FINDLAST THEN
  CLEAR(ItemLedger);



Der Hinweis von McClane wäre sicherlich gut gewesen, wenn ich nicht noch ein weiteres Feld für ein Buchungsdatum (das aus dem Altsystem) berücksichtigen müsste.
McClane hat geschrieben:
Code:
if ItemLedger.findlast then CurrReport.Skip;



Natalie hat geschrieben:Wobei es dich noch immer nicht zum Ziel führen wird - aber ich bin gespannt, welchen Ansatz du als nächstes verfolgst

Tja, ich habe jetzt ein Feld "SeitDatum" in die RequestForm eingebaut, über das ich eigentlich "nur" noch ein Datum abfragen wollte. Damit wollte ich checken, ob eines der beiden Buchungsdati (NAV oder Altsystem) kleiner ist, als das angegebene. Aber irgendwie mache ich da noch einen Denkfehler, da ich irgendwie den Dreh nicht raushabe, wie ich diese Abfrage gestalte. Da wäre ein Hinweis von Euch nochmal sehr nett... :roll:

Gruß
Arne

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 10:11

Müssten denn nicht beide Datumsangaben entweder leer oder kleiner als das bestimmte Datum sein, wenn du wissen willst, ob ab dannunddann kein Zugang mehr war?

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 10:40

McClane hat geschrieben:Müssten denn nicht beide Datumsangaben entweder leer oder kleiner als das bestimmte Datum sein, wenn du wissen willst, ob ab dannunddann kein Zugang mehr war?


Du hast recht, aber wie frage ich ein leeres Datumsfeld korrekt ab? Mit IF Datum=' ' THEN funktioniert es leider nicht.
Die ItemLedger."Posting Date"-Felder, die über Natalies Vorschlag geleert wurden, könnte ich (wenn ich wüßte wie :oops: ) dem Feld Item."Last Pos. Adjust. Date (Infor)" (aus der Altdatenübernahme) in dem Fall gleich setzen. Aber es gibt noch den Fall, in dem beide Felder leer sind, aber trotzdem Bestand da ist. Ich denke dies sind Sonderfälle, die bei einer alten Datenübernahme nicht bedacht wurden, hier aber leider mit auftauchen :-(

Dies wäre mein (vielleicht unschöner) Code für die Abfrage bisher, ohne dass ich die Felder gleich setze.
Code:
CurrReport.SHOWOUTPUT((Inventory <> 0) AND (SeitDatum < ItemLedger."Posting Date") AND (SeitDatum < Item."Last Pos. Adjust. Date (Infor)"));


Gruß
Arne

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 11:21

Das leere Datum ist 0D. Und der Code in dem CurrReport.ShowOutput( ... ) lässt sich so ähnlich super mit einem Skip verbinden.

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 15:21

McClane hat geschrieben:Das leere Datum ist 0D. Und der Code in dem CurrReport.ShowOutput( ... ) lässt sich so ähnlich super mit einem Skip verbinden.


OK, 0D für das Datum, damit lässt sich schon was machen, danke! Ich bin immer noch im C/AL Editor des DataItems und habe jetzt mal versucht es jetzt so umzusetzen.

Code:
ItemLedger.SETCURRENTKEY(ItemLedger."Item No.","Posting Date");
ItemLedger.SETFILTER("Item No.","No.");
ItemLedger.SETFILTER("Entry Type", 'Einkauf|Istmeldung');
ItemLedger.SETFILTER(Positive, 'JA');
ItemLedger.SETFILTER("Document No.", '<>ALTDATEN');

IF ItemLedger.FINDLAST THEN;

IF NOT (((ItemLedger."Posting Date" = 0D) AND (Item."Last Pos. Adjust. Date (Infor)" < SeitDatum)) OR
    ((ItemLedger."Posting Date" < SeitDatum) AND (Item."Last Pos. Adjust. Date (Infor)" < SeitDatum)))
 THEN CurrReport.SKIP;


Es kommt aber noch nicht das gewünschte Ergebnis heraus. Es sollen ja alle Artikel mit Bestand angezeigt werden, die seit [SeitDatum] keinen Zugang hatten. Ich lasse mir aber ItemLedger."Posting Date" und das Item."Last Pos. Adjust. Date (Infor)" anzeigen. Hier werden aber Dati angezeigt, die nicht der o.g. IF-Clause entsprechen. Wo liegt mein denkfehler?

Hier mal die ersten Zeilen, bei denen die Variable SeitDatum den Wert 01.01.2006 hatte:
Code:
Nr.  Artikelnr. Belegnr.Postenart Herkunft  Buchungsdatum     PositivWert       ME
                                            NAV      Infor
1    Artikel1           0         0                  30.06.08 Nein   848,0856   1 ST
2    Artikel2   282122  6         3         29.10.09 28.10.02 Ja     138,18     1 ST
3    Artikel3   282122  6         3         29.10.09 26.02.04 Ja     138,18     5 ST
4    Artikel4   GL04649 0         2         09.12.09 23.02.09 Ja     56,4475    6 ST
5    Artikel5   GL04649 0         2         09.12.09 25.10.06 Ja     7,92614   -9 ST
6    Artikel6   GL01563 0         2         24.08.09 02.03.07 Ja     35,7143    0,3 M2
7    Artikel7   GL01563 0         2         24.08.09 24.07.06 Ja     2,67775    10 M
8    Artikel8   GL01563 0         2         24.08.09 18.06.04 Ja     68,50756   4 ST
9    Artikel9   GL03880 0         2         10.11.09 12.01.09 Ja     102,40     1 ST

Re: Report "Artikel ohne Zugang seit..."

6. Januar 2010 16:42

Da könnte sich der ursprüngliche Fehler wieder eingeschlichen haben:
Code:
IF ItemLedger.FINDLAST THEN;

Auf diese Art wird der zuletzt gefundene ItemLedgerEntry behalten, falls das findlast nichts ergibt. Daher könnten dann die falschen Einträge in der Liste rühren. Achja: ein Teil der if-Abfrage ist unnötig, da auch ein leeres Datum kleiner als der 010106 ist.

Re: Report "Artikel ohne Zugang seit..."

14. Januar 2010 11:46

Leider wurde der Report schneller benötigt, als ich durch die Problematik durchgeblickt habe, daher mussten wir unser Systemhaus damit beauftragen.

Trotzdem Danke für die Hilfe!

Gruß
Arne