[gelöst] Wieviele Werktage innerhalb eines Datumbereichs

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: [gelöst] Wieviele Werktage innerhalb eines Datumbereichs

Re: Wieviele Werktage innerhalb eines Datumbereichs

von der_Zerstreute » Di, 13.10.2009 12:19

Hey Leute , ich konnte das Problem lösen !

in OOO3.0 werden die Funktionen in Deutsch benannt !! außerdem habe ich die beiden Dati als "Date" übergeben , sie müssen aber als double übergeben werden.

Nach dem anpassen dieser Daten lief die Funktion !

Danke trotzdem

Re: Wieviele Werktage innerhalb eines Datumbereichs

von der_Zerstreute » Mo, 12.10.2009 16:02

sorry , was hier fehlt ist der teil mit der abfrage aus dem form ;) .. sorry mein fehler ..

Die Variablen anfang und ende werden aus dem Form abgefragt als Datum. Dieser Teil funktioniert auch soweit .. also ich poste der einfachheit halber mal das ganze Makro :D..

Code: Alles auswählen

Global anfang as date
global ende as date
global bEU,bSU,bFK as boolean
global sGSU as string
global MyDialog as object


Sub Main
'--------------------------------------------
' Variablen zuordnen
'--------------------------------------------

Dim Profil(0) as new com.sun.star.beans.PropertyValue
dim oFunctionAccess as object
dim document as object
dim args(1) as date
dim temp as string
dim tn as string  	 'Techniker Name
dim abt as string	 'Abteilung
dim PerNo as integer 'Personalnummer
dim wt as integer	 'Werktage

dim fil as object

document = ThisComponent 
globalScope.BasicLibraries.LoadLibrary("Tools") ' einbinden der OOBasic Funktionen 
DialogLibraries.LoadLibrary( "Standard" )
MyDialog = CreateUnoDialog(DialogLibraries.Standard.Eingabe)

'--------------------------------------------
' Variablen beschreiben 
'--------------------------------------------
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Benutzer = createUnoService("com.sun.star.configuration.ConfigurationProvider")
Profil(0).Name = "nodepath"
Profil(0).Value = "org.openoffice.UserProfile/Data"
Benutzerdaten = Benutzer.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", Profil())

'--------------------------------------------
' Hinweistext erstellen
'--------------------------------------------
temp = "Bitte hier die notwendigen Daten eintragen und auswählen ." & chr(13) & chr(13)
temp = temp & ">> Das Formular wird automatisch ausgefüllt. <<" & chr(13)
temp = temp & chr(13)
MyDialog.getControl("iTitel").model.Label = temp

temp = ""
temp = temp & "Bitte wähle den Beginn und das Ende deines Urlaubs aus." & chr(13) &chr(13)
MyDialog.getControl("Mitte").model.Label = temp

MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false

myDialog.execute

if anfang  ="" then goto fin

args(0) = anfang
args(1) = ende

abt = Benutzerdaten.givenname
tn = Benutzerdaten.sn
PerNo = Benutzerdaten.initials

'wt = oFunctionAccess.callFunction( "NETWORKDAYS", args()) 
fin:
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("pn1").text = PerNo
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("pn2").text = PerNo
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("name1").text = tn
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("name2").text = tn
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("abt1").text = abt
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("abt2").text = abt
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("grund").text = sGSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("grund2").text = sGSU

ThisComponent.drawpage.forms.getbyIndex(0).getbyname("eh1").state = bEU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("eh2").state = bEU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("fk1").state = bFzK
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("fk2").state = bFK
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("su1").state = bSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("su2").state = bSU

ThisComponent.drawpage.forms.getbyIndex(0).getbyname("start1").text = anfang
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("start2").text = anfang
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("ende1").text = ende
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("ende2").text = ende

end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
sub fertig

if MyDialog.getControl("sEU").state =0  and _
	MyDialog.getControl("sFzK").state=0 and _
	MyDialog.getControl("sSU").state=0 then
		MyDialog.getControl("iHW").model.label = "Bitte noch die Art des Urlaubs auswählen !"
	goto break
end if

DialogLibraries.LoadLibrary( "Standard" )

MyDialog.getControl("iHW").model.label = ""
anfang   = MyDialog.getControl("DF1").text
ende     = MyDialog.getControl("DF2").text
bEU      = MyDialog.getControl("sEU").state
bSU      = MyDialog.getControl("sSU").state
bFK      = MyDialog.getControl("sFzK").state
sGSU     = MyDialog.getControl("eSUG").text

MyDialog.endexecute()
break:
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================

sub erholung

if MyDialog.getControl("sEU").state = 1 then
 MyDialog.getControl("Label5").visible = false
 MyDialog.getControl("eSUG").visible = false
 MyDialog.getControl("sFzK").state = 0
 MyDialog.getControl("sSU").state = 0
 MyDialog.getControl("iHW").model.label = ""
end if

end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================

sub freizeit

if MyDialog.getControl("sFzK").state = 1 then
 MyDialog.getControl("Label5").visible = false
 MyDialog.getControl("eSUG").visible = false
 MyDialog.getControl("sEU").state = 0
 MyDialog.getControl("sSU").state = 0
 MyDialog.getControl("iHW").model.label = ""
