Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: silentwolf am April 09, 2011, 15:59:51

Titel: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: silentwolf am April 09, 2011, 15:59:51
Hallo,
habe schon einige Beiträge gelesen über das Filtern eines Berichts mit Kombinationsfeld.
Aber leider bei mir funtioniert das nicht :(
Was muss man denn hier machen?

Momentan habe ich eine Abfrage erstellt mit allen Feldern die ich haben möchte. Und mit dieser Abfrage einen Bericht erstellt.
Nun möchte ich aber den Bericht filtern mit einem Formular und eventuel mehreren Kombiboxen.
Wäre Euch dankbar wenn Ihr mir helfen könntet.

Danke
Albert
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: bahasu am April 09, 2011, 16:47:00
Hi Albert,

wie der acces Hilfe zu entnehmen ist, sind die folgenden Parameter beim Aufruf eines Berichtes einsetzbar:
DoCmd.OpenReport ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs


z.B. DoCmd.OpenReport "DeinBericht", acPreview, , "DeinFeld = '" & Me!DeinAuswahlfeld & "'"
öffnest Du Deinen Bericht in der Berichtsvorschau (acPreview) und wählst die Daten aus, die die obige Bedingung erfüllen. Hier jetzt mal vorausgesetzt, dass das Kombifeld ein Text-Feld ist.

Harald
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: silentwolf am April 09, 2011, 17:48:02
Hallo Harald,
danke für Deine Anwort!
Leider funktioniert es bei mir aber nicht :(
Werde es aber für Heute mal aufgeben.
Vielen Dank
Albert
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: bahasu am April 09, 2011, 18:07:10
Hi Albert,
Zitat von: silentwolf am April 09, 2011, 17:48:02
Leider funktioniert es bei mir aber nicht :(

kannst Du näher beschreiben, was nicht funktioniert?
Denkbare Macken: Error Meldung - falsche Selektion - gar keine Selektion - ...

Harald
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: silentwolf am April 12, 2011, 10:08:35
Hallo Harald,
danke für deine Antwort!
Also bei mir filtert sich der Report einfach nicht.
Hier ist mein Code

Private Sub cmdKontenAuswahl_Click()
DoCmd.OpenReport "rptEinahmenAusgaben", acPreview, , "KontenNr = '" & Me!cboKonten & "'"
End Sub

Der Bericht ist mit einer Abfrage erstellt worden. Das Kombinationsfeld mit dem Asistenten auch von der Abfrage.
Wenn ich nun den Report öffne zeigt es keine Daten an.
Hab schon ewig herumprobiert aber es funktioniert nicht also gar nichts.

Danke
Albert
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: database am April 12, 2011, 11:32:03
Hallo,

Das Feld 'KontenNr' MUSS am Bericht vorhanden sein.
Das Kombifeld cboKonten muss aus seiner gebundenen Spalte Daten liefern, die dem Eintrag im Feld KontenNr entsprechen.
Wenn das Kombifeld ordnungsgemäß erstellt wurde, enthält die gebundene Spalte den Primärschlüssel der Kontentabelle - und der wird vermutlich nicht dem Eintrag in KontenNr übereinstimmen.

Wie ist den dein Kombi aufgebaut? Was steht denn in der gebundenen Spalte drin?
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 13, 2011, 13:19:06
Hallo,

ich muss dieses Thema auch noch einmal aufgreifen. Ich habe ebenfalls einen Bericht den ich nach Kundennummern filtern möchte. Dies sollte vorher einem Formular geschehen. Und zwar möchte im Feld txtWert eine Kundennummer eingeben und der Bericht rpKudenauswertung sollte danach nur die Transaktionen, welche die Kudennummer betreffen anzeigen. ICh bekomme aber nur Fehlermeldungen. Vielleicht weiß jemand, was ich falsch mache. PS.Vers_kdNr ist das Feld im Bericht, welches sgefiltert werden soll. Anbei meine Filterbdingungen.

Option Compare Database
Option Explicit
Dim m_rpKundenauswertung As Report


Private Sub btnFilterAnwenden_Click()
Dim strwhere As String
strwhere = "VERS_KDNR" & txtWert
With m_rpKundenauswertung
.Filter = strwhere
.FilterOn = True
.txtFilter.Visible = True
.txtFilter = strwhere
.lblFilter.Visible = True
End With

End Sub
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: silentwolf am Dezember 13, 2011, 13:27:43
Hallo,
bin ja auch nicht der Super Profi gg aber vieleicht hilft mein Kommentar ja ein wenig :)
Warum filterst Du denn nicht vorher und dann mit einem Button den Bericht ansteuern.

Also zuerst in einem Formular nach deinen Kunden Suchen und wenn Du den richtigen hast mit einem Button den Bericht öffnen der Dir dann diesen Anzeigt.
So würde ich es halt mal versuchen  ;D

HTH

Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 13, 2011, 13:47:05
Hallo, danke erstmal für die Info,
Genauso soll es dann ja sein. Aber irgendwie haut mein Filter nicht hin.
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: silentwolf am Dezember 13, 2011, 14:08:23
Ist doch kein Problem :) bin ja auch immer froh wenn mir jemand hilft gg :)

Also such mal nach einen Suchformular in 10 Minuten das ist recht gut und auch gut beschrieben :)
Dann kannst Du mal den Filter mit diesen Formular erstellen und danach kannst einen Button in dieses Formular einfügen der Dir dann diesen DS im Bericht öffnet druckt und so weiter.

HTH

Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: DF6GL am Dezember 13, 2011, 14:11:37
HAllo,



Option Compare Database
Option Explicit
Dim m_rpKundenauswertung As Report

Private Sub btnFilterAnwenden_Click()
Dim strwhere As String
strwhere = "VERS_KDNR = '" & nz(Me!txtWert,"*" ) & "'"   ' falls VERS_KDNR  vom Datentyp TETX ist
DoCmd.Openreport "rpKundenauswertung",acPreview,,strwhere
End Sub
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 13, 2011, 14:28:33
Oh super, haut hin. Was muss ich noch machen, wenn ich in einem Textfeld im Formular noch einen Monat oder ein Datum eingeben möchte. ;)
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: DF6GL am Dezember 13, 2011, 15:00:34
Hallo,

was jetzt?

eine Monatszahl (und eine unbedingte Jahreszahl dazu) oder ein Datum oder einen Datumsbereich?


Ich würde zwei Textfelder ("txtAnfDatum", "txtEndDatum")  empfehlen, in die jeweils das Anfangsdatum und das Enddatum eingegeben werden:

Dann hieße das etwa so:

