Seite 1 von 3

Datum für Dienstbeginn automatisch erfassen

Verfasst: Di 30. Apr 2013, 16:31
von Sephan
Aktuell frage ich in einer Maske u.a. das Datum für den Dienstbeginn ab. Diese Maske wird während des Dienstes ausgefüllt, welcher bis ca. 1 Uhr geht. Automatisch könnte ich natürlich das aktuelle Datum speichern lassen, was Tipparbeit sparen würde, aber dadurch würde zwischen 0 und 1 Uhr das falsche Datum für den Dienstbeginn eingetragen werden. Gibt es da vlt eine Möglichkeit?

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Di 30. Apr 2013, 16:56
von RobertG
Hallo Sephan,

nimm doch einfach einen Timestamp. Der ist eine feste Größe und nicht von Widrigkeiten wie Sommer- und Winterzeit abhängig. Siehe dazu den Thread http://www.libreoffice-forum.de/viewtop ... 10&t=11937

Gruß

Robert

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Di 30. Apr 2013, 17:09
von Sephan
Bin mir nicht sicher, ob du mich verstanden hast. Während des Dienstes müssen immer wieder Formulare ausgefüllt werden, welches ich gerade anlege. Dabei soll auch der Dienstbeginn in Datum und Wochentag angegeben werden. Wenn nun aber während des Dienstes z.B. um 0:30 Uhr ein Formular ausgefüllt wird, wird per Timestamp der Dienstbeginn auf den nächsten Tag gesetzt. Das wäre eher blöd.

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Di 30. Apr 2013, 19:20
von RobertG
Hallo Sephan,

ich bin davon ausgegangen, dass für Dich der Unterschied zwischen Sommerzeit und Winterzeit ein Problem darstellt. Mit einem Zeitstempel speichere ich die Zeit als Zahlenkombination ab. Was für ein Datum und was für eine Zeit dann daraus gelesen wird hängt natürlich von der Zeitzone Deines PCs ab.

Wenn Du nicht den Unterschied "Sommerzeit - Winterzeit" meinst, dann erschließt sich mir nicht, warum z.B. der 1.5.2013 0:30 Uhr zu einem 30.4.2013 werden soll. Spätestens da müsste dann eine Überprüfung ergeben, dass jemand an Ort und Stelle gearbeitet hat, obwohl er noch gar nicht da war, sondern erst am 30.4.2013 um 18:30 aufgetaucht ist.

Gruß

Robert

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Di 30. Apr 2013, 21:25
von Sephan
Also, es gibt nur einen Dienst der fängt 21 Uhr an und endet ungefähr 1 Uhr. Es soll während dieser Zeit statistische Daten für Anrufer erhoben werden und in diesen wird auch immer der Dienstbeginn festgehalten, damit man die einzelnen Dienste auswerten kann.

Und so müsste das dann aussehen:

21:00 Uhr:
Real: 1.5.2013
Dienstbeginn: 1.5.2013

23:34 Uhr:
Real: 1.5.2013
Dienstbeginn: 1.5.2013

00:12 Uhr:
Real: 2.5.2013
Dienstbeginn: 1.5.2013

Nächster Dienst

21:00 Uhr:
Real 2.5.2013
Dienstbeginn: 2.5.2013

usw.

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Mi 1. Mai 2013, 08:27
von RobertG
Hallo Sephan,

sieh' Dir die Datei an, die ich in dem benannten Thread angehängt habe. Dort findest Du einen Makrocode für das aktuelle Datum. Hier jetzt ein Ausschnitt davon:

Code: Alles auswählen

	daJetzt = Now()
	daJetzt = DateAdd("h",-10,daJetzt)
Mit DateAdd kannst Du entsprechende Datumsverschiebungen erstellen. "h" steht für die Stunden, -10 rechnet von der Rechnerzeit 10 Stunden runter, produziert also zur Zeit noch den 30.4.2013.
Der Code allein für ein Datumsfeld kann natürlich gekürzt werden. Das anzusprechende Feld sollte dann auf jeden Fall das Datumsfeld sein. Bei Tabellenkontrollfeldern wird dies über den Index bestimmt, bei einfachen Formularfeldern kann dies auch über den Namen erfolgen. Hier also der Komplettcode nur für ein zurückgelegtes Datum:

Code: Alles auswählen

