Werte aus Abfrage in Writer übergeben
Moderator: Moderatoren
Werte aus Abfrage in Writer übergeben
Hallo,
ich bin neu hier, habe bis vor ein paar Tagen so gut wie nie mit Base gearbeitet, aber bisher gut mit Learning by Doing und google vorran gekommen.
Nun stehe ich aber vor einem größeren Problem das ich bisher nicht lösen konnte oder bei google nicht so richtig wusste nach was ich suchen soll.
Mein Problem:
Ich habe 2 Tabellen aus einem mysql Server auf die Base zugreift:
kunden
transporte
Die ich in einer Abfrage zusammenführe um daraus im Writer mit der Seriendruckfunktion eine Rechnug erzeuge.
Daten werden über ein Formular erfasst/bearbeitet.
Soweit klappt das auch alles super und ohne probleme.
Was ich nun machen möchte und daran scheitere:
In meinem Formular möchte ich eine Schaltfläche die ein Script ausführt dass dem Writer sagt, er soll die Daten aus der Abfrage mit der entsprechenden ID in die im Writer-Dokument vorhandenen Felder schreiben.
Gibts hier schon eine Lösung, ein Workaround oder kann mir jemand sagen wie ich es am gescheitesten anstelle?
Liebe Grüße
Marcel
ich bin neu hier, habe bis vor ein paar Tagen so gut wie nie mit Base gearbeitet, aber bisher gut mit Learning by Doing und google vorran gekommen.
Nun stehe ich aber vor einem größeren Problem das ich bisher nicht lösen konnte oder bei google nicht so richtig wusste nach was ich suchen soll.
Mein Problem:
Ich habe 2 Tabellen aus einem mysql Server auf die Base zugreift:
kunden
transporte
Die ich in einer Abfrage zusammenführe um daraus im Writer mit der Seriendruckfunktion eine Rechnug erzeuge.
Daten werden über ein Formular erfasst/bearbeitet.
Soweit klappt das auch alles super und ohne probleme.
Was ich nun machen möchte und daran scheitere:
In meinem Formular möchte ich eine Schaltfläche die ein Script ausführt dass dem Writer sagt, er soll die Daten aus der Abfrage mit der entsprechenden ID in die im Writer-Dokument vorhandenen Felder schreiben.
Gibts hier schon eine Lösung, ein Workaround oder kann mir jemand sagen wie ich es am gescheitesten anstelle?
Liebe Grüße
Marcel
Re: Werte aus Abfrage in Writer übergeben
Falsche Richtung
in Base: Abfrage erstellen in der der/die für den Ausdruck gewünschten Datensätze drin sind
Dann: Writer Dokument öffnen, [F4] drücken und aus den angezeigten Datenquellen die gewünschten Daten als Feld in das Writerdokument einfügen (Drag&Drop der Zeilenüberschrift)
...
g
in Base: Abfrage erstellen in der der/die für den Ausdruck gewünschten Datensätze drin sind
Dann: Writer Dokument öffnen, [F4] drücken und aus den angezeigten Datenquellen die gewünschten Daten als Feld in das Writerdokument einfügen (Drag&Drop der Zeilenüberschrift)
...
g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
ja soweit bin ich auch schon
ich wollts nur etwas komfortabler dass ich mit einem script mir das F4 drücken und datensätze auswählen sparen kann.
Also dass vom Formular über eine Schaltfläche die Variable "ID" an den Writer übergeben wird und dieser den Datensatz aus der Abfrage auswählt und in die Textfelder einsetzt.
ich wollts nur etwas komfortabler dass ich mit einem script mir das F4 drücken und datensätze auswählen sparen kann.
Also dass vom Formular über eine Schaltfläche die Variable "ID" an den Writer übergeben wird und dieser den Datensatz aus der Abfrage auswählt und in die Textfelder einsetzt.
Re: Werte aus Abfrage in Writer übergeben
Sorry dein "Falsche Richtung" zu spät gelesen
hm... also ist es nicht möglich? doof. okay muss ich mich wohl mit abfinden.
Mit dem Report Builder kann man ja leider nicht so schön am Layout basteln wie im Writer
hm... also ist es nicht möglich? doof. okay muss ich mich wohl mit abfinden.
Mit dem Report Builder kann man ja leider nicht so schön am Layout basteln wie im Writer
Re: Werte aus Abfrage in Writer übergeben
"falsche Richtung" heisst nicht, dass es nicht geht, sondern, dass nicht Base dem Writer sagt wo die Daten sind, sondern dass der Writer die Daten selbst holen kann, und zwar aus jeder im System registrierten Datenbank!
Damit nicht die ganze Abfrage in Deinem Serienbrief landet musst Du in der Abfrage die Daten weiter einschränken ... z.B. ein Ja/Nein Feld das für die zu druckenden Daten auf "true" steht, oder Du generierst immer nur für den Ausdruck eine temporäre Tabelle mit den entsprechenden Daten. Auf diese Tabelle/Abfrage/View... beziehen sich dann die Felder im Writerdokument, das Du dann mit
aus Base heraus öffnen kannst...
g
Damit nicht die ganze Abfrage in Deinem Serienbrief landet musst Du in der Abfrage die Daten weiter einschränken ... z.B. ein Ja/Nein Feld das für die zu druckenden Daten auf "true" steht, oder Du generierst immer nur für den Ausdruck eine temporäre Tabelle mit den entsprechenden Daten. Auf diese Tabelle/Abfrage/View... beziehen sich dann die Felder im Writerdokument, das Du dann mit
Code: Alles auswählen
sURL = convertToUrl("Pfad zum Writerdokument das Du öffnen willst")
Doc = starDeskTop.loadComponentFromUrl (sURL, "_blank", 0, Array())
g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
Wohin sollen denn welche Art von Daten aus Base=>Writer?
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
Hallo,
per Makro geht es, habe ich schon gemacht.
1.) aktuelles Formular ansprechen, z.B.
2.) Primarykey (ID) des aktuell selektierten Datensatzes auslesen, z.B mit
3.) Mailemerge auf Sereinbrief durchführen, mit nur einem Datensatz:
Viel Erfolg
Gruß R
per Makro geht es, habe ich schon gemacht.
1.) aktuelles Formular ansprechen, z.B.
Code: Alles auswählen
oform=thiscomponent.drawpage.forms.MainForm
Code: Alles auswählen
nColumnID = oform.findcolumn("ID")
nid = oform.getint(nColumnID)'nid enthält jetzt die aktuelle ID
Code: Alles auswählen
MailMerge = createunoservice("com.sun.star.text.MailMerge")
MailMerge.DataSourceName = "meineDatenbank"
MailMerge.DocumentURL = "URL zum Serienbriefdokument"
Mailmerge.SaveAsSingleFile = 0
MailMerge.CommandType = 0
MailMerge.Command = "meine Tabelle"
MailMerge.Filter = "ID ="+nid'Dies ist die wichtige Zeile, hier wird die ID aus dem Formular an Mailmerge übergeben!!!
MailMerge.SaveAsSingleFile = true
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Tabellenspalte"
MailMerge.OutputType = 2
MailMerge.OutputUrl = "URL zum Ausgabeordner"
Dim MyProps()
MailMerge.execute(MyProps())
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Werte aus Abfrage in Writer übergeben
Servus
Um mal eine Alternative aufzuzeigen, die sich bei meiner Arbeit absolut bewährt hat:
a) Writer-Vorlage erstellen
b) Einfügen -> Feldbefehl -> Andere -> Platzhalter
c) Den Platzhalter so nennen, wie die entsprechende Spalte in der Tabelle / in der Abfrage heisst, deren Inhalt der Platzhalter annehmen soll (für einfache Zwecke einfach nur "Text" als Typ wählen, mit den anderen Varianten, z.B. "Grafik" kann man dann fortgeschrittenere Sachen umsetzen)
d) In einem Makro Pfad zur Vorlage hinterlegen und vom Makro die Platzhalter befüllen lassen
Einfaches Beispiel ist angehängt (beide im gleichen Ordner speichern, über die Schaltfläche in Formular1 die Daten des aktuellen Datensatzes in die erstellte Vorlage schreiben).
Um mal eine Alternative aufzuzeigen, die sich bei meiner Arbeit absolut bewährt hat:
a) Writer-Vorlage erstellen
b) Einfügen -> Feldbefehl -> Andere -> Platzhalter
c) Den Platzhalter so nennen, wie die entsprechende Spalte in der Tabelle / in der Abfrage heisst, deren Inhalt der Platzhalter annehmen soll (für einfache Zwecke einfach nur "Text" als Typ wählen, mit den anderen Varianten, z.B. "Grafik" kann man dann fortgeschrittenere Sachen umsetzen)
d) In einem Makro Pfad zur Vorlage hinterlegen und vom Makro die Platzhalter befüllen lassen
Einfaches Beispiel ist angehängt (beide im gleichen Ordner speichern, über die Schaltfläche in Formular1 die Daten des aktuellen Datensatzes in die erstellte Vorlage schreiben).
- Dateianhänge
-
- VorlagePlaceholderDatenbank.odb
- (13.52 KiB) 981-mal heruntergeladen
-
- Vorlage123.ott
- (8.38 KiB) 391-mal heruntergeladen
Re: Werte aus Abfrage in Writer übergeben
Hallo F3K Total,
ich habe das ganze an meiner Datenbank mal nach Deinem Code ausgetestet.
Wenn ich
setze, gibt er mir alle im Seriendokument angesprochenen Datenbankfelder aus.
Bei
kommt in der Zeile
Basic-Laufzeitfehler
Es ist eine Exception aufgetreten
Type com.sun.star.uno.exception
Message: Mail merge failed. Sorry, no further information available.
Insgesamt sieht das Modul bei mir also so aus:
Hast Du (oder sonst jemand) eine Ahnung, woran's liegen könnte?
Danke
MEcki
ich habe das ganze an meiner Datenbank mal nach Deinem Code ausgetestet.
Wenn ich
Code: Alles auswählen
MailMerge.OutputType = 1
Bei
Code: Alles auswählen
MailMerge.OutputType = 2
Code: Alles auswählen
MailMerge.execute(MyProps())
Es ist eine Exception aufgetreten
Type com.sun.star.uno.exception
Message: Mail merge failed. Sorry, no further information available.
Insgesamt sieht das Modul bei mir also so aus:
Code: Alles auswählen
oform=thiscomponent.drawpage.forms.MainForm
nColumnID = oform.findcolumn("ID_Mitglied")
nid = oform.getint(nColumnID)'nid enthält jetzt die aktuelle ID
MailMerge = createunoservice("com.sun.star.text.MailMerge")
MailMerge.DataSourceName = "FGGM_DB"
MailMerge.DocumentURL = "file:///C:/Daten/FGGM/Förderverein/testbrief.odt"
Mailmerge.SaveAsSingleFile = 0
MailMerge.CommandType = 0
MailMerge.Command = "Mitglieder"
MailMerge.Filter = "ID_Mitglied ="+nid'Dies ist die wichtige Zeile, hier wird die ID aus dem Formular an Mailmerge übergeben!!!
MailMerge.SaveAsSingleFile = true
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Tabellenspalte"
MailMerge.OutputType = 2
MailMerge.OutputUrl = "file:///C:/Temp/"
Dim MyProps()
Danke
MEcki
Re: Werte aus Abfrage in Writer übergeben
Hallo Mecki,
so auf den ersten Blick kann ich keinen Fehler erkennen, kannst Du Beispieldokumente hochladen (verfremdet)
Gruß R
Edit: Welcher Version OOo hast Du?
so auf den ersten Blick kann ich keinen Fehler erkennen, kannst Du Beispieldokumente hochladen (verfremdet)
Gruß R
Edit: Welcher Version OOo hast Du?
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Werte aus Abfrage in Writer übergeben
Hallo FK3 Total,
OOO Version war 3.0.0. habe dann versucht auf ApacheOffice 3.4 zu aktualisieren, was mir aber mein Formular total zerschossen hat.
Daher habe ich jetzt (nur)auf OOO 3.3.0 aktualisiert (Hilfe > über ... ) zeigt 3.0.0 an, aber OOO330m20 (Build 9567).
Beispieldateien habe ich zusammengebaut (Nur eine einfache Mitgliedertabelle und ein Formular mit einer Schaltfläche, hinter der Dein Macro steckt.
Der Einfachheit halber beides in C:\Temp gespeichert.
MailMerge.OutputType = 1 -> Auf Drucker -> funktioniert.
MailMerge.OutputType = 2 -> Dokument -> Fehlermeldung
Danke
MEcki
OOO Version war 3.0.0. habe dann versucht auf ApacheOffice 3.4 zu aktualisieren, was mir aber mein Formular total zerschossen hat.
Daher habe ich jetzt (nur)auf OOO 3.3.0 aktualisiert (Hilfe > über ... ) zeigt 3.0.0 an, aber OOO330m20 (Build 9567).
Beispieldateien habe ich zusammengebaut (Nur eine einfache Mitgliedertabelle und ein Formular mit einer Schaltfläche, hinter der Dein Macro steckt.
Der Einfachheit halber beides in C:\Temp gespeichert.
MailMerge.OutputType = 1 -> Auf Drucker -> funktioniert.
MailMerge.OutputType = 2 -> Dokument -> Fehlermeldung
Danke
MEcki
- Dateianhänge
-
- BriefAnDatensatz.odt
- Seriendokument
- (8.65 KiB) 530-mal heruntergeladen
-
- BriefAnDatensatz.odb
- Datenbank
- (13.43 KiB) 488-mal heruntergeladen
Re: Werte aus Abfrage in Writer übergeben
Hi,
ich habs gefunden, die Zeilen:
müssen zueinander passen, wenn Du einen Prefix im Dateinamen willst, dann brauchst du auch eine Tabellenspalte, die diesen definiert. In deinem Fall müsste es also, wenn du den Nachnamen als Prefix verwenden möchtest, so lauten:
Gruß und viel Erfolg,
R
Edit:
ich habs gefunden, die Zeilen:
Code: Alles auswählen
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Tabellenspalte"
Code: Alles auswählen
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Name"
R
Edit:
Das ist darauf zurückzuführen, dass 3.4 Formulare im Print-Layout und nicht wie vorher im Web-Layout, öffnet, ein Bug. LO hat den BUG in Version 4.6 bereits wieder eleminiert, das er bei OOo jetzt auftritt ist echt Mist. Mit diesem Makro, eingebaut im Formularentwurfsmodus unter Extras/Anpassen/ "Ansicht wurde erzeugt" bekommst du deine gewohnte Ansicht zurück. Speichern (Formular und DB-Dokument) nicht vergessen!MEcki hat geschrieben:OOO Version war 3.0.0. habe dann versucht auf ApacheOffice 3.4 zu aktualisieren, was mir aber mein Formular total zerschossen hat.
Code: Alles auswählen
sub swap_to_Weblayout
odoc = ThisComponent
oCurrentController = odoc.CurrentController
oViewSettings = oCurrentController.ViewSettings
oViewSettings.ShowOnlineLayout = true
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Werte aus Abfrage in Writer übergeben
Hallo F3K Total,
besten Dank für Deine Hilfe. Funktioniert bestens. Nachdem ich mit der Funktion etwas für unsere Schriftführerin einbauen wollte, kommen mir da völlig neue Ideen, um auch mir das Leben mal wieder etwas zu erleichtern. (Versendung von Rechnungen (PDF-Anhang) per email über ein Makro). Die wären dann aber wahrscheinlich einen eigenen Beitrag wert.
Die Fragestellung, ob ApacheOffice oder LibreOffice ist sicherlich auch eher woanders zu klären. Deinen Codepart zur Formularanzeige versuche ich dann bei Gelegenheit.
Was meinen Teil angeht, wäre somit die eigentliche Frage von masl umfassend beantwortet
MEcki
besten Dank für Deine Hilfe. Funktioniert bestens. Nachdem ich mit der Funktion etwas für unsere Schriftführerin einbauen wollte, kommen mir da völlig neue Ideen, um auch mir das Leben mal wieder etwas zu erleichtern. (Versendung von Rechnungen (PDF-Anhang) per email über ein Makro). Die wären dann aber wahrscheinlich einen eigenen Beitrag wert.
Die Fragestellung, ob ApacheOffice oder LibreOffice ist sicherlich auch eher woanders zu klären. Deinen Codepart zur Formularanzeige versuche ich dann bei Gelegenheit.
Was meinen Teil angeht, wäre somit die eigentliche Frage von masl umfassend beantwortet
MEcki
Re: Werte aus Abfrage in Writer übergeben
Hi,
versuche mal diese .odb mit der obigen .odt z.B. vom Desktop aus
Die Datenbank muss unter Extras/Optionen/LibreOffice Base/Datenbanken angemeldet werden.
Die Pfade im Makro müssen angepasst werden
versuche mal diese .odb mit der obigen .odt z.B. vom Desktop aus
Die Datenbank muss unter Extras/Optionen/LibreOffice Base/Datenbanken angemeldet werden.
Die Pfade im Makro müssen angepasst werden
Code: Alles auswählen
oMailMerge.DocumentURL = "file:///C:/Users/<USER>/Desktop/BriefAnDatensatz.odt"
Code: Alles auswählen
oMailMerge.OutputUrl = "file:///C:/tmp/"
- Dateianhänge
-
- BriefAnDatensatz.odb
- (13.27 KiB) 305-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Werte aus Abfrage in Writer übergeben
Der obere Pfad zeigt auf die .odt, der untere auf das Verzeichnis, wohin das Ergebnis geschrieben werden soll.
Desktop hatte ich nur als Beispiel genannt.
Gruß R
Desktop hatte ich nur als Beispiel genannt.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO