Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: lutschi83 am Mai 18, 2015, 08:37:10

Titel: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: lutschi83 am Mai 18, 2015, 08:37:10
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?
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: MaggieMay am Mai 18, 2015, 11:10:49
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
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: lutschi83 am Mai 18, 2015, 13:25:17
Danke für die Antwort....
Aber ich bin leider nicht fit in VB und hab keine Ahnung, wie dieser Code aussehen soll... :-[
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: MaggieMay am Mai 18, 2015, 13:33:35
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)
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: lutschi83 am Mai 18, 2015, 13:48:11
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?
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: MaggieMay am Mai 18, 2015, 13:52:11
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?
Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: lutschi83 am Mai 19, 2015, 08:56:43
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.

Titel: Re: Gefiltertes Unterformular auf Bericht übertragen
Beitrag von: MaggieMay am Mai 19, 2015, 15:18:47
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.