Formular: Pflichtfelder, vorhandene Dok. dem akt. anfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfügen

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von komma4 » Mi, 23.03.2011 00:45

Code-Beispiele sind bestimmt hier im Forum zu finden

neues Dokument aus "Standardvorlage"

Code: Alles auswählen

sUrl = "private:factory/swriter" 

' hidden: Dokument im Hintergrund erstellen
 Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
 FileProperties(0).Name = "Hidden"
 FileProperties(0).Value = TRUE

' 
 oTextDocument = _
  StarDesktop.loadComponentFromURL( _
  sURL, "_blank", 0, FileProperties ) 

benutzerdefinierte Vorlage mit...

Code: Alles auswählen

sURL = ConvertToURL("/home/USER/Documents/vorlagen/newCalc.odt")
und zusätzlicher Dateieigenschaft

Code: Alles auswählen

Dim FileProperties(1) As New com.sun.star.beans.PropertyValue
FileProperties(1).Name = "AsTemplate"
FileProperties(1).Value = true

TextCursor zum Einfügen erzeugen

Code: Alles auswählen

 oText = oTextDocument.Text 
 oCursor = oText.createTextCursor() 
Beispiele zur Formatierung (Vorlagen einsetzen, Absätze etc.) im Code meiner Extension ATL2 - AutoTextListe2 oder BTL2 - BasicTextListe2

nach dem Erzeugen anzeigen

Code: Alles auswählen

' Dokument anzeigen
oTextDocument._
getCurrentController()._
getFrame()._
getContainerWindow()._
Visible= TRUE
Dokumente als "Textbausteine" anhängen: mit loadDocumentFromURL


Noch Fragen, Kienzle?

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von opiWahn » Di, 22.03.2011 22:20

@ Winfried: hast du ein Beispiel parat?
Das Problem des Anwenders liegt darin, daß er in Zukunft mit dem Tablet zum Kunden geht um dort nicht nur ggf. zu reparieren oder neue Aufträge zu generieren, sondern auch zum TÜV-Zertifizierten prüfen. Je "Prüfteil" ist ein Dokument vom Kunden zu unterschreiben. Im Extremfall können das bis zu 100 Prüfberichte je Kunde sein. Der Techniker soll also seiner Standardform z.B. den Prüfbericht x-mal hinzu fügen können, während die Grunddaten aus der Standardform "durchgereicht" werden. Der Kunde unterschreibt digital.

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von komma4 » Di, 22.03.2011 20:31

Da Formular ist schreibgeschützt - da wird nichts angehängt.

Vorschlag: wenn alle Informationen gesammelt sind erzeuge ein neues Dokument und schreibe die Infos plus Anhänge da rein.
Vergiss die "Erweiterung des Formulars" durch Anhänge...

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von opiWahn » Di, 22.03.2011 16:15

ich hab jetzt mal folgendes probiert und auf einen Button (Aktion ausführen) gelegt. Es wird zwar nicht angemeckert, aber passieren tut auch nichts

Code: Alles auswählen

Sub AnlageA
oDoc = thisComponent
oController = oDoc.getCurrentController()
set oViewCursor = oDoc.CurrentController.getViewCursor()
set oTextCursor = oDoc.Text.createTextCursorByRange(oViewCursor.getStart())
oTextCursor.InsertDocumentFromURL "file:///H:/Documents/Projekte/Arbeit/PDF Formular/prototype_form_anlage a.odt", Array()
msgbox "Ausgeführt" 
End Sub
auf dem aktiven Formular liegt der Cursor in der letzten Zeile, die anzufügende Form hat einen automatischen Seitenumbruch "davor"
Ist das Erhalten des Formulars (als solches) denn Voraussetzung?
Reicht es nicht, wenn die eingegebenen Informationen gespeichert werden?
nicht unbedingt: am schluß soll das ganze "individuelle" paket in ein unveränderbares pdf konvertiert werden.

Ein anderer Ansatz wäre ein Dialog zu Beginn mit Checkboxen. Die Standardform ist vorbelegt, der User wählt die Anlagen und deren Anzahl aus die zusammengestellt werden sollen. Wichtig ist, daß Grunddaten aus der Standardform bei den Anlagen übernommen werden.

Grüße
opiWahn

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von komma4 » Di, 22.03.2011 15:13

opiWahn hat geschrieben:Wie kann ich das portieren/umsetzen?
Vielleicht gar nicht... vielleicht ein anderer Ansatz:

Vervollständige die Eingaben im Dialog, wenn dann alles korrekt ist erzeuge ein neues Writer-Dokument mit den Infos & Anhängen und speichere/speichere&sende dieses.

