PDA

Vollständige Version anzeigen : Auswahlformular für Berichte


BedOfIce
01.05.2011, 15:31
Hey Leute,

wie kann ich ein Auswahlformular erstellen, welches mir die Jahre für einen Bericht sortiert. Es geht um einen Abrechnungsbericht, der anzeigt, wieviel Geld die Patienten eingebracht haben. Im Screenshot sieht man wie alle Patienten aufgelistet werden, die in der Klinik sind mit ihrer jeweiligen Krankenkasse usw. Ich möchte aber, dass der Benutzer, wenn er diesen Bericht aufmacht, ein Formular erscheint, wo er ein Jahr eingeben kann und der Bericht wirft mir dann alle Patienten für dieses Jahr aus. Das "Datum" im Screenshot ist das Abrechnungsdatum, sodass nach diesem selektiert werden müsste.

Wie kann ich so etwas realisieren? Ich würde es umständlich finden, für jedes Jahr eine Abfrage zu erstellen 2010, 2011, 2012 usw. Oder geht es nur auf diesem Weg?

Vielen Dank im Voraus

Edgar Basler
01.05.2011, 17:05
Wenn es wirklich nur um die Eingabe eines Jahres geht, würde ich dies direkt in der zugehörigen Abfrage als Parameterabfrage erledigen, in dem Sie eine extra Feld erstellen Zeitraumjahr: jahr[datum]. Entweder nur für das Jahr

wie [Geben Sie das Jahr ein]

oder etwas eleganter, daß man zu einem späteren Zeitpunkt auch einen Zeitbereich eingeben kann:

zwischen [Beginn der Auswertung] und [Ende der Auswertung]

Maxel
01.05.2011, 17:42
Hallo,

