💚 BITTE helfen Sie uns NOCH HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Formularfilter auch für Bericht verwenden
-
- Beiträge: 763
- Registriert: Fr 28. Mär 2014, 10:41
Formularfilter auch für Bericht verwenden
Hallo,
meiner Datenbank fehlt noch eine Funktion, nämlich die Übergabe des gerade angezeigten Kunden mit seinen Daten an ein Tabellenblatt.
Der Kunde wird per Formularfilter aus der Kundentabelle geholt mit dem Makro von hier: http://www.libreoffice-forum.de/viewtop ... 10&t=14694
Auf dem Formular hätte ich gern einen Button, der einen Bericht startet und dafür die gleiche Filterung verwendet, also eine Tabelle mit den Feldern des gerade angezeigten Kunden erstellt. Gibt es dafür einen Weg?
Und wenn ja:
Auf dem Formularblatt ist neben Name und Adresse des Kunden auch ein Tabellenkontrollfeld mit einem Unterformular für die Kontakte zu dem Kunden (Telefon, Fax, Mail usw.). (Wie) kann man diese Felder in die gleiche Berichtstabelle bringen?
Gruß
Freischreiber
meiner Datenbank fehlt noch eine Funktion, nämlich die Übergabe des gerade angezeigten Kunden mit seinen Daten an ein Tabellenblatt.
Der Kunde wird per Formularfilter aus der Kundentabelle geholt mit dem Makro von hier: http://www.libreoffice-forum.de/viewtop ... 10&t=14694
Auf dem Formular hätte ich gern einen Button, der einen Bericht startet und dafür die gleiche Filterung verwendet, also eine Tabelle mit den Feldern des gerade angezeigten Kunden erstellt. Gibt es dafür einen Weg?
Und wenn ja:
Auf dem Formularblatt ist neben Name und Adresse des Kunden auch ein Tabellenkontrollfeld mit einem Unterformular für die Kontakte zu dem Kunden (Telefon, Fax, Mail usw.). (Wie) kann man diese Felder in die gleiche Berichtstabelle bringen?
Gruß
Freischreiber
Zuletzt geändert von Freischreiber am Mo 17. Jun 2019, 18:15, insgesamt 2-mal geändert.
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Formularfilter auch für Bericht verwenden
Moin,
schön ist anders.
schön ist anders.
- Wenn du unbedingt den Filter setzen möchtest, geht das Beispielsweise so, die 177 muss natürlich per Code gesetzt werden:Da wird der Bericht erst im Bearbeitungsmodus geöffnet, der Filter gesetzt, geschlossen und im Export-Modus geöffnet.
Code: Alles auswählen
Sub Set_Report_Filter oRep = thisdatabasedocument.ReportDocuments.getbyname("Adressen") oRep.opendesign oRep.component.Filter = "( ""Adressen"".""ID"" = 177 )" oRep.store oRep.close (-1) oRep.open End Sub
- Eine zweite Möglichkeit ist es, eine vorhandene Abfrage als Berichstgrundlage zu verwenden. Hier "qAdressen", diese kann per Makro modifiziert werden, so dass sie genau den Datensatz des aktuellen Kunden filtert. Auch hier muss die 177 wieder per Code gesetzt werden.
Code: Alles auswählen
Sub open_Report_modify_Query aQueries = thisdatabasedocument.datasource.QueryDefinitions oQuery = aQueries.getbyname("qAdressen") oQuery.Command = "SELECT ""ID"", ""Nachname"", ""Vorname"", ""Strasse"", ""PLZ"", ""Ort"" FROM ""Adressen"" WHERE ""ID"" = 177" thisdatabasedocument.ReportDocuments.getbyname("Adressen").open end sub
- Am einfachsten ist es wiedermal mit Filtertabelle. Wenn der Filterwert im Formular gesetzt ist, kann er überall (jedes Formular, jede Abfrage, jede Ansicht und darüber auch im Bericht) genutzt werden. In diesem Fall kannst du eine Abfrage oder Ansicht als Berichtsgrundlage verwenden die sich auf den Filterwert bezieht, ala:
Aber davon möchtest du ja nix wissen ...
Code: Alles auswählen
Select * from "Adressen" where "ID" = (Select "F_ID" from "Filter")
Windows 10: AOO, LO Linux Mint: AOO, LO
-
- Beiträge: 763
- Registriert: Fr 28. Mär 2014, 10:41
Re: Formularfilter auch für Bericht verwenden
Hallo R,
für meinen subjektiven Blick sehen die ersten beiden Lösungen sehr schön aus... ich versuche nur gerade, sie ganz zu verstehen:
"Per Code" heißt: Bei der ersten (bzw. bei beiden) muß ich die ID aus dem Formular holen? Das Feld heißt fmtID und enthält den Primärschlüssel der gerade angezeigten Adresse.
Vermutlich mit
Dann hätte ich die 177 aus deinem Code?
Und die Unterabfrage für Telefonnummern würde ich im Berichtsdokument machen?
Bei der zweiten gibt es zwei Abfragen?
Die qAdressen muß als Abfrage in Base gespeichert sein und liefert alle Adressen?
Und aus diesen allen Adressen wird mit
dann die gewünschte gefiltert?
Und vermutlich könnte ich so auch gleich im Makrotext die Telefonnummern dazu holen, per Unterabfrage?
Gruß
Freischreiber
für meinen subjektiven Blick sehen die ersten beiden Lösungen sehr schön aus... ich versuche nur gerade, sie ganz zu verstehen:
"Per Code" heißt: Bei der ersten (bzw. bei beiden) muß ich die ID aus dem Formular holen? Das Feld heißt fmtID und enthält den Primärschlüssel der gerade angezeigten Adresse.
Vermutlich mit
Code: Alles auswählen
oForm = thisComponent.Drawpage.Forms.getByName("MainForm")
oFeld = thisComponent.Drawpage.Forms.getByName("MainForm").getByName("fmtID")
stFilterwert = LCASE(oFeld.text)
Und die Unterabfrage für Telefonnummern würde ich im Berichtsdokument machen?
Bei der zweiten gibt es zwei Abfragen?
Die qAdressen muß als Abfrage in Base gespeichert sein und liefert alle Adressen?
Und aus diesen allen Adressen wird mit
Code: Alles auswählen
oQuery.Command = "SELECT ""ID"", ""Nachname"", ""Vorname"", ""Strasse"", ""PLZ"", ""Ort"" FROM ""Adressen"" WHERE ""ID"" = 177"
Und vermutlich könnte ich so auch gleich im Makrotext die Telefonnummern dazu holen, per Unterabfrage?
Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Formularfilter auch für Bericht verwenden
Also,
wenn schon ohne Filtertabelle, dann empfehle ich Variante 2.
Wenn es sich, wie die Kennzeichnung fmtID vermuten läßt, bei diesem Feld um ein formatiertes Feld handelt, dann liest du die aktuelle ID nicht mit LCASE aus, das ist ein Befehl für Text. Dann nimm CurrentValue.Beispiel anbei.
Viel Erfolg
Gruß R
wenn schon ohne Filtertabelle, dann empfehle ich Variante 2.
Nein, es gibt nur eine einzige Abfrage, auf der der Bericht basiert. Mit dem Makro änderst du tatsächlich die Abfrage, öffne sie einmal im Bearbeitungsmodus, nachdem du das Makro ausgeführt hast.Freischreiber hat geschrieben:Bei der zweiten gibt es zwei Abfragen?
Die qAdressen muß als Abfrage in Base gespeichert sein und liefert alle Adressen?
Wenn es sich, wie die Kennzeichnung fmtID vermuten läßt, bei diesem Feld um ein formatiertes Feld handelt, dann liest du die aktuelle ID nicht mit LCASE aus, das ist ein Befehl für Text. Dann nimm CurrentValue.
Code: Alles auswählen
Sub open_Report_modify_Query
oFeld = thisComponent.Drawpage.Forms.getByName("MainForm").getByName("fmtID")
nFilterwert = oFeld.CurrentValue
aQueries = thisdatabasedocument.datasource.QueryDefinitions
oQuery = aQueries.getbyname("qAdressen")
oQuery.Command = "SELECT ""ID"", ""Nachname"", ""Vorname"", ""Strasse"", ""PLZ"", ""Ort"" FROM ""Adressen"" WHERE ""ID"" = " + nFilterwert
thisdatabasedocument.ReportDocuments.getbyname("Bericht").open
end sub
Denke, dass ist nicht nötig, du kannst die Abfrage per Makro genau so aufbauen, wie du sie für den Bericht benötigst.Freischreiber hat geschrieben:Und die Unterabfrage für Telefonnummern würde ich im Berichtsdokument machen?
Viel Erfolg
Gruß R
- Dateianhänge
-
- Adressen_one_row_report_query.zip
- nur entpacken
- (129.53 KiB) 183-mal heruntergeladen
Zuletzt geändert von F3K Total am Sa 13. Feb 2016, 11:43, insgesamt 1-mal geändert.
Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Formularfilter auch für Bericht verwenden
Hallo Freischreiber,
was spricht für Dich denn eigentlich gegen eine Filtertabelle? Das ist das, was mich an diesem Thread am meisten interessiert. Da habe ich wohl vorher irgendetwas nicht mit bekommen.
Gruß
Robert
was spricht für Dich denn eigentlich gegen eine Filtertabelle? Das ist das, was mich an diesem Thread am meisten interessiert. Da habe ich wohl vorher irgendetwas nicht mit bekommen.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Formularfilter auch für Bericht verwenden
Hallo Freischreiber,
wenn Du noch ein paar Tage warten kannst, gibt's auf LO-Extensions was Neues. Ich bin gerade dabei, das zu finishen, aber eine Alpha-Version mit einer chaotischen Dokumentation hab' ich Dir hier angehängt. Du wärest also ein Tester
Das Prinzip:
Der Report ist ein externes Writer-Dokument.
In dieser Berichtsvorlage gibt es Tabellen, diese werden mit Daten aus Abfragen/SQLs gefüllt.
Pro Tabelle im Writer-Dokument also eine Abfrage (oder ein SQL-String)
Wie kommt das Writer-Dokument an die Abfragen? - per Benutzerdefinierter Eigenschaft.
Pro Tabelle die zu füllen ist eine solche anlegen. Syntax:
Und dann?
Nachdem die Tabellen alle gefüllt wurden kann der "Bericht" automatisch als odt oder pdf abgepeichert werden, oder auch (wenn ein Programm definiert wurde) das pdf geöffnet werden, oder es wird der "Bericht" als Basic-Objekt an das aufrufende Makro zurückgegeben oder das pdf/odt wird als Anhang per Mail versandt ... oder der fertige "Bericht" wird einfach nur geöffnet.
Aufruf der Funktion - sehr felxibel:
wenn Du noch ein paar Tage warten kannst, gibt's auf LO-Extensions was Neues. Ich bin gerade dabei, das zu finishen, aber eine Alpha-Version mit einer chaotischen Dokumentation hab' ich Dir hier angehängt. Du wärest also ein Tester
Das Prinzip:
Der Report ist ein externes Writer-Dokument.
In dieser Berichtsvorlage gibt es Tabellen, diese werden mit Daten aus Abfragen/SQLs gefüllt.
Pro Tabelle im Writer-Dokument also eine Abfrage (oder ein SQL-String)
Wie kommt das Writer-Dokument an die Abfragen? - per Benutzerdefinierter Eigenschaft.
Pro Tabelle die zu füllen ist eine solche anlegen. Syntax:
- Name der Eigenschaft: "brx.table.Tabellenname.query"
- Wert der Eigenschaft: "Datenquelle.Abfrage1" oder "Datenquelle.Select X from y" etc...
Und dann?
Nachdem die Tabellen alle gefüllt wurden kann der "Bericht" automatisch als odt oder pdf abgepeichert werden, oder auch (wenn ein Programm definiert wurde) das pdf geöffnet werden, oder es wird der "Bericht" als Basic-Objekt an das aufrufende Makro zurückgegeben oder das pdf/odt wird als Anhang per Mail versandt ... oder der fertige "Bericht" wird einfach nur geöffnet.
Aufruf der Funktion - sehr felxibel:
- Icon in einer Symbolleiste
- Button in einem Writerdokument
- Button in einem Base-Formular
- per Code
- Dateianhänge
-
- BRX.zip
- (139.72 KiB) 184-mal heruntergeladen
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
-
- Beiträge: 763
- Registriert: Fr 28. Mär 2014, 10:41
Re: Formularfilter auch für Bericht verwenden
Hallo!
@ R:
Es klappt sehr gut mit der zweiten Methode! Im Moment bekomme ich nur die Adresse mehrfach, für jeden Kontakt (Mail, Telefon, Fax) einmal, was vermutlich an meiner fehlerhaften Abfrage liegt. Die heißt im Moment:
weil eben eine 1:n-Verbindung zu den Rufnummern usw. besteht.
Daß die Abfrage sich ändert, merkt man auch an der Base-Datei: Die will gespeichert werden vor dem Schließen.
Ich steh nur schon wieder auf dem Schlauch mit diesem SQL: wie hängt man weitere Kontakte einfach an, ohne die Adresse zu wiederholen? Group by oder so?
@ RobertG:
Ursprünglich baute mein Adressformular auf einer Parameterabfrage auf, ohne eigene Filterung. Dann kamen Makros dazu. Und dann erst kam der Wunsch, im Formular zu filtern.
- Mit der Filtertabelle stimmte an den Makros nichts mehr... mit Formularfilter konnten die Makros so bleiben, wie sie waren.
- Die Konstruktion, daß mein "Hauptdatensatz" nur ein Unterformular eines Suchfeldes sein soll, läuft irgendwie meiner bildlichen Vorstellung zuwider.
- Schließlich: Wenn man mit der Maus einmal auf das Suchfeld klickt, verschwinden ohne Vorwarnung alle Änderungen... das könnte man bestimmt per Makro in den Griff kriegen, aber dieser Ansatz ist mir eben nicht geheuer.
@ gogo:
Vielen Dank für das Angebot, aber "Alpha", "chaotisch" und "Tester" ist mir auch nicht geheuer. Das braucht andere Kaliber als mich.
Gruß
Freischreiber
@ R:
Es klappt sehr gut mit der zweiten Methode! Im Moment bekomme ich nur die Adresse mehrfach, für jeden Kontakt (Mail, Telefon, Fax) einmal, was vermutlich an meiner fehlerhaften Abfrage liegt. Die heißt im Moment:
Code: Alles auswählen
oQuery.Command = " SELECT ""t-adressen"".""Nachname"", ""t-adressen"".""Vorname"", ""t-adressen"".""Straße"", ""t-adressen"".""PLZ"", ""t-adressen"".""Ort"", ""t-kontakte"".""Nummer"", ""t-kontaktarten"".""Kontaktart"" FROM ""t-kontakte"", ""t-adressen"", ""t-kontaktarten"" WHERE ""t-kontakte"".""AdressID"" = ""t-adressen"".""ID"" AND ""t-kontakte"".""KontaktartID"" = ""t-kontaktarten"".""ID"" AND ""t-adressen"".""ID"" = " + nFilterwert
Daß die Abfrage sich ändert, merkt man auch an der Base-Datei: Die will gespeichert werden vor dem Schließen.
Ich steh nur schon wieder auf dem Schlauch mit diesem SQL: wie hängt man weitere Kontakte einfach an, ohne die Adresse zu wiederholen? Group by oder so?
@ RobertG:
Ursprünglich baute mein Adressformular auf einer Parameterabfrage auf, ohne eigene Filterung. Dann kamen Makros dazu. Und dann erst kam der Wunsch, im Formular zu filtern.
- Mit der Filtertabelle stimmte an den Makros nichts mehr... mit Formularfilter konnten die Makros so bleiben, wie sie waren.
- Die Konstruktion, daß mein "Hauptdatensatz" nur ein Unterformular eines Suchfeldes sein soll, läuft irgendwie meiner bildlichen Vorstellung zuwider.
- Schließlich: Wenn man mit der Maus einmal auf das Suchfeld klickt, verschwinden ohne Vorwarnung alle Änderungen... das könnte man bestimmt per Makro in den Griff kriegen, aber dieser Ansatz ist mir eben nicht geheuer.
@ gogo:
Vielen Dank für das Angebot, aber "Alpha", "chaotisch" und "Tester" ist mir auch nicht geheuer. Das braucht andere Kaliber als mich.
Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Formularfilter auch für Bericht verwenden
nur Mut
... allerdings ist nur mehr die Dokumentation/Anleitung chaotisch, der Code ist im Großen und Ganzen fertig. Mehr als ein paar Fehlermeldungen handelt man sich da nicht ein.
... allerdings ist nur mehr die Dokumentation/Anleitung chaotisch, der Code ist im Großen und Ganzen fertig. Mehr als ein paar Fehlermeldungen handelt man sich da nicht ein.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Formularfilter auch für Bericht verwenden
Na, wenn du mehrere Kontakte zu einer Adresse im Bericht zeigen willst, musst du im Bericht nach den Adressfeldern gruppieren. Die Kontakte sind dann im Detailbereich, die Adresse im dazugehörigen Kopf. Du verwendest den OracleReportBuilder?Freischreiber hat geschrieben: Ich steh nur schon wieder auf dem Schlauch mit diesem SQL: wie hängt man weitere Kontakte einfach an, ohne die Adresse zu wiederholen? Group by oder so?
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO
-
- Beiträge: 763
- Registriert: Fr 28. Mär 2014, 10:41
Re: Formularfilter auch für Bericht verwenden
Vermute ich... das, was bei LO mitinstalliert wurde. Ich versuche es mit dem Assistenten und produziere aber nur Chaos:Du verwendest den OracleReportBuilder?
Da wird etwas eingefügt zwischen Kopf- und Detailbereich...
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️