Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Xoar am September 29, 2016, 15:03:52

Titel: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 15:03:52
Hallo Leute,

könnt ihr mal schauen ob das Datenmodel so korrekt ist?
Geplant ist einen Dienstplan zu bauen.

Ich möchte später ein Formular haben wo oben ein Datum eingetragen werden kann, dann als EndlosUnterformular alle Dienstposten angezeigt werden (einzelne Datensätze), wo ich rechts daneben in den Feldern dann den Name der Mitarbeiter eintragen kann, sowie die Startzeit und Endzeit des jeweiligen Mitarbeiters.

Tipps, Verbesserungen, Anregungen willkommen!

Danke
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am September 29, 2016, 15:27:04
Hallo,
was sind denn die DUZ ?
Warum eine Tabelle für das Datum, das kannst Du doch direkt eintragen.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 15:34:40
Hi,

mit direkt meinst Du bei den Start-/Endzeiten der Mitarbeiter an dem Tag, oder in das FDatum Feld?

DUZ sind Sonderzuwendungen für z.B. Nachtarbeit, Wochenendarbeit...
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am September 29, 2016, 15:54:35
Hallo,
ja, das Datum direkt in das Feld FDatum.

Was wird in den DUZ erfasst, bzw. was kommt da in die 4 Felder der Tabelle "tblDUZ" ?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 16:07:15
Wenn ich weiter drüber nachdenke ist das tatsächlich so falsch.
Ich brauche eine Tabelle wo der Mitarbeiter drin steht, und dann die Dienstschicht eingetragen wird (irgendwie automatisch) und dann nach fest definierten Parametern eingetragen wird (automatisch später) wieviel Stunden in welchem Feld.

ums deutlicher darzustellen wie ich das meine:
Mitarbeiter A
Diensttag:        Mo-Fr          Sa          So        Sonstige
29.09.2017      8 (Std)   
30.09.2017                      8 (Std)
....

also kommt die eine tblDUZ weg und in tblMitarbeiterDUZ kommen:
ID
FvonZeit (datum)
FMitarbeiterID (zahl)
MoFr (zahl)
Sa (zahl)
So (zahl)
Sonstige (zahl)
Kommentar (text)
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am September 29, 2016, 16:19:35
Hallo,
die Sache mit der DUZ halte ich für falsch, eher sogar für überflüssig.
Du erfasst ja die Dienstzeit mit Datum und Zeit und da lässt sich doch auf die Stunde genau ermitteln was Mo-Fr, was Sa und was So ist.

Und (nicht) nebenbei. Nenne die ID Felder nicht einfach ID, vor lauter ID weißt Du nicht mehr welche. Es ist zweckmäßig die ID nach der Tabelle zu benennen. Also MitarbeiterID und an den Fremdschlüssel hängt man dann ein _F an, also MitarbeiterID_F. Das gilt sinngemäß für alle ID Felder. Es ist zweckmäßig Primärschlüssel und Fremdschlüssel eindeutig zu erkennen. Es ist auch vorteilhaft, wenn es in der ganzen DB über alle Tabellen keine gleichen Feldnamen gibt.

Und verwende keine Nachschlagefelder in den Tabellen.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 16:44:14
Alles klar, werde ich umbenennen.

Mit dem Duz hört sich ja gut an, spart Eingaben.
Wie man diese Abfrage definiert müsste man dann nochmal schauen.
SQL ist leider noch nicht so ganz meins.

Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 20:12:56
Hi, hab es jetzt doch so gemacht das ich eine tblDatum hab und dieses Feld mit Datum_F in tblDienstplan verknüpfe.

Damit ich die Dienstpläne jeweils nach dem Datum durchgehen kann.

Jetzt kommt aber das Problem:
Ich habe ein HF mit dem Datumsfeld und als UF eine Abfrage aus tblDienstplan und tblDienstposten. Das UF Datum_F mit Datum aus dem HF verknüft. 

