Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

eine Tabelle mit Kalenderdaten erstellen

Begonnen von teamdj, Juni 24, 2016, 10:29:13

⏪ vorheriges - nächstes ⏩

teamdj

Hallo,
Ich möchte eine Tabelle mit Kalenderdaten erstellen.

Die Tabelle soll folgende Felder haben:

Tag     Datum      KW
Fr     1. Jan 16      1

Ich möchte die Tabelle dann automatisch mit den Datumswerten befüllen lassen.
Dazu noch meine Frage:
Ich benötige die Tabelle um später damit Arbeitszeiten zu erfassen
Macht es Sinn für jedes Jahr bsp. Jahr 2016 Jahr 2017 ect..... eine Tabelle erstellen zu lassen.
oder ist es Problematisch bsp. in der Tabelle gleich die Daten von 2016 bsi beispielsweise 2020 schreiben zu lassen ???


MzKlMu

Hallo,
das kannst Du auch gleich für die nächsten 20 Jahre machen, das sind dann gerade mal ca. 7300 Datensätze.

Im anderen Forum hast Du eine Antwort.
Gruß Klaus

Beaker s.a.

Ausserdem kannst Du die Felder Tag und KW weglassen, die lassen sich
jederzeit berechnen.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

#3
Hallo,
@Beaker
den Tag wegzulassen ist nicht immer zu empfehlen. Das im anderen Forum hochgeladene Beispiel dient zur Berechnung von Arbeitstagen. Da werden die Tage >5 ausgeblendet. Daher wird dieses Feld in der Tabelle erstellt und auch gespeichert, denn nur so kann das Feld indiziert werden. Was dann einen enormen Performancegewinn bedeutet. Natürlich abhängig von der Datenmenge.
Da das Erstellen der Tabelle eine Kleinigkeit ist und man das für die nächsten 20 Jahre machen kann, sollte man das Feld in der Tabelle führen.

Auch für die KW könnte sinngemäß das gleiche gelten. Wenn man in großen Datenmengen die KW mit speichert und indiziert, kann man sich die KW Rechnerei sparen, zumal man eine eigene Funktion für DINKW verwenden müsste, da die eingebaute Funktion nicht immer korrekt rechnet. KW einmalig in die Kalendertabelle geschrieben und der Rest (das Ermitteln einer KW) geht dann ratz fatz.

Nur nebenbei.  ;D
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Zitatden Tag wegzulassen ist nicht immer zu empfehlen. Das im anderen Forum hochgeladene Beispiel dient zur Berechnung von Arbeitstagen. Da werden die Tage >5 ausgeblendet.
Darfst Du den Link dazu hier posten? Oder, falls nein, ihn mir per PM
zukommen lassen. Würde ich mir gerne anschauen.

ZitatDaher wird dieses Feld in der Tabelle erstellt und auch gespeichert, denn nur so kann das Feld indiziert werden. Was dann einen enormen Performancegewinn bedeutet.
Das macht Sinn ...  8)

Zitatzumal man eine eigene Funktion für DINKW verwenden müsste
Na ja, so eine verwende ich schon geraume Zeit. Deshalb wohl auch
mein Einwand. Aber, wie gesagt, Indizierung ist natürlich ein Argument,
dem man sich nicht widersetzen kann.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

#5
Hallo,
die Sache mit dem Speichern und der Indizierung war übrigens ein Hinweis von Ebs17, weil ich auch erst berechnen wollte.
Hier die Beispieldb ( ich besitze die Rechte an der DB  :D ).
Wollte diese ohnehin hier auch hochladen.
Da ist aber die KW nicht in der Tabelle.

Um noch mal auf die KW zu kommen, diese DINKW ist ja eine recht umfangreiche Funktion.
Wenn die KW gespeichert ist, muss man nur die Datentabelle mit der Kalendertabelle über das Datumsfeld (das natürlich ohne Zeit sein muss) verknüpfen und schon hat man auch die KW ohne etwas rechnen zu müssen zur Anzeige. Dieses Verfahren ist dann superschnell, das dürfte alle anderen Vorgehensweisen um Längen schlagen.
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Danke für Beispiel-DB und Erläuterungen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

teamdj

Hallo Klaus,
ich glaube ich bin zu blöde das hin zu bekommen.
Ich habe mir ja jetzt die DB "Arbeitstage" runter laden können. Noch einmal rechtherzlichen Danke dafür !!!
Es funktioniert soweit soweit auch alles mit der Erstellung der Tabelle. TOP
Wenn ich mir jetzt über dein Formular eine Tabelle für das Jahr 2016 erstelle dann enhält die Tabelle auch den TAG, den Wochentag von 1-7 den Feiertag und ZusArbeitsFrei alles soweit ganz gut.

Noch einmal kurz erwähnt wir haben 7 Arbeitstage von So bis So.
Des weiteren hätte ich gerne eine Spalte in der Der Tag quasi Mo. Di. Mi. usw. angezeigt wird. Hier bekomme ich es irgendwie nicht hin das in einer Abfrage zu erstellen.
Dann wäre es schön eine Spalte für KW zu haben.
Feiertag und ZusArbeitsFrei soll auch so bleiben.

Absolut genianl wäre ja wenn ich über das Formular eine Tabelle erstellen könnte für ein ganzes Jahr in der Folgende Daten vorhanden sind.

Spalte Tag "Freitag, 1. Januar 2016" bsp.
Spalte Tag "Mo.Di.Mi. usw." bsp.

