Zeitrechner

  • Hallo zusammen,


    ich möchte gerne einen Zeitrechner erstellen. Was ich noch nicht weiß ist, wie ich die Berechnungen mit der Zeit machen kann.

    Folgendes habe ich bis jetzt geschafft:

    Ich will das so machen: sobald "Pause Ende" da ist, wird alles berechnet und alle Felder sind gefüllt.

    Und noch etwas: die Zeit wird auch in Dezimalzahlen berechnet. Pro Tag muss man 07,48 Stunden arbeiten oder 07,80 Stunden in Dezimalzahlen.

    So sieht das in Excel aus:

    Ich freue mich sehr auf eure Erläuterungen.

    Vielen Dank und viele Grüße

    Chris

    2 Mal editiert, zuletzt von Chris_pac (27. September 2022 um 09:58)

  • Und noch etwas: die Zeit wird auch in Dezimalzahlen berechnet. Pro Tag muss man 07,48 Stunden arbeiten oder 07,80 Stunden in Dezimalzahlen.

    Industrieminute – Wikipedia

    So sieht das in Excel aus:

    Da hast du einen Schreibfehler drin: Pause nach 6 Stundnen

    Hier mal ein Ansatz:

  • Hallo Bitnugger,

    herzlichen Dank!

    Ich habe den Code ein bisschen angepasst, denn man sollte die Zeit auch manuell eingeben können. Ich habe die Felder, die manuell eingegeben werden können, nach oben verschoben und einen "Berechnen"-Button hinzugefügt.

    Hier ist der aktuelle Code:

    Jetzt habe ich ein paar Probleme:

    1. mit den Plusrechnungen (Überstunden heute, früher & später Feierabend):

    2. wenn ich unter 10 Minuten bei Ankunftsminute eingebe, passiert folgendes:


    Eine Frage: Wie kann ich diese Funktion für die Eingabefelder in mein Programm integrieren? :

    Quelle

    Ich freue mich sehr über deine Hilfe!

    Viele Grüße

    Chris

  • Hi :)
    Ich hab mir das Ganze angesehen und habs mal mit viel flexiblität umgesetzt. Du musst eig. nur die Parameter oben einstellen, wie es dir gefällt und alles sollte sich automatisch anpassen.

    Zum Berechnen hab ich die Date Funktionen genutzt. Dazu muss man ggf. das Datum dazurechnen und kann automatisch addieren.

    Ich hab die Pausen als Array umgesetzt. Es können also theoretisch beliebig viele Pausen zur Berechnung genutzt werden. Dafür müsste man aber ne Listview für die Pausen nutzen, oder so.

    Selbiges auch für die Soll-Zeit. Der Code unterstützt für jeden Wochentag eine eigene Soll-Zeit. Momentan wird die eine von der Gui für alle Wochentage benutzt.

    Ich hoffe, es ist ausreichend kommentiert.

    Viel Spaß :)

  • @Kanashius - sehr schön... ich habe allerdings andere Ergebnisse.

  • Jo, ich hab mich an dem Code des Original Posters orientiert, was dort berechnet werden soll. Deshalb die Abweichungen.

    Bei der Tatsächlichen Arbeitszeit ziehst du die Pause ab, während der Original Code nur die Zeit zwischen Ankunft und Ende nimmt. Da manchmal pausen,... als Arbeitszeit gelten und ich da nichts ändern wollte, sind die Zeiten natürlich unterschiedlich.

    Die Überstunden bauen auch darauf auf,...

    Nur bei der Endzeit hab ich die 10 Stunden übersehen :)

    Aber das sollte der Threadersteller ohne Probleme so anpassen können, wie es gewollt ist :).

  • Kanashius

    Einfach Mindblowing! der Code ist aus meiner Sicht wirklich sauber :D

    für mich ist der Code leider bissl schwer zu verdauen. lol

    Ich habe nur Probleme mit der Flexibilität des Designs:

    - Wie füge ich ein neues Label + Eingabefeld wie "Ankunft" + "Ankunft Eingabefeld" ein?

    - Ich konnte z.B. nicht die Position zwischen Feierabend und Zollzeit tauschen, oder wenn ich die Zollzeit lösche, kam nur ein Fehler raus.

    Ich brauche nohcmal eure Erklärungen bitte.


    Bitnugger

    Dein Code war für mich wirklich leichter zu verstehen und auch das Design anzupassen. So habe ich es soweit geschafft:


    Aber ich würde gerne noch diese Funktion integrieren, wie Autovervollständigung für die Zahlen.

    Ist das möglich? was sollte ich anpassen oder hast du vielleicht einen Tipp, wie man den Code von jmd anderen in den eigenen Code integrieren kann?

    Dankeschön!

    Schönen Abend euch!

  • Moin,

    ich habe das mal eingearbeitet. Die IDs der zu behandelnden Inputs werden in der globalen Variablen $sInputs gesammelt. Mit AutoIt 3.3.16 böte sich eine Lösung per Map an.

    Solche 'Komfortfunktionen' machen für mich allerdings nur Sinn, wenn auch bereits bei derEingabe geprüft wird, ob die Daten 'sinnvoll' sind (z.B. Pause-Beginn nach Arbeit-Beginn oder Pause-Ende nach Pause- Beginn oder Pause nicht länger als 10 Stunden oder ...).

    Die Berechnung des 'frühesten Feierabends' ist übrigens nicht korrekt.

    Viel Spaß, Velted

  • Velted

    Coole Sache, Danke dir!

    Ich habe leider dien Code zu spät gesehen. Aber die Berechnung habe ich noch geändert :D

    Hier ist meine aktuelle version:

    Für die Hover-Funktion muss ich leider ein anderes Skript verlinken und das muss im gleichen Ordner liegen.

    Im Moment versuche ich, das Design wie das hier zu bearbeiten

    Es macht wirklich Spaß, AutoIT zu lernen!

    Ich freue mich sehr, wenn jemand meinen Code optimieren kann.

    Viele Grüße

    Chris

  • Danke Velted , dass du mir die Arbeit abgenommen hast. ;)

    Solche 'Komfortfunktionen' machen für mich allerdings nur Sinn, wenn auch bereits bei derEingabe geprüft wird, ob die Daten 'sinnvoll' sind (z.B. Pause-Beginn nach Arbeit-Beginn oder Pause-Ende nach Pause- Beginn oder Pause nicht länger als 10 Stunden oder ...).

    Genau... ich habe das in einem meiner größeren Projekte gelöst, indem ich die Tastatureingaben in einem Input mit einem Hook* abfange und nur dann zulasse, wenn sie korrekt sind. Zudem kann man bei mir die Zeiten auch via Mousewheel ($WM_MOUSEWHEEL) ändern. Das ist sehr bequem und Fehleingaben sind somit ausgeschlossen.

    *_WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, ...)

    Chris_pac

    Es macht übrigens wenig Sinn, Begin u. Ende der Pausenzeit/en manuell einzugeben, da diese von der Arbeitszeit abhängig sind und der Arbeitgeber verpflichtet ist, diese entsprechend einzuberechnen, unabhängig davon, ob du sie eingehalten hast, oder nicht.

    Zitat

    Bei einer Arbeitszeit von mehr als sechs bis zu neun Stunden muss die Pausenzeit mindestens 30 Minuten betragen. Bei mehr als neun Stunden Arbeitszeit sind 45 Minuten vorgeschrieben. Die Lage der Ruhepausen ist gesetzlich in § 4 Arbeitszeitgesetz - ArbZG nur rahmenmäßig vorgeschrieben.

    Code
    <= 6 Std.          = keine Pause
    >  6 Std. - 9 Std. = 30 min Pause
    >  9 Std.          = 45 min Pause

    Es gibt aber auch Sonderregelungen... z.B. wenn extrem schwierige/anstrengende Arbeiten (100% Erschwerniszulage) verrichtet werden... da ist/war es zumindest auf dem Bau so, dass nach 15 min Arbeit eine Pause von 15 min folgen muss/te, die in dem Fall aber als Arbeitszeit verbucht wird.

    Soll-Arbeitzeit: 07:48 ...so krumme Zeiten kenne ich nicht... 07:45, 07:30 und 07:15 wohl.

    Es macht wirklich Spaß, AutoIT zu lernen!

    AutoIt!

    PS: Habe mom. leider wenig Freizeit...

  • Hi Bitnugger , Dankeschön für den Hinweis, ich werde versuchen die Funktion rein zu machen.

    Ich habe noch eine Frage:

    Ist es eigentlich möglich, mehrere Variablen in eine Variable zu packen?

    z.B. $id_all_input = $id1, $id2, $id3.... usw. So kann ich eine globale Kontrolle haben. Wenn ich also zum Beispiel die Farbe ändern möchte, kann ich einfach die Variable $id_all_input verwenden, anstatt jedes Mal so zu schreiben:

    Code
    Local $idButton = GUICtrlCreateButton("Button", 210, 170, 85, 25)
    GUICtrlSetColor = (-1, $COLOR_RED)


    Grüße

    Chris