Hallo Zusammen,
Ich möchte gerne unsere Schichtpläne mit access automatisieren.
Dazu habe ich folgende Tabellen
1. ) STAMM_SCHICHTPLAN.Hier wird für jeden Mitarbeiter definiert, an welchem Tag er welche Schicht hat.
Beispiel :
LfdNR USER_ID Schicht _Bezeichnung WochenTag Schicht_Beginn
---------------------------------------------------------------------------------------------------
1 1 Frühschicht Montag 07:00
2 1 Frühschicht Dienstag 07:00
3 1 Frühschicht Mittwoch 07:00
4 1 Frühschicht Donnerstag 08:00
5 1 Frühschicht Freitag 09:00
6 1 Spätschicht Montag 10:00
7 1 Spätschicht Dienstag 11:00
...usw
dann kommt ein neuer Mitarbeiter und eben dessen Daten
8 2 Frühschicht Montag 09:00
9 2 Frühschicht Dienstag 07:00
10 2 Frühschicht Mittwoch 07:00
11 2 Frühschicht Donnerstag 08:00
Usw
Nun hab ich hierzu auch eine Tabelle die den Schichtplan darstellen soll.
2. ) Schichtplan_User_Zeiteneinteilung es sind folgende Felder enthalten ..aber nur die u.g. befüllt.
LFdNR USER_ID Schicht_Datum Wochentag Team Schicht_Bezeichnung Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1 1 03.12.2012 Montag Team A = leer = leer
2 2 03.12.2012 Montag Team B = leer = leer
Diese Tabelle wird in einem
Formular Namens SCHICHTPLAN , tabellarisch als UFO gezeigt.
Dieses Formular SCHICHTPLAN dient dazu die Werte des UFOs
Schichtplan_User_Zeiteneinteilung zu filtern.
Hierzu gibt es 3 ungebundene Felder ( d.h. dieses Formular basiert auf keine Tabelle )-
-
1. ) Schicht_Datum
2.) Team
und es gibt noch ein Feld mit dem Namen
Schicht_Bezeichnung dieses Feld soll eine Aktion auslösen.
und jetzt kommts ;D
Wurde der Filter ausgelöst, und in diesem Feld Namen
Schicht_Bezeichnung zb. Fühschicht ausgewählt,
dann soll in der Tabelle folgendes befüllt werden :
2. ) Schichtplan_User_Zeiteneinteilung es sind folgende Felder enthalten ..aber nur die u.g. befüllt.
LFdNR USER_ID Schicht_Datum Wochentag Team Schicht_Bezeichnung Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1 1 03.12.2012 Montag Team A
Fühschicht = leer
2 2 03.12.2012 Montag Team B
Fühschicht = leer
aber nicht nur das. sondern es soll mir dann auch der Schicht_Beginn aus der Tablle
1. ) STAMM_SCHICHTPLAN.ausgelesen werden, damit es dann so aussieht :
LFdNR USER_ID Schicht_Datum Wochentag Team Schicht_Bezeichnung Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1 1 03.12.2012 Montag Team A
Fühschicht 07:002 2 03.12.2012 Montag Team B
Fühschicht 09:00so jetzt dachte sich Bernie...na das ist doch einfach... per Recortset kann das Feld Frühschicht befüllt werden....
das funzt auch.
nur wie lese ich dann den 2ten schritt aus.
If Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset.RecordCount > 0 Then
Zitat'---------------------------------------------
Dim rsA As DAO.Recordset
Set rsA = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetClone
Do Until rsA.EOF
rsA.Edit
'---------------------------------------------
rsA!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
rsA!Bemerkung = Me.Bemerkung_Übernehmen
On Error GoTo myFehler
Dim strSQL As String
Dim Schichtplan_ID As Integer
Set db = CurrentDb
strSQL = "SELECT a.LfdNr, a.USER_ID, a.Wochentag, a.Schicht_Bezeichnung"
strSQL = strSQL & " FROM STAMM_SCHICHTPLAN AS a"
strSQL = strSQL & " WHERE a.USER_ID =" & rsA!USER_ID
strSQL = strSQL & " And a.Wochentag ='" & rsA!Wochentag & "'"
strSQL = strSQL & " And a.Schicht_Bez =" & rsA!Schicht_Bez
Set rs = db.OpenRecordset(strSQL)
Schichtplan_ID = rs!LfdNr
Set db = Nothing
Set rs = Nothing
Ende:
On Error Resume Next
Exit Sub
myFehler:
If Err.Number = 2113 Then
Schichtplan_ID = 111
End If
Resume Ende
Dim FilterSS As String
FilterSS = "[LfdNr]=" & Schichtplan_ID
rsA!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
rsA!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)
rsA!Schicht_Pause_Anfang = DLookup("Schicht_Pause_Anfang", "STAMM_SCHICHTPLAN", FilterSS)
rsA!Schicht_Pause_Ende = DLookup("Schicht_Pause_Ende", "STAMM_SCHICHTPLAN", FilterSS)
'--------------------------------------------
rsA.Update
rsA.MoveNext
Loop
rsA.Close
Set rsA = Nothing
End If
Me.Schichtplan_User_Zeiteneinteilung.Requery
habs mit diesem Code versucht.. der funktioniert natürlich nicht.
Jetzt weiss ich auch nicht, ob so etwas möglich ist.
Kann mir mal jemand einen Tipp geben ?
Danke für eure Antworten und lesen des langen ..vll auch verwirrend textes..was aber nicht wie ich mich verständlicher ausdrücken soll.
Lg Bernie
Hmm oder könnte man es mit Dlookup ausführen ?
etwa so.. Dlookup mit 3 Kriterien ?
ZitatIf Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset.RecordCount > 0 Then
'---------------------------------------------
Dim rs As DAO.Recordset
Set rs = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetClone
Do Until rs.EOF
rs.Edit
'---------------------------------------------
rs!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
rs!Bemerkung = Me.Bemerkung_Übernehmen
If Not IsNull(rs!Schicht_Bezeichnung) Then
Dim FilterSS As String
FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_Bezeichnung
rs!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
rs!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)
End If
'--------------------------------------------
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End If
Me.Schichtplan_User_Zeiteneinteilung.Requery
End Sub
Macht er aber auch nicht :(
Jemand eine kleien Idee ?
Danke für eure Antworten
Lg bernie
Hallo,
Was willst Du überhaupt machen?
Vergiss mal dieses VBA-Getöns und mach Dir ein paar Gedanken zum Konzept.. ;)
Wenn "STAMM_SCHICHTPLAN" die "normale" Standard-Einteilung eines Users in die verschiedenen Schichten bedeutet und diese "Wochenschicht" in eine Tabelle "tblSchichten" überführt werden soll, in der zusätzlich die zugeordnete Woche (--> Schichtdatum) geführt werden muss und auch der Teamname festgelegt werden soll, dann könnte das so etwa vonstatten gehen:
In eine Tabelle "tblSchichten" wird per VBA und/oder SQL der Schichtblock des betroffenen Users kopiert. Zu jedem Datensatz wird das Datum für diese Schichtwoche jeweils passend berechnet und mit übertragen. Weiterhin ist die Angabe des Teamnamens an dieser Stelle möglich.
Die Schichten selber sind modifierbar, falls es mal Änderungen an der Zusammensetzung der Schichten oder Teams kommen sollte.
Hallo,
ersteinmal Danke, dass du dich wieder mit meinern Problemen befasst. :)
Also wenn ich das richtig verstehe, dann würdest du das eher mit einer Abfrage darstellen oder ?
Das mit der tblSchichten..also in meinem ersten Post genannt als
2. ) Schichtplan_User_Zeiteneinteilung Erfolgt die Berechnung und Erstellung über eine VBA Anfüge-Abfrage
Ok, wenn man die 2 Tabellen dann mit einer Abfrage zusammenfügt, dann geht das natürlich.
Aber was ich nicht verstehe ist,
ZitatDie Schichten selber sind modifierbar, falls es mal Änderungen an der Zusammensetzung der Schichten oder Teams kommen sollte.
Also wenn ich das richtig verstehe muss, dann immer in der Tabelle STAMM_Schichtplan die jeweilige Schicht angepasst werden oder ?
Genau das würde ich gerne verhindern wollen.
Ich stelle mir vor, dass die Schicht des jeweilige Mitarbeiter individuell je Tag anpass bar ist.
Das Problem ist, es geht da wirklich nach Minuten.
Und die können Tag für Tag unterschiedlich sein.
Nur bei der Eingabe, sollte das Schichtmodell als Standart erfasst werden.
Bin ich da schon wieder auf dem Holzweg oder ist das trotzdem realisierbar ?
ist das o.g. mit Dlookup denn überhaut möglich ?
DLookup mit 3 Bedingungen ?
FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_BezeichnungDanke nochmals für deine Mühe
Lg Bernie
Hallo,
ZitatAlso wenn ich das richtig verstehe, dann würdest du das eher mit einer Abfrage darstellen oder ?
Verstehst Du falsch, von Auswahl-Abfragen hab ich nicht gesprochen... ;) (nur von evtl. einer Anfügeabfrage (-->SQL-String) zum Übertragen der Vorlage in die Schichten-Tabelle)
ZitatDas mit der tblSchichten..also in meinem ersten Post genannt als 2. ) Schichtplan_User_Zeiteneinteilung
Erfolgt die Berechnung und Erstellung über eine VBA Anfüge-Abfrage
Naja, so ähnlich habe ich es ja auch gemeint.
ZitatOk, wenn man die 2 Tabellen dann mit einer Abfrage zusammenfügt, dann geht das natürlich.
In meinem Vorschlag: nix mit Selektionsabfrage, eher mit Anfügeabfrage (des Vorgabe-User-Wochenblockes aus Stamm_Schichtplan) in die Tabelle "Schichtplan_User_Zeiteneinteilung" (von mir als "tblSchichten" genannt.)
ZitatAlso wenn ich das richtig verstehe muss, dann immer in der Tabelle STAMM_Schichtplan die jeweilige Schicht angepasst werden oder ?
Nein, da nicht, außer die "Vorlage" ändert sich mal (für die nächste Zeit) dauerhaft....was ja auch vorkommen kann.
Angepaßt wird die "tblSchichten" (ähnlich Deiner "Schichtplan_User_Zeiteneinteilung"), wenn sich halt die betroffenene akt. Schicht eines Users ändert.
ZitatNur bei der Eingabe, sollte das Schichtmodell als Standart erfasst werden.
Das geschieht ja, wenn Du mit "Eingabe" das Übertragen der Tages-Arbeitszeiten eines Users aus der Vorlage ("Stamm_Schichten") in die "tblSchichten" meinst.
ZitatIch stelle mir vor, dass die Schicht des jeweilige Mitarbeiter individuell je Tag anpassbar ist.
Das ist so in meinem Vorschlag (sprich, in "tblSchichten" sind die täglich zu absolvierenden Arbeitszeiten eines jeden Users hinterlegt und damit auch individuell anpassbar).
Zitat
ist das o.g. mit Dlookup denn überhaut möglich ?
Zitatist das o.g. mit Dlookup denn überhaut möglich ?
Vergiss diese Konstruktion und versuch meinen Vorschlag umzusetzen. Das einzige an VBA, bzw. Code ist das Anlegen einer neuen Schichtwoche und Datum (für die entspr. Woche) anzugeben, oder hier vielleicht besser die Woche des bestimmten Jahres und daraus die passenden Tages-Datumswerte zu berechnen, sowie den betroffenen User für diese Schicht.
Mensch, jetzt hab ich es verstanden !!
Klar..alles in die Anfügeabfrage einbauen.
Ich hab dafür 2 Tabellen..reicht ja auch eine aus...*aufnKopfschlag*
Tja manchmal verennt man sich in etwas....
Grosse Klasse Franz !! :)
Vielen Vielen Dank.. ;)
Lg Bernie
Tja, jetzt hab ich mich doch etwas zu früh gefreut.
Da die 3 Schichten Spät. Früh. und Normal im Wechsel je Mitarbeiter erfolgen, tu ich mich da etwas schwer mit einer Anfügeabfrage.
Jetzt muss ich nochmal fragen, denn das wäre die einfachste Lösung.
Zitat
If Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset. RecordCount > 0 Then
'---------------------------------------------
Dim rs As DAO.Recordset
Set rs = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetC lone
Do Until rs.EOF
rs.Edit
'---------------------------------------------
rs!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
rs!Bemerkung = Me.Bemerkung_Übernehmen
If Not IsNull(rs!Schicht_Bezeichnung) Then
Dim FilterSS As String
FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_Bezeichnung
rs!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
rs!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)
End If
'--------------------------------------------
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End If
Me.Schichtplan_User_Zeiteneinteilung.Requery
End Sub
In meinen Augen wäre es einfacher , wenn Dlookup mit 3 Bedingungen ausgeführt werden könnte.
Ist das denn überhaupt möglich ?
Wenn ja, wie muss die Bedingung zu FilterSS richtig lauten.
Lg Bernie
Hallo,
was auch immer Du machen willst, der Filterstring muss so lauten in Deinem Beispiel:
FilterSS = "[Wochentag] like '" & rs!Wochentag & "*' And [USER_ID] = " & rs!USER_ID & " And [Schicht_Bezeichnung] ='" & rs!Schicht_Bezeichnung & "'"
wobei es völlig unklar ist, warum Du da mit Wochentagen-NAMEN(-fragmenten) und nicht mit Wochtag-ZAHLEN arbeitest...
Hallo Franz,
super, danke, jetzt funktioniert es so wie ich es mir vorstelle.
Zitatwobei es völlig unklar ist, warum Du da mit Wochentagen-NAMEN(-fragmenten) und nicht mit Wochtag-ZAHLEN arbeitest...
Na damit ein Montag auch ein Montag ist.
Oder wie ist das zu verstehen ? "Wochtag-ZAHLEN "
Lg Bernie
Hallo,
beschäftige Dich mal mit den Datums-Datentyp, seinen möglichen Formatierungen und den damit zusammenhängenden Datums-Funktionen (z. B. Datepart() oder auch Weekday() )