Category: Berichtsdesign

Mehrstufige abhängige Auswahl

By , 5. November 2024

Vor einiger Zeit stand ich bei einem Programm für die Vereinsmeisterschaft unseres Schützenvereines vor der Aufgabe, die Ergebnisanzeige endlich korrekt zu realisieren. Man sollte folgendes auswählen können:

  1. die Disziplingruppe, also alle Disziplingruppen, Pistole, Gewehr, Flinte, Armbrust etc.
  2. von der Disziplingruppe abhängend die entsprechende Disziplin, also alle Disziplinen, oder einzelne Disziplinen.
  3. die Altersklasse, also alle Klassen, Schüler, Jugend, Junioren, Herren, Damen oder abhängig von der Disziplin Auflageschießen sollen dann Seniorenklassen angezeigt werden. Das ist eine spzielle Eigenart im Deutschen Schützenbund.

Irgendwie dachte ich da spontan an das Portal unseres Landesverbandes, der in der Ergebnisliste genau diese Auswahlmöglichkeit (neben der Vereins- und Schützenauswahl) abbildet. Von da aus war der Schritt, wie konkret die Ergebnisse dargestellt werden sollen, nicht weit, nämlich genau so wie im Webportal.

Also mittels dem Untersuchungs-Werkzeug des Firefox Webbrowsers die Struktur der Darstellung analysiert, teils kopiert teils ergänzt/abgewandelt. Als Ergebnis stand am Schluss eine Prozedur die per Buttonklick aufgerufen wird, welche im ersten Teil in Abhängigkeit der Auswahlen einen SQL-String aufbaut. Eine kleine Schwierigkeit dabei war es die Auswahlen für „Alle …“ zu realisieren.

Gelöst habe ich dies indem ich einen String (strCase) zusammengesetzt habe jeweils aus 1 oder 0 für jede Auswahlmöglichkeit. Also „111“ für den Fall dass alle 3 Auswahlen auf „Alle“ stehen bzw. „000“ falls keine oder eben die Zwischenschritte. Danach habe ich die möglichen Fälle bestimmt die jeweils eine andere Zusammensetzung des SQL-Strings bedingen würden und in einer Select Case Schleife abgearbeitet. Das Ergebnis ist relativ komplex, aber ich denke zumindest die Systematik dahinter kann man relativ einfach verstehen:
Read more »

Bericht mit Filterkriterien nach PDF

By , 5. März 2014

Bis einschließlich der Version Access 2003 gab es keine eingebaute Funktion um einen Bericht nach PDF zu speichern. Zum Glück für diejenigen, die noch mit Access 2003 oder älter arbeiten, hat Stephen Lebans dafür eine DLL erstellt, mit der ab Access 2000 bis 2003 Berichte nach PDF gespeicherte werden können.
Hier gehts zum Link: http://www.lebans.com/reporttopdf.htm

Unter Access 2007 und neuer gibt es jetzt eine Möglichkeit, direkt einen Bericht nach PDF zu speichern: Docmd.OutputTo… mit dem AusgabeFilter acFormatPDF.
Will man aber dem Bericht Filterkriterien mitgeben, um z.B. nach einem bestimmten Kunden zu filtern, dann muss man schon ein bisschen mehr coden. Ich hab dazu mal ein Beispiel gemacht:

Private Sub ReportToPDF(ByVal cReportName As String, _
                        ByVal cReportFilter As String, _
                        ByVal cPDFName As String, _
                        Optional ByVal cHeadline As String = "Umsatzbericht")
    
    DoCmd.OpenReport cReportName, acPreview, , cReportFilter, acHidden
    Reports(cReportName).Titelzeile.Caption = cHeadline
    DoCmd.OutputTo acOutputReport, cReportName, acFormatPDF, cPDFName, False
    DoCmd.Close acReport, cReportName, acSaveNo
End Sub

Zuerst wird der Bericht in der Entwurfsansicht unsichtbar geöffnet, mit den gewünschten Filterkriterien. Dann kann man Änderungen am Bericht vornehmen, z.B. das Überschriftsfeld „Titelzeile“ entsprechend dem Filterausdruck anpassen. Oder wenn man nach einer Kundennummer filtern würde, könnte man jetzt die Adresse des Kunden eintragen etc.
Dann wird das eigentlich PDF erstellt, mit dem Befehl „DoCmd.OutputTo“. Die relevanten Parameter sind ObjektTyp, ObjektName (Berichtsname), OutputFormat, OutputName, AutoStart.
Danach wird die Entwurfsansicht des Berichtes ohne zu speichern wieder geschlossen.

Die Parameter sind eigentlich selbsterklärend, wir wählen als ObjektTyp den Bericht, also acOutputReport, als ObjektName den Berichtsname, als OutputFormat acFormatPDF etc.
Wer sich die Methode OutputTo genauer ansehen möchte kann das hier:
http://msdn.microsoft.com/en-us/library/office/ff192065.aspx

Fehlt nur noch die aufrufende Funktion, die könnte z.B. wie folgt aussehen:

Sub ReportToPDF_Test()
    Dim ZielPfad As String
    ZielPfad = CurrentProject.Path & "\PDFAusgabe\Umsaetze.pdf"
    ReportToPDF "Umsaetze", "Monat='Januar'", ZielPfad, "Umsätze im Januar"
    If Dir(ZielPfad) <> "" Then
        MsgBox "Bericht wurde als PDF gespeichert"
    End If
End Sub

Auch hier sollte alles verständlich sein: Aufruf der Prozedur mit den entsprechenden Parametern, anschließendes Überprüfen ob PDF-Datei erstellt wurde. Zu Beachten ist, dass wenn man PDF-Dateien mit einem vorhandenen Namen speichert, wird die alte Datei ohne Nachfrage überschrieben. Deshalb sollte man in der Prozedur ReportToPDF vor dem Speichern mittels Dir() prüfen ob die Datei bereits vorhanden ist. Aber das, wie auch die Fehlerbehandlung, überlasse ich euch. Achtet beim Filter noch darauf, dass Textfelder in einfachen Hochkommatas zu stehen haben, wie oben im Code dargestellt.

Bis dahin
© 2014 Andreas Vogt

OfficeFolders theme by Themocracy