end if
 
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================

sub sonder

if MyDialog.getControl("sSU").state = 1 then
 MyDialog.getControl("Label5").visible = true
 MyDialog.getControl("eSUG").visible = true
 MyDialog.getControl("sEU").state = 0
 MyDialog.getControl("sFzK").state = 0
 MyDialog.getControl("iHW").model.label = ""
 end if
 
if MyDialog.getControl("sSU").state = 0 then
 MyDialog.getControl("Label5").visible = false
 MyDialog.getControl("eSUG").visible = false
end if
end sub

'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
das einzige was halt nicht funktioniert ist die Variable "wt" .. hier komm ich nicht weiter da ich nicht nachvollziehen kann warum ich die Fehlermeldung "Objektvariable nicht belegt" bekomme ..

Re: Wieviele Werktage innerhalb eines Datumbereichs

von Karolus » Mo, 12.10.2009 15:43

Hallo

Du weist du den Variablen 'Anfang' und 'Ende' nirgends einen Wert zu.
( die Werte dafür stecken ungeschickterweise beide in 'MyDialog.getControl("Mitte").model.Label' - wenn überhaupt)

@all
da sollte mal jemand draufschauen der mehr Ahnung davon hat wie man Eingabefelder ausliest.

Gruß Karo

Re: Wieviele Werktage innerhalb eines Datumbereichs

von der_Zerstreute » Mo, 12.10.2009 14:04

hallo Karo ,

das hilft schon mal deutlich weiter jedoch hab ich jetzt ein anderes Problem.
Ich bekomme an der Stelle wo die Werktage ermittelt werden sollen eine Fehlermeldung.

Code: Alles auswählen

Global anfang as date
global ende as date
global bEU,bSU,bFK as boolean
global sGSU as string
global MyDialog as object


Sub Main
'--------------------------------------------
' Variablen zuordnen
'--------------------------------------------

Dim Profil(0) as new com.sun.star.beans.PropertyValue
dim oFunctionAccess as object
dim document as object
dim args(1) as variant
dim temp as string
dim tn as string  	 'Techniker Name
dim abt as string	 'Abteilung
dim PerNo as integer 'Personalnummer
dim wt as integer	 'Werktage

document = ThisComponent 
globalScope.BasicLibraries.LoadLibrary("Tools") ' einbinden der OOBasic Funktionen 
DialogLibraries.LoadLibrary( "Standard" )
MyDialog = CreateUnoDialog(DialogLibraries.Standard.Eingabe)
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )

'--------------------------------------------
' Variablen beschreiben 
'--------------------------------------------
Benutzer = createUnoService("com.sun.star.configuration.ConfigurationProvider")
Profil(0).Name = "nodepath"
Profil(0).Value = "org.openoffice.UserProfile/Data"
Benutzerdaten = Benutzer.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", Profil())

abt = Benutzerdaten.givenname
tn = Benutzerdaten.sn
PerNo = Benutzerdaten.initials
'--------------------------------------------
' Hinweistext erstellen
'--------------------------------------------
temp = "Bitte hier die notwendigen Daten eintragen und auswählen ." & chr(13) & chr(13)
temp = temp & ">> Das Formular wird automatisch ausgefüllt. <<" & chr(13)
temp = temp & chr(13)
MyDialog.getControl("iTitel").model.Label = temp

temp = ""
temp = temp & "Bitte wähle den Beginn und das Ende deines Urlaubs aus." & chr(13) &chr(13)
MyDialog.getControl("Mitte").model.Label = temp

MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false

myDialog.execute

args(0) = anfang
args(1) = ende

print oFunctionAccess.callFunction( "NETWORKDAYS", args() ) 
Fehlermeldung : "Objectvariable nicht belegt" in der letzten Zeile ..
sieht einer meinen Gedankenfehler ?

danke schonmal im voraus

Re: Wieviele Werktage innerhalb eines Datumbereichs

von Karolus » Mo, 12.10.2009 12:39

Hallo
Versuchs mal mit der Einbindung der Calc-funktion: 'NETTOARBEITSTAGE' bzw. innerhalb von Basic mit der englischen Bezeichnung:' NETWORKDAYS'
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig228
http://www.dannenhoefer.de/faqstarbasic ... funktionen

Gruß Karo

[gelöst] Wieviele Werktage innerhalb eines Datumbereichs

von der_Zerstreute » Mo, 12.10.2009 12:23

Hallo Leute ,

ich möchte gern per Makro Dialog ein Urlaubsformular anfertigen.

In dem Dialog sind jetzt 2 Felder mit Kalendertagauswahl . Ich möchte nun in dem Makro feststellen wieviele Werktage zwischen den Daten liegen (ggf. auch Feiertage berücksichtigen ?).

Gibt es eine einfache Methode festzustellen wieviele Werktage (Mo-Fr.) zwischen 2 Dati liegen ?

Ich denke das einbezienen der Feiertage kann man dann ggf. ja noch per If oder Array machen.

Danke für eure Tips
Z.

Nach oben