Discussion:
Arbeitszeit-Erfassung
(zu alt für eine Antwort)
Ralf Dorn
2007-01-06 19:49:20 UTC
Permalink
Hallo alle zusammen,

habe ein Problem mit der Arbeitszeiterfassung. Habe ein Formular erzeugt mit
dem man die Arbeitszeiten eingibt. Machte es so, dass bei Nachtschicht von
22:00 bis 23:59 und von 00:00 bis 06:00 UHR an zwei verschiedenen Tagen
eingegeben wird. Also am 01.01.2007 von 22:00 bis 23:59 und am 02.01.2007
von 00:00 UHR bis 06:00 UHR.

Im Bericht der Stundenauswertung zähle ich einfach eine Minute dazu und gut.

Jetzt gibt es ja Zuschläge für Samstag, Sonntag, Feiertag und Nachtschicht.
Diese errechne ich durch die Uhrzeit und das Datum. Hat alles super
funktioniert. Jetzt sagt mir die Buchhaltung, dass wenn der Arbeiter am
Montag um 22:00 UHR beginnt, die gesamten Stunden auf das Datum des Montags
fallen.

Wenn ich also eine Rechnung erstelle vom 01.01.2007 bis 31.01.2007 sollen
die Stunden vom Donnerstag den 01.02.2007 wo der Arbeitsbeginn am Mittwoch
den 31.01.2007 war in die Abrechnung mit einfließen.

Was ist dann aber mit dem 01.01.2007? Die Stunden von 00:00 bis was weis ich
sind wahrscheinlich schon im Dezember abgerechnet.

Gibt es da irgendwelche gesetzlichen oder Firmeninterne Richtlinien?

Ich verstehe das nicht ganz? Passt vielleicht nicht ganz hierher aber ich
habe schon gegoogelt und dort fand ich nichts brauchbares.

Wäre für eine Antwort sehr dankbar.


Schönen Gruß

Ralf Dorn
Frank Müller
2007-01-06 22:11:36 UTC
Permalink
Hallo Ralf,
Post by Ralf Dorn
Hallo alle zusammen,
habe ein Problem mit der Arbeitszeiterfassung. Habe ein Formular
erzeugt mit dem man die Arbeitszeiten eingibt. Machte es so, dass bei
Nachtschicht von 22:00 bis 23:59 und von 00:00 bis 06:00 UHR an zwei
verschiedenen Tagen eingegeben wird.
Warum teilst du das auf?
Ich habe das mal so gemacht, dass da einfach das Datum des Arbeitsbeginns
und dann Uhrzeit von / Uhrzeit bis. Also z.B. 22:00 bis 06:00 für eine
Nachtschicht. Da die Zeit nicht rückwärts läuft, brauchst du auch das
zweite Datum nicht. (Arbeitszeiten von mehr als 24 gibt es ja nicht, wenn
doch müsstest du natürlich das Datum wieder einführen für das Ende
der Arbeitszeit)
Post by Ralf Dorn
Jetzt gibt es ja Zuschläge für Samstag, Sonntag, Feiertag und
Nachtschicht. Diese errechne ich durch die Uhrzeit und das Datum. Hat
alles super funktioniert. Jetzt sagt mir die Buchhaltung, dass wenn
der Arbeiter am Montag um 22:00 UHR beginnt, die gesamten Stunden auf
das Datum des Montags fallen.
Dafür das Anfangsdatum berücksichtigen und dann die Zeit
errechnen in die Zukunft. Dann kommst du auch nicht durcheinander
am nächsten Tag wo ja Dienstags um 22 Uhr wieder die Nachtschicht
beginnt usw.
Post by Ralf Dorn
Wenn ich also eine Rechnung erstelle vom 01.01.2007 bis 31.01.2007
sollen die Stunden vom Donnerstag den 01.02.2007 wo der Arbeitsbeginn
am Mittwoch den 31.01.2007 war in die Abrechnung mit einfließen.
Genau, also immer auf das Datum des Arbeitsbeginns prüfen,
egal, ob das Schichtende am nächten Tag / Monat / Jahr liegt.
Und die Stundensumme von Beginn bis Ende der Arbeitszeit
nehmen.
Post by Ralf Dorn
Was ist dann aber mit dem 01.01.2007? Die Stunden von 00:00 bis was
weis ich sind wahrscheinlich schon im Dezember abgerechnet.
Genau so ist es.
Post by Ralf Dorn
Gibt es da irgendwelche gesetzlichen oder Firmeninterne Richtlinien?
Gesetzlich weiß ich nicht, aber ich kenne einige Firmen wo das
so gehandhabt wird wie oben beschrieben.