Klappt auch super, aber ich hatte nen leftjoin im UF gemacht, sodass ich immer alle Dienstposten sehe und dann gemütlich rechts daneben ein Mitarbeiter zuweisen konnte. Das geht jetzt als UF nicht mehr. Nur wenn ich das UF einzelnt anwähle ohne HF, sehe ich alle Dienstposten, kann man das auch irgendwie lösen?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 29, 2016, 20:46:22
ok habs indirekt gelöst, indem ich mit einer Anfügeabfrage einfach schonmal für das ganze Jahr jedem Tag alle Posten zugewiesen habe. Mit der Zeit kommen dann halt jetzt die Mitarbeiter dazu.
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am September 29, 2016, 23:35:40
Hallo,
wozu eine Tabelle für das Datum, Du kannst doch das Datum direkt in das Feld "Datum_F" reinschreiben. Die extra Tabelle ist doch da völlig überflüssig. Das Feld heißt dann natürlich einfach Datum.

Was versprichst Du Dir von der extra Tabelle für das Datum ?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 30, 2016, 06:36:25
Hi, evt liegt ja auch einfach ein Denkfehler bei mir vor.

Ich verspreche mir davon, dass ich dann oben im Formular einmalig ein Datum eintragen kann und dann passend dazu den richtigen Dienstplan sehe, oder halt erstellen kann.
Ich möchte nicht bei jedem Mitarbeiter das Datum eingeben müssen, wenn ich einen neuen Dienstplan erstelle, sondern lediglich einmal oben im HF.

Mit ist jetzt kein anderer Weg eingefallen wie ich das machen soll, oder Brett vorm Kopf ;)

Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am September 30, 2016, 10:11:48
Hallo,
jetzt verstehe ich was Du meinst. Dann würde ich aber einen Schritt weiter gehen und eine richtige Kalendertabelle anlegen. Ich mach Dir mal einen Vorschlag. Damit ich nicht vor vorn beginnen muss, lade mal die DB hier hoch (nur die Tabellen), mit einigen Beispieldatensätzen. Ich brauche aber unbedingt das MDB (Access2003) Format.

Ich komme aber erst heute Abend dazu.

PS:
Geht es hier um eine Feuerwehr ?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 30, 2016, 10:19:24
Huhu, bin selbst leider erst Sonntag wieder auf der Arbeit, sprich werd ich dann machen.

Jo ne Feuerwehr.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am September 30, 2016, 11:17:13
Also ich habe eine tblKalender, da sind alle Tage des Jahres im Datumsformat eingetragen, direkt als Primärschlüssel. Dieses habe ich mit tblDienstplan dem Feld Datum_F in Beziehung gesetzt.

Dadurch kann ich jetzt jedem Tag ein Dienstplan zuordnen. Das klappt auch wunderbar.

Wie würdest Du das weiter angehen?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 12:37:16
So Hallo MzKlMu,

hab eine Bspdatenbank von mir hochgeladen.

Merke aber, dass ich noch so einige Probleme habe das umzusetzten.
Angedacht war eigentlich, dass ich im HF oben ein Datum auswähle, dann um UF alle Positionen aufgelistet habe und rechts im Feld daneben die Mitarbeiter eintragen kann. Die beiden Felder rechts daneben "vonZeit", "bisZeit" sollen eigentlich vorgefüllt sein, aber änderbar!. Hab das momentan über ne VBA Schleife gemacht, was aber zur Zeit noch in der falschen Ereigniseigenschaft ist.

Standartzeit ist immer 07:30 - 07:30 (24h)

Kannst ja mal drüber schauen und gucken was besser zu machen ist.

Danke im Vorraus und Grüße

*mdb 2003 in Zip
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 02, 2016, 13:08:59
Hallo,
ZitatStandartzeit ist immer 07:30 - 07:30 (24h)
Das heißt, da ist auch grundsätzlich ein Datumswechsel dazwischen.
Wie willst Du damit umgehen ?
Nur das Datum des Dienstbeginns ?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 13:19:26
bei 2/3 aller Dienstposten ja, wir haben aber auch einige wo es beim Tag bleibt. z.B. 07:30 - 19:30.
Es muss ja ansich von und bis Zeit in der Tabelle eingetragen werden, damit ich später ne Dienstzeitberechnung machen kann.

Das Datum ist ja eigentlich oben im HF vordefiniert und in den Feldern sollte nur die Uhrzeit eingetragen werden, zumindest sichtbar.

