Neuigkeiten:

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

Mobiles Hauptmenü

Bericht mit Unterberichten (und mit Parametern) ausdrucken

Begonnen von Anneka, Dezember 01, 2014, 09:52:16

⏪ vorheriges - nächstes ⏩

Anneka

Hallo.
Ich habe eine Tabelle mit Fahrzeugs Informationen.
Es soll dafür ein Bericht erstellt werden, der mir die Fahrzeuge ausgibt, für die eine Prüfung vorliegt. Ich habe in der Tabelle bereits alle anstehenden Prüfungstermine eingetragen:
-   Nächste TÜV Prüfung
-   Nächste Sonderprüfung
-   Nächste UVV
-   Nächste EG Kontrollgerät

Ich brauche einen Bericht, wo der Anwender selbst das Datum für alle Prüfungen abfragt und die entsprechenden Fahrzeuge bekommt.
Ich habe einen Bericht erstellt der 4 Unterberichte enthält. Jeder Unterbericht basiert auf eine Parameterabfrage.
Mein Problem ist, wenn ich den Bericht öffnen will, werde ich ca. 10x nach den Parameter gefragt. Dann, wenn es endlich geöffnet ist, kann ich den nicht ausdrucken. (werde wieder nach den gleichen Parameter gefragt) und letztendlich wird ein leeres Bericht ausgedruckt.

Gibt es dafür eine bessere Lösung? Gibt es eine Abfrage, die mir alle Felder nur 1x abfragt?
Ich bin ACCESS-Anfänger, deshalb bitte um eine genaue Beschreibung 
Vielen Dank

DF6GL

Hallo,


wenn die Unterberichte nicht mit dem Hauptbericht verknüpft sind und das so bleiben soll, wird nichts anderes übrig bleiben, als die Abfragen der (Unter-)Berichte mittels VBA mit den entspr. Kriterien (Datumswerten) zu versorgen. Dabei sind für die Datumswerte enstpr. ungebundene Textfelder in einem Formular zu verwenden.

Wirf zunächst  die Parameter aus den nicht sortierenden und nicht gruppierenden Abfragen heraus.

Als Klick-Ereignisprozedur für eine Schaltfläche ("btnDrucken") wird in etwa solches geschrieben:

("...NTP" z. B. steht für "Nächste TÜV Prüfung")


Sub btnDrucken_Click()
Dim db as Database

set db=CurrentDB

db.Querydefs("abf_NTP").SQL = Replace (db.Querydefs("abf_NTP").SQL, " Where NTP_Datum= " & Format (nz(Me!txtNTP,Date), "\#yyyy-mm-dd\#"))

db.Querydefs("abf_NSP").SQL = Replace (db.Querydefs("abf_NSP").SQL, ";", " Where NSP_Datum= " & Format (nz(Me!txtNSP,Date), "\#yyyy-mm-dd\#"))

db.Querydefs("abf_NUVV").SQL = Replace (db.Querydefs("abf_NUVV").SQL, ";", " Where NUVV_Datum= " & Format (nz(Me!txtNUVV,Date), "\#yyyy-mm-dd\#"))

db.Querydefs("abf_NEGK").SQL = Replace (db.Querydefs("abf_NEGK").SQL, ";", " Where NUVV_Datum= " & Format (nz(Me!txtNUVV,Date), "\#yyyy-mm-dd\#"))

Docmd.Openreport "rpt_NächstePrüfungen",acpreview

set db = Nothing

End Sub

Anneka

Danke für die schnelle Antwort. Ich werde so machen und dann schreibe nachher ob es geklappt hat :)

MaggieMay

Hallo,

alternativ könnte man den Parameter auch per Funktionsaufruf in die Abfragen bringen.
Beim Öffnen des Berichts kann dieser (bspw. per Inputbox) einmal abgefragt und in einer globalen Variablen gespeichert werden.
(s.a. Donkarls FAQ 3.15)
Freundliche Grüße
MaggieMay

Anneka

Hallo

ich danke Euch für Tipps, aber ich komme irgendwie nicht weiter. Wie gesagt, bin ich ein Anfänger.
Ich habe meine Parameter aus den Abfragen entfernt, wollte jetzt in anderem Formular die ungebundene Textfelder erstellen. Was soll ich damit weiter machen?
Bitte um Verständnis

Zu MaggieMay (bitte um etwas genauere Beschreibung)
Viele Grüße

DF6GL

Hallo,

zu meinem Vorschlag:

wie gesagt: im Formular eine Schaltfläche ("btnDrucken")  einbauen und deren Klick-Ereignisprozedur wie vorher angegeben erstellen.

Anneka


Anneka

Ich habe den code umgesetzt, aber beim Anklicken btnDrucken_Click() kommt die Fehlermeldung: Argument ist nicht optional (markiert ist Replace).

Hier noch mal mein code:
Private Sub btnDrucken_Click()
Dim db As Database

Set db = CurrentDb

db.QueryDefs("Abf_Kfz-Daten_Faelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_Faelligkeitsdatum_Monat").SQL, " Where TUEV_Faelligkeitsdatum= " & Format(Nz(Me!tuevdatum, Date), "\#yyyy-mm\#"))

