[Gelöst] Report: Default-Werte in ReqFilterFields hinterlege

10. März 2006 16:53

Hallo zusammen,

kurze Frage: Ist es möglich in einem Bericht Default-Werte für ein ReqFilterField zu hinterlegen? Wenn ja, wie funktioniert das. Bei einem selbst erstellten Optionsfeld in der Requestform kenne ich eine Lösung aber nicht in den ReqFilterFields, da sie ja dirket auf die DataItem/Tabellen zugreifen.

Grüße

Markus
Zuletzt geändert von mgerhartz am 10. April 2006 13:31, insgesamt 1-mal geändert.

10. März 2006 17:54

Hallo Markus

Ich konnte das folgendermassen lösen:

SetupRec.Filter := Rec.GETVIEW()
Damit kann ich die durch den Benutzer gesetzten Filter in einer Tabelle ablegen. Dies kann man z.B. auf den OnPreDataItem-Trigger des Reports
tun.

Nun kannst Du auf dem Request-Form einen Lookup erstellen und den gewünschten Filter aus der Liste auswählen lassen.

Wiederum auf OnPreDataItem setzt Du dann den gelesenen Filter mit
Rec.SETVIEW(SetupRec.Filter)

Etwas besseres habe ich noch nicht gefunden.
Ich hoffe, es hilft ein wenig

Beste Grüsse
Roger

10. März 2006 17:58

Hi Markus,

bevor du den Report aufrufst musst du eine Record-Variable anlegen und mit dieser den Befehl SETFILTER aufrufen. Anschließend übergibst du dem Report-Befehl SETTABLEVIEW als Parameter die Record-Variable.

Code:
OnPush()
Item.SetFILTER("No.", '10*');
Report.SETTABLEVIEW(Item);
Report.RUN;


OnPush kann beispielsweise der Trigger eines Buttons sein. Item ist hier die Record-Variabel. Report ist ebenfalls eine Variable jedoch vom Typ "Report".

Gruß, Marc

10. März 2006 19:57

Man muss nicht unbedingt den Report als Variable anlegen, es geht auch ohne:
Code:
OnPush()
Item.SETFILTER("No.",'10*');
REPORT.RUN(Report::"4711",Item);
Hier wird einfach der Report mit einer (gefilterten) Record-Variable aufgerufen.
REPORT ist hierbei keine Variable, sondern ein "C/AL-Befehl".

Wenn dein Report jedoch mehrere DataItems hat, welche vorgefiltert aufgerufen werden sollen, dann kommst du um Marc's Lösung nicht herum:
Code:
OnPush()
Item.SETFILTER("No.", '0815');
Cust.SETFILTER("No.", '4711');
MyReport.SETTABLEVIEW(Item);
MyReport.SETTABLEVIEW(Cust);
MyReport.RUN;
Für jedes vorzubelegende DataItem musst du eine entsprechende Record-Variable anlegen, filtern und per MyReport.SETTABLEVIEW() an den Report übergeben.
Navision ermittelt automatisch anhand der Record-Variable, welches DataItem gemeint sein könnte.
Ich weiß allerdings nicht, wie sich Navision verhält, wenn mehrere DataItems in dem Report dieselbe Tabelle verwenden.
(Wo mag Navision da wohl die Filter hinübertragen? 1. Vorkommen, alle Vorkommen? Keine Ahnung, da noch nicht ausprobiert.)

10. März 2006 20:20

Timo Lässer hat geschrieben:Ich weiß allerdings nicht, wie sich Navision verhält, wenn mehrere DataItems in dem Report dieselbe Tabelle verwenden.
(Wo mag Navision da wohl die Filter hinübertragen? 1. Vorkommen, alle Vorkommen? Keine Ahnung, da noch nicht ausprobiert.)

1. Vorkommen! :-)

Gruß, Marc

10. März 2006 20:37

Und schon habe ich auch wieder etwas dazugelernt ;-)

