Optionen prüfen -> Code vereinfachen o. zusammenfassen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
opiWahn
***
Beiträge: 91
Registriert: Mo, 21.03.2011 15:47
Wohnort: zw. KL und NW

Optionen prüfen -> Code vereinfachen o. zusammenfassen

Beitrag von opiWahn »

hallo,

auf einen Formular prüfe ich diverse Options (da Pflichtfelder) ab, welche dann in bestimmte Aktionen münden.
Meine Frage, da ich immer noch ein ziemliches Greenhorn in Sachen Ooo-Basic bin: Wie lassen sich diese 4 Subs zusammenfassen und/oder vereinfachen?
Zu 2/3 passiert ja immer das gleiche! Am Schluss fasse ich alle 4 zusammen und rufe diese dann auf, um das Formular auf seine "Gültigkeit" zu prüfen.
Ideal wäre es, dies so mit den Speichern-Routinen zu verbinden, daß ein Speichern erst möglich ist wenn die Bedingungen (keine Fehler) erfüllt sind.

Code: Alles auswählen

' FormObjects
Dim oForm As Object
Dim aField(16), aText(83), aOrder(23), aWorkHrs(83)
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim TempText$
Dim s1_1$, s1_2$, s2_1$, s2_2$, s3_1$, s3_2$, s4_1$, s4_2$

' ErrorProof
Dim vGrpFail
Dim errormsg1$

