Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeitberechnung inklusive Pausen etc. Planung (https://www.delphipraxis.net/165806-zeitberechnung-inklusive-pausen-etc-planung.html)

sonny2007 17. Jan 2012 13:38

Zeitberechnung inklusive Pausen etc. Planung
 
Delphi-XE 2: VCL Datenbank: MS SQL-Server Verbindung über: ADO SQL


Hallo Delphianer ( schreibt man das so ?),

folgendes Problem.
Ich möchte gerne errechnen wann ein Teil ( Laufzeit bekannt ) endet. Welche Uhrzeit und welches Datum.

Bsp.: Ich habe folgendes angelegt.

Frühschicht: 6 -14:30 Uhr Pause1 : 09:30-09:45Uhr Pause2 : 12:00-12:45Uhr

Spätschicht: 14:30-23:00 Uhr Pause1 : 16:30-16:45Uhr Pause2 : 20:00-20:30Uhr

Nun habe ich ein Auftrag der 300 Stunden läuft.Tagesarbeitszeit beträgt 16 Stunden. Das Datum zu errechnen ist einfach in dem ich die Runtime(Auftrag) durch DayTime nehme.
300/16 = 18 volle Tage. Dann bleibt ja eine Restzeit von 12 Stunden übrig.

Ich benötige nun den Ansatz wie ich die Uhrzeit( Fertigstellung ) errechne. Pausen sollten berücksichtigt werden. Vor lauter
Dates und Times bin ich schon blind.
Es können auch mehrere Pausenzeiten angegeben werden. Des Weiteren steht mir ständig auch der 0:00 Uhr Sprung im Weg.

Bitte gebt mir einen Ansatz wie ich das zuverlässig lösen kann.

Vielen Dank im Voraus
s0n

Sir Rufo 17. Jan 2012 14:30

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Du musst für die Betrachtung nicht die Pausen nehmen, sondern die Zeit, in der gearbeitet wird.
Dabei betrachtest du aber nur einen 24h Zeitraum. Es ist dabei unerheblich ob von 00:00-03:00 z.B. die Nachtschicht vom Vorabend arbeitet. An dem Tag wird einfach in der Zeit gearbeitet.
Code:
+00++01++02++03++04++05++06++07++08++09++10++11++12++13++14++15++16++17++18++19++20++21++22++23+
........................xxxxxxxxxxxxxx.xxxxxxxxx...xxxxxxxXXXXXXXX.XXXXXXXXXXXXX..XXXXXXXXXX....
oder auch anders geschrieben:
Code:
06:00 3,50h S1
09:45 2,25h S1
12:45 1,75h S1
14:30 2,00h S2
16:45 3,25h S2
20:30 2,50h S2
==============
.....15,25h Gesamt
Du müsstest jetzt zunächst die Restzeit vom Starttag errechnen (anhand der Blöcke).
Es sei denn jeder Auftrag startet immer um 06:00
Ist diese Restzeit < Auftragszeit, dann nimmst du die Auftragszeit-Restzeit und teilst dies durch die Gesamt-Arbeitszeit pro Tag um die Tage zu ermitteln.
Jetzt musst du noch die Restzeit für den letzten Tag ermitteln
Code:
RestzeitEnde = Auftragszeit - RestzeitAnfang - Tage * TagesArbeitszeit
Mit dieser Restzeit gehst du nun Block für Block durch und stellst dabei fest, ob die Restzeit in diesem Block abgearbeitet werden kann.
Wenn dem so ist, dann nimmst du einfach die Startzeit des Blocks und addierst die Restzeit hinzu und hast die errechnete Uhrzeit

EDIT:

Wenn du die Wochenenden und Feiertage berücksichtigen möchtest, dann musst du dir für jeden Tag dieses Zeitraster holen und damit rechnen.

webcss 17. Jan 2012 14:57

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Zitat:

Zitat von sonny2007 (Beitrag 1146305)
Hallo Delphianer ( schreibt man das so ?),

stimmt so.

folgendes Problem.
Ich möchte gerne errechnen wann ein Teil ( Laufzeit bekannt ) endet. Welche Uhrzeit und welches Datum.

Bsp.: Ich habe folgendes angelegt.
Zitat:

Zitat von sonny2007 (Beitrag 1146305)
Frühschicht: 6 -14:30 Uhr Pause1 : 09:30-09:45Uhr Pause2 : 12:00-12:45Uhr

Spätschicht: 14:30-23:00 Uhr Pause1 : 16:30-16:45Uhr Pause2 : 20:00-20:30Uhr

= 15,25 Stunden produktive Arbeitszeit, siehe mein vorposter
Zitat:

Zitat von sonny2007 (Beitrag 1146305)
Nun habe ich ein Auftrag der 300 Stunden läuft.

Dauer bis zur Fertigstellung: 300/15,25 = 19,67 Tage.

Zitat:

Zitat von sonny2007 (Beitrag 1146305)
Ich benötige nun den Ansatz wie ich die Uhrzeit( Fertigstellung ) errechne. Pausen sollten berücksichtigt werden.

Ich unterstelle Du verwendest TDateTime (Datumstyp in Delphi) und die unit DateUtils.
Delphi-Quellcode:
Dauer:= 19,67 //...
Enddatum:= IncDay(Startdatum, trunc(Dauer)); // startdatum um die anzahl der tage erhöhen
Enddatum:= Enddatum + frac(dauer); // startdatum um die verbleibenden stunden erhöhen
fertig.

Allerdings solltest Du auch arbeitsfreie Tage berücksichtigen (Sonntag od. Feiertag), d.h. entsprechende Tage dazuaddieren mit IncDay.

sonny2007 17. Jan 2012 15:20

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Hallo,

vielen Dank für die Antwort.
Sir Rufo: Gute Idee: Blöcke und Anfangszeiten erfassen ist ein guter Vorschlag. Mache ich mich gleich mal ran ob ich das auch umgesetzt bekomme.

Gruß
s0n

Sir Rufo 17. Jan 2012 15:23

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Zitat:

Zitat von webcss (Beitrag 1146315)
Ich unterstelle Du verwendest TDateTime (Datumstyp in Delphi) und die unit DateUtils.
Delphi-Quellcode:
Dauer:= 19,67 //...
Enddatum:= IncDay(Startdatum, trunc(Dauer)); // startdatum um die anzahl der tage erhöhen
Enddatum:= Enddatum + frac(dauer); // startdatum um die verbleibenden stunden erhöhen
fertig.

Allerdings solltest Du auch arbeitsfreie Tage berücksichtigen (Sonntag od. Feiertag), d.h. entsprechende Tage dazuaddieren mit IncDay.

Wenn du einfach so am Ende die Stunden dazuzählst, dann kommst du niemals auf das richtige Ergebnis.
(und so sowieso nicht ;) )
Deine Endzeit wäre 16:04:48 (0,67 Tage)
Richtig ist aber:
Code:
300h / 15,25h/Arbeitstag = 19,67 Arbeitstage => 19 ganze Arbeitstage
Rest-Stunden => 0,67 Arbeitstage * 15,25h/Arbeitstag = 10,2175h => 10:13:03
Aber es wird ja nicht rund um die Uhr gearbeitet.
Somit kann die Arbeit erst im Block 5 abgeschlossen werden
Code:
10,2175h - ( 3,50h (1.) + 2,25h (2.) + 1,75h (3.) + 2,00h (4.) ) = 0,7175h im 5. Block => 17:28:03

webcss 17. Jan 2012 16:38

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Zitat:

Zitat von Sir Rufo (Beitrag 1146320)
Deine Endzeit wäre 16:04:48 (0,67 Tage)

Ja, wenn man als Startzeit 0:00 Uhr annimmt! Aber: Arbeitsbeginn ist erst um 6:00 Uhr, also Fertigstellung um 22:07 Uhr, 19 Tage später...

Aber nichts desto trotz, ist der Einsatz von Blöcken in puncto Brücksichtigung arbeitsfreier Zeiten sinnvoller.
Nach meiner Methode müssten die Arbeiter bis 23:07 Uhr arbeiten, wenn sie erst um 7:00 Uhr anfingen :wink:

Sir Rufo 17. Jan 2012 18:13

AW: Zeitberechnung inklusive Pausen etc. Planung
 
Und wenn die erst um 08:00 Uhr anfangen, dann ist man schon wieder einen Tag weiter ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz