Seite 1 von 1

[gelöst] Base->Makro->Writer->Feldbefehl „Platzhalter“

Verfasst: Do 7. Mai 2015, 14:48
von Dami
Habe hier eine inzwischen eine gut funktionierende Praxisverwaltung auf die Beine gestellt.
Jetzt bin ich dabei an dem „Korrespondenz-Modul“ zu basteln um das auch zu Papier zu bringen und stoße auf ein Prob wo ich nicht weiterkomme.
In Base habe ich Maske(n) erstellt in der die Daten die in den Brief/Anschreiben/Rechnung/ …
kommen generiert/zusammengetragen werden.
Mit Hilfe eines Makros wird ein Writer-Doc geladen und die Felder in die Feldbefehl/Platzhalter übertragen.

So weit so gut, jetzt mein Problem:
Mir gelingt es nicht die unbelegten !Zeilen! mit dem !Platzhalter! (zB. Postfach wenn Straße und umgekehrt)
mit Writer Bordmitteln (Bereich – Ausblenden) auszublenden.
Hat jemand hier ein Trick wie es doch möglich sein könnte ?

Da es so anscheinend nicht möglich ist, dachte ich an folgende Lösung:
Wenn die Zeile gelöscht werden soll übergebe ich an den Platzhalter entweder
Backspace ( CHR(08) ) oder Delete ( CHR(127) ), nur soweit komme ich nicht,
da mir das Makro mit der Fehlermeldung „Objektvariable nicht belegt“ den Dienst quittiert.
Was mache ich hier falsch ??? :?:

Das Makro:

Code: Alles auswählen

SUB Textfelder_Fuellen (oEvent AS OBJECT)
 DIM oForm AS OBJECT
 DIM aForms AS OBJECT
 DIM oColumns AS OBJECT
 DIM oDB AS OBJECT
 DIM oNewDoc AS OBJECT
 DIM oTextfields AS OBJECT
 DIM oTextfield AS OBJECT
 DIM stColumnname AS STRING
 DIM stDir AS STRING
 DIM inIndex AS INTEGER
 DIM stTag AS STRING
            stTag = oEvent.Source.Model.Tag 
            oForms() = Split(stTag, ",")
            oForm = thisComponent.Drawpage.Forms.MainForm.SubForm
            oColumns = oForm.Columns
            oDB = ThisComponent.Parent	
            stDir = "file:///Users/.........../Korrespondenz/0_Vorlagen/"
            stDir = stDir & (Trim(aForms(0)))
	REM Vorlage öffnen
	DIM args(0) AS NEW com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = True
	oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)
	REM Textfelder holen
	oTextfields = oNewDoc.Textfields.createEnumeration
	DO WHILE oTextfields.hasMoreElements
	oTextfield = oTextfields.nextElement
		IF oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
			stColumnname = oTextfield.PlaceHolder
			IF oColumns.hasByName(stColumnname) THEN
				inIndex = oForm.findColumn(stColumnname)
				oTextfield.Anchor.String = oForm.getString(inIndex) 
				IF oForm.getString(inIndex) = "_" THEN
				    oTextfield.Anchor.String = "CHR(08)" ' <-- Die böse Stelle :evil:  :oops:
				END IF
			END IF
		END IF
	LOOP
END SUB

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Verfasst: Do 7. Mai 2015, 18:51
von F3K Total
Hi,
versuch mal

Code: Alles auswählen

