Arbeitszeiten dokumentieren (überstunden fehlen)

  • Wenn du das getan hättest wäre es nie zu diesem Thread und deinem Script gekommen. Wenn es nicht lernen willst dann lass es gleich bleiben ;).

    Würde ich nicht lernen wollen, häte ich dann hier nach einer Lösung gefragt, die auskommentiert ist? ;)
    Außerdem warum soll ich denn nach neuen Befehlen suchen, wenn ich welche kenne, die den Zweck genau erfüllen?

    Gruß
    Dome

  • Das problem war, dass ich das /-Zeichen als Trennzeichen für das Datum benutzt hatte... Es reicht in der Deklaration von $Date die / durch zum Beispiel Punkte zu ersetzen. ;)


    Habe das Programm eigenthändig schon umgeschrieben ;)
    Ich habe es NICHT einfach abgeschrieben, sondern mir deine Variablen und Funktionen angeguckt und daraufhin mein Programm umgeschrieben.
    Du bist aber im Beitrag an sich als Helfer makiert ;)
    Vielen Dank an dich nochmal!

    Mein Problem besteht allerdings weiterhin:
    Ich möchte die Arbeitszeit einens Tages insgesamt und dann am besten auch nochmal die genauen Überstunden dann an dem Tag mit in dem Text-File haben.

    Danke schon einmal im vorraus an alle

    Gruß
    Dome

  • Okay beginnen wir, nach Post 25, mal damit dein eigentliches Problem anzugehen... ^^ Am einfachsten wäre es wohl, wenn du bei Arbeitsbeginn einen Timestamp (-> TimerInit() ) anlegst und dann am Ende mit TimerDiff() die vergangene Zeit abfragst. Dazu müsstest du eben noch die Zeit der Pausen messen und diese dann von der gesamten Zeit abziehen. Um Überstunden zu berücksichtigen könntest du in dein GUI ja eine Überstunden-CheckBox einfügen, die dann ein separates Aufzeichnen/Loggen einschaltet...

    LG
    Christoph :)

  • Da hab ich an sich auch schon dran gedacht.
    Allerdings möchte ich nicht, dass noch irgendwas von Programm nebenher laufen muss.
    So wie ich das Programm momentan noch habe, kann man es auch immer wieder schließen zwischen den Eingaben.
    Ich hab das ganze jetzt auch in eine .csv Datei geschmissen, und werde morgen mal versuchen wie das mit Daten auslesen funktioniert.
    Habe ich zwar auch keine Ahnung von aber egal ;)
    So siehts jetzt auch viel übersichtlicher aus, obwohl ich nicht so der Microsoft Office Fan bin.
    Falls doch noch jemand eine bessere Idee hat, bitte auch hier rein posten.
    Bin für alles offen ^^


    Und damit mache ich jetzt auch mal langsam Feierabend

    Gruß
    Dome

  • Guten Morgen und auf ein neues ;)

    Da habe ich auch schon dran gedacht, allerdings muss ich mich dann erst mit der Funktion vertraut machen.
    Habe auch grade schon versucht in der Excel-Tabelle die Werte einfach miteinander zu verrechnen,
    klappt aber nicht so ganz :D

    Gruß
    Dome

  • So hat sich alles erledigt von meinem Problem hier.
    Hab es jetzt mit einer .ini geregelt. Eigentlich ganz einfach, wenn man weiß wie es gehen soll :D
    Jetzt habe ich nur das Problem, dass er mir mit volgender Funktion:

    Spoiler anzeigen
    [autoit]

    Func _Zeiten ()
    Global $Startini = IniRead ($ini, $section, "Start", @HOUR & ":" & @MIN & ":" & @SEC)
    Global $PauseStartini = IniRead ($ini, $section, "PauseStart", @HOUR & ":" & @MIN & ":" & @SEC)
    Global $PauseEndeini = IniRead ($ini, $section, "PauseEnde", @HOUR & ":" & @MIN & ":" & @SEC)
    Global $Endeini = IniRead ($ini, $section, "Beendet", @HOUR & ":" & @MIN & ":" & @SEC)
    Global $Gesamt = $Endeini - $Startini
    Global $GesamtPause = $PauseEndeini - $PauseStartini
    EndFunc

    [/autoit]

    immer nur Werte mit vollen Stunden angibt. Ich möchte diesen Wert aber auf die Sekunde genau haben.

    Einmal editiert, zuletzt von Gabbadome (7. September 2012 um 10:20)

  • Das liegt daran, dass du nicht einfach zwei Werte mit dem Format nn:nn:nn voneinander abziehen kannst.
    Der interne Aufruf von Number() macht aus "12:34:56" 12, da "12:34:56" keine Zahl ist.

    MfG, James

  • Warum machst du das nicht einfach mit TimerInit() und TimerDiiff() ?( Dann sparst du dir das Gefrickel mit dem Umrechnen usw.

    Genau aus den gleichen Gründen, warum ich vorher auch Dos genutzt habe.
    Ich kenne nichts anderes und kann aber damit umgehen was ich kenne ;)
    Finde zu den beiden Funktionen aber auch kein gescheites Tutorial oder ne Anleitung die ich versehe :wacko:

  • Zitat

    Genau aus den gleichen Gründen, warum ich vorher auch Dos genutzt habe.
    Ich kenne nichts anderes und kann aber damit umgehen was ich kenne
    Finde zu den beiden Funktionen aber auch kein gescheites Tutorial oder ne Anleitung die ich versehe

    Ich weiß, dass du diesen Thread nun schon auf gelöst gesetzt hast, aber ich möchte dich trotzdem noch einmal darauf hinweisen, dass in der Hilfe zu JEDEM Befehl eine sehr ausführliche Funktions-Beschreibung und auch ein spezielles Beispiel-Script beiliegt... ;)

    LG
    Christoph :)

  • Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.8.1
    Autor: Nachid
    Kontakt: If i need u ill kontakt u.

    [/autoit] [autoit][/autoit] [autoit]

    Script Funktion:
    Dokumentiert ihre Arbeitzeiten samt Pausen übersichtlich in einer Text-Datei.
    Es werden hierbei nur Die Start- und Endzeiten dokumentiert!

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Arbeitszeiten", 300, 190)

    [/autoit] [autoit][/autoit] [autoit]

    $Start = GUICtrlCreateButton("Anfang", 10, 105, 90, 35)
    $Stop = GUICtrlCreateButton("Feierabend", 110, 105, 90, 35)
    $Ende = GUICtrlCreateButton("Ende", 230, 150, 60, 30)
    $PauseStart = GUICtrlCreateButton("Pause-Start", 10, 150, 90, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel ("Dieses Programm dokumentiert deine Arbeitszeiten.", 10, 10)
    GUICtrlCreateLabel ("Beginnst du deinen Arbeitstag, drücke ""Anfang"",", 10, 35)
    GUICtrlCreateLabel ("Beendest du ihn, drücke ""Feierabend"".", 10, 50)
    GUICtrlCreateLabel ("Das Dokument wird Standardmäßig als .txt-Datei", 10, 65)
    GUICtrlCreateLabel ("in dem Ordner C:\USers\User\Arbeits-Info gespeichert.", 10, 80)
    GUISetState()
    $today = @MDAY&"."&@MON&"."&@YEAR
    $bininpause = 0
    Do
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $msg = $Start
    $day = IniRead("inf.ini","Arbeit","tag","0x00")
    If $day=$today Then
    If MsgBox(289,"Achtung!","Kommen wurde heute schon gebucht ! Überbuchen ?")=1 Then
    IniWrite("inf.ini","Arbeit","kommen",@HOUR&":"&@MIN&":"&@SEC)
    IniWrite("inf.ini","Arbeit","tag",$today)
    EndIf
    Else
    IniWrite("inf.ini","Arbeit","kommen",@HOUR&":"&@MIN&":"&@SEC)
    IniWrite("inf.ini","Arbeit","tag",$today)
    MsgBox(65,"Information","Kommen wurde gebucht.")
    EndIf
    Case $msg = $PauseStart
    If IniRead("inf.ini","Arbeit","spause","0x00")=="0x00" Then
    IniWrite("inf.ini","Arbeit","spause",@HOUR&":"&@MIN&":"&@SEC)
    MsgBox(65,"Information","Pause angefangen !")
    GUICtrlDelete($PauseStart)
    $PauseStart = GUICtrlCreateButton("Pause-Ende", 10, 150, 90, 30)
    Else
    $startzeit = IniRead("inf.ini","Arbeit","spause","0x00")
    $endzeit = @HOUR&":"&@MIN&":"&@SEC
    $startzeit = StringSplit($startzeit,":",1)
    $endzeit = StringSplit($endzeit,":",1)
    $stunden = $endzeit[1] - $startzeit[1]
    $minuten = $endzeit[2] - $startzeit[2]
    $sekunden = $endzeit[3] - $startzeit[3]
    If $sekunden<0 Then
    $sekunden = $sekunden + 60
    $minuten = $minuten - 1
    EndIf
    If $minuten<0 Then
    $minuten = $minuten + 60
    $stunden = $stunden - 1
    EndIf
    If IniRead("inf.ini","Arbeit","pause","0x00")<>"0x00" Then
    $akpause = IniRead("inf.ini","Arbeit","pause","0x00")
    $akpause = StringSplit($akpause,":",1)
    IniWrite("inf.ini","Arbeit","pause",$akpause[1] + $stunden&":"&$akpause[2] + $minuten&":"&$akpause[3] + $sekunden)
    Else
    IniWrite("inf.ini","Arbeit","pause",$stunden&":"&$minuten&":"&$sekunden)
    EndIf
    IniDelete("inf.ini","Arbeit","spause")
    GUICtrlDelete($PauseStart)
    $PauseStart = GUICtrlCreateButton("Pause-Start", 10, 150, 90, 30)
    MsgBox(65,"Information","Pause beendet !")
    EndIf
    Case $msg = $Stop
    $pause = IniRead("inf.ini","Arbeit","pause","0x00")
    $ende = StringSplit(@HOUR&":"&@MIN&":"&@SEC,":",1)
    $anfang = IniRead("inf.ini","Arbeit","kommen","0x00")
    If $pause = "0x00" Then
    If MsgBox(289,"Achtung!","Es wurde keine Pause gebucht ! Pausezeit korrigieren ?")=1 Then
    $pause = InputBox("Pause","Bitte tragen sie hier ihre Pause im Format HH:MM:SS ein")
    Else
    $pause = "00:00:00"
    EndIf
    EndIf
    If $anfang = "0x00" Then
    If MsgBox(289,"Achtung!","Es wurde keine erscheinen gebucht ! Anfangszeit korrigieren ?")=1 Then
    $anfang = InputBox("Pause","Bitte tragen sie hier im Format HH:MM:SS ein wann sie gekommen sind.")
    Else
    $anfang = "00:00:00"
    EndIf
    EndIf
    $pause = StringSplit($pause,":",1)
    $anfang = StringSplit($anfang,":",1)
    $stunden = $ende[1] - $anfang[1]
    $minuten = $ende[2] - $anfang[2]
    $sekunden = $ende[3] - $anfang[3]

    [/autoit] [autoit][/autoit] [autoit]

    If $sekunden<0 Then
    $sekunden = $sekunden + 60
    $minuten = $minuten - 1
    EndIf
    If $minuten<0 Then
    $minuten = $minuten + 60
    $stunden = $stunden - 1
    EndIf
    $raz = IniRead("inf.ini","Arbeit","raz","00:00:00")
    $raz = StringSplit($raz,":",1)
    $ueberstunden = $stunden - $raz[1]
    $ueberminuten = $minuten - $raz[2]
    $uebersekunde = $sekunden - $raz[3]
    If $ueberstunden<0 Or $ueberminuten<0 Or $uebersekunde<0 Then
    $ueberminuten = 0;
    $ueberstunden = 0
    $uebersekunde = 0
    EndIf
    FileWrite("Gearbeitet.txt",@CRLF& _
    "Tag : "&$today&@CRLF&"Reale Arbeitszeit : "&$stunden&":"&$minuten&":"&$sekunden&@CRLF& _
    "Pause (bereits verrechnet) : "&$pause[1]&":"&$pause[2]&":"&$pause[3]&@CRLF& _
    "Kommen : "&$anfang[1]&":"&$anfang[2]&":"&$anfang[3]&@CRLF& _
    "Gehen : "&$ende[1]&":"&$ende[2]&":"&$ende[3]&@CRLF& _
    "Überstunden : "&$ueberstunden&":"&$ueberminuten&":"&$uebersekunde)
    IniDelete("inf.ini","Arbeit","kommen")
    IniDelete("inf.ini","Arbeit","pause")
    MsgBox(65,"Information","Arbeitszeit wurde verrechnet und gespeichert")

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $ende
    Exit 1
    EndSelect
    Until $msg = -3

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]


    Sollte so funktionieren.

    -

  • Danke dir für die Antwort, aber ich habe meine Lösung schon ;)
    Habe deine Prüfungjedoch , ob eine Zeit bereits gebucht wurde, erfolglos versucht in mein Script zu implementieren.
    Super Idee, die Tage werde ich mich da noch einmal mit auseinander setzen.