GELÖST: Datenübergabe aus einem Formular in einen Bericht

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

GELÖST: Datenübergabe aus einem Formular in einen Bericht

Beitrag von Senekurios »

Hallo,

als Base Neuling bin ich seit geraumer Zeit dabei, eine Clienten - Datenbank zu schreiben. Die meisten Sachen habe ich mir bisher über Tutorials, Handbücher und Foren erarbeitet. Nun bin ich aber an einer Stelle angekommen, an der ich keine passenden Informationen bekomme und festhänge.

Folgender Sachverhalt. Ich habe eine Parameterabfrage, welche über Filter in einem (Unter)Formular in Tabellenform dargestellt wird. D.H. über die Filter bekomme ich eine gewisse Anzahl an Datensätzen aus der DB. Dies funktioniert auch alles super.
Nun möchte ich per Button wahlweise alle gefilterten oder nur den markierten Datensatz aus dem Tabellensteuerelemt im (Unter)Formular an einen bestehenden Bericht zum Drucken übergeben. Hat irgend jemand eine Idee, wie ich das lösen kann? Ich habe nach inzwischen 2 Tagen lesen und probieren leider noch keine Lösung gefunden.

Und wenn wir schon dabei sind, gibt es einen Weg, das beim Aufrufen des (Unter)Formulars (mit der Parameterabfrage im Hintergrund), die Filterabfrage unterdrückt wird? Ich möchte dies vermeiden, da alle Filter zu Beginn auf Wildcard stehen und somit nach dem Aufrufen die komplette Datenbank gelistet wird. Die ersten Ergebnisse sollen erst erscheinen, wenn nach Filtereingabe der Button mit der Aktion "Forumlar aktualisieren" gedrückt wird.

Danke schon mal im Voraus.
Marko
Zuletzt geändert von Senekurios am Di, 22.03.2016 19:52, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von RobertG »

Hallo Marko,

2 Fragen in einem Thread - etwas unglücklich.

Zur ersten Frage: Den Inhalt eines Berichtes filterst Du am besten über eine Filtertabelle. Du hast ein Unterformular, das im Moment über ein Hauptformular mit einer entsprechenden Verknüpfung versehen ist. Diese Verknüpfung bestimmt den Inhalt, der im Unterformular angezeigt wird. Folglich helfen die gleichen Werte auch, die Abfrage für den Bericht entsprechend zu filtern. Diese Werte könnten über ein Unter-Unterformular in der Filtertabelle abgespeichert werden. Dann wird dort auch gleichzeitig noch der Primärschlüsselwert für den aktuellen Datensatz abgespeichert, so dass Du gegebenenfalls auch nur einen einzigen Datensatz ausgeben kannst.

Zur zweiten Frage: Wenn zu Beginn alle Datensätze angezeigt werden, Du das aber nicht haben möchtest, dann musst Du die Abfrage für das Unterformular entsprechend ändern. Sinn von Wildcards ist es doch gerade, alle Möglichkeiten zuzulassen. Wieso beschränkst Du die Auswahl nicht gleich zu Beginn?

Gruß

Robert
Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von Senekurios »

Hallo Robert,

Danke für die Antwort. Die Filtertabelle habe ich schon, welche immer eine Zeile hat und die aktuellen Filterwerte beinhaltet.

Zum Unter-Unterformular habe ich gleich noch Fragen, es ist halt alles neu für mich und noch etwas verwirrend. Wo muss ich dieses genau anlegen und was wird dort gespeichert, die Filtereinstellungen oder die gefilterten Datensätze?

Meine momentane Struktur des Formulars habe mal als JPG angehängt. Als Filter sind je 3 Textfelder und 3 Listenfelder eingebunden.
Der Bericht selbst liegt in Berichte und soll über einen Button aufgerufen werden.
Dateianhänge
Formularstruktur
Formularstruktur
Formularstruktur.jpg (38.81 KiB) 5117 mal betrachtet
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von RobertG »

Hallo Marko,

Du musst ja irgendwo die Information abspeichern, mit der aktuelle Datensatz des Formulars "Personal_Data" gefunden werden kann. Also entweder im Formular "Personal_Data" über ein Makro oder in einem darunterliegenden Formular mittels Weitergabe der Information von einem Formular zum nächsten.

