[GELÖST] Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 10:07

Hallo und einen schönen guten Tag allerseits,

ich wende mich in einem Punkt an euch bei dem ich einfach nicht mehr weiter weiß.

Kurz zur Ausgangssituation: Ich habe einen tabellarischen RDLC-Report gebastelt (Rechnungs-/Gutschriftsübersicht), welcher zeilenbasierte Information zu VK-Rechnungen, VK-Gutschriften, Service-Rechnungen und Service-Gutschriften ausgeben soll.
Die Schwierigkeit ist, dass die Filterung sowohl auf Kopffelder (z.B. Verkäufercode), als auch auf Zeilenfelder (Artikel, Lagerort, etc) möglich sein soll. Hier hat sich zunächst die Frage gestellt, wie der Report von der "Architektur" angesetzt werden könnte. Ich habe mich dazu entschieden, einen "Mix" aus klassischem Kopf- vs. Zeilen-DataItem-Verknüpfung- und aus Zeile-Kopf-Zeile-DataItem-Verknüpfung zu erstellen. Diese Konstellation dann pro Belegart (verschiedene Tabellen).
Es wird dann je nach gesetzten Filtern entschieden, ob Variante 1 oder Variante 2 verwendet werden soll. Die durchlaufenen Datensätze werden dann in eine Temp-Tabelle geschrieben und am Ende über ein Integer-DataItem ausgegeben.
Nun zu meinem Problem:
Ich würde gerne - im Falle von Filterung auf ein Zeilenfeld - via COPYFILTERS die gesetzten Filter des ersten Kopf-DataItems (Standardmäßig "Buchungsdatum") auf das "mittlere" Kopf-DataItem kopieren.
In der Theorie eigentlich ganz nett, aber ich lande immer in einer Art Endlosschleife, die sich auch nicht vernünftig debuggen lässt. Wird hier irgendwie die Sortierung zerschossen? Ist es überhaupt möglich die Filter vom obersten DataItem zu dem Mittleren zu kopieren?
Ich habe einen Screenshot angehängt --> Nicht erschrecken vor dem chaotischen Aufbau. :-D

Ich hoffe, ich konnte das einigermaßen verständlich erklären. Ich bin für jeden Tipp sehr dankbar.

Viele Grüße

Mella
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von MoebelMeller am 11. März 2016 12:21, insgesamt 1-mal geändert.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 10:33

COPYFILTERS ist dafür gedacht, die Filter zwischen zwar unterschiedlichen Recordvariablen, aber gleichen Tabellen zu kopieren. Diese Konstellation liegt bei dir aber nicht vor.

Übertrage besser die gewünschten Felder einzeln mittels GETFILTER und SETFILTER.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 10:43

Hallo Nathalie,

vielen Dank für die Antwort.
Ich versuche ja die Filter des Rechnungskopfes ("Sales Invoice Header") zu einem anderen Rechnungskopf (ebenfalls "Sales Invoice Header") zu kopieren. Das sind ja die gleichen Tabellen. Sollte das dann nicht gehen? Ist ein DataItem in dem Fall nicht das gleiche wie eine Record-Variable?

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 11:03

MoebelMeller hat geschrieben:Ich versuche ja die Filter des Rechnungskopfes ("Sales Invoice Header") zu einem anderen Rechnungskopf (ebenfalls "Sales Invoice Header") zu kopieren. Das sind ja die gleichen Tabellen. Sollte das dann nicht gehen? Ist ein DataItem in dem Fall nicht das gleiche wie eine Record-Variable?

So ist es, in diesem Fall sollte es funktionieren. War das eine theoretische Frage bevor du es versuchst, oder gibt es dabei ein Problem?

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 11:23

Ja, so habe ich das bereits implementiert und stoße dabei auf das Problem, dass er sich komplett aufhängt. Bei der "Status-Page", wo "Empfangene Zeilen" steht (was ja normalerweise hochzählt) steht und bleibt er bei 0. --> Siehe Screenshot 1.
Wenn ich das COPYFILTERS bei dem mittleren Rechnungskopf-DataItem rausnehme läuft er durch. Natürlich ohne die Filterung des ersten Kopfes.
Was mir gerade noch dazu auffällt ist folgende Kuriosität: Wenn ich auf einen Artikel filtere funktioniert alles ohne Probleme. Filtere ich auf eine Ressource oder Lagerort (die bis jetzt implementierten Zeilenfilterungsmöglichkeiten) hängt er sich immer dann auf, wenn es die jeweilige Ressource oder Lagerort tatsächlich gibt. Gebe ich "dnoqkwdjoqw" (also irgendwas) ein, dann setzt er (korrekt) diesen Filter und zeigt nichts an.
Ich habe noch ein paar Screenshots angehängt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 11:33

Mh, erst mal was Grundsätzliches, weil ich das vorhin übersehen habe:
Ich habe mich dazu entschieden, einen "Mix" aus klassischem Kopf- vs. Zeilen-DataItem-Verknüpfung- und aus Zeile-Kopf-Zeile-DataItem-Verknüpfung zu erstellen
Warum?
Kopf-Zeile allein pro Beleg hätte es doch auch getan. Kein Wunder, wenn du da irgendwo auf ne Endlosschleife stößt.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 11:44

Dieser Mix deshalb, weil sowohl auf Kopfdaten als auch Zeilendaten gefiltert wird. Die einen Anwender filtern z.B. auf den Verkäufercode im Kopf und die anderen auf eine Artikelnummer oder Produktgruppe.
Wenn ich das - klassisch - Kopf-Zeilen-gesteuert mache, müsste ich ja alle Rechnungen durchgehen, die Zeilen auf die Artikelnummer prüfen und dann ein BREAK/SKIP machen. Das Problem ist, dass wir fast eine halbe Mio. Rechnungen im System haben.
Wenn ich direkt - also als oberstes DataItem - die Zeilen verwende, kann ich nicht mehr auf Kopffelder filtern. Daher beide Möglichkeiten.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 12:07

Verstehe.
Und wie verhinderst du, dass bei 5 Artikelzeilen einer Rechnung der Rechnungskopf 5 mal gelesen wird? Mit MaxIteration = 1?

Für die Übersichtlichkeit ist es eventuell hilfreicher, auf die zusätzlichen DataItems zu verzichten, und das Ganze nur mit Recordvariablen abzubilden. Für die Reportdurchführung brauchst du ja nur die ersten beiden DataItems (damit der Benutzer Filter eingeben kann) und den - wie auch immer ermittelten - temporären Record mit allen relevanten Zeilen als letztes DataItem.

Übrigens, das Integer-DataItem brauchst du zum Durchlaufen des temp. Records nicht mehr, du kannst auch direkt mit der DataItem-Eigenschaft Temporary arbeiten. Der Name deiner temp. Recordvariable gehört dann in die Spalte "Name" im DataItem-Designer (siehe Report 1306). Spricht aber technisch nichts dagegen, bei integer zu bleiben.

Re: Reportdesign: COPYFILTERS von DataItem zu DataItem

11. März 2016 12:21

Ahhhhh, das war der erlösende Hinweis! :-D :-D :-D :-D Ich Trottel. :oops:
--> Er ist tatsächlich mehrfach durchgelaufen, daran hatte ich irgendwie nicht gedacht. Mit MaxIteration = 1 funktioniert alles.

1000 Dank & ein schönes Wochenende :-) :-) :-)