' save odt/PDF 
Dim datname$, path$, extension$, odturl$, pdfurl$
...
Sub proofOptGrp1

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("opt_grp1", aOpt1)
	vGrpFail = oForm.getbyName("grp1_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt1) to UBound(aOpt1)
      thisElement = aOpt1(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s1_1 = thisElement.Name 
            s1_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	If bSelected Then
   	  vGrpFail.text = ""
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp2

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("opt_grp2", aOpt2)
	vGrpFail = oForm.getbyName("grp2_fail")
	aWorkHrs() = Array ("txt_Name1","num_StdMoName1","num_StdDiName1","num_StdMiName1","num_StdDoName1", _
	"num_StdFrName1","num_StdSaName1","num_StdSoName1","num_StdAzGesName1","num_StdFzGesName1", _
	"txt_Name2","num_StdMoName2","num_StdDiName2","num_StdMiName2","num_StdDoName2","num_StdFrName2", _
	"num_StdSaName2","num_StdSoName2","num_StdAzGesName2","num_StdFzGesName2", _
	"txt_Name3","num_StdMoName3","num_StdDiName3","num_StdMiName3","num_StdDoName3","num_StdFrName3", _
	"num_StdSaName3","num_StdSoName3","num_StdAzGesName3","num_StdFzGesName3", _
	"txt_Name4","num_StdMoName4","num_StdDiName4","num_StdMiName4","num_StdDoName4","num_StdFrName4", _
	"num_StdSaName4","num_StdSoName4","num_StdAzGesName4","num_StdFzGesName4", _
	"txt_Name5","num_StdMoName5","num_StdDiName5","num_StdMiName5","num_StdDoName5","num_StdFrName5", _
	"num_StdSaName5","num_StdSoName5","num_StdAzGesName5","num_StdFzGesName5", _
	"txt_Name6","num_StdMoName6","num_StdDiName6","num_StdMiName6","num_StdDoName6","num_StdFrName6", _
	"num_StdSaName6","num_StdSoName6","num_StdAzGesName6","num_StdFzGesName6", _
	"txt_Name7","num_StdMoName7","num_StdDiName7","num_StdMiName7","num_StdDoName7","num_StdFrName7", _
	"num_StdSaName7","num_StdSoName7","num_StdAzGesName7","num_StdFzGesName7", _
	"txt_Name8","num_StdMoName8","num_StdDiName8","num_StdMiName8","num_StdDoName8","num_StdFrName8", _
	"num_StdSaName8","num_StdSoName8","num_StdAzGesName8","num_StdFzGesName8", _
	"num_KM","num_U25","num_U50","num_U100")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt2) to UBound(aOpt2)
      thisElement = aOpt2(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s2_1 = thisElement.Name 
            s2_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected And s2_2 = "Lohnnachweis" Then
   	  vGrpFail.text = ""
   	  MsgBox "Einträge in den roten Feldern" & CHR$(10) & "sind zwingend erforderlich", 0+48, "Achtung"
   	 
		for i = 0 to 83
			aText(i) = oForm.getByName(aWorkHrs(i))
			aText(i).ReadOnly = false
			aText(i).BackgroundColor = RGB(255,119,119)	
		next i
	
   	Elseif bSelected And s2_2 = "zum Festpreis" Then
   	  vGrpFail.text = ""
   	  
   	  	for i = 0 to 83
   	  		aText(i) = oForm.getByName(aWorkHrs(i))
			aText(i).ReadOnly = true
			aText(i).BackgroundColor = RGB(255,255,255)
		next i
   	
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp3

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("opt_grp3", aOpt3)
	vGrpFail = oForm.getbyName("grp3_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt3) to UBound(aOpt3)
      thisElement = aOpt3(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s3_1 = thisElement.Name 
            s3_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	If bSelected Then
   	  vGrpFail.text = ""
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp4

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("opt_grp4", aOpt4)
	vGrpFail = oForm.getbyName("grp4_fail")
	aOrder() = Array ("txt_ArtNr1","txt_ArtBez1","num_ArtAnz1","txt_ArtNr2","txt_ArtBez2","num_ArtAnz2","txt_ArtNr3","txt_ArtBez3","num_ArtAnz3", _
	"txt_ArtNr4","txt_ArtBez4","num_ArtAnz4","txt_ArtNr5","txt_ArtBez5","num_ArtAnz5","txt_ArtNr6","txt_ArtBez6","num_ArtAnz6", _
	"txt_ArtNr7","txt_ArtBez7","num_ArtAnz7","txt_ArtNr8","txt_ArtBez8","num_ArtAnz8")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"	
	bSelected = False
	
   	For i = LBound(aOpt4) to UBound(aOpt4)
      thisElement = aOpt4(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s4_1 = thisElement.Name 
            s4_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected And s4_2 = "Ja" Then
   	  vGrpFail.text = ""
   	  MsgBox  "Einträge in den roten Feldern" & CHR$(10) & "sind zwingend erforderlich", 0+48, "Achtung"
   	 
		for i = 0 to 23
			aText(i) = oForm.getByName(aOrder(i))
			aText(i).ReadOnly = false
			aText(i).BackgroundColor = RGB(255,119,119)	
		next i
			
   	Elseif bSelected And s4_2 = "Nein" Then
   	  vGrpFail.text = ""
   	  
   	  	for i = 0 to 23
   	  		aText(i) = oForm.getByName(aOrder(i))
			aText(i).ReadOnly = true
			aText(i).BackgroundColor = RGB(255,255,255)
		next i
			
   	Else  
   	  vGrpFail.text = "!"
      MsgBox errormsg1, 0+48, "Achtung"
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofAllOptGrp
	
	proofOptGrp1
	proofOptGrp2
	proofOptGrp3
	proofOptGrp4
	

End Sub
'--------------------------------------------------------------------------------------------- funktioniert
Sub Save_as_ODT

proofAllOptGrp

	oform = thisComponent.drawpage.forms.getbyindex(0)
	aText = oForm.getByName("txt_oName")
		if aText.text = "" then
			datname = "blanc"
		else
			datname = aText.text
		end if
	path = "C:/xyz/Auftraege/"
	extension = ".odt"
	odturl = "file:///" + path + datname + extension
	thisComponent.storeToURL(odturl, Array())
		
End Sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub Save_as_PDF

proofAllOptGrp

	oform = thisComponent.drawpage.forms.getbyindex(0)
	aText = oForm.getByName("txt_oName")
		if aText.text = "" then
			datname = "blanc"
		else
			datname = aText.text
		end if
	path = "C:/xyz/Auftraege/PDF/"
	extension = ".pdf"
	pdfurl = "file:///" + path + datname + extension
	dim pdfProperties(1) as new com.sun.star.beans.PropertyValue
	pdfProperties(0).Name = "FilterName"
	pdfProperties(0).Value = "writer_pdf_Export"
	thisComponent.storeToURL(pdfurl, pdfProperties())
	
End Sub
Grüße
opiWahn
Benutzeravatar
opiWahn
***
Beiträge: 91
Registriert: Mo, 21.03.2011 15:47
Wohnort: zw. KL und NW

Re: Optionen prüfen -> Code vereinfachen o. zusammenfassen

Beitrag von opiWahn »

hab mich entschlossen das Tool mal ein zu stellen (auch zum Testen und Kritisieren :) )
Die Zip-Datei enthält die nötigen Verzeichnisse und odt-Dateien und ist auf LW C: festgelegt.
Also ggf. im Code nach Wahl ändern.
Die DB ist wg. der Größe (29 MB) nicht dabei, deswegen wird diese Funktion nicht ihren Dienst verrichten.
Sie funktioniert aber mit DB ohne Probleme.
Das obere Drittel läßt sich von Hand füllen, in dem man oben rechts "Edit" aktiviert.
Es gibt noch ne Menge Bugs und Dinge, die man verbessern kann, ich hab das Thema Ooo-Basic erst vor 6 Wochen erstmalig angefasst.
Interessant/wichtig wäre auch die Möglichkeit auf der Subform die Checkboxen mit den jeweils darüber liegenden Options zu steuern.
o# = checkboxen sind deaktiviert (evtl. grau)
o! = checkboxen sind aktiviert (evtl. rot oder umrahmt bis min. eine ausgewählt wurde)
xyz.zip
(86.54 KiB) 39-mal heruntergeladen
Ich freu mich über euere Hilfe und die sicherlich konstruktive Kritiken
Grüße
opiWahn
Antworten