Neuigkeiten:

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

Mobiles Hauptmenü

Datenmodel korrekt?

Begonnen von Xoar, September 29, 2016, 15:03:52

⏪ vorheriges - nächstes ⏩

MzKlMu

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 ?
Gruß Klaus

Xoar

#16
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]

MzKlMu

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.
Gruß Klaus

Xoar

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!).

Xoar

#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

MzKlMu

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
Gruß Klaus

Xoar

super danke, ich schaue es mir mal an :)

Xoar

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


MzKlMu

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.
Gruß Klaus

Xoar

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 ;)

MzKlMu

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 ?
Gruß Klaus

Xoar

Ja für alle pauschal.
Krank etc erfasse ich im Dienstplan, kommen noch Posten hinzu.

MzKlMu

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.
Gruß Klaus

Xoar

#28
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.

Xoar

#29
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.