[Gelöst] Übersicht von Verkauften Artikeln (Stichtag)

13. April 2007 10:40

Hallo Leute,

ich bin neu in diesem Geschäft und habe auch nicht viel Erfahrung. Ich würde mich sehr freuen wenn ihr mir Helfen könntet.

Mein Problem:
Ich muss ein Report erstellen, dass die Artikel ausgibt, welche nach einem bestimmten Datum (z.b. 31.12.05) zum ERSTEN mal Verkauft wurden.

Ich habe ein Report erstellt mit dem DataItem "Artikel" und "Artikelposten". In den Einstellungen von "Artikelposten", habe ich in DataItemTableView ein filter auf Buchungsdatum >31.12.05 und Postenart "Verkauft" erstellt.

Ich weiß jetzt, dass es jetzt falsch ist!
Ich muss in dem C/AL Editor von dem DataItem "Artikel" Filtern und überprüfen, aber wie mache ich das genau.

Ich bedanke mich jetzt schon mal im Voraus.
Zuletzt geändert von st2000 am 14. April 2007 12:08, insgesamt 1-mal geändert.

13. April 2007 11:54

im OnAfterGetRecord von Item
den Datefilter auf ..31.12.05 setzen
Artikelposten Buchungsdatum auf Datefilter filtern
Buchungsart Verkauf
calcsums(Quantity) machen
Wenn >0 dann currreport.skip
Wenn 0 dann noch nicht verkauft also weiterprüfen
Datefilter auf 31.12.05..
calcsums(quantity)
Wenn =0 dann wieder skip (noch nie verkauft)
was jetzt noch dabei ist wurde nach dem Datum zum ersten mal verkauft.

13. April 2007 11:56

Hallo st2000@gmx.de,

vorab ein "Herzliches Wilkommen" hierim Forum.

Du kannst mit dem Propertie "DataItemLink" die DataItems (Tabellen) verküpfen.
Mit "DataItemTableView" kannst du einen Filter setzten.

****
Die Variante mit Artikel und Artikelpsoten meiner Meinung nach gut.
Ich würde folgenden Ablauf empfehlen.
Das DataItem "Artikel" holt sich den ersten Datensatz.
Dann werden ja alle "Artikelposten" verarbeitet (Es muss eine DataItemLink auf die Artikelnummer vorhanden sein!).
Sobald auf dem ONAfterGetRecord der erste Datensatz verabeitet wurde,
mit einem CurrReport.BREAK die Verarbeitung auf dem Artikelposten DataItem abbrechen.

Nun geht das ganz von vorne los, bis alle Artikel verarbeitet wurden.
Gruß Mikka

13. April 2007 12:06

Hallo,

Ich würde dies auch mit nur einem DataItem "Artikel" lösen, da du ja vermutlich keine Detail-Daten der Artikelposten benötigst (Obwohl es auch mit zwei DataItems lösbar wäre).

Du benötigst dann etwas Code. Ich würde es wie folgt lösen:

Globale Variable ArtikelPosten Record Artikelposten (Table32)

Im Trigger OnPreDataItem:
Code:
//passenden schlüssel setzten z. B.:
Artikelposten.SETCURRENTKEY("Entry Type", "Item No.", "Variant Code", "Drop Shipment", "Location Code", "Bin Code", "Posting Date");
Artikelposten.SETRANGE("Entry Type", Artikelposten."Entry Type"::Sale);
Artikelposten.SETFILTER(Quantity, '<>%1', 0);


Im Trigger OnAfterGetRecord:
Code:
Arikelposten.SETRANGE("Item No.", "No.");
//Prüfung ob vor dem 311205 schon verkauft wurde
Artikelposten.SETFILTER("Posting Date", '<%1', 311205D);
IF Artikelposten.FIND('-') THEN
  CurrReport.SKIP
ELSE BEGIN
  //Prüfung ob nach dem 311205 verkauft wurde
  Artikelposten.SETFILTER("Posting Date", '%1..', 311205D);
  IF NOT Artikelposten.FIND('-') THEN
    CurrReport.SKIP;
END;


Gruß
Frank

13. April 2007 14:00

Vielen Dank an alle für die schnelle Antwort und die Willkommensgrüße!! :-)

ich muss leider auch die Datensätze vom Artikelposten mit ausgeben.

könnt ihr mir bitte sagen was "Quantity" aussagt?
Wie muss ich dieses als Varialbe anlegen?

@Frank: kann ich den gesamten Code auch im Trigger "OnAfterGetRecord" schreiben?


Übriegens ich arbeite mit dem 3.7 Version.

nochmal DANKE!

13. April 2007 14:40

Hallo,

Quantity ist das Feld Menge des Artikelpostens. Verkaufsposten kann es auch mit Quantity=0 und dafür "Invoiced Quantity"<>0 geben. Dies ist der Fall, wenn eine nachträgliche Berechnung eines Verkaufs existiert. Daher habe ich auf Quantity <> 0 gefiltert um die Lieferungen zu finden. Die Variable musst du nicht extra anlegen.

Du kannst den gesamten Code auch in OnAfterGetRecord schreiben, dann werden diese Zeilen nur bei jedem Artikel neu ausgeführt, obwohl dies gar nicht notwendig ist, weil es einmalig gesetzt so bleiben kann.

Wenn du die Artikelposten mit ausgeben musst, brauchst du doch ein zweites Dataitem mit Artikelposten. Diese muss dann eingerückt sein und über DataItemLink mit dem Artikel verknüpft sein.

Den Code in OnAfterGetRecord kannst Du dann wie folgt verändern, wenn du im DataItemTableView der Artikelposten den Filter auf Posting Date eingibst und in Artikel das Propertie PrintOnlyIfDetail auf Ja setzt:

Code:
Arikelposten.SETRANGE("Item No.", "No.");
//Prüfung ob vor dem 311205 schon verkauft wurde
//Die folgende Zeile könnte nun auch in OnPreDataItem gesetzt werden
Artikelposten.SETFILTER("Posting Date", '<%1', 311205D);
IF Artikelposten.FIND('-') THEN
  CurrReport.SKIP ;

13. April 2007 16:44

ES Funkt...

VIELEN DANK ALLE!!!!!

und besonders an Frank für die Ausführliche Beschreibung.