Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Filtern von nach Jahr und Datum

Begonnen von Brallu, Februar 10, 2018, 09:48:21

⏪ vorheriges - nächstes ⏩

Brallu

Hallo Gemeinde ich habe mal wieder ein Verständnisproblem!  :-[
In einem Bericht sollen passend zu einem jährlichen Prüfungsintervall nur die Datensätze angezeigt werden die in diesem Jahresintervall noch nicht geprüft wurden.
Also in der tblPruef gibt es neben dem Prüfergebnis usw. die Felder:
PruefDatum    (an diesem Tag wurde eine Prüfung durchgeführt) z.B. 12.01.2018
PruefPruefJahr   (hier steht das bei der Prüfung zugehörige Prüfjahr) z.B. 2017
Hier kann ich jetzt sehen, dass z.B. ein Artikel im Prüfungsjahr 2017 am 12.01.2018 geprüft wurde und das für jede Prüfung jedes Jahr. (Bild 1)

Jetzt zu meinem Problem: Ich möchte in einem Bericht nur die Artikel sehen die noch nicht im Prüfungsjahr z.B. 2018 geprüft wurden.
Um das zu filtern habe ich in einem Formular ein Kombinationsfeld angelegt
wo das Jahr was ich haben will ausgewählt wird (Bild 2).
([frmBerichte]![cboJahrBericht1] das Kombinationsfeld und [cmdNichtGeprüft] der Button)
Jetzt habe ich aber keinen Plan wie ich das am besten Filtern kann?!?

Gefiltert werden soll:
Nur die Datensätze die nicht im Jahr 2018 schon geprüft sind.
Also im PruefPruefJahr darf nicht 2018 stehen aber die Prüfungen der letzten Jahre sollen auch nicht angezeigt werden.
Ich hoffe jemand hat so etwas mal umgesetzt und kann mir einen Tipp geben wo ich ansetzen soll.

Gruß und danke fürs lesen
Danny

DF6GL

Hallo,


Wenn ich es richtig verstehe:

Docmd.Openreport "rpt_Bericht1",,,"PruefDatum is Null and PruefPrueffJahr = " & Me!cmbJahrWaehlen

Brallu

Hallo Franz,
das passt so leider nicht.  :-\
Docmd.Openreport "rpt_Bericht1",,,"PruefDatum is Null and PruefPrueffJahr = " & Me!cmbJahrWaehlen

Das würde ja bedeuten das die Datensätze in PruefPrueffJahr die Jahreszahl hätten.
Die Jahreszahl wird aber erst bei der Prüfung des Datensatzes geschrieben. (geprüft am und gehört zur Prüfung z.b. 2018)
Also irgendwie so:
PruefDatum is Null and PruefPrueffJahr is null (wenn nirgens was steht)
und nun fehlt noch PruefPrueffJahr ist nicht (Me!cmbJahrWaehlen = ausgewähltes Jahr z.b. 2018) aber auch nicht die anderen Prüfjahre.

Gruß
Danny

DF6GL

Hallo,

ZitatDas würde ja bedeuten das die Datensätze in PruefPrueffJahr die Jahreszahl hätten.

Ja sicher...  Welchen Sinn hätte das Ganze, wenn in  "PruefPrueffJahr"  keine Jahreszahl stünde?


Neuerliche Interpretation ist diese:

Es gibt eine Tabelle mit Artikeln und eine Tabelle mit Prüfungen in 1:n-Beziehung. 
Es soll angezeigt werden, welche Artikel im angegebenen Jahr noch keine Prüfung erfahren haben. (d. H. kein Datensatz für den betreffenden Artikel überhaupt existiert. Insofern ist die Jahresangabe bedeutungslos.)

Docmd.OpenReport "rpt_Bericht1",,," PruefArtikelID not in (Select ArtikelID from tbl_Artikel)"


Vermutlich gibt es hier ein fehlerhaftes Datenmodell. Zeige mal den Screenshot des Beziehungsfensters.


ZitatPruefDatum is Null and PruefPrueffJahr is null (wenn nirgens was steht)
und nun fehlt noch PruefPrueffJahr ist nicht (Me!cmbJahrWaehlen = ausgewähltes Jahr z.b. 2018) aber auch nicht die anderen Prüfjahre.
???

Brallu

Ein fehlerhaftes Datenmodell ist das nicht, ich kann es warscheinlich nur nicht richtig erklären.  :(
Also in einem anderen Formular wird die Prüfung duchgeführt.
Bei jeder Prüfung wird ein Datensatz in der tblPruef angelegt mit Prüfdatum und Jahreszahl der JahresPrüfung.
Wenn ich einen Artikel noch nicht geprüft habe, dann habe ich auch nicht einen dazugehörenden Datensatz mit Datum und Prüfjahr.
Jetzt soll in der Abfrage zum Bericht gefiltert werden, dass alle Datensätze die keine Prüfung mit der Jahreszahl z.B. 2018 haben angezeigt werden und wenn ich im Kombi 2017 auswähle soll geprüft werden ob alle Artikel im Prüfjahr 2017 geprüft wurden u.s.w.
Die Jahreszahl ist nötig weil eine Prüfung nicht nur in einem Jahr stattfindet sondern auch mal bis in den Januar des nächsten Jahres gehen kann.
Hoffe das erklärt mein Problem etwas besser!!

Lachtaube

... und wir sind schlecht in Bildinterpretationen. Lade doch bitte ein Minimalbeispiel mit einigen Spieldaten, sowie dem Steuerformular als auch dem Bericht hoch.
Grüße von der (⌒▽⌒)

Brallu

Hallo Lachtaube,
ok das werde ich mal machen!!  :)

Beaker s.a.

Hallo Danny,
Ich denke der Filter müsste so lauten (ungetestet)
,,,"ArtikelID Not In (Select PruefArtikelID From tbl_Pruef Where PruefPruefJahr = " & Me!cmbJahrWaehlen & ")"
Zeige alle Artikel die nicht in der Teilmenge der Prüfungen mit dem
ausgewählten Jahr enthalten sind.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

ZitatJetzt zu meinem Problem: Ich möchte in einem Bericht nur die Artikel sehen die noch nicht im Prüfungsjahr z.B. 2018 geprüft wurden.
Mit einem Prüfdatum, also einer erfolgten Prüfung, entsteht vermutlich ein neuer Datensatz.
Ohne Prüfdatum gibt es dann keinen Datensatz. Wenn es etwas nicht gibt, kann man nicht unmittelbar danach filtern, da helfen die besten Nebelschüsse nichts. Dem Kumpel, den ich nicht habe, kann ich weder an den Kopf noch in die Tasche greifen und auch nicht zu dessen Party gehen. Abfragen (SQL), das ist zuerst Mengenlehre.

"Fehlende" Datensätze kann man in der Art ermitteln, indem man eine vollständige Menge bildet (bspw. alle Dinge, die in 2018 zu prüfen wären), und man dann die Menge der erfolgten Prüfungen abzieht.
Das Ganze nennt sich dann Inkonsistenzprüfung und ist in den Weiten von Forum und Internet vielfach vorhanden und nachzulesen.
Mit freundlichem Glück Auf!

Eberhard

Brallu

Hallo Eberhard,
Inkonsistensprüfung war der Schlüssel zum Erfolg  :)
Damit konnte ich mein Problem lösen. Hatte ich vorher leider noch nie benutzt.

Gruß und Danke für eure Zeit 🤗
Danny