Was da jetzt allerdings noch fehlt, sind evtl. zu berücksichtigende
Pausenzeiten die nicht bezahlt werden. Kann ja z.B. sein, dass
die Schicht von 22:00 - 06:30 geht und eine halbe Stunde Pause
enthalten ist, also trotzdem nur 8 Stunden bezahlt werden. Dann
müßtest du die Pausenzeiten noch extra erfassen.

Gruß,
Frank
Ralf Dorn
2007-01-07 07:23:49 UTC
Permalink
Hallo Frank,
Post by Frank Müller
Warum teilst du das auf?
Ich habe das mal so gemacht, dass da einfach das Datum des Arbeitsbeginns
und dann Uhrzeit von / Uhrzeit bis. Also z.B. 22:00 bis 06:00 für eine
Nachtschicht. Da die Zeit nicht rückwärts läuft, brauchst du auch das
zweite Datum nicht.
vielen Dank für deine Erklärungen. Ich werde versuchen, deine Erläuterungen
in meine DB einzupflegen. Das wird eine riesen Aktion. Aber mal sehen, was
daraus wird. Vielleicht melde ich mich mal wieder.

Dachte, dass Access ein Problem mit Arbeitsende 00:00:00 UHR hat und habe es
deswegen auf bis 23:59 und Beginn 00:00 (Nächster Tag) bis 06:00 aufgeteilt.

Nochmal danke und einen schönen Gruß

Ralf Dorn
Post by Frank Müller
Hallo Ralf,
Post by Ralf Dorn
Hallo alle zusammen,
habe ein Problem mit der Arbeitszeiterfassung. Habe ein Formular
erzeugt mit dem man die Arbeitszeiten eingibt. Machte es so, dass bei
Nachtschicht von 22:00 bis 23:59 und von 00:00 bis 06:00 UHR an zwei
verschiedenen Tagen eingegeben wird.
Warum teilst du das auf?
Ich habe das mal so gemacht, dass da einfach das Datum des Arbeitsbeginns
und dann Uhrzeit von / Uhrzeit bis. Also z.B. 22:00 bis 06:00 für eine
Nachtschicht. Da die Zeit nicht rückwärts läuft, brauchst du auch das
zweite Datum nicht. (Arbeitszeiten von mehr als 24 gibt es ja nicht, wenn
doch müsstest du natürlich das Datum wieder einführen für das Ende
der Arbeitszeit)
Post by Ralf Dorn
Jetzt gibt es ja Zuschläge für Samstag, Sonntag, Feiertag und
Nachtschicht. Diese errechne ich durch die Uhrzeit und das Datum. Hat
alles super funktioniert. Jetzt sagt mir die Buchhaltung, dass wenn
der Arbeiter am Montag um 22:00 UHR beginnt, die gesamten Stunden auf
das Datum des Montags fallen.
Dafür das Anfangsdatum berücksichtigen und dann die Zeit
errechnen in die Zukunft. Dann kommst du auch nicht durcheinander
am nächsten Tag wo ja Dienstags um 22 Uhr wieder die Nachtschicht
beginnt usw.
Post by Ralf Dorn
Wenn ich also eine Rechnung erstelle vom 01.01.2007 bis 31.01.2007
sollen die Stunden vom Donnerstag den 01.02.2007 wo der Arbeitsbeginn
am Mittwoch den 31.01.2007 war in die Abrechnung mit einfließen.
Genau, also immer auf das Datum des Arbeitsbeginns prüfen,
egal, ob das Schichtende am nächten Tag / Monat / Jahr liegt.
Und die Stundensumme von Beginn bis Ende der Arbeitszeit
nehmen.
Post by Ralf Dorn
Was ist dann aber mit dem 01.01.2007? Die Stunden von 00:00 bis was
weis ich sind wahrscheinlich schon im Dezember abgerechnet.
Genau so ist es.
Post by Ralf Dorn
Gibt es da irgendwelche gesetzlichen oder Firmeninterne Richtlinien?
Gesetzlich weiß ich nicht, aber ich kenne einige Firmen wo das
so gehandhabt wird wie oben beschrieben.
Was da jetzt allerdings noch fehlt, sind evtl. zu berücksichtigende
Pausenzeiten die nicht bezahlt werden. Kann ja z.B. sein, dass
die Schicht von 22:00 - 06:30 geht und eine halbe Stunde Pause
enthalten ist, also trotzdem nur 8 Stunden bezahlt werden. Dann
müßtest du die Pausenzeiten noch extra erfassen.
Gruß,
Frank
Ralf Dorn
2007-01-07 09:28:25 UTC
Permalink
Hallo Frank,

