AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DB Design, Zeiterfassung Wochenweise bündeln
Thema durchsuchen
Ansicht
Themen-Optionen

DB Design, Zeiterfassung Wochenweise bündeln

Ein Thema von Salomon · begonnen am 10. Jan 2008 · letzter Beitrag vom 7. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 10:45
Datenbank: MS SQL • Zugriff über: ADO
Hallo,
ich erfasse in einer Tabelle die täglichen Stunden der Mitarbeiter. Das sieht ungefähr so aus:

TB_Hours
========
Date
From
To
Task

Nun muss ich die einzelnen Tage irgendwie Wochenweise bündeln und von einer Person mit einem Klick bestätigrn lassen. Danach müssen alle Stunden für die Woche gesperrt werden. Wie setze ich sowas in einer DB um?


Thanx
Marcus
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 10:51
Gibt es mehrere Datensätze pro Tag?
Erweitere Tabelle um Feld für Sperre. Die Termine einer Woche würde ich nur per Select filtern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#3

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 10:59
Hi mkinzler,
ja ein Tag besteht meist aus mehreren Datensätzen. Die einzlenen Zeitabschnitte eines Tages per "Sperrflag" zu makieren hatte ich auch schon überlegt. Mit dem Bestätigen der Zeiten könnte man es ähnlich machen.

Wie bekomme ich denn raus welche Wochen noch nicht abgenommen wurden?
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 11:13
Zitat:
Wie bekomme ich denn raus welche Wochen noch nicht abgenommen wurden?
Wenn noch Zeiten dieser Woche vorliegen.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 11:45
Für dein Problem könnte dir auch eine Kalendertabelle mit allen Tagen des Jahres helfen:
Code:
Date      | KW | Feiertag|Industrietag|Arbeitstag
==================================================
01.01.2008 |  1 | True   | 1          | False
02.01.2008 |  1 | False  | 2          | True
....
Der Inhalt dieser Tabelle wird vom Programm im vorraus befüllt. Das Feld "Datum" ist der Primärschlüssel.
Für 10 Jahre in die Zukunft musst du mit ~ 3650 Datensätzen rechnen; das sollte kein Problem sein.
Damit kann man leicht JOINs mit deiner Tabelle TB_Hours herstellen.

Folgende Abfrage liefert alle Zeiten aus Kalenderwoche 2:
SQL-Code:
SELECT TB_Hours.* FROM
TB_Hours INNER TB_Kalender ON TB_Hours.Date=TB_Kalender.Date
WHERE TB_Kalender.KW = 2
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#6

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 11:58
Hi Andreas,

deine Methode müsste ganz gut funktionieren Daran probiere ich mich mal.

Tageweise kann ich die Stunden ja wie folgt bündeln:

SQL-Code:
Select ActivityDate, SUM(TimeSpan) as TimeSpan from tb_am_hours
where locked = 0
group by ActivityDate;
Zeitspannen speichere mit in der TB_Hours ab: (datediff(minute,[FromHour],[ToHour]))
Am Ende soll's so aussehen:

W02 - 2008 | 07.01.2008 - 13.01.2008 | xy Hours [Bestätigen]
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 12:09
Ob sich eine eigene Tabelle für die Arbeitstage lohnt, kommt darauf an, wie oft man die Auswertung braucht. Obwohl diese keine Brot frisst.
Man könnte das natürlich auch dynamisch z.B. mit einer SP machen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 10. Jan 2008, 12:14
Eine Kalendertabelle halte ich auch für eine gute Idee, denn dort kannst du auch nachträglich eventuell noch interessante Flags anbinden (Feiertag z.B.)

Das Ganze zu joinen sollte kaum Resourcen fressen.

Zur Berechnung der Kalenderwoche zu einem Datum kannst du die Funktion DatePart aus T-SQL nutzen, und dann danach gruppieren.
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#9

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 14. Jan 2008, 16:26
Hier mal ne kurze Procedure um die Tabelle zu füllen:

Delphi-Quellcode:
procedure TFRM_AM_Administration.Button22Click(Sender: TObject);
Var Date : TDate;
  i : integer;
  ADOQuery : TADOQuery;
begin
  ADOQuery := TADOQuery.Create(self);
  ADOQuery.Connection := FRM_Main.ReadConnection;

  Date := StartOfAYear(2008);
  for I := 1 to DaysInYear(Date) do
  begin
    Listbox5.Items.Add(DateToStr(Date)+ '|'+ IntToStr(WeekOf(Date)));
    ADOQuery.sql.text := 'INSERT INTO TB_AM_Calendar (Date, KW) VALUES '+
                         ' (:Date, :KW)';
    ADOQuery.Parameters.ParamByName('Date').Value := Date;
    ADOQuery.Parameters.ParamByName('KW').Value := WeekOf(Date);

    ADOQuery.ExecSQL;
    sleep(10);
    Date := IncDay(Date,1);
  end;

  ADOQuery.free;
end;
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#10

Re: DB Design, Zeiterfassung Wochenweise bündeln

  Alt 7. Feb 2008, 11:11
Hallo,
ich muss diesen Thread noch einmal reaktvieren.

Wie handhabe ich denn den Jahreswechsel?

KW1 von 2009 hat ja auch Tage in 2008...
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:37 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