hier (http://www.ms-office-forum.net/forum/showthread.php?t=102899#uploads) steht, wie in diesem Forum mit Grafiken als Anhang verfahren werden soll.

Die Option, die Grafik in ein Word-Dokument zu verfrachten, ist dort nicht genannt, wohl weil das absurd ist. Darüber hinaus bergen ungezipte Office-Dokumente evtl. auch Schadenspotential.


Wer sich nun wundert: ich habe den Screenshot aus der Doc-Datei in PNG umgewandelt (s. Beitrag #1)

Toast78
02.05.2011, 07:24
Ich hoffe, das sind keine echten Daten, die da im Screenshot zu sehen sind. :rolleyes:

BedOfIce
03.05.2011, 18:24
Jap, die Daten sind frei erfunden

BedOfIce
03.05.2011, 18:26
@edgar

es geht nicht nur um ein Jahr, sondern um mehere Jahre die selektiert werden müssen. Mein Bericht ist auch mit einem Unterbericht verknüpft, wo ich mich im Moment ziemlich schwer tue....Gibt es denn kein Befehl für VBA?

Scorefun
03.05.2011, 19:00
was heißt mehrere?

1- von 2009 bis 2011 ?
2- 2007 oder 2010 oder 2011?

Zu 1 : Du kannst Dir ein Formular mit zwei Textfeldern bauen
(txtVon und txtBis) und bei der zugrundeliegenden Abfrage des Berichtes auf diese Felder verweisen...
(gehe mal davon aus, Du weißt wie das geht...)

zu 2 : Da könnte man sich ein Listenfeld bauen, in dem die verfügbaren Jahre stehen, die man mittels Mehrfachauswahl selektieren kann.

In der zugrundeliegenden Abfrage kann man sich per Code dann auch
auf die selektierten Einträge beziehen...

BedOfIce
03.05.2011, 21:53
Hey Ralf alias Scorefun,

leider weiss ich das nicht, wie das gehen soll, bin relativ unerfahren was die Programmierung von Datenbanken angeht. Es wäre toll, wenn du es ein bisschen näher erläutern würdest?!

Mehrere bedeutet, dass man halt immer ein Jahr selektieren kann. 2009, 2010 usw. also nicht bloss 2009. Jedes Quartal muss eine Abrechnung gemacht werden, sodass nur für dieses eine Rechnung erstellt wird.

Die Statistik wird allerdings jahresweise abgefragt. Und das versuche ich irgendwie gerade zu vereinen, ohne Erfolg. In meinem bisherigen Bericht werden alle Patienten aufgelistet, egal welches Jahr oder welches Quartal, was ziemlich unübersichtlich ist.

Scorefun
03.05.2011, 22:22
Habe Dir mal ein ganz simples Beispiel gebastelt.
Öffne das Formular frmAuswahl, dort kannst Du ein Jahr auswählen und der
Bericht zeigt nur die Daten des gewählten Jahres gruppiert nach Quartal

BedOfIce
06.05.2011, 17:18
Vielen lieben Dank. Wie kann ich das jetzt über die Quartale schalten? kann ich noch ein zweites Fenster in das Formular basteln, welches Quartal heisst? z.b. kann der user dann für jedes Jahr, auch das Quartal auswählen.

Scorefun
06.05.2011, 17:35
Wenn Du mein Beispiel verstanden hast, solltest Du das umbauen können
(ohne zweites Auswahlfeld) ;)

BedOfIce
08.05.2011, 13:01
Leider funktioniert dein Beispiel nicht auf meiner Datenbank, habe das mal alles so nachkonstruiert, natürlich mit meinen Berichten und Formularnamen. Dadurch, dass die Abrechnung bei mir ein Unterbericht ist, eingebettet in einem Hauptbericht, funzt das nicht und ich weiss nicht warum? Wenn ich natürlich nur den Unterbericht nehme, funzt das Beispiel, auch bei meiner Datenbak einwandfrei. Dennoch sind in meinem Hauptbericht die ganzen Patientendaten enthalten wie Name, Vorname usw.

Und zu der anderen Fragestellung. Du hast ja die Spalte "Quartal" in der Abfrage "qBericht", wenn ich diese in der Abfrage "qAuswahlJahr" selektiere anstatt das "Buchungsjahr", zeigt er mir ja alle Quartale mit den jeweiligen Jahren in dem Formular "frmAuswahl" in der Spalte "Wählen Sie ein Jahr aus" an. War das so von dir gemeint? So erspart man sich ja ein zweites Auswahlfeld.

Lanz Rudolf
08.05.2011, 15:27
Hallo
ich habe da eine MDB die geht ein etwas anderen weg
lade die hier Hoch

öffne die MDB
dann bekommst Du einen Auswahl-Formular da solltest Du
"Öffnnen mit Drucker für Vorlagen" wählen
•jetzt öffnet sich ein Kalender
da wählst Du Dein Wunsch Datum z.B. dein Gebursdatum ;)
•jetzt Klicke auf den Drucker oben Rechts im Kalender
•jetzt öffnet sich das Formular "kalender auswahl" (FrmKalenderAuswahl)

•wähle eine Liste(Bericht) aus den aufgeführten

falls Du den snapshot Viewer istaliert Dast Kanst Du anstelle der normalen Berichtsvor schau den Snapshotviewer anhäkeln ;)
und schon öffnet er sich :)

@Ralf
Du hatest ja vor 3 Wochen Dein 10 Jähriges Jubiläum hier im Forum, Gratuliere ;)

Scorefun
08.05.2011, 16:15
@Ralf
Du hatest ja vor 3 Wochen Dein 10 Jähriges Jubiläum hier im Forum, Gratuliere ;)

Lol - gar nicht drauf geachtet; danke
Die Zeit vergeht...

Dauert bei Dir ja auch nicht mehr lange ;)

BedOfIce
11.05.2011, 17:01
hey lanz rudolf,

das ist eine schöne Idee mit deinem Kalender, doch für meine Anwendung unbrauchbar oder ich steig nicht dahinter, wie ich dort ein Quartal eingeben kann für das jeweilige Jahr und er mir dann alles so anzeigt wie in meinem Screenshot. Ist dein Beispiel nicht eher ein Terminplaner?

@scorefun

ich hab versucht dein Beispiel weiter umzusetzen, aber das mit den Quartalen bekomme ich einfach nicht hin. Die DB kann mir zwar alles richtig in Jahren ausgeben, geht es aber um Quartale, spuckt er keine Werte aus in meinem Bericht. Kannst du mir bitte dafür ein Lösungsvorschlag geben?

