AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mit Zeiten rechnen / vergleichen / erkennen

Ein Thema von zzTAz · begonnen am 24. Apr 2012 · letzter Beitrag vom 25. Apr 2012
Antwort Antwort
zzTAz

Registriert seit: 24. Apr 2012
3 Beiträge
 
#1

mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 21:56
Guten Tag liebe Community,

da ich auf meiner weiten Suche im www leider keinen passenden Lösungsansatz gefunden habe
(Was evtl. daran liegt, dass mir noch einiges "spanisch" vorkommt und ich relativ neu in Delphi bin).
Werde ich euch jetzt wohl oder übel versuchen mit meinen Problemen zu belästigen und darauf hoffen,
dass ich euch nicht zu sehr auf die Nerven gehe.

So dann fang ich mal an.
Ich versuche einen Arbeitszeitenrechner zu erstellen, der erstmal folgende Funktionen mit sich bringen soll.

Funktionen
1. geleistete Arbeitszeit berechnen
2. Gehalt / Lohn berechnen anhand von Zuschlagsätzen bezogen auf eine bestimmte Uhrzeit
3. Speichern der Eingaben (Wird erst später erledigt bzw. begonnen, wenn ich Nr. 2 gelöst habe)

Funktion 1. berechnen der Arbeitszeit hab ich erledigt auch wenn evtl. nicht ganz elegant/richtig ?

Habe dazu 5 Eingabefelder genutzt 1. Arbeitsbeginn Std 2. Arbeitsbeginn Min 3. Pause 4. Arbeitsende Std 5. Arbeitsende Min alles (Integerwerte)
Dadurch alles ausgerechnet und erhalte nun die geleisteten Arbeitsstd (single)

Funktion 2. Gehalt / Lohn berechnen anhand von Zuschlagsätzen bezogen auf eine bestimmte Uhrzeit

Ansich wäre das auch nicht so das Problem nur weiss ich nicht, wie ich den Uhrzeitenvergleich bzw. das "erkennen" der Uhrzeit realisieren kann
sprich ich denk an sowas in der Art

Zuschlagsätze
18-20Uhr 20%
20-22Uhr 25%


If Arbeitsbeginn 16:00 Uhr and Arbeitsende 23:00Uhr then do von 18:00-20:00 20% Zuschlag and von 20:00-23:00 25%Zuschlag.

Mein Problem ist nur, dass meine Lösung bei der Erfassung der Arbeitsstunden bereits falsch sein dürfte. Da ich hier ja alles in Minuten umwandle und später wieder in Std um zu sehen wieviele Std. an einem Tag geleistet wurden. Jedoch kann ich damit dann aber nicht wirklich mit Zeiten rechnen um zu "erkennen" ob man in einer Zeit arbeitet wo man einen Zuschlag erhält.

Hoffe ihr versteht mein Problem

Ich freue mich bereits jetzt auf ein paar Tipps und Lösungsansätze

Mfg Taz
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 22:09
kannst du deinen code mal posten - dann kann man besser eine hilfestellung geben
  Mit Zitat antworten Zitat
zzTAz

Registriert seit: 24. Apr 2012
3 Beiträge
 
#3

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 22:19
Aber sicher doch

ich hoffe nur meine Variablen sind nicht zu verwirrend... falls ihr noch allgemeine Verbesserungsvorschläge habt nur her damit.

Delphi-Quellcode:
procedure TArbeitszeitenrechner.BtnAuswertungClick(Sender: TObject);

var
   arbeitsbeginnstd, arbeitsbeginnmin, arbeitsbeginnkpl: integer;
   arbeitsendestd, arbeitsendemin, arbeitsendekpl: integer;
   pause, ergebnismin: integer;
   ergebnis: single;


begin
  arbeitsbeginnstd := StrToInt(EdtAbeginnStdMo.Text);
  arbeitsbeginnmin := StrToInt(EdtAbeginnMinMo.Text);
  arbeitsendestd := StrToInt(EdtAendeStdMo.Text);
  arbeitsendemin := StrToInt(EdtAendeMinMo.Text);
  pause := StrToInt(EdtPauseMo.Text);

  arbeitsbeginnkpl := (arbeitsbeginnstd * 60) + (arbeitsbeginnmin);
  arbeitsendekpl := (arbeitsendestd * 60) + (arbeitsendemin);
  ergebnismin := ((arbeitsendekpl - arbeitsbeginnkpl) - pause);
  ergebnis := (ergebnismin / 60);

  LblIstArbeitszeitMo.Caption := FloatToStr(ergebnis);


end;
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 22:36
mal ein kleine code fragment als hilfe zur selbst hilfe kann leider keine komplette lösung hier posten -- keine zeit
Delphi-Quellcode:


unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Generics.Collections;

type

  tArbeitstag = record
       arbeits_start : TDateTime;
       arbeits_ende : TDateTime;
       arbeits_soll : TDateTime;
       arbeits_ist : TDateTime;
  end;


  TArbeitsTage = TList < tArbeitstag> ;


  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    ErfasseArbeitstagButton: TButton;
    BerechneArbeitstageButton: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ErfasseArbeitstagButtonClick(Sender: TObject);
    procedure BerechneArbeitstageButtonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    aArbeitsTageListe : TArbeitsTage;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BerechneArbeitstageButtonClick(Sender: TObject);
var i : integer;
     einArbeitstag : tArbeitstag;
