Hallo derdentrollhasst, hallo Robert!
Vielen Dank erst mal für die Antworten.
Über einen Serienbrief funktioniert die Sache schon, allerdings ist der ein oder andere Mitarbeiter mit dem 'F4' und 'Daten in Felder' überfordert.
Daher kam mir die - per Zufall - gefundene Lösung mit der Übergabe der Daten über Platzhalter sehr gelegen. Dann kann ich im Formular einfach Schalter für die zu druckenden Dokumente anlegen.
Was meine Programmierkenntnisse angeht, so bin ich leider nicht so doll ausgestattet. Vor 25 Jahren konnte ich vielleicht noch mit Turbo Pascal und Basic punkten. Ergo, ich bin nicht ganz unbedarft was Programmierung angeht, aber von 'Können' kann keine Rede sein.
Ich versuche nun zwei verschiedenen Ansätzen nachzugehen:
1. Das Formular basiert auf einer Abfrage und kommt so ohne Unterformular aus.
Das funktioniert auch soweit mit der Übergabe an das Writer-Dokument, allerdings habe ich hier nochg so meine Probleme wie ich die Darstellung / Auswahl der Adresse im Formular vernünftig gestalten kann. Aber ich teste das erst mal weiter.
2. mit Formular (Vermietungen) und Unterformular (zugehörige Adresse).
Hier klappt die Übergabe nicht. Mein letzter Versuch war:
Code: Alles auswählen
Sub Vertrag_oeffnen
oDoc = thisComponent
oForm = oDoc.Drawpage.Forms.getByName("MainForm")
oForm2 = oForm.getByName("SubForm")
oColumns = oForm.Columns
oColumns2 = oForm2.Columns
REM Pfad zur Vorlage zusammensetzen
Globalscope.BasicLibraries.loadLibrary("Tools")
sURL = oDoc.Parent.URL
sURL = DirectoryNameoutofPath(sURL,"/") & "/"
sURL = sURL & "Mietvertrag.ott"
REM Vorlage öffnen
Dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "AsTemplate"
args(0).Value = True
newDoc = StarDesktop.loadComponentFromURL(sURL,"_blank",0,args)
REM Textfelder holen
enumTextfields = newDoc.Textfields.createEnumeration
REM Form1
Do While enumTextfields.hasMoreElements
thisTextfield = enumTextfields.nextElement
If thisTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") Then
sColumnname = thisTextfield.PlaceHolder
If oColumns.hasByName(sColumnname) Then
nIndex = oForm.findColumn(sColumnname)
thisTextfield.Anchor.String = oForm.getString(nIndex)
End If
End If
Loop
REM Form2
Do While enumTextfields.hasMoreElements
thisTextfield = enumTextfields.nextElement
If thisTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") Then
sColumnname = thisTextfield.PlaceHolder
If oColumns2.hasByName(sColumnname) Then
nIndex = oForm2.findColumn(sColumnname)
thisTextfield.Anchor.String = oForm2.getString(nIndex)
End If
End If
Loop
End Sub
Der Code erzeugt zwar keinen Fehler, aber liefert auch nicht die Daten der Felder aus dem SbForm.
Am liebsten wäre mir im Ergebnis ein Formular, in dem ID und Name der Adresse angezeigt werden und die Auswahl der Adresse über ein zweites Formular erfolgt, das über einen Schalter aufgerufen wird und die Adress-ID zurückliefert. So könnte in diesem 2. Formular auch eine neue Adresse angelegt werden.
Über Vorschläge würde ich mich freuen.
Grüße Christian