[gelöst] Temporäre Tabelle

21. März 2007 15:37

Hallo,
ich habe eine Tabelle

Tabelle auftrag
Satzart Auftragsnummer Menge Feld3
A 1 3 irgentwas
B 1 5 irgentwass
C 1 8 irgentwas
A 2 5 irgentwas
B 2 5 irgentwass
C 2 8 irgentwas
B 3 5 irgentwass
C 3 8 irgentwas
B 4 5 irgentwass
C 4 8 irgentwas

Ich möchte nun die Auftragsnummern herrausfiltern die eine Satzart A haben, und diese dann in einem Report ausgeben

Ich dachte mir ich nehme eine Temporäre Tabelle "Temp1".
Renne durch die Tabelle "auftrag" und schreibe immer dann wenn ich zu einem Auftrag einen "A" satz finde, die dazugehörigen Sätze in die Tabelle
"Temp1"

Die Tabelle "Temp1" soll dannach so aussehen:
Satzart Auftragsnummer Menge Feld3
A 1 3 irgentwas
B 1 5 irgentwass
C 1 8 irgentwas
A 2 5 irgentwas
B 2 5 irgentwass
C 2 8 irgentwas

Das füllen der Tabelle "Temp1" bekomme ich hin.
Mein Problem ist nun:

wie greife ich vom Report auf die Tabelle "Temp1" zu, bzw wie veranlasse ich den Report durch "temp1" durch zurennen.

Ich kann die Tabelle "Temp1" ja nicht als DataItem zuweisen ?

Kann mir jemand helfen ?

mfg
Jörg Nissen
Zuletzt geändert von Jörg Nissen am 22. März 2007 12:07, insgesamt 1-mal geändert.

21. März 2007 15:43

guck dir mal die Syntax zu report.run in der Online-Hilfe an, da stehen einige Beispiele

21. März 2007 15:45

Temporäre Tabelle sind (meines Wissens) immer nur in der jeweiligen Instanz verfügbar, also nicht in einem Report.

Selbst wenn die temp. Tabelle in einem Report gefüllt wird, kann man im gleichen Report nicht über eine DataItem auf diese zugreifen, müßte man also "von Hand" durchlaufen.

Ich versteh' aber nicht, warum Du auf der "Original-Tabelle" keinen Filter setzt und diese dann durcharbeitest und ausgibst, ... ?

Nachtrag : SORRY, hab' die Problematik jetzt erkannt ! :oops:

21. März 2007 15:53

... oder :

Tabelle auftrag mit Filter Satzart=A durchlaufen und ein zweites, untergeordnetes DataItem auf Tabelle auftrag mit link zwischen den Auftragsnummern ohne weitere Filter durchlaufen.
Das zweite DataItem liefert die gewünschten Sätze.
(ich geh' davon aus, daß der Key aus Satzart und Auftragsnummer besteht !? )

21. März 2007 16:32

Schau dir mal an, wie der Standard durch temp. Tabellen wühlt:

Report 111

21. März 2007 17:03

Hallo,
erst mal Danke für die vielen Antworten.

Report 111 habe ich mir schon angesehen. Aber mir fehlen da noch ein paar Grundlagen.

Der Tip von stephan.bosau war bereits hilfreich.

nur die Gruppierung klappt noch nicht.

Ich habe bei meiner Verknüpften Tabelle
Das Feld Auftragsnummer um Gruppieren ausgewählt.
Als TotalField das Feld Menge.

Im Report nutzte ich nun das GruppenFooterband mit meiner Verknüpften Tabelle.

Aber beim Ausführen zeigt der Report nichts an :-(

mfg
Jörg Nissen

21. März 2007 17:43

Und was genau verstehst du nicht an Report 111?

21. März 2007 22:24

Hallo,
erstmal vielen dank für deine Antowrt.

Natalie hat geschrieben:Und was genau verstehst du nicht an Report 111?


Ich habe ein Verständnis Problem mit der Tabelle Integer.
Welchen Zweck hat der Eintrag bei DataItemTableView = SORTING(Number) WHERE(Number=FILTER(1..)) ?
Wenn ich das Richtig sehe wird die Tabelle nach Number Sortiert und nach allen Zahlen gefiltert die grösser 1 sind. Wozu der Filter ?

Und wozu brauche ich die Tabelle Integer überhaupt ?. Die Temporäre Tabelle ist doch CustAmount.
Wie ist Integer mit dieser Verknüpft ? denn im Report wird ja über die Tabelle Integer auf CustAmount zugegriffen.

Wahrscheinlich sind das Triviale fragen. Ich habe bisher noch nicht viel mit Navision Programiert. Bisher nur in Delphi, Pascal, C, php, etc.

mfg
Jörg Nissen

Einmal aufgedröselt!

21. März 2007 23:04

Jörg Nissen hat geschrieben:Ich habe ein Verständnis Problem mit der Tabelle Integer.
Generell zum Einstieg:
Wir können die temp. Tabelle nicht direkt abgrasen (d.h. Datensatz für Datensatz durcharbeiten). Wir verwenden dafür eine Hilfstabelle: Integer.

Welchen Zweck hat der Eintrag bei DataItemTableView = SORTING(Number) WHERE(Number=FILTER(1..)) ?
Sie erledigt das Durchzählen (durch die späteren Datensätze in der temp. Tabelle). Wir stellen mit Integer nur eine Tabelle bereit, die stumpf von 1 bis unendlich zählt (daher der Filter und die aufsteigende Sortierung). Im Quelltext ist dann dafür zu sorgen, dass auch irgendwann einmal ein Schlusstrich gezogen wird.

Wie ist Integer mit dieser Verknüpft ? denn im Report wird ja über die Tabelle Integer auf CustAmount zugegriffen.


Der wichtigste Passus befindet sich im Integer - OnAfterGetRecord-Trigger:
Code:
IF Number = 1 THEN BEGIN
  IF NOT CustAmount.FIND('-') THEN
    CurrReport.BREAK;
END ELSE
  IF CustAmount.NEXT = 0 THEN
    CurrReport.BREAK;


Nochmal: Unsere Integer-Tabelle zählt nur ihre eigenen Schleifendurchläufe. Mit dem Quelltext wird also abgefragt:
Laufe ich zum ersten Mal durch?
Ja -> Springe auf den ersten Datensatz von CustAmount (wenn vorhanden)
Nein -> Springe auf den nächsten Datensatz von CustAmount. Haben wir den letzten DS erreicht, breche ab.

Integer.Number = 1 -> 1. CustAmount-Datensatz
Integer.Number = 2 -> 2. CustAmount-Datensatz
Integer.Number = 3 -> 3. CustAmount-Datensatz
bis CustAmount-Ende.

Wir haben somit einen Durchlauf durch CustAmout simuliert. Das war auch schon alles!
In den ReportSections, im DataItem... überall kannst du nun wie gewohnt auf CustAmout zugreifen. Hauptsache, der o.g. Quelltext steht ganz oben.

Wahrscheinlich sind das Triviale fragen. Ich habe bisher noch nicht viel mit Navision Programiert. Bisher nur in Delphi, Pascal, C, php, etc.

Ich komme aus der Delphi-Programmierung und weiß, wie schwer der Umstieg fallen kann. Wobei ich mich eher mit SETRANGE und GET rumgeplagt hatte *g* (SQL R.I.P.)

22. März 2007 11:24

Hallo,
super jetzt habe ich es verstanden. Danke für die Erklärung.

viele grüsse aus Flensburg,
Jörg