Hintergrund:
ich habe bei meinen Tests noch keinen Weg gefunden per Code ein Formular extern zu speichern UND die Funktionalität des Formulars zu erhalten.

Ist das Erhalten des Formulars (als solches) denn Voraussetzung?
Reicht es nicht, wenn die eingegebenen Informationen gespeichert werden?

opiWahn hat geschrieben:Das andere Thema sind die Pflichtfelder!
Setze Dir einen/mehrere Hilfsschalter, d.h. wenn eine Checkbox ausgewählt wurde prüft das Ereignis den Inhalt des Textfeldes. Sind alle Bedingungen erfüllt werden die Schaltflächen aktiv.
Wo ist da das Problem?

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von opiWahn » Di, 22.03.2011 08:38

Morgähn,

zunächst mal vielen Dank für die ratschläge hinsichlich der Codeoptimierung :-)
Das zunächst dringlichste Problem, was es in Ooo/LibO umzusetzen gilt würde in VBA so aussehen:

Code: Alles auswählen

Sub DocTor_Click()
'ActiveDocument.Unprotect
If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect

Selection.EndKey Unit:=wdStory
    Selection.InsertBreak Type:=wdSectionBreakNextPage
    ChangeFileOpenDirectory "D:\Kunden\xxx\Formulare\"
    Selection.InsertFile FileName:="PP_TorTK.doc" _
        , Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False
        
ActiveDocument.Fields.Update

ActiveDocument.Protect Type:=wdAllowOnlyFormFields
       
End Sub
Wie kann ich das portieren/umsetzen?

Das andere Thema sind die Pflichtfelder! Letztlich muß ich erreichen, daß verschiedene Checkboxen o. Eingabefelder in Abhängigkeit zueinander stehen. Ist z.B. die CBox a aktiviert muß zwingend Textfeld b ausgefüllt werden. Ggf. brauche ich an dieser Stelle einen augenscheinlichen Hinweis. Das Speichern des Formular soll erst möglich sein wenn alle Angaben korrekt sind.

Grüße
opiWahn

Re: Formular: Pflichtfelder, vorhandene Dok. dem akt. anfüge

von komma4 » Mo, 21.03.2011 17:14

Willkommen im Forum.

Was ist Deine erste Frage?

Funktioniert

Code: Alles auswählen

oBtnSave.Enabled = FALSE
oBtnSaveSend.Enabled = FALSE
nicht?


opiWahn hat geschrieben:Gerne nehme ich auch Verbesserungsvorschläge zur Codeoptimierung entgegen ;-)
Warum sechs Abfragen gegen die Datenbank, wenn es auch eine tut?

Code: Alles auswählen

sSQL = "SELECT `key` ,`objekt_anrede` , `objekt_name` , `objekt_strasse`,`objekt_ort, `langtext` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
und dann später

Code: Alles auswählen

QueryErgebnis = Statement.ExecuteQuery( sSQL )
' hier ggfs. Fehlerabfrage

oText1.text = QueryErgebnis.GetString(1)
oText2.text = QueryErgebnis.GetString(2)
' usw.

Für das Anfügen von Dokumenten musst Du Platz und Kontrollelemente vorsehen, die die Dokumente/Formulare aufnehmen. Ggfs. die Formulargrösse zur Laifzeit erweitern (beides bislang ungetestet).


HTH



edit: Tippfehler im zweiten Codebeispiel korrigiert

Formular: Pflichtfelder, vorhandene Dok. dem akt. anfügen

von opiWahn » Mo, 21.03.2011 16:22

Hallo,

ich bin ziemlich neu im Thema Markroprogrammierung speziell bei Ooo/LibO unterwegs und beiß mir gerade die Zähne u.a. an einem Thema aus, für das es unter MS Word durchaus Beispiele gibt.
Folgendes Szenario: Ich habe im Writer ein Formular erstellt, das von einer DB gespeist wird. Das funktioniert bisher genauso gut wie das abspeichern als PDF unter einem vorgegebenen Namen. Ich habe es auch hinbekommen, daß "Save" solange gesperrt ist bis min. eine Checkbox gefüllt ist. Jetzt soll zusätzlich noch der Inhalt eines Textfeldes (txt1), das, wie die anderen auch, über eine Listbox gefüllt wird, geprüft werden. Ist dieses leer bleibt, unabhängig von den Checkboxen, "Save" ebenfalls deaktiviert.
Das 2., wahrscheinlich größere Thema, ist das anfügen von bestehenden Dokumenten/Formularen (z.B. Anhang A, ...B, ...) an das jeweilige Ende des aktuellen Formulars.
Ich möchte erreichen, daß ich so oft ich auf den Button "Anlage A" (oder B bzw. C) drücke, diese bereits existierende Anlage entsprechend oft am aktuellen Dokument angehängt wird.
Hier der bisherige Code:

