Report - Übergabe Filter von Dataitem 1 nach Dataitem2

15. März 2007 21:06

Guten Abend!

Leider muss ich schon wieder eine blöde Frage stellen.

Nachdem ich mich für einen Programmiermarathon am Wochenende ein wenig vorbereiten möchte, bin ich so frech und poste schon wieder ein Frage.

Das Thema - Von Benutzern definierten Filter eines Dataitems in einem Report auf ein weiteres Dataitem zu übergeben, wurde ja schon im Forum ein paar mal behandelt, aber leider habe ich die passende Antwort noch nicht gefunden.

Ich habe einen Report welcher mir die Rechnungszeilen einer Woche sortiert nach Kunden anzeigt. Nun habe ich diesen Report um die Gutschriftszeilen erweitert. Damit meine Benutzer nicht die Werte doppelt eingegen müssen möchte ich die Filter auf die Rechnungszeilen an die Gutschriftszeilen automatisch übergeben. Dazu habe am Trigger Sales Cr.Memo Line - OnPreDataItem() folgende Zeilen hinzugefügt.

Code:
SETFILTER("Document No.", "Sales Invoice Line".GETFILTER("Document No."));
SETFILTER("Sell-to Customer No.", "Sales Invoice Line".GETFILTER("Sell-to Customer No."));
SETFILTER("Item Category Code", "Sales Invoice Line".GETFILTER("Item Category Code"));
SETFILTER("Product Group Code", "Sales Invoice Line".GETFILTER("Product Group Code"));


Nun stehe ich vor dem Problem, dass ich diese Liste eigentlich unendlich lange fortsetzen muss, (Zumindest für jedes Feld - und das sind nicht wenige) weil es könnte ja ein Benutzer noch einen Filter hinzufügen, und dieser würde nicht auf die Gutschriftszeilen angewendet werden. Was natürlich zu Falschen Daten führen kann.

Eine alternative dazu, ist natürlich die Filter fest zu definiert und in ein Request Form zu packen. Aber das ist ja auch wieder einiges an Aufwand. Und natürlich könnte ich die verwendeten Filter abfragen und eine Fehlermeldung generieren. Aber das ist ja auch nicht so schön.

Kennt von euch jemand eine Möglichkeit - egal welche Filter auf den Sales Invoice Lines (DataItem1) gesetzt werden, diese 1:1 an die Sales Cr.Memo Line (Dataitem2) weiterzugeben?

Herzlichen Dank an alle.

So long
Martin

15. März 2007 22:05

Naja, mit GETFILTERS (man beachte das letzte S) liest du den gesamten Filter (statt nur den Filter eines bestimmten Feldes) aus.

Dies kann natürlich knallen, wenn der Benutzer im DataItem1 ein Feld mit einem Filter belegt hat, das es im DataItem2 gar nicht gibt .... Das müsstest du also vor Anwendung des Filters abfragen.

15. März 2007 22:16

GETFILTERS hatte ich auch in Erwägung gezogen.
(Den String auswerten und auf dem anderen DataItem anwenden, sofern das Feld Vorhanden ist!)
Nur das Problem wird sein, das GETFILTERS die Field-Caption des jeweiligen Landes (vermtl. Deutsch) anzeigt. somit lässt dich der String nicht nutzten,
oder habe ich da einen Denkfehler?

****
Ich hatte schon überlegt, ob die Tabellen über das Propertie "DataItemLink" verknüpft werden (alle Relationen zwischen den Tabellen)
und nur die Rechnungszeilen gefiltert werden können vom User.
Ein weiteres Filtern sollte auf die Tabelle Gutschriftszeilen unterbunden werden, damit nicht unvollständige Datensätze angezeigt werden!
Gruß Mikka

15. März 2007 23:28

Der Befehl GETFILTERS funktionier nicht mit unterschiedlichen Tabellen. Navision bringt eine entsprechende Fehlermeldung.

Ich würde die aus deiner Sicht wichtigsten Feld als Textbox'en auf der Requestform packen. So können dort die Filter vom Benutzer gesetzt werden. In den OnPreDataItems setzt du dann die Filter.

Zwar wird damit dem Benutzer die Freitheit genommen, weitere Felder selbst auszuwählen und zufiltern, aber es ist zumindest sichergestellt, dass der Benutzer sich nicht ein Feld aus der Liste zieht und einen Filter setzt, den du im Code nicht an das andere DataItem übergibst.

Gruß, Marc

15. Mai 2008 08:53

Hallo zusammen,

was kann ich denn tun, wenn ich die mit Getfilters ermittelten Filter auf eine
Recordvariable der gleichen Tabelle anwenden will? Wie muss ich die Filter dort wieder einbinden?

Viele Grüße
Axel

15. Mai 2008 10:31

Hallo Axel,

ich würde da mit GETVIEW und SETVIEW arbeiten.
Neben den Filtern wird dann zwar auch die Sortierung und der gesetzte Key übernommen - aber die kannst Du dann ja ggf. ändern.

Gruß
Ralf

15. Mai 2008 11:41

Hallo Ralf,

ich habe meinen Fehler gefunden.

Ich hatte versucht, die Filter eines eingerückten Dataitems an eine
locale Variabel des übergeordneten Dataitems zu übergeben.

Ich habe das jetzt (nach Rücksprache mit unserem NSC) so gelöst, das
ich eine globale Variable dafür gemacht habe und die Filter mit Copyfilter
in der OnPreReport-Section übergeben habe. Damit funktioniert es dann.

Danke trotzdem.
Axel