Zum Inhalt springen

Zeiten/Zeitraum...


Empfohlene BeitrÀge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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 :(

Geschrieben

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).

Geschrieben

@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?

Geschrieben

@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

B) 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

Geschrieben

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...

Geschrieben

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 ;) )

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto fĂŒr unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die grĂ¶ĂŸte IT-Community
rund um Ausbildung, Job, Weiterbildung fĂŒr IT-FachkrĂ€fte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard fĂŒr Fachinformatiker und IT-FachkrĂ€fte

×
×
  • Neu erstellen...