Scorefun
11.05.2011, 18:32
Wofür brauchst Du einen Unterbericht?
Du solltest Deine Abfrage so gestalten, daß alle Daten in einem Hauptbericht stehen...Die Gestaltung kannst Du dann trotzdem mit Sortierung/Gruppierung vornehmen.

Um einen Bericht sinnvoll zu filtern, sollte zumindestens das Filterkriterium im Hauptbericht vorhanden sein, sonst macht das meiner Meinung nach keinen Sinn...

BedOfIce
11.05.2011, 19:21
Ich habe die Tabelle Patienten, in der alle persönlichen Daten enthalten sind. Die Tabelle Abrechnung ist mit Patienten verknüpft. In dieser stehen die Werte wie Gesamtkosten, Quartal, Jahr usw. Um die beiden Tabellen zu verknüpfen, muss ja dann ein Unterbericht her, dass sagte mir hier jemand aus dem Forum. Da die ganzen Formulare und Statistiken größtenteils fertig sind, wäre es enorm, alles wegen einer Tabelle nochmal umzuändern, um einen Bericht zu erstellen. Es gibt bestimmt ne einfache Lösung, aber ich komme nicht drauf.

Der Screenshot verdeutlicht vielleicht meine Fragen....

Scorefun
11.05.2011, 19:28
Was spricht dagegen, eine Afrage zu stricken mit den Tabellen Patienten, Krankenkasse und Abrechnung, die dann als Grundlage des Berichtes dient?
Deswegen musst Du nix umbauen...;)

sinngemäß siehe Anlage

BedOfIce
12.05.2011, 16:27
Danke schön :), weiss auch nicht warum ich das nicht von selbst drauf gekommen bin, funzt alles prima. Wie kann man eigentlich mehrere Auswahlfelder machen, das der Benutzer nach allem frei selektieren kann, wie er gern möchte?

Thomas Möller
12.05.2011, 16:34
Hallo!

Wie kann man eigentlich mehrere Auswahlfelder machen, das der Benutzer nach allem frei selektieren kann, wie er gern möchte?

Das entscheidende dabei ist doch, wie Du den SQL-String gestalten musst, damit man zwar in jedem der Kombinationsfelder etwas auswählen kann und gleichzeitig auch die Auswahl aller DS möglich bleibt.

Das Prinzip für ein Feld wird hier erläutert:
http://www.donkarl.com?FAQ3.14

CU

BedOfIce
12.05.2011, 16:43
Also habe gerade wieder gesehen, das etwas nicht funzt, sobald ich das Quartal ausgewählt habe im Formular und auf den Button drücke, seit er mir keine Werte im Bericht mehr an?????? Wenn ich allerdings über das Jahr selektiere funktioniert es, wie kann das sein? Habe alles genauso gemacht wie in deiner Beispieldatenbank.

Ich hab ein Teil von meiner DB hochgeladen...

Scorefun
13.05.2011, 08:00
Du hast die Hochkommas vergessen..


DoCmd.OpenReport "Special_Bericht_Forum", acViewPreview, , " = '" & Me.comQuartal[B] & "'"

Das Jahr alleine würde ohne Hochkommas auskommen, da eine Zahl,
aber das Quartal mit Jahr wird als text übergeben

Lanz Rudolf
13.05.2011, 09:20
Hallo
habe auch noch zwei sachen
1.
evtl. soltest Du anstelle von Me.comQuartal
besser Me!comQuartal verwenden

! anstelle von Punkt .

dazu Lies in Meiner Doc ab seite 26 - Spez Seite 27(3.6 Punkt oder Ausrufezeichen)

2.
ich verwende in solchen Fällen gerne Buildcriteria das könnte dann etwa so aussehen:


Dim StrCrit As String
StrCrit = BuildCriteria("[BuchungsQuartal]", dbText, "=" & Me!comQuartal)
DoCmd.OpenReport "Special_Bericht_Forum", acViewPreview, , StrCrit

StrCrit gibt wenn Me!comQuartal 11/73 enthält : [BuchungsQuartal]="11/73"
Du siehst er setzt die Hochkommas fü Textfelder (abhänig von dbText) :)

Du kannst auch in meiner Fusszeile auf den Link hinter Meine Doc
Klicken
und die PDF-datei öffnen
Lese da auf Seite 73/74 und 277/278

Überigens jeder der interesse hat, kann diese DOC Lesen und runterladen :)

Scorefun
13.05.2011, 10:05
1.
evtl. soltest Du anstelle von Me.comQuartal
besser Me!comQuartal verwenden

! anstelle von Punkt .


Dabei erwische ich mich auch immer wieder, weil das so schön mit der IntelliSense ist. Nach Me! muss man erst Strg-Leertaste drücken, bevor die Vorschlagswerte kommen ;)

Lanz Rudolf
13.05.2011, 11:01
Hallo
@Ralf

auf seit 27 kann man auch das Lese:
Hilfe zur eingabe:
1. Den Punkt verwenden, damit die Auflistung aufklappt und
anschliessend sofort in Ausrufezeichen ändern !
2. falls jemand gleich das Ausrufezeichen verwenden will:
eingabe von me! gefolgt von (Strg / Ctrl) + Leertaste öffnet auch eine Auswahl.
da werden sämtliche Methoden und Eigenschaften des gesamten Projektes angeboten!
Me.Steuerelement

WAS sagst Du BildCriteria oder sogar ATBuildCriteria auf Seite 74 ?

Scorefun
13.05.2011, 13:42
um ehrlich zu sein: Mit BuildCriteria habe ich mich noch nie beschäftigt.

Sollte ich wohl mal tun ;)

