[Gelöst] Excel-Report , CC DB 4.0 / NATIVE

24. Mai 2011 15:32

Hallo zusammen,

ich habe hier eine 2009er Classic / NATIVE installiert und versuche einen Excel-Report zu schreiben.
Als Grundlage habe ich http://www.navision24.de/tutorials/echte-excel-tabellen-erzeugen.html genommen und unseren Anforderungen angepasst.
Leisten soll der Report folgendes:
Ausgabe der offenen Verkaufsaufträge mit Angabe der "Outstanding Quantity" und des Kundennamens.
( Document No. | Shipment Date | Location Code | Customer Name | Outstanding Quantity )
Als DataItems habe ich:
Customer
Sales Line
Als DataItem Link bei Sales Line:
Code:
Sell-to Customer No.=FIELD(No.)


Der C/AL Code im DataItem Sales Line sieht wie folgt aus:

Code:
--Sales Line - OnPreDataItem() --
CustName := Customer.Name;
ExcelBuffer.DELETEALL;
EnterCell(1, 1, FIELDCAPTION("Document No."), '', TRUE, FALSE, FALSE);
EnterCell(1, 2, FIELDCAPTION("Shipment Date"), '', TRUE, FALSE, FALSE);
EnterCell(1, 3, FIELDCAPTION("Location Code"), '', TRUE, FALSE, FALSE);
EnterCell(1, 4, FIELDCAPTION("Sell-to Customer No."), '', TRUE, FALSE, FALSE);
EnterCell(1, 5, FIELDCAPTION("Outstanding Quantity"), '', TRUE, FALSE, FALSE);
RowNo := 1;

--Sales Line - OnAfterGetRecord() --
RowNo += 1;
EnterCell(RowNo, 1, "Document No.", '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 2, FORMAT ("Shipment Date"), '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 3, "Location Code", '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 4, CustName, '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 5, FORMAT ("Outstanding Quantity"), '', FALSE, FALSE, FALSE);

--Sales Line - OnPostDataItem()--
RowNo += 1;
ExcelBuffer.CreateBook;
ExcelBuffer.CreateSheet(TABLECAPTION, TABLECAPTION, COMPANYNAME, USERID);
ExcelBuffer.GiveUserControl();


Das Problem was ich habe stellt sich wie folgt da:
Wenn ich den Report starte, wird Excel sehr oft gestartet und so wie es ausschaut für jeden Customer eine eigene Excel-Instanz geöffnet. Ich möchte jedoch alles in EINER Datei.
Wenn ich den Report OHNE das DataItem "Customer" ausführe, und in der Spalte "Customer Name" nur die "Sell-to Customer No." aus der Sales Line anzeigen lasse, funktiert alles wunderbar.

We kann mir da auf die Sprünge helfen ?

Vielen Dank im Voraus und Gruss aus Wickede,

Jan Einzel
Zuletzt geändert von japper_nrw am 24. Mai 2011 21:05, insgesamt 2-mal geändert.

Re: Excel-Report , CC DB 4.0 / NATIVE

24. Mai 2011 15:53

Hi,

das liegt an den Triggern in denen du den Code ausführst.

Der Trigger OnPreDataitem wird immer vor dem Dataitem ausgeführt.
Und da SalesLine untergeordnet zu Customer läuft, wird der Trigger von SalesLine nach jedem Customer ausgeführt, weil dann erneut das DataItem aufgerufen wird.

Dein Problem sollte sich lösen, wenn du den Code von OnPreDataitem in den OnPreDataitem Trigger von Customer schiebst.
Das gleiche gilt für den OnPostDataItem-Trigger.

Edit:
Hier habe ich auch noch den Beitrag von Natalie gefunden:
viewtopic.php?f=19&t=10806&p=53583

Re: Excel-Report , CC DB 4.0 / NATIVE

24. Mai 2011 16:11

Hallo Danjo,

danke für die schnelle Antwort,

wenn ich den Inhalt
Code:
--Sales Line - OnPreDataItem() --
CustName := Customer.Name;
ExcelBuffer.DELETEALL;
EnterCell(1, 1, FIELDCAPTION("Document No."), '', TRUE, FALSE, FALSE);
EnterCell(1, 2, FIELDCAPTION("Shipment Date"), '', TRUE, FALSE, FALSE);
EnterCell(1, 3, FIELDCAPTION("Location Code"), '', TRUE, FALSE, FALSE);
EnterCell(1, 4, FIELDCAPTION("Sell-to Customer No."), '', TRUE, FALSE, FALSE);
EnterCell(1, 5, FIELDCAPTION("Outstanding Quantity"), '', TRUE, FALSE, FALSE);
RowNo := 1;

in den gleichnamigen Trigger von Customer schiebe, dann meckert er, dass ich eine unbekannte Variable eingegeben habe, da sich die Felder ja auf die Sales Line beziehen.
Wenn ich im Format
Code:
EnterCell(1, 1, FIELDCAPTION("Sales Line"."Document No."), '', TRUE, FALSE, FALSE);

eingebe, dann kommt die Meldung "Es wurde ein Feld einer Datensatzvariablen erwartet. Zum Beispiel: Datensatz.Feld".

Wie kann ich die Tabellenüberschriften sonst noch definieren ?

Danke und Gruß

Jan

Re: Excel-Report , CC DB 4.0 / NATIVE

24. Mai 2011 16:18

Du benutzt in diesem Fall den Befehl FIELDCAPTION falsch.

Hier ist mal der Link zur Beschreibung auf Navision24, sollte aber auch so in der Hilfe von MS Dynamics NAV stehen.

http://www.navision24.de/befehle/fieldcaption.html

Re: Excel-Report , CC DB 4.0 / NATIVE

24. Mai 2011 16:37

Hallo Danjo,

danke :oops:
abundzu hab ich echt n Brett vor dem Kopf und die einfachsten Sachen klappen nicht mehr... Man wird älter.

Vielen Dank für den Tipp

Gruß

Jan