habe die Sache schon fast geschafft. Nur ein Problem habe ich jetzt noch.
Mit dem berechnen der Arbeitszeit!

Wenn der Arbeiter über Mitternacht hinaus arbeitet habe ich aber nicht das
datum des nächsten Tages im Datensatz. Weil wir ja 22:00 bis 06:00 UHR
stehen haben. Aber keine Differenz im Datum.

Im Feld Gesamt sollen wir aber die Gesamtstunden angezeigt bekommen.

Mit:

=Wenn([ende1]>0;Wenn([ende1]>[anfang1];[ende1]-[anfang1]-[pause1];(DatDiff("n";[Beginn];#23:59:00#)+1)+[ende1]-[pause1]);0)

funktioniert es nicht.

Ich überprüfe dabei ob der Arbeitsbeginn kleiner ist als das Arbeitsende
ist. Dieser Teil funktioniert auch ohne Probleme. Aber wenn der
Arbeitsbeginn größer ist als das Ende, weis ich, dass es sich um eine
Nachtschicht handelt.

Wie erhalte ich nun die richtigen Gesamtstunden??

Mache ich da was viel zu kompliziert?

Gruß

Ralf Dorn
Ralf Dorn
2007-01-07 09:38:39 UTC
Permalink
ups,


soll natürlich DatDiff("n";[anfang1];#23:59:00#)+1/60)+[ende1]-[pause1])
heißen.

^°°°


Gruß

Ralf Dorn
Frank Müller
2007-01-07 14:01:11 UTC
Permalink
Hallo Ralf,
Post by Ralf Dorn
Hallo Frank,
habe die Sache schon fast geschafft. Nur ein Problem habe ich jetzt
noch. Mit dem berechnen der Arbeitszeit!
Wenn der Arbeiter über Mitternacht hinaus arbeitet habe ich aber
nicht das datum des nächsten Tages im Datensatz. Weil wir ja 22:00
bis 06:00 UHR stehen haben. Aber keine Differenz im Datum.
Also kommt bei dem DateDiff ein negativer Wert heraus (-16)
Post by Ralf Dorn
Im Feld Gesamt sollen wir aber die Gesamtstunden angezeigt bekommen.
Ich überprüfe dabei ob der Arbeitsbeginn kleiner ist als das
Arbeitsende ist. Dieser Teil funktioniert auch ohne Probleme. Aber
wenn der Arbeitsbeginn größer ist als das Ende, weis ich, dass es
sich um eine Nachtschicht handelt.
Das weißt du und die negative Anzahl der Stunden aus dem DateDiff
sagt das auch. Also frage einfach ab ob der Wert <= 0 ist und addiere
24 Stunden dazu.

If Arbeitsstunden <=0 Then Arbeitsstunden = Arbeitsstunden + 24
-16 + 24 = 8 Wenn genau 0 Stunden heraus kommen wäre das dann
eine 24 Stunden Schicht gewesen.
Post by Ralf Dorn
Wie erhalte ich nun die richtigen Gesamtstunden??
Mache ich da was viel zu kompliziert?
Im Prinzip hast du zwei Möglichkeiten.
Die Berechnung entweder bei der Eingabe schon machen anhand
der Formularfelder in denen das Datum und die Uhrzeiten eingegeben werden
oder halt erst bei der Auswertung. Wenn bei der Eingabe der Daten, kannst
du z.B. bei negativem Wert gleich per DateAdd("d", 1, Endzeit) das Datum
um einen Tag erhöhen und hast bei der Auswertung gleich das richtige Datum
stehen. Darfst natülich trotzdem bei der Auswertung nur das Datum der
Anfangszeit nehmen, damit das zum richtigen Monat passt. Durch
das DateAdd brauchst du dir auch keine Gedanken um unterschiedliche
Anzahl von Tagen in den Monaten zu machen.

Hier mal ein kleiner Auszug wie ich das mal in einem VB Code hatte.

Private Sub Command_Berechnen_Click()

Arbeitsstunden = Round(DateDiff("n", DTPickerA.Value, DTPickerE.Value) /
60, 2)

If Arbeitsstunden <= 0 Then
' Über Tageswechsel hinaus
Anfangszeit = DTPickerA.Value
Endzeit = DateAdd("d", 1, DTPickerE.Value)
' Kann hier in die DB geschrieben werden

' Berechnung bei späterer Auswertung dann wie oben
' Arbeitsstunden = Round(DateDiff("n", Anfangszeit, Endzeit) / 60,
2)

' Oder halt gleich
' Arbeitsstunden = Arbeitsstunden + 24
End If
Label_Ergebnis.Caption = FormatNumber(Arbeitsstunden, 2)
End Sub

Gruß,
Frank
Ralf Dorn
2007-01-07 19:50:01 UTC
Permalink
Hallo Frank,

habe heute ewig auf Antwort gewartet und dachte dann, dass du es nicht mehr
beobachtest und ich habe dann eine lösung gefunden die fast so ist wie dein
Beispiel. habe nur eine eigene Funktion geschrieben weil ich mit VBA besser
zurecht komme als mit den integrierten Funktionen. ;-)

Habe jetzt nur noch ein Problem. Im Formular stehen jetzt die richtigen
Stunden und nun will ich die Daten speichern. Ich kann doch in das Feld
"anfang" und "ende" das ich als Datum/Zeit definiert habe gleich das Datum
und die Uhrzeit speichern oder??

Also anfang in etwa so 07.01.2007 22:00:00 und bei ende 08.01.2007 06:00:00
und im Feld Datum steht ja 07.01.2007.

So wäre es genial!!

Aber wie bekomme ich das Datum in das Feld Anfang? Etwa mit deinem Tipp
DateAdd()??

Ach ja!! Auf den zweiten Blick sehe ich schon, dass es so ist!

Mal sehen, vielleicht bekomme ich es morgen hin.

Auf jeden Fall noch einmal vielen Dank für deine Unterstützung.

Schönen Gruß
Frank Müller
2007-01-07 23:15:48 UTC
Permalink
Hallo Ralf,
Post by Ralf Dorn
Hallo Frank,
habe heute ewig auf Antwort gewartet und dachte dann, dass du es
nicht mehr beobachtest
Na immerhin war Sonntag <vbg>
Post by Ralf Dorn
und ich habe dann eine lösung gefunden die
fast so ist wie dein Beispiel. habe nur eine eigene Funktion
geschrieben weil ich mit VBA besser zurecht komme als mit den
integrierten Funktionen. ;-)
Geht mir auch so.
Post by Ralf Dorn
Habe jetzt nur noch ein Problem. Im Formular stehen jetzt die
richtigen Stunden und nun will ich die Daten speichern. Ich kann doch
in das Feld "anfang" und "ende" das ich als Datum/Zeit definiert habe
gleich das Datum und die Uhrzeit speichern oder??
Ja, das war ja einer der beiden Vorschläge aus meinem
vorherigen Posting.
Post by Ralf Dorn
Also anfang in etwa so 07.01.2007 22:00:00 und bei ende 08.01.2007
06:00:00 und im Feld Datum steht ja 07.01.2007.
So wäre es genial!!
Aber wie bekomme ich das Datum in das Feld Anfang? Etwa mit deinem
Tipp DateAdd()??
DateAdd() addiert ja entsprechend des Intervalls etwas hinzu.
Wenn ich dich jetzt richtig verstehe, möchtest du aus dem Formularfeld:
07.01.2007 22:00:00 das darin enthaltene Datum ohne die Uhrzeit haben.

Auf die Schnelle kannst du das so machen:
Anfang = "07.01.2007 22:00:00"
AnfangsDatum = CDate(FormatDateTime(Anfang, vbShortDate))

Da Access ja Datumsangaben intern sowie als Double verarbeitet
und der Nachkommateil der Uhrzeit entspricht kannst du auch
per Fix dir nur den Vorkommateil holen und diesen in die
Tabelle speichern.

Anfangsdatum = Fix(CDbl(CDate(Anfang)))

Gruß,
Frank

Loading...