Seite 1 von 1

Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Mi 15. Mär 2017, 21:32
von cynep8
Hallo,

ich schreibe gerade eine Rechnungsvorlage.
Nachdem ich mir mühsam im Netz viele intressante und nützliche Funktionen zusammen gesucht habe, weiß ich jetzt nicht mehr weiter und hoffe ihr könnt mir helfen.

In meiner Rechnungsvorlage habe ich das Steuerelement Datumsfeld.
Über ein im netz gefundes Macro habe ich es auch zum laufen bekommen.

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main (Event as objec)
	datum=Event.Source.Model.Text
	if isdate(datum) then thiscomponent.currentcontroller.activesheet.getcellbyposition(2,13).value=cdate(datum)
End Sub
Wenn ich das Dokument nun als Vorlage speicher und an irgend einem anderen Tag öffne, habe ich immer das Orginal Datum. Ich hätte aber gerne das aktuelle Datum. Ich kenne mich mit Basic garnicht aus und wäre über jede Hilfe Dankbar. Gerne könnt Ihr mir auch links geben wo man Basic in einfachen Schritten lernen kann

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Do 16. Mär 2017, 11:55
von mikele
Hallo,
standardmäßig behält das Datumsfeld den zuletzt eingestellten Wert. Um jetzt beim Öffnen der Datei das aktuelle Datum zu haben musst du:
1) ein Makro schreiben, dass den Datumswert setzt

Code: Alles auswählen

Sub Main
	'Zugriff auf das Dokument
	odoc=thiscomponent
	'Zugriff auf die im Formular "Formular" zusammengefassten Steuerelemente des 1. Tabellenblattes; Zählung beginnt bei 0
	oform=odoc.sheets(0).drawpage.forms.getbyname("Formular")
	'Zugriff auf das Steuerelement
	ocontrol=oform.getbyname("Datumsfeld 1")
	'Setzen des aktuellen Datums
	ocontrol.date=CDateToUnoDate(date())
End Sub
2) diese Makro dem Ereignis "Datei öffnen" zuweisen (->Extras->Anpassen->Ereignisse)

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Fr 17. Mär 2017, 18:03
von cynep8
Hi Mikele,

Danke schon mal für deine schnelle Antwort.
Für ein oder zwei Datumsfelder habe ich es zum laufen bekommen.
Alle anderen funktionieren nicht oder wechseln sich plötzlich mit den ersten beiden ab die funktionierten.
Ich glaube es liegt an irgendeiner Namesvergebung. Habe aber bisher kein System dahinter entdecken können.
Der normale Kontrollfeld Name hatte zumindest keine änderung bewirkt.

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Fr 17. Mär 2017, 18:14
von mikele
Hallo,
wie heißen denn deine Datumsfelder?
Kannst du eine Beispieldatei zur Verfügung stellen?

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Fr 17. Mär 2017, 19:17
von cynep8
Hier meine bereinigte Datei. Im Moment ändern sich 3 von 8 Datumsfeldern

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Sa 18. Mär 2017, 12:58
von mikele
Hallo,
der wesentliche Knackpunkt ist, dass du auf dem Tabellenblatt 20 Datumsfelder hast (siehe Formular-Navigator), von denen z. B. 7 den Namen "Datumsfeld 1" haben. Intern ist das kein Problem, weil jedes Datumsfeld einen eindeutige Index hat, aber wenn das Datumsfeld per Name angesprochen wird, wird bei "Datumsfeld 1" halt nur eines (wahrscheinlich das erste) angesprochen.
Lösung: Benenne jedes Datumsfeld eindeutig.
Noch ein paar Hinweise:
1) Du brauchst nicht für jedes Makro ein extra Modul.
2) Wenn im Datumsfeld in der Eigenschaft "Zusatzinformation" die Zelle schreibst, in die das Datum übertragen werden soll, reicht ein Makro für alle Datumsfelder:

Code: Alles auswählen