begin
    for i:= 0 to aArbeitsTageListe.Count-1 do
        begin
          einArbeitstag := aArbeitsTageListe.Items[i];
          // berechne jetzt .....

        end;

end;

procedure TForm1.ErfasseArbeitstagButtonClick(Sender: TObject);
var einArbeitstag : tArbeitstag;
begin
     einArbeitstag.arbeits_start := now ; // füge aktuelle Zeit Datum ein .... selber abändern
     einArbeitstag.arbeits_ende := now ;

     aArbeitsTageListe.Add(einArbeitstag);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    aArbeitsTageListe.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     aArbeitsTageListe :=TArbeitsTage.Create;
end;


end
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 23:56
Ich benötige derartige Funktionen eigentlich immer nur in Datenbanken für Massenkalkulationen, ich habe den komplizierteren Teil der Zuschlagsfindung mal exemplarisch für Delphi skizziert
Delphi-Quellcode:
uses Math;
{$R *.dfm}


Function GetLappingHours(von1,bis1,von2,bis2:TDateTime):TdateTime;
var
 von,bis:TDateTime;
begin
Result := 0;
  If (bis1>von2) and (bis1 <bis2) or ((von1>von2) and (von1<bis2)) or ((von1<=von2) and (bis1>=bis2)) then
  begin
      if Von1 >Von2 then Von := Von1 else Von := Von2;
      if Bis1 < Bis2 then Bis := Bis1 else Bis := Bis2;
      Result := RoundTo((Bis - Von) * 24,-2);
  end
end;

procedure TForm2.Button1Click(Sender: TObject);
var
v1,b1,v2,b2:TdateTime;

begin
    v1 := StrToDateTime('01.01.2012 12:00');
    b1 := StrToDateTime('01.01.2012 20:12');
    v2 := Trunc(v1) + StrToTime('18:00');
    b2 := Trunc(v2) + StrToDateTime('23:00');
    Caption := 'Stunden mit Zuschlag x%=' + FloatToStr(GetLappingHours(v1,b1,v2,b2));

end;
Generell würde ich mit TDatetimes arbeiten, ob in Array,Listen oder Tabellen ..
Zeit=Bis-Von Vorkommateil entspricht Tagen
(wobei Delphi bei der Darstellung als Datum bei 30.12.1899 beginnt ( Caption := DateToStr(0) was für die Rechnerei aber unerheblich ist)
Der Nachkommateil ist ebenfalls in Tagen zu interpretieren, also 0.5=12:00 etc.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 25. Apr 2012, 08:12
Ich benötige derartige Funktionen eigentlich immer nur in Datenbanken ..
Da kann ich nur zustimmen, ich würde niemals auf die Idee kommen auch nur eine Berechnung in Delphi vorzunehmen, sondern alles in der DB. Aber das ist ja nicht gefragt.
Gruß, Jo
  Mit Zitat antworten Zitat
zzTAz

Registriert seit: 24. Apr 2012
3 Beiträge
 
#7

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 25. Apr 2012, 15:22
vielen dank euch allen erstmal , hab dadurch schon mal paar Kleinigkeiten gelernt.
Werde mich weiter diesem Problem wittmen, wenn ich meine andere Aufgabe erledigt habe. :-/
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#8

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 25. Apr 2012, 16:07
An etwas ähnlichem sitze ich zur Zeit auch, nur gehe ich da einen Objektorientierten Ansatz : Eine Klasse, die Zeitabschnitte verwaltet und Schnittmengen aus 2 Zeiträumen ziehen kann :
Delphi-Quellcode:
{-----------------------------------------------------------------------------
  Classname : TTimespan
  Autor    : e310hel001
  Datum    : 17-Apr-2012
  Aufgabe  : Hält einen Zeitabschnitt
-----------------------------------------------------------------------------}

  TTimespan = class
  private
    FStart : TDateTime;
    FStop : TDateTime;
    function GetTimespan: TDateTime;
    procedure SetStop(const Value: TDateTime);
    procedure SetStart(const Value: TDateTime);
  public
    property Start : TDateTime read FStart write SetStart;
    property Stop : TDateTime read FStop write SetStop;
    property Timespan : TDateTime read GetTimespan;
    function IntersectTime ( aTimeSpan : TTimeSpan) : TDateTime;
  end;

{ TTimespan }

function TTimespan.GetTimespan: TDateTime;
begin
  Result := Stop - Start;
end;

procedure TTimespan.SetStop(const Value: TDateTime);
begin
  FStop := Value;
end;

procedure TTimespan.SetStart(const Value: TDateTime);
begin
  FStart := Value;
// Stop auf Now setzen, damit ein Gültiger Wert für den Laufenden Zeitraum
// vorhanden ist, auch wenn im Zeitraum kein Stop mehr kommt
  Stop := Now;
end;

function TTimespan.IntersectTime(aTimeSpan: TTimeSpan): TDateTime;
begin
  Result := Min(Stop,aTimeSpan.Stop) - Max(Start,aTimeSpan.Start);
end;
In die eine Timespan kommen Arbeitsbeginn und Arbeitsende, Timespan leifert dann die Arbeitszeit.
In eine andere z.B. 18.00 Uhr als Start und 20.00 Uhr als Ende. IntersectTime liefert dann die Zeitspanne, für die Zuschläge gezahlt werden müßen. Gleiches gilt z.B. auch für Pausen
Glückauf
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz