Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Urlaubsanträge von - bis Datum

Begonnen von Bernie110, Dezember 19, 2012, 13:03:30

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo Zusammen,

ich möchte gerne meine Urlaubsdatenbank verbesseren.
Hierzu brauch ich mal bitte eure Hilfe.

Ich hab folgende Daten

Name_Mitarbeiter = Hr. Mustermann
Urlaub_von           = 24.12.2012  ( erster Ulaubstag )
Urlaub_bis            = 03.01.2013  ( letzter Urlaubstag )  also am 04.01 erscheint der Ma wieder

Ich hätte dies nun gerne in einer Tabelle wie folgt dargestellt :

LfdNr      Name_Mitarbeiter       Urlaubsdatum      Anzahl_Tage   
-------------------------------------------------------------------------------------
1            Hr. Mustermann           24.12.2012           1
2            Hr. Mustermann           25.12.2012           1
3            Hr.Mustermann            26.12.2012           1
4            Hr.Mustermann            27.12.2012           1
5            Hr.Mustermann            28.12.2012           1
6            Hr.Mustermann            29.12.2012           1
7            Hr.Mustermann            30.12.2012           1
8            Hr.Mustermann            31.12.2012           1
9            Hr.Mustermann            01.01.2013           1
10          Hr.Mustermann            02.01.2013           1
11          Hr.Mustermann            03.01.2013           1

jemand eine Idee wie die Anfügeabfrage aussehen muss :

Bin bisher soweit :)

Zitat

Dim strSQLB As String
strSQLB = "INSERT INTO STAMM_URLAUBSPLAN (USER_ID, Urlaubs_Datum)" & _
"SELECT DISTINCT U_Stamm_User.LfdNr," & Format(Nz(Me.Urlaubs_von_Datum, Date), "\#yyyy-mm-dd\#") & " As Datumsfeld FROM U_Stamm_User;"
CurrentDb.Execute strSQLB, dbFailOnError

Me.U_URLAUB_ERFASSUNG_STAMM_URLAUBSPLAN_UFO.Requery


Also den ersten Tag kann ich damit schon mal anlegen :-)

Danke für eure Mühe und Antworten

Lg Bernie




DF6GL

Hallo,
wo nix ist, kann auch nix angezeigt werden....


soll heißen, die Zwischentage als solche gibt es nicht .


Um eine ähnliche Darstellung mittels Abfrage zu erhalten, muss eine "(Betriebs)Kalendertabelle" mit fortlaufendem Datum(seintrag) existieren.  Das hätte auch den Vorteil, dass Feiertage und sonstige Tage, die gar keine Urlaubstage sind, außer Acht gelassen werden können, z. B. für die Berechnung der Anzahl Urlaubstage, die ein MA im betrachteten Zeitraum genommen hat
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bernie110

Hallo Franz,

die Folgetage können also nicht einfach so berechnet werden oder ?

Ich hatte mir das so vorgestellt.. die Folgetage werden einfach berechnet. In dieser Tabelle stehen dann wirklich nur Urlaubstage..
Hab auch eine Feiertagstabelle..per Abfrage könnte man die Tage die eben Feiertag oder Änlichem entsprechen herraus nehmen.

Zitat"(Betriebs)Kalendertabelle" mit fortlaufendem Datum(seintrag) existieren.

Ok, die könnte man ja erstellen.. Man hat dann aber jede Menge DS in der DB .je Jahr 345 ...und wenn das letzte Datum erreicht ist muss man manuell jedesmal neue hinzufügen.
Wenn nicht anderes möglich ok.. was solls.

Und wie würde es dann weitergehen ?

Lg Bernie



ebs17

INSERT INTO STAMM_URLAUBSPLAN (Urlaubs_Datum)
SELECT DateAdd("d", T.I, U.Urlaub_von) AS UTag
FROM tblUrlaube U, T1000 T
WHERE T.I Between 0 AND DateDiff("d", U.Urlaub_von, U.Urlaub_bis)


Weitere Felder kannst Du selbständig ergänzen.
Vergleiche dazu auch SQL-Rezepte einschließlich der dort beschriebenen Tabelle T1000.

Mit dem gleichen Verfahren kann man natürlich auch eine  (vollständige) Kalendertabelle füllen, um diese per Abfrage mit der Urlaubstabelle unter Abzug von Wochenenden und Feiertagen zu verknüpfen und so z.B. echte Urlaubstage zu ermitteln.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Bernie110

Hallo Ebs,

also bisher verstehe ich nur Bahnhof :-)

hab mir das mit T1000 angesehen. aber verstehen..puh...nein..

ZitatFROM tblUrlaube U, T1000 T

Ist das eine Tabelle wie sie Franz meinte ?

Gruss
Bernie

ebs17

Was ist an einer Tabelle mit einem einzigen Feld, das als Werte die Zahlen 0 bis 999 enthält, nicht zu verstehen. Falls Dir die DDL-Anweisungen (Data Definition Language) suspekt ist, kannst Du Dir sicher eine Tabelle per Hand bauen und füllen, oder?

