Arbeitszeit zusammenrechnen

  • Hallo,
    ich habe eine frage zu meinem Script. Ich habe ein Script geschrieben, dass mir die Arbeitszeit von Jedem Tag gut aufzeigen kann und auch anzeigt was genau ich gemacht habe. Mein Problem liegt nun darin, dass ich die Anzahl der gearbeiteten Stunden nicht aus dem Listview summiert bekomme. Ich wäre dankbar für jede Hilfe und es tut mir leid wenn der Code nicht so toll aussieht, ich bin noch ein blutiger Anfänger.

    [autoit]

    ; Arbeitszeit Mel
    #include <GuiConstantsEx.au3>
    #include <AVIConstants.au3>
    #include <TreeViewConstants.au3>
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GuiComboBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <UpdownConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $sDBFile = @ScriptDir & "\datenbank.txt"
    $iEdit = -1

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

    #Region Hauptfenster
    ; GUI
    $MainGui=GuiCreate("Arbeitszeit Bosch", 620, 600)
    GuiSetIcon(@SystemDir & "\notepad.exe", 0)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_END")

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

    ; GUI LOGO
    GUICtrlCreatePic("logo_de.jpg", 0, 0, 620, 42)

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

    ; GUI DATUM
    $Date=GUICtrlCreateDate("", 20, 50, 200, 20)

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

    ; GUI Auswahl
    $combo1=GUICtrlCreateCombo("Art", 230, 50, 150, 20, 0x0003)
    GUICtrlSetData($combo1, "Arbeit|Berufsschule Donnerstag|Berufsschule Freitag|Sonstige")
    GUICtrlCreateLabel("Pause:", 50, 84)
    GUICtrlSetOnEvent($Combo1,"_Sonstige")
    $Radio=GuiCtrlCreateRadio("Ja", 100, 80)
    GuiCtrlSetState(-1, $GUI_CHECKED)
    GuiCtrlCreateRadio("Nein", 140, 80)
    $Eingabe=GUICtrlCreateInput("Wenn Sonstige", 230, 80, 150, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Beginn:", 390, 53)
    $UpDownB1=GUICtrlCreateInput("7", 440, 50, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownB1)
    GUICtrlSetLimit(-1, 20, 7)
    $UpDownB2=GUICtrlCreateInput("0", 490, 50, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownB2)
    GUICtrlSetLimit(-1, 59, 0)
    GUICtrlCreateLabel("Ende:", 390, 83)
    $UpDownE1=GUICtrlCreateInput("7", 440, 80, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownE1)
    GUICtrlSetLimit(-1, 20, 7)
    $UpDownE2=GUICtrlCreateInput("0", 490, 80, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownE2)
    GUICtrlSetLimit(-1, 59, 0)
    GUICtrlCreateLabeL("Summe:", 510, 520)
    $Summe=GUICtrlCreateLabel("", 510, 540, 90, 20, 0x1000)

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

    ;GUI Button
    $Button=GUICtrlCreateButton("OK", 540, 80, 60, 20)
    GUICtrlSetOnEvent(-1,"_Anwenden")
    GUICtrlSetOnEvent($Button, "_Summe")
    GUICtrlSetOnEvent($Button, "Save")

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

    ; GUI Liste
    $hListView=GUICtrlCreateListView("Datum|Art|Arbeitsbeginn|Arbeitsende|Stunden", 20, 110, 580, 400)
    $hLVHandle=GUICtrlGetHandle($hListView)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 175, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Arbeitsbeginn", 90, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Arbeitsende", 90, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 4, "Stunden", 90, 0)

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

    #EndRegion Hauptfenster

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

    ; GUI MESSAGE LOOP
    GuiSetState()

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

    _Sonstige()
    If FileExists($sDBFile) Then Load()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Sonstige()
    If GUICtrlRead($combo1) = "Sonstige" Then
    GUICtrlSetState($Eingabe, $GUI_ENABLE)
    GUICtrlSetState($Eingabe, $GUI_FOCUS)
    ElseIf GUICtrlRead($combo1) = "Berufsschule Donnerstag" Then
    GUICtrlSetData($UpDownB1, "8")
    GUICtrlSetData($UpDownB2, "00")
    GUICtrlSetData($UpDownE1, "15")
    GUICtrlSetData($UpDownE2, "45")
    GUICtrlSetData($Eingabe, "Wenn Sonstige")
    GUICtrlSetState($Eingabe, $GUI_DISABLE)
    Else
    GUICtrlSetData($Eingabe, "Wenn Sonstige")
    GUICtrlSetState($Eingabe, $GUI_DISABLE)
    EndIf
    EndFunc

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

    Func _Anwenden()
    If GUICtrlRead($Radio) = "4" Then
    If GUICtrlRead($combo1) = "Sonstige" Then
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60, $hListView)
    Else
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60, $hListView)
    EndIf
    Else
    If GUICtrlRead($combo1) = "Sonstige" Then
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75, $hListView)
    Else
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75, $hListView)
    EndIf
    EndIf
    EndFunc

    Func _End()
    Save()
    GUIDelete($MainGui)
    Exit
    EndFunc

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Load

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Save

    [/autoit]

    Vielen Dank,
    Egon577

  • Hallo Egon577,

    ich habe dein Skript überarbeitet:

    Spoiler anzeigen
    [autoit]

    ; Arbeitszeit Mel
    #include <GuiConstantsEx.au3>
    #include <AVIConstants.au3>
    #include <TreeViewConstants.au3>
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GuiComboBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <UpdownConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $sDBFile = @ScriptDir & "\datenbank.txt"
    $iEdit = -1

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

    Global $nGesamt = 0 ;<====================

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

    #Region Hauptfenster
    ; GUI
    $MainGui=GuiCreate("Arbeitszeit Bosch", 620, 600)
    GuiSetIcon(@SystemDir & "\notepad.exe", 0)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_END")

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

    ; GUI LOGO
    GUICtrlCreatePic("logo_de.jpg", 0, 0, 620, 42)

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

    ; GUI DATUM
    $Date=GUICtrlCreateDate("", 20, 50, 200, 20)

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

    ; GUI Auswahl
    $combo1=GUICtrlCreateCombo("Art", 230, 50, 150, 20, 0x0003)
    GUICtrlSetData($combo1, "Arbeit|Berufsschule Donnerstag|Berufsschule Freitag|Sonstige")
    GUICtrlCreateLabel("Pause:", 50, 84)
    GUICtrlSetOnEvent($Combo1,"_Sonstige")
    $Radio=GuiCtrlCreateRadio("Ja", 100, 80)
    GuiCtrlSetState(-1, $GUI_CHECKED)
    GuiCtrlCreateRadio("Nein", 140, 80)
    $Eingabe=GUICtrlCreateInput("Wenn Sonstige", 230, 80, 150, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Beginn:", 390, 53)
    $UpDownB1=GUICtrlCreateInput("7", 440, 50, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownB1)
    GUICtrlSetLimit(-1, 20, 7)
    $UpDownB2=GUICtrlCreateInput("0", 490, 50, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownB2)
    GUICtrlSetLimit(-1, 59, 0)
    GUICtrlCreateLabel("Ende:", 390, 83)
    $UpDownE1=GUICtrlCreateInput("7", 440, 80, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownE1)
    GUICtrlSetLimit(-1, 20, 7)
    $UpDownE2=GUICtrlCreateInput("0", 490, 80, 40, 20,$UDS_WRAP)
    GUICtrlCreateUpdown($UpDownE2)
    GUICtrlSetLimit(-1, 59, 0)
    GUICtrlCreateLabeL("Summe:", 510, 520)
    $Summe=GUICtrlCreateLabel("", 510, 540, 90, 20, 0x1000)

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

    ;GUI Button
    $Button=GUICtrlCreateButton("OK", 540, 80, 60, 20)
    GUICtrlSetOnEvent(-1,"_Anwenden")
    ;GUICtrlSetOnEvent($Button, "_Summe") ;<============ jetzt unnötig die Funktion gab es eh noch nicht wäre aber wegen der nächsten Zeile eh nicht ausgeführt worden
    GUICtrlSetOnEvent($Button, "_Anwenden") ;hier war fälschlicherweise _Save

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

    ; GUI Liste
    $hListView=GUICtrlCreateListView("Datum|Art|Arbeitsbeginn|Arbeitsende|Stunden", 20, 110, 580, 400)
    $hLVHandle=GUICtrlGetHandle($hListView)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 175, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Arbeitsbeginn", 90, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Arbeitsende", 90, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 4, "Stunden", 90, 0)

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

    #EndRegion Hauptfenster

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

    ; GUI MESSAGE LOOP
    GuiSetState()

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

    _Sonstige()
    If FileExists($sDBFile) Then Load()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Sonstige()
    If GUICtrlRead($combo1) = "Sonstige" Then
    GUICtrlSetState($Eingabe, $GUI_ENABLE)
    GUICtrlSetState($Eingabe, $GUI_FOCUS)
    ElseIf GUICtrlRead($combo1) = "Berufsschule Donnerstag" Then
    GUICtrlSetData($UpDownB1, "8")
    GUICtrlSetData($UpDownB2, "00")
    GUICtrlSetData($UpDownE1, "15")
    GUICtrlSetData($UpDownE2, "45")
    GUICtrlSetData($Eingabe, "Wenn Sonstige")
    GUICtrlSetState($Eingabe, $GUI_DISABLE)
    Else
    GUICtrlSetData($Eingabe, "Wenn Sonstige")
    GUICtrlSetState($Eingabe, $GUI_DISABLE)
    EndIf
    EndFunc

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

    Func _Anwenden() ;in dieser Routine werden die Tagesstunden errechnet deshalb die Berechnung in eigene Varaible ausgelagert damit sie später addiert werden kann
    Local $nZeit
    If BitAND(GUICtrlRead($Radio),$GUI_CHECKED) Then ;<===================== siehe Hilfe zu Gui CtrlRead Bemerkungen
    If GUICtrlRead($combo1) = "Sonstige" Then
    $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
    Else
    $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
    EndIf
    Else
    If GUICtrlRead($combo1) = "Sonstige" Then
    $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
    Else
    $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75
    GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
    EndIf
    EndIf
    $nGesamt += $nZeit ;<==============
    GUICtrlSetData($Summe,$nGesamt) ;<==============
    EndFunc

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

    Func _End()
    Save()
    GUIDelete($MainGui)
    Exit
    EndFunc

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem, $aTmp
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    $nGesamt = 0
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    $aTmp = StringSplit($sItem,"|") ;<=============
    ;_ArrayDisplay($aTmp)
    $nGesamt += $aTmp[5] ;<=========== Tagesarbeitszeit hinzuaddieren
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    GUICtrlSetData($Summe,$nGesamt) ;<=========== Summe anzeigen
    EndFunc ;==>Load

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Save

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

    ;Func _Summe()

    [/autoit]

    die Änderungen habe ich mit ;<====== gekennzeichnet

    mfg autoBert

  • Hallo Egon577,
    das ist ein tolles Programm :). Ist praktisch so zum protokollieren seiner Stunden. Allerdings ist die Arbeitszeit mit Pause länger als ohne Pause.

    - Schön wäre, wenn man Einträge ändern könnte, wenn man sich "verklickt hat, oder auch löschen, sowie Urlaub und Krankheitstage.
    - Die angezeigten Minuten bei Begin und Ende mit zwei Zahlen darstellen.
    - die Pausenzeit variabel einstellen könnte
    - und die Stunden mit zwei Stellen nach dem Komma anzeigt.

    Nochmal --> tolles kleines Programm.
    Viele Grüße
    TOYY1

  • Vielen Dank für die Vorschläge ich werde versuchen diese zu verwirklichen!!

    PS: Das Problem mit der Pause habe ich schon beseitigt.

    Egon577

    • Offizieller Beitrag

    @Egon577, warum löschst du deinen Startpost? Der Sinn des ganzen Threads ist damit hinüber und die Arbeit deiner Helfer auch.
    Wenn das Theama gelöst ist einfach den 1. Post editieren und Suffix auf gelöst setzen.

    @Mods, Adimin. 1. Post bitte wiederherstellen.