[Gelöst] Report mit Item Ledger Entry

7. Januar 2008 14:46

Ich hab eine Aufgabe bekommen die Heute fertig werden muss. Da ist aber seid ewigkeiten keinen richtigen Report mehr erstellt habe, häng ich grad ein wenig.

Es soll ein Report geschrieben werden der alle Kunden, die Menge und die Lieferscheinnummer ausdruckt zu einem Artikel wenn dessen Chargennummer ausgewählt wurde.

In der Item Ledger Entry Tabelle hab ich so gut wie alle Daten die ich brauche. Die Chargennummer, die Artikelnummer, die Kundennummer des Kunden der den Artikel bekommen hat, die Menge und auch die Lieferscheinnummer.

Nun möchte ich natürlich nicht nur die Kundennummer sondern auch den Namen und die Adressdaten ausgegeben haben.
Und die Artikelbeschreibung des Artikels (diese steht wiederrum in der Tabelle Item).

Wie stell ich das jetzt am dümmsten an?

Ich habe jetzt einen Report mit 2 Data Items erstellt

Item Ledger Entry
Customer

Ich habe zur Zeit 3 Sections:

Item Ledger Entry Header
Beinhaltet die Chargennummer, Artikelnummer + Beschreibung und die Überschriften für Debitor, Adresse, Menge und Lieferschein.

Item Ledger Entry Body
Ist zur Zeit leer

Customer Body
Beinhaltet die Kundennummer, Namen, Adresse, Menge und Lieferscheinnummer.

So weit zeigt er auch mehr oder weniger alles richtig an. Aber er zeigt auch falsche Sachen an. Zum Beispiel hab ich versucht einen Filter zu setzen das er mir nur alle Zeilen anzeigt mit Entry Type = Verkauf.
Er zeigt aber alle an, "tarnt" die Einkäufe aber als Verkäufe.
Diese getarnten Einkäufe zeigen dann natürlich auch noch total falsche "Kundendaten" an.

Kann mir wer auf die Sprünge helfen? Irgendwie hab ich Heute wieder ein Knoten im Hirn.
Zuletzt geändert von Heike Bennerscheid am 7. Januar 2008 16:44, insgesamt 1-mal geändert.

7. Januar 2008 15:22

Hallo Heike,

ich würde nur das DataItem Item Ledger Entry anlegen. Zusätzlich noch die beiden globalen Record-Variablen Item und Customer.

Im OnAfterGetRecord würde ich dann folgenden C/AL-Code hinterlegen:

Code:
CLEAR(Item);
CLEAR(Customer);

IF Item.GET("Item No.") THEN ;

IF "Entry Type"="Entry Type"::Sale THEN
 IF Customer.GET("Source No.") THEN ;


Über die beiden Variablen Item und Customer kannst du dann in den Sections über TextBoxen die Artikel- und Debitordaten darstellen.

Gruß, Marc

7. Januar 2008 15:26

Anstelle des Customer würde ich Sales Shpt. Header lesen, da sich ggf. Daten im Customer geändert haben könnten.

7. Januar 2008 15:31

Danke Mark.

So sieht das schon viel anders aus. Ich hab warscheinlich wieder zu kompliziert gedacht.

Aber irgendwie scheint er nicht auf den Code

Code:
IF "Entry Type"="Entry Type"::Sale THEN


anzuspringen. Er gibt mir wieder die Einkäufe raus (diesmal aber nicht getarnt).

7. Januar 2008 15:38

Wie sieht den der gesamte Filter auf ItemLedgerEntry aus in z.B. den DataItemProperties?

7. Januar 2008 15:40

DataItemTable ist Item Ledger Entry.. der Rest ist <Undefined>.

Reicht die Filtersetzung im OnAfterGetReccord Trigger nicht?

7. Januar 2008 15:42

Reicht die Filtersetzung im OnAfterGetReccord Trigger nicht?


Warum setzt Du dort den Filter auf ItemLedgerEntry und nicht im OnPreDataItem?

7. Januar 2008 15:48

Klingt zwar jetzt doof aber:

Weil Mark es mir so vorgeschlagen hat :oops:

Aber im OnPreDataItem Trigger erzielt der Filter auf den Entry Type genau den gleichen Effekt.. nämlich gar keinen. Sprich er listet auch wieder die Einkäufe auf.

7. Januar 2008 15:53

IF "Entry Type"="Entry Type"::Sale THEN


Das ist aber kein Filter.
Code:
ItemLedgerEntry.SETRANGE("Entry Type",ItemLedgerEntry."Entry Type"::Sale)
im OnPreDataItem setzt einen Feldfilter.

7. Januar 2008 16:04

@Heike,
Mark hat diese If Abfrage nur eingebaut, damit du keinen Laufzeitfehler bekommst wenn du bei einem Einkaufsvorgang den Customer suchst. ;-)
Dieser wird dadurch nur gesucht, wenn es ein VK-Vorgang war.

Das hat aber nichts mit dem Filtern zu tun, so wie du das möchtest.
Dazu musst du
setrange("entry type", "entry type"::sales)
in den OnPreDataItem schreiben.


Arrrghhh! MrBurns hat seinem Namen alle Ehre gemacht und war mit einem BurnOut schneller als ich ;-)

7. Januar 2008 16:44

*mit Hand gegen Kopf klatsch* Oh man. Ihr habt natürlich recht. Da stand ich echt auf der Leitung :oops:

Mit dem Filter klappt es dann natürlich auch.

Ich zitiere Garfield: Ich hasse Montage :wink: