Temp. Daten an Report übergeben

16. November 2010 14:27

Hallo,

ich habe in der Tabelle TempItem, eine Kopie von Artikeln, welche in einer Form befüllt wird. Nun möchte ich genau diese Daten an einen Report übergeben.

Dazu habe ich folgenden Code gemacht. (Wird durch eine Button ausgelöst)
Code:

SelectItem := TempItem;
SelectItem.COPYFILTERS(TempItem);

REPORT.RUN(50073,TRUE,FALSE,SelectItem);

Der Report hat als DataItem "Item" und "Sales Line".
Leider funktioniert dies nicht richtig. Teilweise fehlen Artikelzeilen. Wie muss ich den Report die Daten übergeben.

Wenn ich in der Form folgende Schleife ausführe:
Code:

IF TempItem.FINDSET THEN
REPEAT
  MESSAGE('%1',TempItem);
UNTIL TempItem.NEXT = 0;

sind aber die Daten richtig.

lg
stony

Re: Temp. Daten an Report übergeben

19. November 2010 14:59

Hi,
ich geh jetzt mal davon aus, dass deine Varibale TempItem vom Type Record ist, Subtype Item und Temporary = Yes ist.
Erstmal schauen was du machst:
Code:
SelectItem := TempItem; // Werte von TempItem in SelectItem schreiben, und zwar nur die Werte vom letzten Datensatz, wenn vorher kein FINDSET passiert ist, ansonsten vom ersten
SelectItem.COPYFILTERS(TempItem); // kopiert die Filter von TempItem; ohne noch mehr Code zu sehen würde ich tippen, es sind keine gesetzt.

REPORT.RUN(50073,TRUE,FALSE,SelectItem); // Aufruf des Reports mit dem einen Artikel in SelectItem, wenn mich nicht alles täuscht, geht der so durch alle Datensätze, falls wirklich keine Filter gesetzt sind. Es interessiert den Report herzlich wenig, wo der Datenzeiger steht.

Du solltest deinen Report folgend abändern: DataItem "Item" durch "Integer" ersetzen. Dann eine Funktion SetTempItem erzeugen, die du aus deinem Button aufrufen kannst. Die Funktion sollte so ähnlich aussehen:

Code:
SetItem(VAR NewTempItem : TEMPORARY Record Item)
IF NewTempItem.FINDSET THEN REPEAT
  TempItem2.INIT;
  TempItem2.TRANSFERFIELDS(NewTempItem);
  TempItem2.INSERT;
UNTIL NewTempItem.NEXT = 0;

Globale Variable
Name   DataType   Subtype   Length
TempItem2   Record   Item   Temporary = YES


In deinem Report gehst du ins OnPreDataItem von Integer und machst ein SETRANGE(Number, 1, TempItem2.Count). Dann ähnlich verfahren wie im RoundLoop im Report 205, also manuell durch die Datensätze vom TempItem2 gehen. In deinem Sales Line DataItem musst du noch den Filter auf die jeweilige Artikelnummer ebenfalls im OnPreDataItem setzen. Somit solltest du dein gewünschtes Ergebnis im Report haben.

In deiner Form instanzierst du den Report als Varibale und rufst die Funktion SetTempItem(TempItem) vor RUN auf.

Ich hoffe, ich konnte die etwas helfen.
Gruß
Christoph :)

Re: Temp. Daten an Report übergeben

20. November 2010 14:54

Danke für die tolle Beschreibung.

Leider habe ich noch ein Problem. Und zwar ist das Feld TempItem2.Quantity immer Null. Wenn ich es mir in der Repeat Schleife (vorher ein Calcfieds ausgeführt), sehe ich noch den richtigen Wert. Aber in der Integer-Body Sektion bekomme ich keine Wert.
Kannst du mir da weiterhelfen.

lg
stony