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

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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