Daten auf Report

30. Juni 2009 16:02

Hallo zusammen,

ich habe einen Report erstellt, der eine Rechnung bestimmt. Wie bekomme ich es hin Daten in meinen Report zu bekommen, die nicht von der Tabelle stammen, in dem entsprechenden Data Item.

Konkret befinde ich mich auf einem Feld in den Sections in dem DataItem Sales Invoice Header, indem aber neben Daten aus dem sales Inv. Header auch Daten aus dem Sales Header auftauchen sollen.
Wie bekomme ich es hin, diese Daten in das Feld zu bekommen?

Re: Daten auf Report

30. Juni 2009 16:16

Du musst dazu eine Variable bzw. ein DataItem auf SalesHeader haben.
Dann kannst du als SourceExpr des Feldes in der Section dein gewünschtes Feld eintragen. "Sales Header"."Document Date" zum Beispiel.
Er zeigt dann den Wert der Feldes an, zu dem Datensatz auf dem du gerade stehst.

Re: Daten auf Report

30. Juni 2009 22:56

Prinzipiell hat Daniel schon recht:
Du brauchst eine Variable, welche auf den "Sales Header" zeigt.
Im OnAfterGetRecord des "Sales Invoice Header" holst du dir den entsprechenden Datensatz aus dem "Sales Header".
Nun hast du über deine Variable Zugriff auf alle Felder des Datensatzes.

Es gibt jedoch ein paar Punkte zu beachten:
  • Der "Sales Header" muss noch existieren
    Alternativen:
    • Im "Sales Header Archive" nachschlagen
    • "Was nicht mehr existiert kann auch nicht mehr angedruckt werden."
  • Wenn sich eine Rechnung auf mehrere Aufträge/Lieferungen bezieht (Stichwort: Sammelrechnung), ist der "Sales Invoice Header" nicht eindeutig.
    Alternativen:
    • Es wird halt immer nur der erste/letzte "Sales Header" berücksichtigt.
    • Hole dir den "Sales Header" auf Basis der "Sales Invoice Lines".

Re: Daten auf Report

1. Juli 2009 07:58

Guten morgen zusammen,

also ich fasse das mal für einen Neuling wie mich zusammen. Ich lege eine gl. Variable an (welcher Typ?). Wie bekomme ich denn jetzt einen Datensatz aus dem Sales Header? Also ich hab es so verstanden, das ich ein wenig Quellcode im DataItem OnAfterGetRecord des Sales Invoice Header schreiben muss.

Ich denke ich weiß, das man mit einem Get Befehl Daten holen kann, ist das richtig?

Also ich vermute ich schreibe:

gl.Variable Get("Sales Header"); ist das so richtig???? sieht etwas komisch aus finde ich!

Re: Daten auf Report

1. Juli 2009 08:22

Also ich hab jetzt folgendes gemacht.

Gl. Variable des Typ Record (ist geraten) angelegt.

Im DateItem des Sales Inv. Header bei OnAfterGetRecord steht:
DelInd1.GET("Sales Header"."Document Date");

und in der SourceExpr. des Textfeldes in den Sections steht:
"Sales Header"."Document Date"

als Fehermeldung taucht auf: TableData 0 existiert nicht. Beim schließen der Fehlermeldung geht der Quellcode unterhalb des letzen DataItem (also das leere DataItem) auf.

Was ist hier passiert und wie bekomme ich das in den Griff?

Re: Daten auf Report

1. Juli 2009 09:43

Hi,

hast du bei deiner globalen Variable (DelInd1?) auch die Tabelle angegeben?
Record als Variablentyp ist richtig, erfordert aber das du die Tablle eintägst als Wert.
In deinem Fall 36 bzw. Sales Header.
Wenn dein Sales Header aber nicht mehr existiert, brauchst du, wie von Timo geschrieben, den Sales Header Archive.
Lies dir doch einmal die Hilfe zum GET-Befehl durch, dann solltest du schnell sehen wie du diesen verwenden kannst.
Wenn du in die SourceExpr "Sales Header"."Document Date" schreibst, muss deine gloable Variable "Sales Header" heissen.

Re: Daten auf Report

1. Juli 2009 10:11

Vielen Dank für die Bemühungen.

Also folgendes.

Ich habe jetzt bei der gl. Variablen (die jetzt SalesHeader heißt) im Subtype den Sales Header eingetragen.

Im DataItem Sales Inv. Header steht jetzt im Quellcode: SalesHeader.GET('Document Date');

In den Sections steht in der SourceExpr. jetzt: SalesHeader."Document Date"

Beim ausführen des Reports kommt eine Fehlermeldung: Eine Typkonvertierung des Ausdrucks Text in einen Option Wert ist nicht möglich.

Wie bekomme ich jetzt diesen Fehler weg? Ich glaube ich steige gerade etwas tiefer ins NAV ein.....

Re: Daten auf Report

1. Juli 2009 10:14

misterelektro1981 hat geschrieben:Im DataItem Sales Inv. Header steht jetzt im Quellcode: SalesHeader.GET('Document Date');


Bitte schaue nach, wie GET funktioniert ... GET verlangt alle Primärschlüsselfelder des zu suchenden Datensatzes; das sind im Sales Header: "Document Type" und "No.".
Nur wenn du den Inhalt dieser Felder kennst, kannst du GET verwenden. Suchst du z.B. den Auftrag 4711, dann heißt es:
Code:
SalesHeader.GET(SalesHeader."Document Type"::Order, '4711');

Re: Daten auf Report

1. Juli 2009 10:27

Sorry, aber jetzt versteh ich garnichts mehr, obwohl ich dachte es fast durchschaut zu haben.

Ich möchte doch einfach nur ein paar Felder von einer anderen Table, wie in dem DataItem wo ich mich befinde, hinzufügen. Wenn ich z.B. 1000 Reports ausdrucken möchte, würde das ja nach deiner Beschreibung heißen, dass ich 1000 mal nach etwas vorher suchen muss.

Da muss es doch eine ganz simle Lösung für einen Neuling geben, oder?

Re: Daten auf Report

1. Juli 2009 10:42

misterelektro1981 hat geschrieben:Da muss es doch eine ganz simle Lösung für einen Neuling geben, oder?

Regel Nr. 1 für Navision Neulinge: Simpel ist hier gar nix :wink:

Re: Daten auf Report

1. Juli 2009 11:10

Natalie hat vollkommen recht und dir bereits die "einfachste" Lösung präsentiert.
Und auch von mir noch einmal die Aufforderung: Lies dir bitte die Hilfe zu GET(Record) durch.
Damit holst du einen Datensatz aus einer Tabelle.
Es ist nicht möglich nur den Wert eines einzelnen Feldes abzurufen.
Zu deinen Bedenken wegen einer großen Anzahl von Datensätzen mit dem GET: Die Werte in Natalies Beispiel sind nur zur Veranschaulichung, im Normalfall würdest du hier ein anderes Feld wählen.
Zum Beispiel:
Code:
SalesHeader.GET(SalesHeader."Document Type"::Order, "Sales Invoice Header"."Order No.");

Re: Daten auf Report

1. Juli 2009 11:31

Hallo nochmals,

also ich hab jetzt mehrmals versucht durch die Hilfe den Get(record) Befehl zu verstehen. Habe es aber u.a. wegen der Sprache nicht verstanden.

Was ich verstanden habe ist, dass ich zuerst alle Primärschlüssel des zu suchenden Datensatzes brauche. da ist schon die erste Frage, wie findet man diese?
Wenn ich jetzt z.B. Document Date (aus Sales Header) in ein Feld in den Sections bei Sales Inv. Header schreiben möchte, kommt in die Source. Expr.: "glo.Variable"."Document Date", und zuvor muss die gl. Variable angelegt werden.

Dann schreibe ich folgenden Code (von Danjo abgeleitet):
SalesHeader.GET(SalesHeader."Document Type"::Document Date); oder?

Sorry, wenn ich mich so dumm anstell, aber das ist mir wirklich wichtig und cih hatte da keine Schulung oder so etwas.

Re: Daten auf Report

1. Juli 2009 11:47

Nochmal zu dem GET und dem Primärschlüssel:

Den Primärschlüssel siehst du z.B. wenn du die Tabelle "Sales Header" im Designer öffnest und dann Ansicht->Keys wählst.
Der oberste Schlüssel ist dein Primärschlüssel.

Bei Sales Header ist dies "Document Type,No.", wie Natalie dir bereits geschrieben hatte.
Da du einen Auftrag willst, ist der erste Teil des Primärschlüssels bereits klar: SalesHeader."Document Type"::Order.
In dem Beispiel gehe ich jetzt davon aus das du den Auftrag mit der Nummer haben möchtest die im Rechnungskopf steht, also ist der zweite Teil des Primärschlüssels bei uns: "Sales Invoice Header"."Order No.".

Get-Befehl:
Code:
<Variable>.GET(<Primärschlüssel der Variable>);

In unserem Beispiel also:
Code:
SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Invoice Header"."Order No.");


Das Feld, das du anzeigen möchtest, kannst du nicht im GET definieren, dies passiert dann in der SourceExpr.
Hier kannst du nun JEDES Feld deiner Variable auswählen.
Da du das "Document Date" möchtest trägst du also ein:
SalesHeader."Document Date"

Da du nun auf deinem Datensatz stehst, kannst du auch jedes andere Feld dieses Datensatzes andrucken.
Möchtest du jetzt zum Beispiel noch zusätzlich das Feld "Your Reference" aus dem SalesHeader, so kannst du einfach ein zweites Feld mit SourceExpr SalesHeader."Your Reference" in die Section einfügen, OHNE noch einmal den GET-Befehl verwenden zu müssen.
Zuletzt geändert von Danjo am 1. Juli 2009 11:50, insgesamt 1-mal geändert.

Re: Daten auf Report

1. Juli 2009 11:47

Falls du den Text der Online-Hilfe nicht verstehst, hier nochmal mit anderen Worten beschrieben.

