[Gelöst] Filter aus DataItem eines Reports auslesen

16. Juni 2006 15:16

Folgende Problemstellung:

Ich starte einen Report ab der Kontaktkarte, wobei die Report-ID dazu in der Einrichtung hinterlegt ist. Der Aufruf sieht so aus:

Code:
Setup.GET;
Cont.SETRANGE("No.", Rec."No.");
REPORT.RUNMODAL(ReportID,TRUE,FALSE,Cont);


Das funktioniert so weit auch ohne Probleme.

Jetzt möchte ich aber im RequestForm des Reports einen Lookup auf eine Tabelle ausführen, und diese Tabelle auf Contact No. filtern, auf welche ja auch der Report vorgefiltert wird. Aber ich bekomme diese Nummer einfach nicht raus.

Hat da jemand vielleicht noch einen Trick auf Lager?
Zuletzt geändert von rotsch am 16. Juni 2006 17:06, insgesamt 1-mal geändert.

16. Juni 2006 17:02

Keine Chance!
Leider hast du erst ab dem Trigger OnPreReport() Zugriff auf die Filter der DataItems.

16. Juni 2006 17:05

Timo Lässer hat geschrieben:Keine Chance!


Ich hab's befürchtet, sonst hätte ich es wahrscheinlich gefunden :-(

Hatte aber halt die leise Hoffnung, etwas übersehen zu haben, danke für die Antwort.

19. Juni 2006 09:54

Wenn du den Report als Variable definierst, und in diesem Report dann eine Funktion z.B. "Übergabe" mit der Variablen "Nummer" einbaust, könntest du doch den Filter vorher übergeben.
In der Funktion steht dann etwa:
Code:
If "Nummer <> '' Then Begin
   SETRANGE(Contact.No,Nummer);
   SETRANGE(Tabelle2.Contact,Nummer);
   CurrReport.USEREQUESTFORM(FALSE);
END;


Rep_0815.Übergabe(Rec."No.");
Rep_9813.Run

19. Juni 2006 10:01

mespelage hat geschrieben:Wenn du den Report als Variable definierst, und in diesem Report dann eine Funktion z.B. "Übergabe" mit der Variablen "Nummer" einbaust, könntest du doch den Filter vorher übergeben.


Danke für die Antwort. Leider kann ich den Report nicht als Variable definieren, da für jeden Mandanten ein anderer Report zum Einsatz kommen kann. Aus diesem Grund muss ich den Report mit seiner ID aufrufen, und kann keine Parameter vorher übergeben.

Oder habe ich etwas übersehen?

19. Juni 2006 19:48

rotsch hat geschrieben:[...]
Leider kann ich den Report nicht als Variable definieren, da für jeden Mandanten ein anderer Report zum Einsatz kommen kann. Aus diesem Grund muss ich den Report mit seiner ID aufrufen, und kann keine Parameter vorher übergeben.
[...]

Ich behelfe mir in solchen Fällen immer mit dem "Siemens-Lufthaken für Navision" *ggg*
Auf gut deutsch: Ich lege eine (1) Codeunit namens "GlobalVariableManagement" an und definiere sie (in den Properties) als SingleInstance=Ja
Dann erstelle ich für jede "anwendungsglobale" Variable zwei Funktionen in der CU:
Code:
SetMyVar(NewMyVar : MyDataType)
MyVar := NewMyVar;

GetMyVar() : MyDataType
EXIT(MyVar);
MyVar ist dabei eine Globale Variable in der Codeunit.

Um nun einen Filter zu übergeben, könntest du den View dort ablegen:
Code:
SetRecordView(NewMyView : Text[1024])
MyView := NewMyView;

GetRecordView() : Text[1024]
EXIT(MyView);


Wichtig: Da eine SingleInstance-Codeunit speicherresistent ist, sollte sie so klein wie möglich gehalten werden und keinerlei Logik enthalten.
(Einmal in einer Session angesprochen, verbleibt sie bis zum Schließen des Mandanten im Arbeitsspeicher.)

19. Juni 2006 23:07

Danke für den Tip, Timo. Das werde ich auf jeden Fall so umsetzen, das ist ein sehr gute Idee.