SUB Datumsstempel_neu
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM unoDate AS NEW com.sun.star.util.Date
	Dim daJetzt AS DATE
	oDoc = thisComponent
	oDrawpage = oDoc.drawpage
	oForm = oDrawpage.forms.getByName("Formular") 
	oFeld=oForm.getByName("Tabellenkontrollfeld")	'Beispiel Tabellenkontrollfeld - daher nachher getByIndex. Sonst direkt das Datumsfeld oder Zeitfeld ansteuern.
	daJetzt = Now()
	daJetzt = DateAdd("h",-10,daJetzt)	'Legt das Datum um 10 Stunden in die Vergangenheit
	WITH unoDate
      .Day = Day(daJetzt)
      .Month = Month(daJetzt)
      .Year = Year(daJetzt)
    END WITH
	oFeld.getByIndex(2).BoundField.updateDate(unoDate)
END SUB
Gruß

Robert

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Do 16. Mai 2013, 19:26
von Sephan
So, jetzt komme ich endlich mal wieder dazu mich damit auseinander zu setzen. Leider blicke ich vieles an dieser Makrosprache nicht so recht und habe es nicht so zum Laufen gebracht, wie ich es wollte.

Aktuell habe ich es so eingebaut, dass es automatisch beim Öffnen des Formulars, welches jetzt auch automatisch beim Öffnen der Datei geöffnet wird, ausgeführt wird. Ich wollte so die ersten beiden Felder Datum und Wochentag (Wochentag wird noch nicht im Skript behandelt) automatisch ausfüllen lassen um zu sehen, ob es geht. Aber es tut sich nichts.

Am Ende soll das Ganze so aussehen, dass die beiden ersten Felder entweder komplett verschwinden und Datum und Wochentag automatisch mit dem Drücken von Speichern in die zugehörigen Felder in der Datenbank abgelegt werden. Oder, dass die ersten beiden Felder drin bleiben, automatisch befüllt werden, aber als inaktiv, also nicht schreibberechtigt, dargestellt werden. Normal wird der Hintergrund des Feldes dunkler dargestellt um das hervorzuheben.

Könntest du mir dabei vlt helfen?

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Do 16. Mai 2013, 21:31
von RobertG
Hallo Sephan,

zuerst einmal muss das Makro natürlich beim Öffnen des Formulars gestartet werden.
Also: Formular zum bearbeiten öffnen, Formular z.B. über den Navigator aufsuchen, rechter Mausklick, Eigenschaften des Formulars, Ereignisse: Beim Laden und wohl auch beim erneuten Laden.
Jetzt wird das Makro ausgeführt, tut aber noch nichts. Das liegt an dem auskommentierten Bezug zu dem Feld, in dem das Datum hineingeschrieben werden soll:
oFeld.BoundField.updateDate(unoDate)
oFeld ist das Datumsfeld. In dem Datumsfeld wird jetzt das Datum eingetragen, das 10h vor der aktuellen Zeit das aktuelle Datum war.

Vorsicht: In der aktuellen Fassung von LO (4.0.3.3) sowie allen Vorgängern der 4er-Reihe liegt noch ein Bug in der Ansprache von Makros vor, die beim Öffnen von Formularen ausgeführt werden sollen. Hier entweder noch ein kleines bisschen warten (ist wohl in der 4.0.4 gefixt) oder noch eine LO-Version aus der 3er-Reihe nutzen.

Gruß

Robert

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Do 16. Mai 2013, 23:45
von Sephan
Also ich habs jetzt mal soweit übernommen, aber ich bekomme sowohl in im 3er als auch im 4er LibreOffice die Fehlermeldung:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: getByIndex.

Ich steh grad tierisch aufm Schlauch.

EDIT: Auch mit dem Base Handbuch kann ich nicht sehen wo da der Fehler sein könnte.

Re: Datum für Dienstbeginn automatisch erfassen

Verfasst: Fr 17. Mai 2013, 19:32
von RobertG
Hallo Sephan,
Sephan hat geschrieben:Also ich habs jetzt mal soweit übernommen, aber ich bekomme sowohl in im 3er als auch im 4er LibreOffice die Fehlermeldung:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: getByIndex.
Nein, so ganz hast Du das wohl nicht übernommen. Ich habe jetzt nicht den Anhang heruntergeladen, aber getByIndex lässt auf den folgenden Fehler schließen:
Bei Dir steht weiterhin
oFeld.getByIndex(2).BoundField.updateDate(unoDate)
weil sich der Code auf das zweite Feld eines Tabellenkontrollfeldes bezieht. Die erreichst Du nur über den Index. Zuerst sprichst Du das Formular an, dann das Feld im Formular und nur bei einem Tabellenkontrollfeld gibt es in dem Feld weitere "Felder", die eben per Index angesprochen werden.
Dein Feld ist kein Tabellenkontrollfeld, sondern direkt das Datumsfeld. da steht jetzt nichts mehr von getByIndex(2):
oFeld.BoundField.updateDate(unoDate)
Mit oFeld hast Du das Feld schon ermittelt.

Gruß

Robert