Die folgenden Spalten sollen dann später über eine Abfrage berechnet werden.
Spalte "kommt" im Uhrzeitformat h:m
Spalte "geht" im Uhrzeitformat h:m
Spalte "Pause" im Uhrzeitformat h:m
Spalte "IST Stunden" im Uhrzeitformat h:m

Ich habe derzeit eine Excel Tabelle mit der ich das berechne möchte es aber über eine Accesdatenbank für die Zukunft
erledigen da die Datenbank dann noch erweiter werden soll.

MzKlMu

Hallo,
ZitatNoch einmal kurz erwähnt wir haben 7 Arbeitstage von So bis So.
nur mal kurz erwähnt, So-So sind 8 Arbeitstage. So-Sa sind sieben.

ZitatSpalte Tag "Freitag, 1. Januar 2016" bsp.
Spalte Tag "Mo.Di.Mi. usw." bsp.
das kommt nicht in die Tabelle, das ist eine reine Frage der Formatierung. Siehe Formular "MitFormatierung" im angehängten erweiterten Beispiel.

ZitatSpalte "kommt" im Uhrzeitformat h:m
Spalte "geht" im Uhrzeitformat h:m
Spalte "Pause" im Uhrzeitformat h:m
Spalte "IST Stunden" im Uhrzeitformat h:m
Was willst Du hier berechenen, nur die Spalte "IST Stunden" ist berechnet. Die anderen Felder sind Eingabefelder bzw. Pause könnte ein fester Vorgabewert sein. Die Zeitenerfassung muss natürlich in eine extra Tabelle mit einem Fremdschlüssel zum Mitarbeiter.

Geänderte DB anbei.

Gruß Klaus

teamdj

die Pause soll ebenfalls berechnet werden
ab 3 Std- 15 Min.
ab 6 Std. 30 Min.
ab 9 Std. 45 Min.

So habe ich es in meiner Excel Tabelle
Formel Spalte Pause::
=WENN(ISTTEXT(C6);0;WENN(D6-C6>=0,375;0,03125;WENN(D6-C6>=0,25;0,02083333;WENN(D6-C6>=0,125;0,01041667;REST(1;1)))))

D6 ist Spalte = geht
C6 ist Spalte = kommt

der Wert 0,375 ergibt bei der Zellenformatierung (h:mm) gleich 9:00 Stunden
der Wert 0,03125 ergibt bei der Zellenformatierung (H:mm) gleich 0:45 Minuten

der Wert 0,25 ergibt bei der Zellenformatierung (H:mm) gleich 6:00 Stunden
der Wert 0,02083333 ergibt bei der Zellenformatierung (H:mm) gleich 0:30 Minuten

der Wert 0,125 ergibt bei der Zellenformatierung (H:mm) gleich 3:00 Stunden
der Wert 0,01041667 ergibt bei der Zellenformatierung (H:mm) gleich 0:15 Minuten

Somit schreibt die Formel in der Spalte Pause :
Größer gleich 9:00 Stunden dann 0:45 Minuten
Größer gleich 6:00 Stunden dann 0:30 Minuten
Größer gleich 3:00 Stunden dann 0:15 Minuten

So soll die Datenbank das dann letzten -endes auch über eine Abfrage erstellen.

MzKlMu

Gruß Klaus

Beaker s.a.

Hallo dj,
Vielleicht so:
Public Function Pausenzeit(AZeit As Date) As Date
'---------------------------------------------------------------------------------------
On Error GoTo Fehler
' Procedure : Pausenzeit
' Author    : ede
' Date      : 27.03.2016
' Purpose   : Pausenzeit berechnen anhand der vorgegebenen Arbeitszeit
' Parameter : AZeit = Differenz von Beginn und Ende/kommt und geht, wird schon in der
'           : aufrufenden Abfrage berechnet
'---------------------------------------------------------------------------------------

    Select Case AZeit
    Case Is >= #09:00:00 AM#
        Pausenzeit = #12:45:00 AM#
    Case >= #06:00:00 AM#
        Pausenzeit = #12:30:00 AM#
    Case Is >= #03:00:00 AM#
        Pausenzeit = #12:15:00 AM#
    End Select

Ende_CleanUp:
    On Error Resume Next
    Exit Function

Fehler:
    'Behandlung nach Belieben/Erfordernissen
    Resume Ende_CleanUp

End Function


Zur Nutzung in einer Abfrage schreibst du dort (Entwurf) in eine leere Spalte
Pause: Pausenzeit(Tabelle.Geht - Tabelle.Kommt)
(Feldnamen anpassen)

hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

teamdj

Mh...
Den Code welchen Du geschrieben hast orüber dann leten Endes über das Formular
die Tabelle erstellt wird, kann man das so schreiben das die Spalte kommt - Geht und Pause in der zu erstellenden Tabelle
gleich mit eingebunden wird ?
Das wäre echt super.

Beaker s.a.

Hallo dj,
Der Code gehört in eine allgemeines Modul.
Den Rest verstehe ich nicht.
Eine Tabelle erstellt man doch nicht im Formular; da wird die nur befüllt.
Da sollten die Felder Kommt und Geht doch schon vorhanden sein. Die
Pausenzeit muss nicht gespeichert werden, da mit dem geposteten Code
immer wieder berechenbar.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

teamdj

ich versuch das erst einmal heute abend mit  MzKlMu seiner DB
die er mir super netterweise zur verfügung gestellt hat.