strwhere = "VERS_KDNR = '" & nz(Me!txtWert,"*" ) & "'  and [Datumsfeld]  between " & Format (nz(Me!txtAnfDatum,#01/01/1900#), "\#yyyy-mm-dd\#") & " and  " & Format (nz(Me!txtEndDatum,#31/12/2099#), "\#yyyy-mm-dd\#")
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 18, 2011, 08:50:26
Hallo,

also hat super geklappt. Am Anfang hat ich ein paar Probleme. Jetzt läufts aber.
Kann man in diesem Filterformular noch nen Button einfügen, welcher zum Beispiel Preiserhöhung heißt. Dann würde ich in ein txtfeld die Erhöhung (zum Beispiel 30%) eintragen und der Bericht sollte dann den bereits formulierten Umsatz um 30% erhöhen und mir diese Werte anzeigen. Geht soetwas? Wie kann man so etwas im Formular formulieren?
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: Beaker s.a. am Dezember 18, 2011, 15:14:29
Hallo pahiti,

ZitatKann man in diesem Filterformular noch nen Button einfügen, welcher zum Beispiel Preiserhöhung heißt. Dann würde ich in ein txtfeld die Erhöhung (zum Beispiel 30%) eintragen und der Bericht sollte dann den bereits formulierten Umsatz um 30% erhöhen und mir diese Werte anzeigen. Geht soetwas? Wie kann man so etwas im Formular formulieren?

Das geht wohl am besten, wenn Du ein berechnetes Feld in die dem Bericht zu Grunde liegende Abfrage einfügst:
Luftcode, Feldnamen anpassen
UmsatzHoch: [FeldMitUmsatz]*(1+(Nz(Forms!DeinForm!DeinAufschlagfeld,0))

Das Öffnen des Berichts bleibt dann wie gehabt.
hth
gruss ekkehard
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 18, 2011, 16:25:56
Hallo Beaker,

danke für die Info. Was beduetet die Anweiosung DeinForms!??
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: Beaker s.a. am Dezember 18, 2011, 19:19:40
Hallo Pahiti,

Zitatdanke für die Info. Was beduetet die Anweiosung DeinForms!??

Das ist keine Anweisung, sondern der Bezug auf Dein Formular. Ich kann ja nicht wissen, wie Dein Formular heisst.
Mir ist da aber gerade auch noch eine Fehler aufgefallen (obwohl ich glaube, dass Access den selber korrigieren würde):

UmsatzHoch: [FeldMitUmsatz]*(1+(Nz(Formulare!NameDeinesFormulars!DeinAufschlagfeld,0))

Jetzt klarer?

gruss ekkehard
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: DF6GL am Dezember 19, 2011, 10:50:15
Hallo,


das ist eigentlich gar kein Fehler, sondern sogar besser, bzw. richtig, "Forms" anstelle "Formulare" im Abfrageentwurf zu schreiben, auch wenn Access das in Folge rückwärts wieder in der Abfrageentwurfs-Ansicht "eindeutscht".    In dem dahinterliegenden SQL-String MUSS "Forms" stehen, nicht "Formulare" , weil dies der SQL-Interpreter nicht auflösen kann. So "schlau" ist die Übersetzungsfunktionalität von Access auch wieder nicht, dass es ( auf deutsch eingegebenes )  "Formulare" im Hintergrund in "Forms" umwandelt.


Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: pahiti78 am Dezember 19, 2011, 16:19:55
Hallo,

sorry aber ich krieg es nicht gebacken. So sieht jetzt meine Prozedur aus, welche beim Klicken auf den Filterknopf angewandt werden soll. Im Feld txtPreiserhöhung habe ich standardmäßig 100% hinterlegt, so dass ersteinmal der richtige Umsatz gezeigt wird. Dann möchte ich mir diesen durch Klicken erhöhen lassen. Danke schonmal vorab.

Private Sub btnFilterAnwenden_Click()

Dim strwhere As String
strwhere = "vers_wirklich_kdnr = '" & Nz(Me!txtKundennummer, "*") & "'  and [auftrag_datum]  between " & Format(Nz(Me!txtAnfDatum, #1/1/1900#), "\#yyyy-mm-dd\#") & " and  " & Format(Nz(Me!txtEndDatum, #12/31/2099#), "\#yyyy-mm-dd\#") & [Umsatz]*(1+(Nz(Formulare!frm_kundenfilter!txtPreiserhoehung,0))


DoCmd.OpenReport "rp_Sendungsstatistik", acPreview, , strwhere
End Sub
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: database am Dezember 19, 2011, 20:50:18
Hallo,

mal abgesehen davon, dass da eine schließende Klammer am Ende fehlt,

& [Umsatz]*(1+(Nz(Formulare!frm_kundenfilter!txtPreiserhoehung,0)))

hat die Anweisung eigentlich nix in der Where-Klausel zu suchen - sie beirkt nichts, ausser dass die Klausel nicht funktioniert.
Diese Anweisung kannst du bestenfalls in der Abfrage einbauen, die als Datenherkunft für den aufgerufenen Bericht dient (siehe letzte Antwort von Beaker).

und wenn das Feld txtKundennummer leer ist, kann ich mir nicht vorstellen, dass du damit Daten geliefert bekommst
"vers_wirklich_kdnr = '" & Nz(Me!txtKundennummer, "*") & "'

Es sei denn es existiert eine Kundennummer die * lautet
Titel: Re: Bericht soll mit Hilfe eines Formulars gefiltert werden
Beitrag von: Beaker s.a. am Dezember 19, 2011, 21:19:15
Hallo pahiti,

ZitatIm Feld txtPreiserhöhung habe ich standardmäßig 100% hinterlegt, so dass ersteinmal der richtige Umsatz gezeigt wird.

Wenn Du in der Feld für die Preiserhöhung 100% eingibst verdoppelst Du den Preis.

Zitatstrwhere = "vers_wirklich_kdnr = '" & Nz(Me!txtKundennummer, "*") & "'  and [auftrag_datum]  between " & Format(Nz(Me!txtAnfDatum, #1/1/1900#), "\#yyyy-mm-dd\#") & " and  " & Format(Nz(Me!txtEndDatum, #12/31/2099#), "\#yyyy-mm-dd\#") & [Umsatz]*(1+(Nz(Formulare!frm_kundenfilter!txtPreiserhoehung,0))

Hast Du dir den String mal im Direktfenster ausgeben lassen?
Mach das mal, dann wirst Du sehen, dass da ausser der fehlenden Klammer am Ende noch ein paar "," und ")" verschoben sind.
Und, wie Peter schon schrieb, gehört das berechnete Feld nicht in die Filterbedingung für den Bericht, sondern in die Datenherkunft des Berichts (das was dann anschliessend gefiltert wird).

ZitatDann möchte ich mir diesen durch Klicken erhöhen lassen

Soll das jetzt fest gespeichert werden? Ich dachte, dass soll nur im Bericht angezeigt werden, oder im Formular?

gruss ekkehard