Neuigkeiten:

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

Mobiles Hauptmenü

Gefiltertes Unterformular auf Bericht übertragen

Begonnen von lutschi83, Mai 18, 2015, 08:37:10

⏪ vorheriges - nächstes ⏩

lutschi83

Hallo Leute,

ich habe ein Formular mit einem Unterformular, dass über Private Sub Filter_Click()
Dim strVon As String
Dim strBis As String
Dim strKrit As String
    If IsDate(Me.txtvon) And IsDate(Me.txtbis) Then
        strVon = Format(Me!txtvon, "\#yyyy\-mm\-dd\#")
        strBis = Format(Me!txtbis, "\#yyyy\-mm\-dd\#")
        strKrit = "Rechnungsdatum Between " & strVon & " AND " & strBis
        Forms!faktura!Faktura_ufa.Form.Filter = strKrit
        'Debug.Print strKrit
        Forms!faktura!Faktura_ufa.Form.FilterOn = True   
       Else
        Forms!faktura!Faktura_ufa.Form.Filter = ""
        Forms!faktura!Faktura_ufa.Form.FilterOn = False
    End If
End Sub
gefiltert wird.
Nun möchte ich, dass dieser Filter auf meinen erzeugten Bericht übergeben wird, wenn ich den Button "Bericht" klicke.
Bisher habe ich folgende Prozedur beim klicken laufen Private Sub Bericht_Click()   
DoCmd.OpenReport "faktura", acViewReport, , "[Firma]='" & Me.Firma & "'"
End Sub

Wie muss ich diesen Code ergänzen, dass die gefilterten Datensätze aus dem Unterformular übergeben werden?

MaggieMay

Hi,

du könntest folgendes versuchen:
- übergib den Filter via OpenArgs beim Öffnen des Berichts
- greife im Open-Ereignis des Unterberichts mit Me.Parent.OpenArgs darauf zu und setze den Filter
Freundliche Grüße
MaggieMay

lutschi83

Danke für die Antwort....
Aber ich bin leider nicht fit in VB und hab keine Ahnung, wie dieser Code aussehen soll... :-[

MaggieMay

Hi,

so wird der Filter übergeben:
DoCmd.OpenReport "faktura", acViewReport, , "[Firma]='" & Me.Firma & "'", , Me!Faktura_ufa.Form.Filter

Und so könnte er im Unterbericht eingesetzt werden:
If Me.Parent.OpenArgs <> "" Then
    Me.Filter = Me.Parent.OpenArgs
    Me.FilterOn = True
End If
(ungetestet)
Freundliche Grüße
MaggieMay

lutschi83

Muss ich dann den Code If Me.Parent.OpenArgs <> "" Then
    Me.Filter = Me.Parent.OpenArgs
    Me.FilterOn = True
End If
beim Laden des Berichtes eintragen oder was ist mit "Unterbericht" gemeint?

MaggieMay

Das hatte ich bereits geschrieben:
Zitat von: MaggieMay am Mai 18, 2015, 11:10:49
- greife im Open-Ereignis des Unterberichts mit Me.Parent.OpenArgs darauf zu und setze den Filter

Oder hast du gar keinen Unterbericht? Dann beschreibe die Zusammenhänge bitte genauer.
Was wird im Haupt- und Unterformular dargestellt und was soll der Bericht zeigen?
Freundliche Grüße
MaggieMay

lutschi83

Hi,
ich habe die Datenbank mal angehängt. Im Formular "Faktura" setze ich den Filter für das Unterformular und nun möchte ich, dass der Bericht die gefilterten Datensätze anzeigt.


MaggieMay

#7
Es handelt sich also nur um einen Hauptbericht, da kannst du den erweiterten Filter beim Öffnen des Berichts folgendermaßen übergeben:
Private Sub Befehl102_Click()
    Dim strKrit As String
    strKrit = "[Firma]='" & Me.Firma & "'"
    If Me!Faktura_ufa.Form.FilterOn = True Then
        strKrit = strKrit & " AND " & Me!Faktura_ufa.Form.Filter
    End If
    DoCmd.OpenReport "faktura", acViewReport, , strKrit
End Sub

Allerdings sollte nach Möglichkeit stets über die ID gefiltert werden und nicht über den Namen.

BTW:
Was mir noch aufgefallen ist, betrifft die Verbindung zwischen Bestelldetails und Artikeln, und zwar sollte auch hier die Datensatz-ID verwendet werden, zunmal die Artikelbezeichnung nicht eindeutig ist. Weitere Artikel-Datenfelder werden in der Tabelle nicht benötigt und sollten entfernt werden.

Des weiteren solltest du allen Feldern eindeutige Namen geben, und auch nicht einfach nur ID für den Datensatzschlüssel verwenden. Fremdschlüssel können durch ein angehängtes "_F" kenntlich gemacht werden. Auf Sonderzeichen inkl. Leerzeichen) sollte generell verzichtet werden, ebenso auf allzu lange Namen.

Sinnvoll ist es auch, den Objektnamen sprechende Präfixe zu geben, wie bspw. tbl, abf, frm, rpt, etc.
Freundliche Grüße
MaggieMay