10. März 2006 20:48

Na ist doch auch mal schön, wenn ich zur Abwechslung helfen kann.

13. März 2006 10:14

Guten Morgen Jungens, danke für eure reichhaltigen Antworten. Nur die Frage lautete, wie kann ich bei einem ReqFilterField einen Defaultwert hinterlegen. Wenn ich eure Lösungen so anschaue, bedeutet das doch, dass ich einen Button auf der Request Form anlege, der dann das DataItem nach einem bestimmten Wert filtert. Hab ich das richtig verstanden und gibt es sonst wirklich keine andere Lösung? Trotzdem aber danke für eure Hilfe.....

13. März 2006 10:36

In diesem Fall muss Du den Report vor dem Aufruf 'vorfiltern', wie z.B. beim Aufruf des Rüstscheins aus dem Auftrag. Da kannst Du dann jedes Feld mit einem Filter belegen. Dies allerdings nur für das erste DataItem im Report


SalesHead.SETRANGE("Document Type","Document Type");
SalesHead.SETRANGE("No.","No.");
REPORT.RUN(REPORT::"Sales Picking List",TRUE,FALSE,SalesHead);

13. März 2006 11:09

Ich habe folgende einfache Lösung vorgenommen. Hätte ich auch schneller draufkommen können, oder :lol:

Meine Report hat zum Glück nur ein DataItem (Structure) und so hab ich einfach den DataItemTableView - Filter auf die gewünschten Felder gesetzt. Unser Kunde wollte nur ausschließen, dass bestimmte Gliederungen nicht angezeigt werden. Damit funktioniert's.

Zum Schluss aber noch eine Frage: Kann man trotzdem den Filter umgehen, indem man im ReqFilterField den Filter umsetzt. z. B. Im DataItemTableView habe ich "Booking Block" auf Yes gesetzt und im ReqFilterField setze ich das Feld auf NO. Geht sowas? Wäre nicht schlimm. Die Liste ist eh nur für den internen Gebrauch.

13. März 2006 12:33

mgerhartz hat geschrieben:Zum Schluss aber noch eine Frage: Kann man trotzdem den Filter umgehen, indem man im ReqFilterField den Filter umsetzt. z. B. Im DataItemTableView habe ich "Booking Block" auf Yes gesetzt und im ReqFilterField setze ich das Feld auf NO. Geht sowas?
Ja, das geht.

Gruß, Marc

Re:

19. Mai 2017 10:45

rotsch hat geschrieben:Ich konnte das folgendermassen lösen:

SetupRec.Filter := Rec.GETVIEW()
Damit kann ich die durch den Benutzer gesetzten Filter in einer Tabelle ablegen. Dies kann man z.B. auf den OnPreDataItem-Trigger des Reports
tun.

Nun kannst Du auf dem Request-Form einen Lookup erstellen und den gewünschten Filter aus der Liste auswählen lassen.

Wiederum auf OnPreDataItem setzt Du dann den gelesenen Filter mit
Rec.SETVIEW(SetupRec.Filter)


Hi, de Beitrag ist zwar schon etwas alt. Aber eine kleine Frage habe ich noch dazu. Ist es in irgendeiner Form möglich, die im Requestform per SETVIEW gesetzten Filter auch im jeweiligen Dataitem zu aktualisieren? Also das man auch sieht, das man nun eine andere Filterkonfiguration geladen hat? (NAV 2013 R2)

Edit: Ahh.. sorry. Hab gerade gesehen, dass es noch die Variable "RequestOptionpage" gibt. Mit RequestOptionPage.UPDATE(true) geht es ;)
Zuletzt geändert von Raik Zobel am 19. Mai 2017 13:34, insgesamt 2-mal geändert.

Re: [Gelöst] Report: Default-Werte in ReqFilterFields hinter

19. Mai 2017 11:27

Forumsknigge beachten, bitte keine Vollzitate!