Da Du den Bericht direkt aus dem Formular aufrufen willst bietet sich das Makro an. Denn für den Aufruf des Berichtes brauchst Du sowieso ein Makro.

Ich nehme einfach einmal an, dass die Datenquelle für "Filter_PersonalData" bereits die Filtertabelle ist. Dann benötigst Du natürlich keine weiteren Filterinformationen - außer eben denen des aktuellen Schlüsselfeldes im Unterformular.

Hier könntest Du also das Makro einbauen, das auch im Handbuch zum Ausdruck von Berichten zum aktuellen Datensatz steht. Allerdings musst Du das etwas abwandeln, weil Dein Formular im Unterformular liegt:

Code: Alles auswählen

oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("Filter_PersonalData").getByName("PersonalData")
Damit Du nicht lange über "grd_PersonalData" nach dem Schlüsselfeld suchst kannst Du auch ein Feld in das Formular "Personal_Data" legen, das wie im Makro "fmtID" heißt. Das Feld wird mit dem Primärschlüsselfeld der Datenquelle von "Personal_Data" verbunden und kann ruhig auf "unsichtbar" gesetzt werden. Daraus liest das Makro den aktuellen Schlüsselwert und speichert ihn in dem Feld "Integer" aus der Filtertabelle "Filter" ab.
Anschließend wird über das Makro der Bericht gestartet, der eben über eine Abfrage, gefiltert durch die Tabelle "Filter", mit Daten versorgt wird.

Gruß

Robert
Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von Senekurios »

Vielen Dank Robert. Ich denke damit komme ich weiter. Werde das am Wochenende ausprobieren und mich ggf. wieder melden, wenn ich es nicht hinbekomme.

Marko
Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von Senekurios »

Update:

Das Makro hat für einen einzelnen Datensatz super geklappt. Zum Ausdrucken aller gefilterten Zeilen musste ich aber einen zweiten Button einfügen und das Makro duplizieren, wobei ich den Ausdruck

Code: Alles auswählen

 SET ""FI_Integer"" = '"+oFeld.GetCurrentValue()+"'
durch

Code: Alles auswählen

 SET ""FI_Integer"" = NULL
ersetz habe, damit das gewünschte Ergebnis herauskommt.

Leider ist mir noch kein besserer Weg bekannt, wie man mehrere IDs bzw. alle IDs in Abhängigkeit der Markierten Zeilen im Tabellensteuerelement überträgt, da der Marker immer nur auf einer Zeile steht.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von RobertG »

Hallo Marko,

ich dachte, dass Du entweder die gesamten gefilterten Daten oder den aktuellen Datensatz haben wolltest. Für die gesamten gefilterten Daten kannst Du doch den Filter selbst nutzen. Oder willst Du über das Markieren von Datensätzen zu den entsprechenden Datensätzen einen gemeinsamen Ausdruck anfertigen?

Gruß

Robert
Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Datenübergabe aus einem Formular in einen Bericht

Beitrag von Senekurios »

ich dachte, dass Du entweder die gesamten gefilterten Daten oder den aktuellen Datensatz haben wolltest. Für die gesamten gefilterten Daten kannst Du doch den Filter selbst nutzen.
Ja, so war es gedacht und ist nun auch umgesetzt. Aber ich konnte es nicht mit nur einem Button bzw. einem Makro lösen, da das Makro ja immer die aktuelle ID des markierten Datensatzes in den Filter schreibt. Ich habe noch keine Möglichkeit gefunden, in einem Tabellensteuerelement keinen Datensatz markiert zu haben (fmtID IS NULL), was die Voraussetzung wäre, dass alle gefilterten Datensätze übernommen werden.
Oder willst Du über das Markieren von Datensätzen zu den entsprechenden Datensätzen einen gemeinsamen Ausdruck anfertigen?
Das wäre die Permiumlösung, wenn ich aus der Filterliste X-Beliebig viele Datensätze markieren könnte (mit Shift oder STRG) und diese dann an den Bericht gesendet werden. Dafür stellt sich für mich zunächst die Frage, wie man dem Filter beibringt, sich mehr als eine ID zu merken. Der Rest dürfte dann recht einfach sein.
Wenn es dazu eine "einfache" Lösung gibt, bin ich für Vorschläge jederzeit offen. Ansonsten belasse ich es erst einmal bei der 2-Buttonlösung. Diese funktiniert ja prima.
Antworten