Lanz Rudolf
13.05.2011, 15:29
Hallo
lies in Meiner Doc (wie oben angegeben 73 /277)
für Datum finde ich das sehr gut :)
formatiert alles richtig TDatum=#1/30/2010 6:0:0#
aber auch bei Text(string) da muss man sich nicht mehr um "'" ''' kümmern
und mit meinem ATBuildCriteria
geht er selder schauen was für einen Datentyp das Feld in der Tabelle hat !

BedOfIce
13.05.2011, 16:44
Danke, dass es an solchen kleinen Dingen manchmal hapert.....aber wie geht das mit meheren Auswahlfeldern genauso und dann zeigt er mir auch alles an, selbst wenn ich in drei auswahlfelder etwas ausgewählt habe? oder muss ich da vieles beachten?

Lanz Rudolf
13.05.2011, 18:37
Hallo
im Prinzip geht es auch so doch zeige uns wie Du Deine bedingung für die drei Felder erstellt hast.
möglich das jeman hir im Forum den Fehler gleich sehen kann :)

Thomas Möller
14.05.2011, 09:00
Hallo!

.....aber wie geht das mit meheren Auswahlfeldern genauso und dann zeigt er mir auch alles an, selbst wenn ich in drei auswahlfelder etwas ausgewählt habe? oder muss ich da vieles beachten?

zeig uns doch mal bitte Deinen SQL-String. Dann lässt sich sicher konkreter auf Dein Problem eingehen.

CU

BedOfIce
19.05.2011, 16:57
Hey,

also ich glaub genauso kann ich das nicht machen, kommt mir auch ziemlich merkwürdig vor, wenn ich denselben Quelltext für eine andere Variabel nehme. Bei mir hat es nicht funktioniert. Ich kann mir auch vorstellen, dass wenn ich den Quelltext einfach nur kopiere und die Variablen ändere, müsste der Benutzer doch beide Auswahlfelder auswählen müssen um etwass angezeigt zu bekommen? Es wäre schön, wenn er beides kann, d.h. er kann einzelne Felder auswählen und auswerten lassen, aber Mehrfachselektion der Felder sind auch möglich.

Private Sub ButtonQuartal_Click()
If IsNull(Me!comQuartal) Then
MsgBox "Bitte ein Quartal mit Jahr auswählen"
Me.comQuartal.SetFocus
Me.comQuartal.Dropdown
Else

DoCmd.OpenReport "Hauptbericht Abrechnung", acViewPreview, , "[Quartal] = '" & Me.comQuartal & "'"

End If

End Sub

Private Sub ButtonQuartal_Click()
If IsNull(Me!comVerordnung_beendet) Then
MsgBox "Bitte Ja oder Nein auswählen"
Me.comVerordnung_beendet.SetFocus
Me.comVerordnung_beendet.Dropdown
Else

DoCmd.OpenReport "Hauptbericht Abrechnung", acViewPreview, , "[Verordnung beendet] = " & Me.comQuartal

End If

End Sub
Private Sub Form_Open(Cancel As Integer)

Me.OrderByOn = True

Da bekomme ich die Fehlermeldung: Mehrdeutiger Name ButtonQuartal_Click, d.h. ich müsste für jedes weitere Auswahlfeld einen zusätzlichen Button erstellen? Deswegen denke ich, dass der Code anders geschrieben werden muss, da ich mich aber mit Vba überhaupt nicht auskenne, wird das schwierig werden....

Thomas Möller
19.05.2011, 17:16
Hallo!

Es wäre schön, wenn er beides kann, d.h. er kann einzelne Felder auswählen und auswerten lassen, aber Mehrfachselektion der Felder sind auch möglich.

dann musst Du Dein Vorgehen anpassen.

Du sorgst als erstes dafür, dass in den Kombinationsfeldern zusätzlich noch ein Eintrag "Alle" an erster Stelle eingefügt wird. Dazu verwendest Du für die Kombinationsfelder jeweils eine Union-Abfrage als Datenquelle.

Als zweites erstellst Du eine Abfrage, die Du als Datenquelle für den Bericht verwendest. In dieser Abfrage sorgst Du dafür, dass entweder der ausgewählte Wert oder eben alle Datensätze angezeigt werden. Wie man das macht kannst Du hier nachlesen:
http://www.donkarl.com?FAQ3.14

Im dritten Schritt gehst Du dann den VBA-Code an. Dort prüfst Du, ob in allen Kombinationsfeldern eine Auswahl getroffen wurde. Anschließend öffnest Du den Bericht ohne weitere Kriterien als Übergabeparameter.

Vergiss meinen Vorschlag. Maikes Weg ist deutlich einfacher.

HTH

maikek
19.05.2011, 17:23
Moin,
das Ereignis tritt bei Klick auf den Button ein und Button hast du nur einen - reicht also einmal der Code völlig aus. Prinzip:

Private Sub ButtonQuartal_Click()
Dim Krit as String 'Variable für Kriterium zum Öffnen

If not IsNull(Me!comQuartal) Then Krit = Krit & " AND Quartal = '" & Me!comQuartal & "'"
If not IsNull(Me!comVerordnung_beendet) Then Krit = Krit & " AND [Verordnung beendet] = " & Me!comVerordnung_beendet

If len(Krit) > 5 then
Krit = mid(Krit,6) 'erstes überflüssiges AND abschneiden
Else
Krit = ""
End if

DoCmd.OpenReport "Hauptbericht Abrechnung", acViewPreview, , Krit
End Sub
maike

BedOfIce
21.05.2011, 16:51
Danke an euch alle, es hat mir sehr geholfen. Nur noch ein Letztes, bei Verordnung_beendet erhalte ich Werte zur Auswahl von 0 und -1. Das Feld kommt aus einer Tabelle und ist ein Ja/Nein Objekt, was muss in Vba eingeben werden, damit JA und Nein erscheint?

maikek
21.05.2011, 20:56
Hi,
ich nehme für so etwas gern die Switch-Funktion. Kannst du entweder in einer Abfrage für ein neues Feld, als Steuerelementinhalt oder beim Formatieren des Bereichs einsetzen:
Switch(Verordnung_beendet = true, "Ja", Verordnung_beendet = false, "Nein")
maike

BedOfIce
22.05.2011, 13:36
Da verstehe ich nur Bahnhof. Es ist ja bereits in einer Tabelle mit Ja und Nein festgelegt und auch die Hauptabfrage zeigt mir das ja so an, warum also klapp es nicht im Formular für die Auswahl?

maikek
22.05.2011, 13:58
Ja/Nein bzw. true/false wird von Access als -1 und 0 gespeichert. Der Rest ist reine Darstellung/Formatierung, vermutlich hast du in der Tabelle eine solche Formatierung in Ja/Nein für das Feld hinterlegt. Warum diese nicht überall hin mit durchgereicht wird, kann ich dir auch nicht sagen.
maike

BedOfIce
24.05.2011, 17:59
Hey Maike,

also wenn ich dich richtig verstanden habe, muss ich in meinem Kombinationsfeld im Formular unter dem Menüpunkt "Steuerelementinhalt" deinen Code eingeben und dann wandelt er das um? Ich hab es so versucht, aber die 0 und -1 bleibt bestehen.:confused:

maikek
24.05.2011, 21:14
Hi, nein, da hab ich dich und du mich falsch verstanden ;) . Ich dachte, es ginge um die Anzeige in (ungebundenen) Textfeldern eines Berichts.
Wenn du die Auswahl im Kombifeld entsprechend einstellen willst, musst du direkt in der Abfrage ein neues Feld erzeugen:
NameNeuesFeld: Switch([Verordnung_beendet] = true; "Ja"; [Verordnung_beendet] = false; "Nein")

Als Datenherkunft für dein Kombi nimmst du dann beide Felder, Verordnung_beendet als erste, das neue Feld als zweite Spalte.

Du könntest allerdings auch einfach eine Checkbox nehmen statt eines Kombifeldes, angehakt ist ja, nicht angehakt ist nein oder eine Optionsgruppe.
maike

BedOfIce
25.05.2011, 17:33
Ich hab es jetzt zwar in der Abfrage umwandeln können und er zeigt mir auch schön brav ja und nein an im Formular, aber jetzt kann ich den Bericht nicht mehr öffen. Es kommt immer wieder Parameterwert eingeben, wenn ich auch den Button gehe...

maikek
25.05.2011, 19:41
Nach einem Parameter fragt Access, wenn z.B. ein Feld nicht gefunden wird. Da du nicht verrrätst, welcher Parameter fehlt, kann ich nur vermuten: Entweder das alte Feld [Verordnung beendet] ist nicht mehr oder das neue Feld WieImmerEsHeisst ist noch nicht in den Kriterien und/oder der Datenherkunft des Berichts vorhanden.
maike

BedOfIce
25.05.2011, 20:01
Hab ich mir auch gedacht, das Feld ist im Bericht vorhanden, und im Code hab ich den Namen auf das neue Feld geändert. Konnte keinen Fehler finden. Das neue Feld heisst "Verordnung_beendet_umgewandelt" und so sieht der Code dazu aus:

Private Sub ButtonQuartal_Click()
Dim Krit As String 'Variable für Kriterium zum Öffnen

If Not IsNull(Me!comQuartal) Then Krit = Krit & " AND Quartal = '" & Me!comQuartal & "'"
If Not IsNull(Me!comVerordnung_beendet) Then Krit = Krit & " AND Verordnung_beendet_umgewandelt = " & Me!comVerordnung_beendet

If Len(Krit) > 5 Then
Krit = Mid(Krit, 6) 'erstes überflüssiges AND abschneiden
Else
Krit = ""
End If

DoCmd.OpenReport "Hauptbericht Abrechnung", acViewPreview, , Krit

End Sub

wenn ich dann auf debuggen gehe, zeigt er mir die letzte Zeile als falsch an:

DoCmd.OpenReport "Hauptbericht Abrechnung", acViewPreview, , Krit

maikek
25.05.2011, 20:13
Aha. Du hast jetzt statt -1 und 0 "Ja" und "Nein" als Kriterium, d.h. statt Zahl jetzt Text. Text muss in Hochkommata gesetzt werden, das Beispiel gilt, wenn in der ersten Spalte des Kombis der Text enthalten ist:
& " AND Verordnung_beendet_umgewandelt = '" & Me!comVerordnung_beendet & "'"
Das wäre die eine Variante.
Ich würde es aber bei den Zahlen belassen. Nimm ruhig als erste Spalte das alte Feld, im Kriterium und im Bericht ebenfalls. Kannst du ja überall auf unsichtbar stellen bzw. auf Spaltenbreite 0cm.
Mit Zahlen kann das Programm besser umgehen, macht sich zwar erst ab einer gewissen Anzahl Datensätze bemerkbar, aber kann auch hier nicht schaden.
maike

BedOfIce
25.05.2011, 20:22
Danke schön :), funzt, hatte zwar dran gedacht gehabt, die Hochkommas zu setzen, aber da es keine Zahl ist, dachte ich, kann der Fehler da nicht liegen.