Code: Alles auswählen

Sub Listbox_select(oEvent AS Object)
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)
	oList = oForm.getByName("lst1")
	oText1 = oForm.getByName("txt1")
	oText2 = oForm.getByName("txt2")
	oText3 = oForm.getByName("txt3")
	oText4 = oForm.getByName("txt4")
	oText5 = oForm.getByName("txt5")
	oText6 = oForm.getByName("txt6")
	oListCtr = ThisComponent.CurrentController.GetControl(oList)
	oTextCtr = oListCtr.SelectedItem
	
	Dim Context, DB, Connection As Object
	Dim DBName As String
	Dim Statement As Variant
	Dim Sql1, Sql2, Sql3, Sql4, Sql5, Sql6 as string
	Dim Query1, Query2, Query3, Query4, Query5, Query6 As Object
	
   		DBName = "REPARATUR"
		Context = createUnoService("com.sun.star.sdb.DatabaseContext")
		DB = Context.GetByName (DBName)
		Connection = DB.GetConnection ("","")
		
		Sql1 = "SELECT `key` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		Sql2 = "SELECT `objekt_anrede` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		Sql3 = "SELECT `objekt_name` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		Sql4 = "SELECT `objekt_strasse` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		Sql5 = "SELECT `objekt_ort` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		Sql6 = "SELECT `langtext` FROM `REPARATUR` WHERE `key` = '"+oTextCtr+"';"
		
		Statement = Connection.CreateStatement
		Query1 = Statement.ExecuteQuery(Sql1)
		oText1.text = Query1.GetString(1)
		Query2 = Statement.ExecuteQuery(Sql2)
		oText2.text = Query2.GetString(1)
		Query3 = Statement.ExecuteQuery(Sql3)
		oText3.text = Query3.GetString(1)
		Query4 = Statement.ExecuteQuery(Sql4)
		oText4.text = Query4.GetString(1)
		Query5 = Statement.ExecuteQuery(Sql5)
		oText5.text = Query5.GetString(1)
		Query6 = Statement.ExecuteQuery(Sql6)
		oText6.text = Query6.GetString(1)
		
	Connection.Close()
End Sub

Sub chkFail
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)
	oText1 = oForm.getByName("txt1")
	oCheck1 = oForm.getByName("chk1")
	oCheck2 = oForm.getByName("chk2")
	oCheck3 = oForm.getByName("chk3")
	oChkFail1 = oForm.getByName("chkfail1")
	oChkFail2 = oForm.getByName("chkfail2")
	oBtnSave = oForm.getByName("btnsave")
	oBtnSaveSend = oForm.getByName("btnsavesend")
	
	If oText1.text <> "" THEN
	oChkFail1.text = ""
	msgbox oText1.text
	'oBtnSave.Enabled = TRUE
	'oBtnSaveSend.Enabled = TRUE
	else
	oChkFail1.text = "!"
	msgbox oText1.text
	'oBtnSave.Enabled = FALSE
	'oBtnSaveSend.Enabled = FALSE
	END If 	
	
	If oCheck1.State (1) or oCheck2.State (1) or oCheck3.State (1) THEN
	oChkFail1.text = ""
	oChkFail2.text = ""
	oBtnSave.Enabled = TRUE
	oBtnSaveSend.Enabled = TRUE
	else
	oChkFail1.text = "!"
	oChkFail2.text = "!"
	oBtnSave.Enabled = FALSE
	oBtnSaveSend.Enabled = FALSE
	END If 	
End Sub

Sub savePDF
DIM datname, datum, path, extension, pdfurl as String
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)
	oText3 = oForm.getByName("txt3")
	oDate = oForm.getByName("date")
datname = oText3.text
datum = oDate.text
path = "C:/Temp/"
extension = ".pdf"
pdfurl = "file:///" + path + datname + " " + datum + extension

dim pdfProperties(1) as new com.sun.star.beans.PropertyValue
pdfProperties(0).Name = "FilterName"
pdfProperties(0).Value = "writer_pdf_Export"
oDoc.storeToURL(pdfurl, pdfProperties())
End Sub
Ein Screen vom Prototype sieht so aus:
prototype_form.png
Gerne nehme ich auch Verbesserungsvorschläge zur Codeoptimierung entgegen ;-)

Ich freue mich auf euere Ratschläge und Komentare

Grüße
opiWahn


Moderation,4: in Unterbereich BASIC verschoben

Nach oben