db.QueryDefs("Abf_Kfz-Daten_UVVFaelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_UVVFaelligkeitsdatum_Monat").SQL, ";", " Where UVV_Datum= " & Format(Nz(Me!uvvdatum, Date), "\#yyyy-mm\#"))

db.QueryDefs("Abf_Kfz-Daten_Sonderpruefungsfaelligkeit_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_Sonderpruefungsfaelligkeit_Monat").SQL, ";", " Where Sonderpruefungsdatum= " & Format(Nz(Me!spdatum, Date), "\#yyyy-mm\#"))

db.QueryDefs("Abf_Kfz-Daten_EG_Faelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_EG_Faelligkeitsdatum_Monat").SQL, ";", " Where EG-Kontrollgeraetsdatum= " & Format(Nz(Me!egkontrollgeraetdatum, Date), "\#yyyy-mm\#"))

DoCmd.OpenReport "Ber_Faelligkeitsdatum_Monat", acPreview

Set db = Nothing


End Sub

MaggieMay

#8
Zitat von: Anneka am Dezember 01, 2014, 12:24:18Zu MaggieMay (bitte um etwas genauere Beschreibung)

1. Ereignisprozedur zum Ereignis "Beim Öffnen" des Berichts:
Private Sub Report_Open (Cancel As Integer)
    gbl_rptDatum = Null
End Sub


2. In einem allgemeinen Modul:
Dim gbl_rptDatum As Variant     ' Deklaration vor und außerhalb der Prozeduren

Public Function get_rptDatum() As String
    Dim varDat
    If IsNull(gbl_rptDatum) Then
        varDat = InputBox("Bitte Datum eingeben:")
        If IsDate(varDat) Then
            gbl_rptDatum = varDat
        Else
            gbl_rptDatum = Date    ' gültiges Ersatzdatum einstellen
        End If
     End If
    ' Datum für Einsatz in Abfrage aufbereiten
    get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")
End Function


3. In der Abfrage:
Select * From tabelle Where tabDatum = get_rptDatum()

Korrektur:
Normalerweise schreibe ich das folgendermaßen:get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")weiß auch nicht wie mir das passieren konnte.
Freundliche Grüße
MaggieMay

MaggieMay

#9
Nachtrag:
Die Sache mit dem Replace kann so nicht funktionieren (s. Beispiel-1), außerdem funktioniert das nur ein einziges Mal.

Davon abgesehen, sollte der Verweis auf das Formularfeld eigentlich ebensogut einsetzbar sein wie der Funktionsaufruf und nicht zu Parameterabfragen führen. Hier liegt also ein ganz anderer Fehler vor.
Freundliche Grüße
MaggieMay

Anneka

hmmm.....
Ich versuche noch mit der Lösung 2. Es wird aber dauern. Danke MaggieMay

DF6GL

#11
Hallo,


"außerdem funktioniert das nur ein einziges Mal." 
ja , das stimmt.  Als Abhilfe kann man für jeden Bericht eine eigene Abfrage erzeugen und dieser einen Select-SQL-String mit Where-Condition zuweisen.

Zudem entspricht die  Datumsformatierung nicht dem USA-oder ISO-Format.


Für jeden Bericht (irgend)eine separate Abfrage erstellen.  ("abf_rptTUEV")

Bei jeder SQL-Zuweisung entspr. angepasst:

db.QueryDefs("abf_rptTUEV").SQL = "Select * from Abf_Kfz-Daten_Faelligkeitsdatum_Monat Where TUEV_Faelligkeitsdatum= " & Format(Nz(Me!tuevdatum, Date), "\#yyyy-mm-dd\#"))





"Hier liegt also ein ganz anderer Fehler vor."

get_rptDatum = Format(gbl_rptDatum, "\#mm/dd/yyyy\#")


ebs17

Ich würde  an der Stelle eine dritte und ganz einfache Variante anführen wollen: Eine Parametertabelle.

Du legst eine Tabelle mit einem Feld pro Parameter (mit passendem Datentyp) an. Diese Tabelle darf nur genau einen Datensatz enthalten.
Mit der Auswahl der Parameter im Formular werden diese in diese Parametertabelle geschrieben, bei Neuauswahl entsprechend überschrieben.

Die Parametertabelle ist ihrerseits fest in den beteiligten Abfragen integriert, etwa (orientiert an Franz' letzter Abfrage):
SELECT A.*
FROM [Abf_Kfz-Daten_Faelligkeitsdatum_Monat] AS A,
Parametertabelle AS P
WHERE A.TUEV_Faelligkeitsdatum = P.Parameterfeld


Sprich: Nach dem Schreiben der Parameter in die Tabelle kann unmittelbar der Bericht geöffnet werden.
Mit freundlichem Glück Auf!

Eberhard

Anneka

Hallo ebs17
DANKE! Es funktioniert und es war für mich die einfachste Variante.
Vielen DANK!

MaggieMay

Zitat von: DF6GL am Dezember 01, 2014, 17:00:28get_rptDatum = Format(gbl_rptDatum, "\#mm/dd/yyyy\#")

Normalerweise schreibe ich das folgendermaßen:
get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")
weiß auch nicht wie mir die falsche Schreibweise passieren konnte.
Freundliche Grüße
MaggieMay