Re: Daten auf Report

2. Juli 2009 07:32

Hallo und einen guten morgen,

also ich habe gestern alles ein paar mal durchgelesen sowie die Hilfe zum get(record) und habe es verstanden.

Leider hat es immer noch nicht funktioniert.

Nach eurer Beschreibung kann es doch nicht so schwer sein.

Dann frag ich mal, ob es einen anderen Weg gibt. Wie ihr wisst, möchte ich in meinem Report Daten aus dem Sales Header in dem DataItem Sales Inv. Header haben.

Kann man das nicht so lösen, dass man sich die entsprechenden Daten aus der Table Sales Header in die Table Sales Inv. Header packt? Dann könnte ich mir, so denke ich, in den Section über das C/AL Symbol Menu, die sachen herausziehen, oder?

Falls das gehen sollte, wie schreibe ich mir die Daten aus dem sales Header in den Sales Inv. Header?

Re: Daten auf Report

2. Juli 2009 08:17

Wie ist denn die Beziehung zwischen deinem Sales Header und dem Sales Invoice Header?

Re: Daten auf Report

2. Juli 2009 08:21

Kannst du mir bitte mal auf die Sprünge helfen.

Beziehung? Also wir haben einen Sales Header und einen Sales Invoice Header. Ich versteh grad nicht, was du meinst.

Re: Daten auf Report

2. Juli 2009 08:30

Wenn du einen Sales Invoice Header hast, auf dem Daten eines Sales Header erscheinen sollen - welcher Sales Header soll das denn sein? Du wirst doch einen ganz bestimmten suchen. Diese Beziehung meine ich.

Re: Daten auf Report

2. Juli 2009 08:33

Wie beschrieben.

Die Daten aus der Table Sales Header in die Table Sales Invoice Header.

Re: Daten auf Report

2. Juli 2009 08:35

Irgendwie drücke ich mich anscheinend falsch aus ...

mal so gefragt: du druckst eine Rechnung - richtig? Auf der Rechnung sollen Daten aus dem Auftrag erscheinen - richtig?

Re: Daten auf Report

2. Juli 2009 08:39

Ja genau.

Re: Daten auf Report

2. Juli 2009 08:41

Lass dir doch nicht alles aus der Nase ziehen :wink: Welche Daten sollen das sein?

Re: Daten auf Report

2. Juli 2009 08:50

Das lustige ist, das nach dem buchen der Auftragsbestätigung, einige Daten aus dem Sales Header in den Sales Invoice Header geschrieben werden. Im Report kann ich dann im DataItem Sales Invoice Header auf diese Daten zugreifen.

Also z.B. sollen folgende Dtaen aus dem Sales Header auftauchen: salesperson1, quote no., VAT reg. no.

Wenn das gemacht wurde, sollen auf dem Sales Header (für die Auftragsbestätigung) einige Felder erweiter werden, der Ablauf diese zu verlinken müsste ja gleich sein.

Re: Daten auf Report

2. Juli 2009 08:52

Kann auch sein, dass es ohne buchen so ist.

Re: Daten auf Report

2. Juli 2009 09:02

misterelektro1981 hat geschrieben:Das lustige ist, das nach dem buchen der Auftragsbestätigung, einige Daten aus dem Sales Header in den Sales Invoice Header geschrieben werden. Im Report kann ich dann im DataItem Sales Invoice Header auf diese Daten zugreifen.

Also z.B. sollen folgende Dtaen aus dem Sales Header auftauchen: salesperson1, quote no., VAT reg. no.

Wenn das gemacht wurde, sollen auf dem Sales Header (für die Auftragsbestätigung) einige Felder erweiter werden, der Ablauf diese zu verlinken müsste ja gleich sein.

Es werden nicht einige, sondern so gut wie alle Daten aus der AB in die Rechnung übernommen. Deine drei Felder sind allerdings wohl alle für euch erweitert.

Das Einfachste wäre tatsächlich, diese Felder ganz genau gleich in der Tabelle Sales Invoice Header zu erweitern (also gleiche Feld-ID, Art und Größe - ach, am Besten alles genau gleich). Dafür müssen in deinem Sales Invoice Header natürlich diese Feld-IDs noch frei sein. Sonst wird es komplizierter.

Ich würde dir allerdings raten, dafür ein Angebot deines MS-Partners einzuholen. Wenn du das aber trotzdem unbedingt selbst machen willst, dann bitte fürs Erste nur auf einer Kopie eures Echtsystems. Denn wenn du dabei etwas falsch machst, hast du bald evtl. viele neue Freunde in deiner Firma :wink:

Weniger verhängnisvoll wäre der oben von den Kollegen beschriebene Weg. Aber da die AB ja nur dann erhalten bleibt, wenn du nicht komplett lieferst/fakturierst, ist es nicht gesagt, dass auf deinen Sales Header noch zugegriffen werden kann und du dann im Sales Header Archive schauen musst. Das wäre bei deinem Wissensstand noch schwieriger hinzukriegen.