developer Geschrieben 16. November 2004 Geschrieben 16. November 2004 Hallo, ich sitze hier gerade vor einem Problem, dem ich irgendwie nicht so ganz Herr werde: Ich brauche eine Funktion die mir die Anzahl an freien Stunden eines Arbeitstages zurück gibt. Klingt sofern ja eigentlich ziemlich einfach, es spielen allerdings einige Faktoren eine Rolle Arbeitszeit: z.B. von 8:00 - 17:00 Uhr Pause1: z.B. von 10:00 - 10:15 Uhr Pause2: z.B. von 12:00 - 13:00 Uhr Soweit so klar, ich habe 9h Arbeitszeit und ziehe die Pausen ab. Was ist nun aber, wenn er einen Arzttermin hat, und zwar von 8:00-11:00 Uhr. Dann dürfte ich die erste Pause ja nicht abziehen. Schön ist es auch bei Feiertagen, die mitten am Tag beginnen: z.B. Heiligabend oder wenn er seit 2 Wochen im Urlaub ist und heute Mittag wieder kommt. Irgendwie fehlt mir heute der rote Faden. Zitieren
ottithefant Geschrieben 16. November 2004 Geschrieben 16. November 2004 Na mal ganz einfach nachgefragt. Werden die Anfangs- und Endzeit manuell eingegeben oder automatisiert? Über bedingte Verarbeitung läßt sich das doch ziemlich schnell lösen würde ich sagen. Zitieren
developer Geschrieben 16. November 2004 Autor Geschrieben 16. November 2004 Die Arbeitszeiten liegen in einer Datenbank. Wenn für einen Mitarbeiter keine Arbeitszeiten angegeben sind, nimmt er die Öffnungszeiten aus einer Ini-Datei. Die Zeiten für Feiertage werden berechnet und auch in eine DB geschrieben. Urlaub, Krankheit, Berufsschule, also freie Zeiten, können natürlich kurzfristig eingeplant werden und liegen natürlich auch in einer DB. Dann gibts da natürlich noch andere Termine, die (wer mags glauben) auch kurzfristig in eine DB eingetragen werden können. Ich muss mir wohl ne Kanne Kaffee machen und dann über DateDiff was basteln Zitieren
Gast Geschrieben 17. November 2004 Geschrieben 17. November 2004 Gut, erfinden wir das Ran von vorne. Machen wir uns ein bool'sches Array(boolArbeitszeit) der Größe 540 (9*60 Minuten) und initialisieren wir es mit true. Als nächstes basteln wir uns eine Funktion die das Array und die Pausenzeit übergeben bekommt. In dieser Funktion setzen wir diejenigen Minuten die in der Pausenzeit liegen auf false. Ausgegeben würden dann nur die Blöcke die true enthalten (und dadurch dass die Anzahl der true-Elemente im Array zählbar ist können wir auch die Anzahl der Arbeitsminuten/-stunden bestimmen). Zitieren
CSC Geschrieben 18. November 2004 Geschrieben 18. November 2004 @LoneGunman Da müssen Pausen aber immer 60 Minuten lang sein. @developer Stehen die Pausenzeiten auch in der DB oder woanders? Oder werden manuell eingegeben? Zitieren
developer Geschrieben 18. November 2004 Autor Geschrieben 18. November 2004 @LoneGunman Wir haben allerdings nicht nur einen Mitarbeiter, sonder... sagen wir mal 30 Stück, 5 Mietwagen und 3 Gruppen. Meiner ANsicht nach zu unperformant. Ich habe mir was ausgedacht... Es gibt 3 verschiedene Möglichkeiten, wie 2 Termine zueinander angeordnet werden können: a) Sie überschneiden sich nicht Sie überschneiden sich in einem Punkt c) Sie überschneiden sich in zwei Punkten a) [OOOOOOOO] [OOOOOOOOOO] [OOOOOOOOOOOO] [OOOOOOOOOOOO] c) [OOOOOOOOOOOOOOOOOOOOOO] [OOOOOOOO] [/code] Ich sortiere ein Zweistelliges Array [n,1] nach dem Ende der Termine und fange mit dem spätesten Termin an. Bei a würde sich die Pausenzeit einfach berechnen lassen: T=Termin ; A=Anfang ; E=Ende T2E-T2A + T1E-T1A Bei b wäre das T2E-T1E + T1E-T1A oder T2E-T2A - T1E-T2A + T1E-T1A Bei c wäre das T1E-T1A Zitieren
dimikar Geschrieben 21. November 2004 Geschrieben 21. November 2004 bei Punkt b wäre die Berechnung ähnlich einfach wie bei Punkt c T2E-T1A oder? Gruß Dimikar Zitieren
developer Geschrieben 22. November 2004 Autor Geschrieben 22. November 2004 Eigentlich schon, da hast du Recht. Es könnte allerdings zu Problemen kommen, wenn mehr als 2 Termine auftreten. Daher muss ich das mit c auch nochmal durchdenken... [ooooooooooooooooooooooooooo] [oooooooooooooooooooooooooooo] [oooooooooooooooooooooooooooo] [ooooooo] So könnte das ja auch aussehen... Zitieren
Erik_hfr Geschrieben 22. November 2004 Geschrieben 22. November 2004 Nun kan ich als VB-Anfänger nicht wirklich produktiv mitmischen, jedoch stellt sich mir die Frage, wer solche Termine vergibt? Theoretisch ist deine zuletzt genannte Konstellation mehrerer Termine möglich, praktisch hingegen wird wohl niemand Termine auf solch eine Art und Weise vergeben. Fall a) bis c) erscheinen da schon weitaus realistischer. Und im Endeffekt bist du bzw. jeder Mensch nur in einem Termin vertreten. Man kann nicht in einer Besprechung sein und zeitgleich zum kunden fahren (auch wenn man es manchmal können müsste ) Zitieren
developer Geschrieben 22. November 2004 Autor Geschrieben 22. November 2004 Auf einer Seite ist das natürlich begründet. Es geht allerdings hier nicht nur um "Termine" sondern auch um freie Zeiten wie z.B. Urlaub, ÜBerstunden die abgefeiert werden oder PAusen. Es ging mir ja darum, wie viel Arbeitszeit für den Mitarbeiter noch verplant werden kann. Es wäre schon realistisch, wenn du an einem Tag zum Zahnarzt gehst (z.B. 9-14 Uhr), du wärend dieser Zeit eine Frühstückspause hättest (z.B. 10:00 - 10:15), von 12:00 bis 12:45 Uhr ist Mittagspause und du hattest ab 13 Uhr Urlaub eingetragen (weil du damals noch nicht wusstest, dass du zum Arzt musst). Da sollten dann also 0 Arbeitsstunden bei rauskommen und keine negative Arbeitszeiten. Das würde ja passieren, wenn du alle Pausen addieren und sie von der Abeitszeit abziehen würdest. Zitieren
Erik_hfr Geschrieben 23. November 2004 Geschrieben 23. November 2004 Aber im Endeffekt ist deine letzte Beschreibung auch eine Überlagerung von zwei Terminebenen: unten die normalen Termine, die vom Zahnarzt überlagert werden... [oooooooooooooooooooooooo-ZAHNARZT-oooooooooooooooooooooooo] [oo-ARBEIT-oo][oo-PAUSE-oo][oo-ARBEIT-oo][ooo-URLAUB-ooooooooooooooo] Selbst wenn zwischen der untersten und der obersten "Ebene" sich noch eine befindet, meinetwegen von 10:00 - 12:30 Uhr, dann hat das ja keine Auswirkungen auf dein Vorhaben. Denn Zahnarzt hat eine höhere Priorität (meistens). Verstehst du? Is' aber auch doof zu erklären... Nachtrag: Selbstverständlich musst du deinem kleinem Programm dann auch die Prioritäten für die entsprechenden Termine zuweisen. Schließlich willst du ja, wie du schon meintest, für Arztbesuche oder Urlaub keine Arbeitszeit abgezogen bekommen. Zitieren
developer Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Nochmal kurz: Es geht mir ja nicht um irgendwelche Prioritäten. Es ist auch egal, ob der Termin erst um 9 oder 9:30 Uhr ist. Es können n Ebenen existieren. Letztendlich will ich "nur" wissen, wie lange die Person am gleichen Tag noch arbeiten kann. Ob das von seinem Stundenkonto abgezogen wird oder nicht, ist total irelevant. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.