Sinn der ganzen Maßnahme ist es, über eine einmalig erstellte und vielfältigst wiederverwendbare Zahlentabelle Tabellen/Abfragen nach eigenem Gusto erzeugen zu können, weil sich viele Datensätze auf einmal besser und vor allem schneller  an eine Zieltabelle anfügen lassen als viele einzelne Datensätze in Schleife (Einzelverarbeitung).

ZitatIst das eine Tabelle wie sie Franz meinte ?
Nein. Das ist noch eine direkte Antwort auf Deine ursprüngliche Anforderung, wobei die Werte von und bis einer Tabelle entnommen wurden, was auch die Möglichkeit eröffnet, mehr als einen Datensatz (Urlaubszeitraum) auf einmal zu verarbeiten.
In Datenbanken arbeitet man besser und schneller mit Datenmengen (Massendatenverarbeitung) statt mit einzelnen Werten: Bagger statt Sandschaufel. Es sei denn, man will sich bewusst viel Zeit nehmen.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Bernie110

Hi Ebs,

ok, ich verstehe wo hin der Weg gehen soll-
ZitatBagger statt Sandschaufel
Mir fehlt nur der Bagger
Das ist völligstes Neuland für mich.

Ich mach ja gerne alles was Ihr zu mir sagt. Wenn du die Geduld aufbringst und mit mir das zuerarbeiten, wäre ich dir sehr dankbar.
Bin halt  ein Noob :-)

also ich brauch eine Tabelle die T1000 heisst und ein Zahlenfeld mit dem Namen "T" hat.
in "T" müssen die zahlen von 0 bis 999 enthalten sein ... ja ? legt  man dann auf dieses Feld den PK ?

Was brauch ich dann noch ?

Lg Bernie


69bruno

Ups, das Problem der Arbeitstage zwischen zwei Datumswerten..... kenne ich irgendwo her.

Ich habe mich mal sehr intensiv damit beschäftigt und mir mit Hilfe aus dem I-Net eine Funktion gezimmert, die (hoffentlich auch richtig) bis zum Jahr 2199 die Anzahl der Arbeitstage zwischen 2 Datumswerten berechnen kann. (Unter Berücksichtigung der Feiertage in D.

Da kam dann aber auch die Frage, wie man wohl mit Teilzeitkräften umgeht, die anstelle von 5 Tagen die Woche nur noch 4 Tage die Woche arbeiten, bzw. wenn sie in ungeraden oder geraden Wochen einen Tag nicht arbeiten.

Das ganze ist in der anhängenden txt-Datei mal dargestellt. Ich beziehe mich bei den regelmäßigen Arbeitstagen auf ein Formular, in dem das gültige Arbeitszeitmodell dargestellt ist (sehr einfach, 10 Checkboxen für Mo-Fr in geraden und ungeraden Wochen). Das müsste dann natürlich angepasst werden.

Damit hättst Du dann aber wieder von bis Felder (Anfang und Ende des Urlaubs) Aber in das Formular ein Feld "AnzUTage" rein, darin die Funktion aufrufen und schon kannst Du die Anzahl der Urlaubstage abspeichern.............

[Anhang gelöscht durch Administrator]
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Bernie110

Hallo,

auch ne coole Idee...

Hab jetzt die Ursprungsidee von DF6GL  nochmals aufgegriffen und es so gelöst :

Hab eine Tabelle mit einem Datumswert erstellt und alle Datumswerte bis 2020 eingegeben.
Excel machts möglich.

Und nun mit diesem Code realisiert.


Zitat' Urlaubstage generieren
' *********************************************************************************************
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, lngLfNr As Long, db As Database


Set db = CurrentDb

Set rs1 = db.OpenRecordset("Select LfdNr, Datum_Stamm From STAMM_DATUM where Datum_Stamm between " & Format(CDate(Me!Urlaubs_von_Datum), "\#yyyy-mm-dd\#") & " and " & Format(CDate(Me!Urlaubs_bis_Datum), "\#yyyy-mm-dd\#"), dbOpenSnapshot)

Set rs2 = db.OpenRecordset("Select * from STAMM_URLAUBSPLAN ", dbOpenDynaset)


Do Until rs1.EOF


For I = 1 To 1

rs2.AddNew
rs2!USER_ID = Me.USER_ID
rs2!Urlaubs_Datum = rs1!Datum_Stamm

rs2.Update

Next

rs1.MoveNext
Loop


rs2.Close: Set rs2 = Nothing
rs1.Close: Set rs1 = Nothing
Set db = Nothing

' **********************************************************************************************************

Me.U_URLAUB_ERFASSUNG_STAMM_URLAUBSPLAN_UFO.Requery


Das schöne ist, es funktioniert.... ( bitte mal drüberschauen.. ist ein umgebauter Code )

@Franz .. ist es das was du meinstest ?
@Ebs   gerne würde ich aber auch noch hierzu deine Hilfe in Anspruch nehmen.

lg Bernie

DF6GL

#9
Hallo,

die Anzahl Arbeitstage zu berechnen , die als Wochentage von Montag bis Freitag definiert sind, ist über die gängigen Datumsfunktionen nicht allzuschwer ...

Was Bernie aber braucht, ist eine Kalendertabelle,  die JEDEN Tag eines oder auch mehrere Jahre in jeweils einem Datensatz speichert. Mit einem Status-/Kategorie-Feld  werden werden die einzelnen Datum  (Datensätze)   als Feiertag, Arbeitstag, Brückentag, etc. näher definiert, damit spätere Berechnungen (z. B. Anzahl der wirklichen Urlaubstage) über Abfragen möglich ist und eben auch eine solche wie Ausgabe wie anfänglich dargestellt.   Die T1000-Tabelle ist hier nur eine Hilfstabelle, um zur eigentlichen Kalendertabelle zu kommen.  Wenn man auf die besonderen Erweiterungen der Kalendertabelle (Feiertagsangaben z. B.) verzichten kann, dann kann man schon mit der T1000-Tabelle auskommen, weil für die Berechnung der reinen Zwischentage  lediglich eine laufende Nr (Inhalt der T1000) erforderlich ist.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

DF6GL

Hallo,


"Excel machts möglich."   naja, da ist halt die "Alternative" zur T1000-Tabelle mit einer Insert-Anweisung   ;D ;D


Deine STAMM_DATUM - Tabelle ist m. E. halt noch nicht vollständig , weil eben die Definition von Feiertage etc., wie vorher angesprochen, nicht implementiert ist.

Zumindest ist es aber ein richtiger Zwischenschritt   :D


Über die Notwendigkeit der Tabelle STAMM_URLAUBSPLAN   könnte man allerdings schon noch "streiten", das hängt aber wiederum von Deinem Konzept einer solchen Kalenderverwaltung und deren gewünschter Aufgabe ab.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bernie110

Hallo,

cool  :)

