Neuigkeiten:

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

Mobiles Hauptmenü

zusätzlichen DS anzeigen

Begonnen von Xoar, Oktober 26, 2016, 17:22:14

⏪ vorheriges - nächstes ⏩

Xoar

Hallo Profis,
gebt mir mal ein Tipp, wie ich folgendes Problem lösen kann?!

(WA = Mitarbeiter gehören einer festen WA an, man könnte auch Schicht sagen)

Ich habe eine Kalendertabelle wo ein Feld "WA" ist, was vorausgefüllt ist mit 1,2, oder 3. Außerdem habe ich ne Mitarbeitertabelle wo ich jedem Mitarbeiter eine WA zugewiesen habe (es gibt 3 WAs, 1,2 und 3)
und eine Arbeitstabelle, wo jedem Tag x Personen Posten zugewiesen werden.

Jetzt habe ich eine Abfrage gefiltertet, dass mir immer nur für den Tag die zugehörigen WA-Mitarbeiter angezeigt werden.

Jetzt kann es aber mal vorkommen, dass ein Mitarbeiter seine Schicht für einen Tag tauscht (geht also heute arbeiten, anstatt morgen), sodass ich mir 3 Checkboxen angelegt habe, die zusätzlich die Mitarbeiter der anderen Schichten anzeigen.
Ich würde aber gerne die Möglichkeit einbauen, dass ich alle Mitarbeiter der anderen Schichten wieder ausblende, AUßER den TauschMitarbeiter.

hab schon herumexperimentiert, allerdings kam dann die Fehlermeldung, dass die Abfrage zu kompliziert sei -.-

Hier mal der SQL Code:

SELECT tblMitarbeiter.Nachname, tblMitarbeiter.Vorname, tblZeiterfassung.Position, tblZeiterfassung.Datumstag_F
FROM tblMitarbeiter INNER JOIN (tblKalendertage INNER JOIN tblZeiterfassung ON tblKalendertage.Datumstag = tblZeiterfassung.Datumstag_F) ON tblMitarbeiter.MitarbeiterID = tblZeiterfassung.MitarbeiterID_F
WHERE (((tblZeiterfassung.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((tblMitarbeiter.WA)=IIf([Formulare]![frmDienstplan]![HakenWa1],1,Null)))
OR (((tblZeiterfassung.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((tblMitarbeiter.WA)=IIf([Formulare]![frmDienstplan]![HakenWa2],2,Null)))
OR (((tblZeiterfassung.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((tblMitarbeiter.WA)=IIf([Formulare]![frmDienstplan]![HakenWa3],3,Null)))
OR (((tblZeiterfassung.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((tblMitarbeiter.WA)=[tblKalendertage]![WA]));


Es wird also der Standartschichtwert (WA) in tblKalendertage abgefragt und je nach Button zusätzlich 1,2 oder 3 über den Haken(Checkbox)

es müsste sowas gehen wie: zeige mir alle Mitarbeiter für den Tag an wo das Positionsfeld ausgefüllt ist. Problem: Dies muss ich ja erstmal befüllen, also bekomm ich keinen DS angezeigt zum befüllen, wenn ich als Kriterium ist Nicht Null [Position] eingebe.

Hondo

Hallo,
so ganz hab ich das nicht kapiert was du meinst.
Mitarbeiter sind MA und nicht WA! sind ja keine Witarbeiter?!
Formular-Bezüge in Abfragen sind alles andere als Empfehlenswert. Befasse dich doch mal mit Parametrisierten Abfragen - oder vieleicht besser ändere deine Tabellenstruktur.
Bitte poste doch mal deine Tabellenstruktur, z.B. als Screenshot des Beziehungsfensters (falls du Beziehungen angelegt hast).

Übrigends, bei Abfragen lohnt es sich Aliase zu verwenden, die machen die Abfragen wesentlich lesbarer.
Beispiel:
SELECT M.Nachname, M.Vorname, Z.Position, Z.Datumstag_F
FROM tblMitarbeiter AS M INNER JOIN (tblKalendertage AS K INNER JOIN tblZeiterfassung AS Z ON K.Datumstag = Z.Datumstag_F) ON M.MitarbeiterID = Z.MitarbeiterID_F
WHERE (((Z.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((M.WA)=IIf([Formulare]![frmDienstplan]![HakenWa1],1,Null)))
OR (((Z.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((M.WA)=IIf([Formulare]![frmDienstplan]![HakenWa2],2,Null)))
OR (((Z.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((M.WA)=IIf([Formulare]![frmDienstplan]![HakenWa3],3,Null)))
OR (((Z.Datumstag_F)=[Formulare]![frmDienstplan]![KombiDatumstag]) AND ((M.WA)=[K].[WA]));


Gruß Andreas

Xoar

Hi, danke für den Tipp mit den Aliasen.
Hab leider gerade Feierabend gemacht und bin erst Samstag wieder da um die Struktur zu zeigen.

Ich schlüssel es nochmal besser auf:
TblMitarbeiter
MitarbeiterID
Nachname
WA (1,2 oder 3)

TblKalendertage
Datum als PK
WT für den Wochentag
WA (hier steht immer 1,2,3) wiederholend wie die Wochentage nur halt von 1-3 und nicht 1-7

TblMitarbeiterSchicht
MitarbeiterSchichtID
Datum_F
Posten_F
...

TblPosten
PostenID
Posten

So jetzt wähle ich über ein Formular ein Datum aus, dann habe ich wie oben gezeigt immer die passenden Mitarbeiter angezeigt, die in der Kalendertabelle vordefiniert waren 1,2 oder 3.
Dazu kommen jetzt 3 Checkboxen die je nach Zustand die Filterung erweitern, um die Mitarbeiter die dort angewählt werden.
Also zeigt mir die das Endlosformular (was die Abfrage als DSherkunft hat) alle Mitarbeiter von 1 an, wenn ich die Checkbox 2 anwähle, kommen alle dazu bei denen WA = 2 eingetragen ist.

Jetzt weise ich z.B. allen Mitarbeitern von WA 1 einen Posten zu und genau einem Mitarbeiter von den zusätzlich angezeigten der WA = 2.

Also haben jetzt 10 WA1 Mitarbeiter einen Posten und 1 WA2 Mitarbeiter.

Jetzt würde ich gerne die Checkbox 2, die alle Mitarbeiter der WA2 einblendet wieder deaktivieren, sodass ich nicht soviele Mitarbeiter in meinem Formular sehe. Das Problem ist, dass dann auch der eine Mitarbeiter der WA2 ausgeblendet wird, da mein Filter ja auf die voreingestelle WA aus tblKalender eingestellt ist. Genau Diesen soll das Fornular, oder halt die Abfrage im Hintergrund nun auch darstellen.

Hoffe konnte das Problem jetzt genauer zeigen.