Sub uebernahme (oevent as object)
	bereich=oevent.source.model.tag
	datum=cdatefromunodate(oevent.source.model.date)
	thiscomponent.currentcontroller.activesheet.getcellrangebyname(bereich).value=datum
End Sub
Ich habe das für das Datumsfeld bei Anreisetag 1 mal gemacht.
3) Um beim Start mehrere Datumsfelder auf das aktuelle Datum zu setzten lässt sich das Makro erheblich vereinfachen.
Das folgende Makro setzt alle Datumsfelder, deren Name mit "Datumsfeld" beginnt:

Code: Alles auswählen

Sub start
	'Zugriff auf das Dokument
	odoc=thiscomponent
	'Zugriff auf die im Formular "Formular" zusammengefassten Steuerelemente des 1. Tabellenblattes; Zählung beginnt bei 0
	oform=odoc.sheets(0).drawpage.forms.getbyname("Formular")
	for i=0 to oform.count-1
	'Zugriff auf das Steuerelement
		ocontrol=oform.getbyindex(i)
		if left(ocontrol.name,10)="Datumsfeld" then
			'Setzen des aktuellen Datums
			ocontrol.date=CDateToUnoDate(date())
		end if
	next
end sub

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Sa 18. Mär 2017, 14:35
von cynep8
Tausend Dank für deine Hilfe!!!
Hat alles Super geklappt. Und den Formular Navigator kannte ich noch nicht, wieder was gelernt. :D

Mal noch eine andere Frage:
Ich hätte ganze gerne noch eine paar bestimmte Funktionen bei der Betätigung eines Buttons
2x Drucken (1x Farbe, 1x Schwarz/weiß)
Werte sollen in ein anderes Dokument geschrieben werden(für eine Bilanz).
Und eine fortlaufende Rechnungsnummer (Bei Dokument Öffnung aus datei lesen, am Ende eine neue hinzufügen)

Was davon wäre möglich?

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Sa 18. Mär 2017, 14:40
von mikele
Hallo,
Was davon wäre möglich?
Alles.

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Mo 20. Mär 2017, 16:38
von cynep8
Cool,
hast du für mich nen Link, Seite oder nen Videotraining. Wo ich das lernen könnte damit ich dich nicht die ganz Zeit nerven muss?

Und noch eine andere Sache:
Wenn ich das Dokument öffne stellt er in allen Steuerelementen das richtige Datum ein, schreibt es aber nicht in die ausgewählte zelle.
Erst wenn ein neues Datum ausgewählt wird schreibt das Steuerelement es in die Zelle. Das ist bei dem Anreise Feld ziehmlich doof, weil man erst ein anderes Datum auswählen muss und dann das richtige.

Ich hoffe du kannst mir nocheinmal helfen.
Schon mal vielen Dank im voraus!

Re: Datumsfeld (date picker) mit aktuellem Datum

Verfasst: Mo 20. Mär 2017, 21:01
von mikele
Hallo,
mit einem Training wird es nicht getan sein. Hier http://de.openoffice.info/viewtopic.php?f=18&t=1553 findest du ein Fülle von verschiedenen Informationsquellen.
Zur Beantwortung deiner Frage müssen die beiden Codeschnipsel miteinander kombiniert werden.

Code: Alles auswählen

Sub start
   'Zugriff auf das Dokument
   odoc=thiscomponent
   'Zugriff auf das 1. Tabellenblatt; Zählung beginnt bei 0
   otab=odoc.sheets(0)
   'Zugriff auf die im Formular "Formular" zusammengefassten Steuerelemente des 
   oform=otab.drawpage.forms.getbyname("Formular")
   for i=0 to oform.count-1
   'Zugriff auf das Steuerelement
      ocontrol=oform.getbyindex(i)
      if left(ocontrol.name,10)="Datumsfeld" then
         'Setzen des aktuellen Datums
         ocontrol.date=CDateToUnoDate(date())
         bereich=ocontrol.tag
         otab.getcellrangebyname(bereich).value=date()
      end if
   next
end sub