oTextfield.Anchor.String = CHR(08) ' <-- Die böse Stelle :evil:  :oops:
ohne Anführungszeichen.
Gruß R

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Verfasst: Fr 8. Mai 2015, 10:45
von Dami
Hallo Robert,
leider keine Abhilfe ! :(
Egal was ich eintrage
z.B:
oTextfield.Anchor.String = "Hallo"
oTextfield.Anchor.String = CHR(08)
...
bekomme ich ein Laufzeitfehler "Objektvariable nicht belegt" in der Zuweisung.
:?: :?: :?:

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Verfasst: Fr 8. Mai 2015, 16:26
von F3K Total
Tja, im Nebel stochern ist doof. Lade die beteiligten Dateien, ggf. verfremdet hier hoch, dann können wir schauen.
Gruß R (F3K Total, Robert unterschreibt mit Robert)

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Verfasst: Fr 8. Mai 2015, 20:00
von RobertG
Hallo Dami,

ich habe jetzt auch einmal ein bisschen darüber gegrübelt und bei mir die Eigenschaften zum Textfeld genauer angesehen. Spontan komme ich da auch auf keine Möglichkeit, ein Feld mit Absatz zu löschen.

Ich würde das Problem von der anderen Seite her aufzäumen:
Postfach wenn Straße und umgekehrt
Warum gehst Du da nicht mit einer Abfrage ran?

Code: Alles auswählen

SELECT IFNULL("Postfach","Straße") AS "Zustellung_ueber" FROM "Adresse"
Dann benötigst Du nur einen Platzhalter und die korrekte Befüllung kommt über die Abfrage zustande.

Gruß

Robert

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Verfasst: Mo 11. Mai 2015, 17:00
von Dami
Hallo,
erstmals sorry an F3K Total für die falsche Ansprache :oops:

@ Robert:
Ja und nein, da in meiner z.B.: Anschrift mehrere Leerzeilen vorkommen
wäre der Aufwand recht hoch und soll nicht nur bei der Anschrift zum Einsatz kommen.

die Platzhalter / Zeile 1 -> Vorname, Nachname oder Firma
der Platzhalter / Zeile 2 -> Abteilung (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
die Platzhalter / Zeile 3 -> Ansprechpartner (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
der Platzhalter / Zeile 4 -> Postfach (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
der Platzhalter / Zeile 5 -> Strasse (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
die Platzhalter / Zeile 6 -> PLZ Ort
der Platzhalter / Zeile 7 -> Fax (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro

Aber ! Problem gelöst !!! :D

Code: Alles auswählen

SUB Textfelder_Fuellen (oEvent AS OBJECT)
	DIM oForm AS OBJECT
                DIM aForms AS OBJECT
	DIM oColumns AS OBJECT
	DIM oDB AS OBJECT
	DIM oNewDoc AS OBJECT
	DIM oTextfields AS OBJECT
	DIM oTextfield AS OBJECT
	DIM oViewCursor AS OBJECT
	DIM stColumnname AS STRING
	DIM stDir AS STRING
	DIM inIndex AS INTEGER
	DIM stTag AS STRING
	stTag = oEvent.Source.Model.Tag
	aForms() = Split(stTag, ",")

	oForm = thisComponent.Drawpage.Forms.MainForm.SubForm   'Daten in Base (hier .../SubForm)
	oColumns = oForm.Columns
	oDB = ThisComponent.Parent
                stDir = "file:///Users/.../"
	stDir = stDir & (Trim(aForms(0))) 'Platz 1 - Vordruck
	REM Vorlage Öffnen
	DIM args(0) AS NEW com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = True
	oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)
	REM Textfelder holen
	oViewCursor = oNewDoc.CurrentController.getviewCursor()
	oTextfields = oNewDoc.Textfields.createEnumeration
	
	DO WHILE oTextfields.hasMoreElements()
	oTextfield = oTextfields.nextElement()
	IF oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
		stColumnname = oTextfield.PlaceHolder
		IF oColumns.hasByName(stColumnname) THEN
	  		inIndex = oForm.findColumn(stColumnname)
			oViewCursor.GotoRange(oTextfield.Anchor,false)
			oViewCursor.String = oForm.getString(inIndex)
				IF oForm.getString(inIndex) = "_" THEN
				   REM MsgBox oForm.getString(inIndex)
				   oViewCursor.String = "" ' String leer machen; hier funktioniert die Zuweisung
				   oViewCursor.goRight (1, true) ' mit dieser und der folgender Zeile lösche ich den Platzhalter
				   oViewCursor.String = ""
				END IF
		END IF
	END IF
	LOOP
END SUB
Danke euch
Dami