Um damit zu rechnen muss aber auch das Datum dazu, oder?   Bin mir da noch nicht ganz im klaren wie das zu machen ist. Wenig Anwenderaufwand, aber alle erforderlichen Daten eingegeben (manuel, automatisch)

Ich muss später eine Abfrage haben, wo drin steht an welchen Tagen der Mitarbeiter wieviel gearbeitet hat.
z.B.
Mitarbeiter1
01.01.2017   16,5   (eine 24Std Schicht, intern einfacher darstellbar wäre einfach 24Std auf den 01.01.2017 zu schreiben, aber das ist Datenbanktechnisch ja falsch und für die Schichtzulagenberechnung auch kontraproduktiv)
02.01.2017   7,5
03.01.2017    0
04.01.2017    0
05.01.2017   16,5
06.01.2017   7,5

[Edit]
hab jetzt mal getestet, wenn ich in vonZeit und bisZeit (sind ja Datentyp: Datum/Uhrzeit) einfach 07:30 und 07:30
eingebe und einen neuen Ausdruck in der Abfrage erstelle mit
Stunden: Wenn([bisZeit]<=[vonZeit];DatDiff("n";[vonZeit];DatAdd("n";1440;[bisZeit]))/60;DatDiff("n";[vonZeit];[bisZeit])/60
rechnet er ja korrekt die Stunden aus.
[/edit]
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 02, 2016, 13:47:38
Hallo,
bitte erkläre den Dienstplan mal genauer.
Jeder Dienstposten muss an einem Tag besetzt sein, aber mit welchem Mitarbeiter ?
Es gibt ja keine Zuordnung welcher Mitarbeiter welchen Dienstposten überhaupt haben kann ?
Der Dienstplan ist mir ziemlich unklar.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 13:57:17
Hi, soweit war ich noch nicht.
Weil es ja ein Endlosformular ist, viel mir das nur über VBA ein zu lösen. Habe dazu zum testen einfach mal je nach "Position" eine andere Steuerelement Datenherkunft programmiert.

Aber ob das die beste Möglichkeit ist, weiß ich noch nicht.

Also zum Dienstplan:
Jedes Datum muss genau einen Dienstplan haben, der Dienstplan brauch folgende Inhalte:
Datum (im HF definiert)
Positionen (hier alle mit ner Anfügeabfrage dem Datum zugeordnet, damit alle schon sichtbar/vorhanden sind)
Mitarbeiter (hier eine Liste[in VBA dynamisch befüllt] die den Posten übernehmen
von (Zeit)
bis (Zeit)

Urlaub, Krank, Überstundenfrei etc muss auch noch rein, ob ich das einfach als zusätzliche Position einarbeite, oder anders, weiß ich noch garnicht.
Denke als Position ist gut, dann kann ich auch direkt die Zeit mit eintragen (Urlaub ergibt auch 24Std!).
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 19:20:19
hab mir eine weitere Tabelle erstellt um Überstunden einzutragen. Jetzt hab ich aber das Problem, dass ich immer nur die Daten angezeigt bekomme wo AUCH Überstunden vorhanden sind. Eigentlich sollte dann das Feld einfach leer bleiben, oder 0 ausgeben.

Hier mal mein SQL Code
SELECT tblDienstplan.Datum_F, tblDienstposten.Dienstposten, IIf([bisZeit]<=[vonZeit],DateDiff("n",[vonZeit],DateAdd("n",1440,[bisZeit]))/60,DateDiff("n",[vonZeit],[bisZeit])/60) AS StundenDienst, tblUeberstunden.[Stunden] AS Überstunden, tblUeberstunden.Kommentar, [StundenDienst]+[Überstunden] AS Gesamtstunden
FROM tblDienstposten INNER JOIN (tblDienstplan INNER JOIN tblUeberstunden ON (tblDienstplan.MitarbeiterID_F = tblUeberstunden.MitarbeiterID_F) AND (tblDienstplan.Datum_F = tblUeberstunden.Datum_F)) ON tblDienstposten.DienstpostenID = tblDienstplan.DienstpostenID_F
WHERE (((tblDienstplan.Datum_F) Between #1/1/2017# And #1/31/2017#) AND ((tblDienstplan.MitarbeiterID_F)=1));


hab schon mit ist Null or ist nicht null versucht unter Kriterien, aber brachte keinen Erfolg.

Habt ihr ne Idee?

Datum            Dienstposten   StundenDienst   Überstunden   Kommentar   Gesamtstunden   
01.01.2017     ELW                24                          5                   test              29
04.01.2017     ELW                24                             (oder 0)                          24

anzeigen tut aber aber nur
Datum            Dienstposten   StundenDienst   Überstunden   Kommentar   Gesamtstunden   
01.01.2017     ELW                24                          5                   test              29
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 02, 2016, 19:41:01
Hallo,
eins nach dem anderen.
Hier habe ich Dir erst mal eine Überarbeitung gemacht.
Die Kalentertage Tabelle habe ich erweitert. Ein Hakenfeld für die Feiertage, ein Namensfeld für den Feiertag und ein Feld für den Wochentag (WT 1 = Montag).
Die Felder (indiziert) in der Tabelle zu haben ist überaus vorteilhaft. Die Feiertage manuell einzutragen (ca. 10-12/Jahr) ist kein großes Geschäft.
Öffne das Formular "frmKalendertageUndDiensplanErstellen" trage das gewünschte Jahr ein und drücke den Button "... erstellen". Es wird jetzt der komplette Dienstplan mit allen Posten und den Zeiten erstellt. Geht sehr schnell.
Öffne dann das Formular "frmDienstplan". Da kannst Du jetzt jeden Tag anpassen.
Für die Uhrzeit habe ich eine Tabelle gemacht. Wertelisten sind grauselig.

Zu den Überstunden:
Im einfachsten Fall machst Du in der Dienstplantabelle ein Feld für die Überstunden. Bei Bedarf wird da was eingetragen. Sind kein Überstunden da, bleibt das Feld einfach leer.
Wenn Du eine extra Tabelle anlegen willst, benötigt diese einen Fremdschlüssel zum Dienstplan und nicht zum Datum und auch keinen zum Mitarbeiter. Die DienstplanID ist ja eindeutig und der Datensatz verweist auch auf den Mitarbeiter. Ich würde aber keine extra Tabelle anlegen.

DB anbei. Bei Fragen melden.
Bitte bleibe bei der MDB, sonst kann ich nicht mehr helfen. Und zähle bitte weitere Versionen hoch. (...02, ...03 ... 99  ;D )
Öffne dann das Formular
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 19:52:14
super danke, ich schaue es mir mal an :)
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 20:27:08
Ja Danke, sieht schon echt toll aus.

Paar Fragen hab ich noch:
-Was soll der FilternButton beim Dienstplan erstellen? Relikt?
-Das Feld ZusArbeitsFrei im frmDienstplan, wofür ist das genau gedacht, es ist ja Dienstplandatumbezogen für alle Mitarbeiter

Werd jetzt etwas damit arbeiten und rumdocktern und mich bestimmt nochmal melden ;)

Danke

Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 02, 2016, 21:48:10
Hallo,
der Filterbutton dient dem übersichtlichen Eintrag der Feiertage. Man hat halt immer nur einen Monat zur Ansicht. Wenn Du das nicht brauchst, kann der weg.
Mit ZusArbeitsFrei kann man zusätzliche Arbeitsfreie Tage anhaken. Aber das brauchst Du glaube ich auch nicht.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 02, 2016, 22:01:08
aso, alles klar.
Wo wir auf Feiertage zu sprechen kommen, ich muss eine Möglichkeit einbauen, dass ich allen Mitarbeitern, also Dienstplanunabhängig, Überstunden gutschreiben kann für die Feiertage.

Heißt z.B. für den 01.05.2017 bekommen alle Mitarbeiter (ob im Dienst, oder nicht) 5 Std gutgeschrieben.

Da schreib ich am besten eine Anfügeabfrage, wo dem Datum (in tblDienstplan) alle Mitarbeiter zugeordnet werden, als Dienstposten am besten "Feiertag" und dann die Std., oder gibt es da ne sinnigere Lösung?
Damit die dann nicht in der Dienstplangestaltung auftauchen, kann man das Formular ja filtern, sodass Dienstposten "Feiertag" nicht angezeigt wird.

Gute Nacht.
Bist mein Tagesheld ;)
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 03, 2016, 09:41:13
Hallo,
ZitatHeißt z.B. für den 01.05.2017 bekommen alle Mitarbeiter (ob im Dienst, oder nicht) 5 Std gutgeschrieben.
und die MA die nicht da sind auch (krank, Urlaub etc.) ?
Was ist überhaupt mit Urlaub, krank etc. wie wird das erfasst ?
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 03, 2016, 13:42:55
Ja für alle pauschal.
Krank etc erfasse ich im Dienstplan, kommen noch Posten hinzu.
Titel: Re: Datenmodel korrekt?
Beitrag von: MzKlMu am Oktober 03, 2016, 19:02:26
Hallo,
könntest Du bitte mal zusammenfassend erklären, was Du alles mit der DB machen willst.
Diese scheibchenweisen Infos sind nicht das Wahre.

Durch die vielen Zeiten die Du da erfassen willst sollte das Datenmodell noch mal auf den Prüfstand.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 03, 2016, 20:13:00
Alles klar, folgende Aufgaben müssen erfüllt werden:

1. Einen Dienstplan für jeden Tag erstellen (vorgegebene Posten mit Zeiten den passenden Mitarbeitern zuweisen) auf dem Dienstplan ist auch krank, Urlaub, Frei gelistet. Auf einem Dienstplan sind immer alle Mitarbeiter aufgeführt, die zu der Schicht gehören die an dem Tag Dienst haben. Es gibt 3 Schichten, jede ist alle drei Tage dran.

2. Eine Übersicht erstellen, wer wie oft welche Position hatte bis (heute)

3. Eine Übersicht, wer an welchen Tagen wieviel Schichtzulagen bekommt, Mo-Fr ab 20 Uhr - 07:30 (bestimmt über die Dienstplanzeiten errechenbar, immer Monatsweise) + die Möglichkeiten selbst weitere Schichtzulagen hinzuzufügen. Datum, Stunden, welche Schichtzulage, also Mo-Fr, Sa oder So und ein Kommentarfeld

(4.) Evt ne Art Vorrausplanung fürs Jahr, also immer alle drei Tage 24Std eingetragen + Kommentarfeld, wo man schonmal Zukunftsereignisse eintragen kann, z.B. Überstundenfrei etc. Diese Vorrausplanung dann halt fürs Jahresende summiert um mit der vorgegebenen Solljahresarbeitszeit zu vergleichen. Hat den Hintergrund, das man sehen kann, ob Mitarbeiter x noch genug Überstunden hat um frei zu nehmen, oder nicht. Könnte ja schon in der Zukunft Überstundenfrei eingetragen haben und kann deshalb jetzt kein frei bekommen.

5. Überstunden müssen eintragbar sein, diese können durch Ausbildung, Einsätze etc entstehen.

6. In Berichtsform den Dienstplan ausdrucken, zum aushängen

Ich glaube das wars, ist ja auch nicht ohne.
Titel: Re: Datenmodel korrekt?
Beitrag von: Xoar am Oktober 04, 2016, 11:19:50
Ich denke es gibt zwei Möglichkeiten,

1. Man fügt alle Daten der tblDienstplan hinzu,

2. Man macht einzelne tbl für Überstunden, Schichtzulagen.

Ich denke es ist einfacher alles der tblDienstplan hinzuzufügen, dann wird es später mit den Abfragen leichter.
Ich kann ja dem FrmDienstplan eine Datenherkunft filtern, sodass die ganzen zusätzlichen Datensätze (Überstunden durch Ausbildung, etc) nicht im eigentlichen frmDienstplan auftauchen.


Dadurch das die Positionen im frmDienstplan ja DS sind, ist es ja ein leichtes an den Tagen wo die z.B. Überstunden anfallen, ein neuen DS zu erzeugen.

Spontan würd ich sagen, ein neues Feld bei den Positionen erzeugen, "Dienstplanzugehoerig" mit 1 oder 0, was als Filterkritetium genutzt werden kann.