ZitatÜber die Notwendigleit der Tabelle STAMM_URLAUBSPLAN   könnte man allerdings schon noch "streiten", das hängt aber wiederum von Deinem Konzept einer solchen Kalenderverwaltung und deren gewünschter Aufgabe ab.

Ja, daran bin ich gerade.  Hab eine seperate Tabelle mit Feiertagen.
Mals sehen wie ich das jetzt mache..denn diese Tabelle wird schon mehrmals für den Schichtplan benutzt.
Fragen hierzu kommen ggfs noch  :)

Danke !
lg bernie

ebs17

Zitat@Ebs   gerne würde ich aber auch noch hierzu deine Hilfe in Anspruch nehmen.
Du drehst aber schon wieder Schleifen. Merkst Du das?

Mir wird da ganz schnell schwindelig bis schlecht, gerade bei unnötigen Schleifen.

Kannst Du erst einmal erklären, wozu genau Du eine Tabelle benötigst, in der alle Urlaubstage einzeln drin stehen.
(Erst der Plan, dann gezielte Aktion.)

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
im Anhang mal ein Beispiel für die Anzahl der Arbeitstage zwischen 2 Daten. Es wird eine Kalendertabelle benötigt. Der Code zur Erstellung der Kalendertabelle ist auch enthalten. Im Formular 0-... stehen Erläuterungen.

Im Beispiel sind auch Verbesserungsvorschläge (Indizierung, Wochentagszahl speichern) von Ebs17 eingearbeitet die er glaube ich mal im MOF für mein Beispiel gemacht hat.

[Anhang gelöscht durch Administrator]
Gruß Klaus

69bruno

Ist das nicht viel zu aufwändig? Da muss doch jedes Jahr der Kalender definiert werden.......

Wieso soll man denn jedes Jahr die Feiertage definieren, wenn ich sie bis auf 1 oder 2 für jedes Jahr berechnen kann und die übrigbleibenden dann in der Funktion festlege ? Auch festgelegte Betriebsschließungstage könnte man in die Funktion einbauen.
Selbst wenn ein Feiertag von unseren ach so geliebten Politikern nicht mehr als gesetzlich eingestuft wird, braucht man nur den Aufruf der Funktion anzupassen.

Und der Sinn, jeden Tag eines Jahres in einer Tabelle zu erfassen, will mir nicht in den Kopf.
1 Mitarbeiter * 365 Tage, ok. Sagen wir mal 400 Mitarbeiter * 365 Tage = 146.000 DS ?? Warum nur ?
Selbst wenn nur die Urlaubstage erfasst werden: 400 * (sagen wir mal) 30 Urlaubstage = 12.000 DS
Bei meiner Variante:
1 MA etwa 5 Urlaubszeiträume pro Jahr. 400 Mitarbeiter * 5 Urlaube = 2.000 DS

Kann mir jemand den Vorteil der Vorratshaltung jedes einzelnen Tages mal erklären ? Ich komme da beim besten Willen nicht hinter.

Ich will Eure Version nicht kritisieren, ich möchte sie verstehen !!!! 8)
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If