Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: tismo am Juli 19, 2017, 18:32:30

Titel: Bericht als pdf exportieren
Beitrag von: tismo am Juli 19, 2017, 18:32:30
Hallo,

ich versuche einen Bericht aus einem Formular heraus in ein pdf zu exportieren. Dazu versuche ich es mit folgendem Code:

DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, "C:\Bemopro\Dokumente\" & Me.KurzzeichenSterbefall & "\Datenblatt-Trauerfeier.pdf"

Das pdf soll in C:\Bemopro\Dokumente\(kurzzeichen) erstellt werden
Mit dem o.g. Code werden allerdings alle  vorhandenen Datensätze in ein pdf konvertiert und nicht nur ein bestimmter Datensatz.

Wie muss der Code aussehen, damit ich einen Bericht aus dem geöffneten Datensatz in ein pdf konvertieren kann. Beim Ausdruck über ein Makro habe ich folgende Bedingung ein gefügt: [Rechnungsnummer]=[Formulare]![RegisterDaten]![Rechnungsnummer]
Titel: Re: Bericht als pdf exportieren
Beitrag von: el_gomero am Juli 19, 2017, 21:16:04
Hallo tismo,

ist einer der Klassiker - Lösung in der faq  http://www.donkarl.com?FAQ5.9
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 19, 2017, 22:21:42
danke für die Antwort.

aber da war ich auch schon
ich bekomme trotzdem nicht das gewünschte Ergebnis.
Ich habe den Code wie folgt erweitert:

DoCmd.OutputTo acOutputReport, "Organisation Beerdigung - Trauerfeier", , , "Rechnungsnummer =" & Me!Rechnungsnummer ', acFormatPDF, "C:\Bemopro\Dokumente\Datenblatt-Trauerfeier.pdf"

Fehler:

Sie haben für eines der Argumente einen Ausdruck eingegeben, der nicht den für das Argument erforderlichen Datentyp hat.

Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 19, 2017, 23:00:09
Hallo,
OutputTo kennt keine Where Klausel 5.9 greift daher hier nicht.
Du musst die Abfrage die dem Bericht zu Grunde liegt entsprechend filtern, sodass nur ein Datensatz (der gewünschte) enthalten ist.
Titel: Re: Bericht als pdf exportieren
Beitrag von: el_gomero am Juli 20, 2017, 08:51:26
Moin zusammen,

aus der faq 5.9

Zitat
Verwende als Datensatzherkunft des Berichtes eine Abfrage und schreibe dort bei den Kriterien eines passenden, eindeutigen Feldes einen Bezug auf dein Formular. z.B.
Forms!MeinFormular!Id

also passt die Lösung schon ;)
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 20, 2017, 13:02:52
Hallo,
@Jürgen,
sorry, Du hast recht, ich habe das vor dem oder überlesen.  :)
Titel: Re: Bericht als pdf exportieren
Beitrag von: el_gomero am Juli 20, 2017, 13:24:27
@ Tismo

Zitat
Sie haben für eines der Argumente einen Ausdruck eingegeben, der nicht den für das Argument erforderlichen Datentyp hat.

richtig müsste es heissen:

Sie haben für mehrere der Argumente ...

Dein Befehl mal lesbarer:

DoCmd.OutputTo acOutputReport,
"Organisation Beerdigung - Trauerfeier",
,
,
"Rechnungsnummer =" & Me!Rechnungsnummer ',
acFormatPDF,
"C:\Bemopro\Dokumente\Datenblatt-Trauerfeier.pdf"


Syntax für diesen Befehl (wird zB nach Eingabe des ersten Komma in der IDE angezeigt):

DoCmd.OutputTo acOutputReport,
OjbejktName,
Outputformat ,
Outputfile ,
Autostart,
Templatefile,
Encoding,
OutputQuality


Bevor du aber diese Stelle angehst, solltest du dafür sorgen, dass nur der beabsichtige Datensatz im Bericht enthalten ist. Wie das geht steht wie angegeben in der faq.
Titel: Re: Bericht als pdf exportieren
Beitrag von: PhilS am Juli 20, 2017, 19:10:28
Zitat von: MzKlMu am Juli 19, 2017, 23:00:09OutputTo kennt keine Where Klausel 5.9 greift daher hier nicht.
Du musst die Abfrage die dem Bericht zu Grunde liegt entsprechend filtern, sodass nur ein Datensatz (der gewünschte) enthalten ist.
Das funktioniert, es gibt jedoch noch eine andere, aus meiner Sicht einfachere, Variante.

Den Bericht versteckt mit WhereCondition öffnen, PDF erstellen, Bericht schließen. Wenn der Bericht bereits geöffnet ist, dann wird er so wie er ist, als PDF exportiert.

Hier in Code:
DoCmd.OpenReport "derReportName",acViewPreview,,"XYZ = 1234",acHidden
DoCmd.OutputTo acOutputReport,"derReportName",acFormatPDF
Docmd.Close acReport,"derReportName"


Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 07:57:22
Danke für die Hilfe, :)
klappt einwandfrei!  :) :) :)

Eine Frage habe ich dann doch noch. ???
Der Bericht wird nun als pdf auf dem Computer auf Laufwerk D:\ gespeichert

DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, "D:\Users\User\Documents\Bemopro\" & SterbefallName & ", " & Me.SterbefallVorname & " - Datenblatt-Trauerfeier.pdf"

Da die Anwendung auf mehreren Computer und Laptops läuft ist der Speicherpfad auch jedesmal anders. Wie sieht der Code aus, wenn der Speicherpfad von einem Textfeld aus dem Formular Systemdaten stammt? Somit kann ich im Formular einstellen wo das pdf gespeichert werden soll.
Titel: Re: Bericht als pdf exportieren
Beitrag von: DF6GL am Juli 25, 2017, 09:01:26
Hallo,

ich würde das anders lösen:


a) Eine "ParameterTabelle", in der solche "kundenspezifischen" Daten eingetragen sind (Customizing)

b) ein Unterverzeichnis ("PDF") unter dem Frontend-Datei-Verzeichnis anlegen.  Dadurch kann mit
Currentproject.Path & "\PDF\" & Me.SterbefallVorname & "_Datenblatt-Trauerfeier.pdf"
die PDF-Datei gespeichert werden.




btw:  auch in Dateinamen möglichst auf Leerzeichen verzichten.
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 10:28:53
Hallo Franz,

funktioniert dies auch, wenn der pdf-Pfad nicht der Pfad ist, in dem access läuft?
Bsp.
Access läuft auf c:bemopro
pdf Speicherung Computer 1 in D:\Users\User\Documents\Bemopro\
pdf Speicherung Laptop 2 in C:User\Documents\Bemopro\

Deshalb dachte ich, es wäre für den Anwender einfacher, wenn er im Formular Systemsteuerung im Textfeld "pdf-Pfad" den Speicherpfad für den aktuellen Computer/Laptop eingibt.
Titel: Re: Bericht als pdf exportieren
Beitrag von: el_gomero am Juli 25, 2017, 10:35:41
Hallo,

Zitat

funktioniert dies auch, wenn der pdf-Pfad nicht der Pfad ist, in dem access läuft?

Welche Kräfte halten dich davon ab es zu probieren? Falls es nicht klappt kannst du das Resultat (Fehlermeldung, Verhalten) hier posten.
Titel: Re: Bericht als pdf exportieren
Beitrag von: DF6GL am Juli 25, 2017, 12:26:53
Hallo,


und Du willst den Usern tatsächlich zumuten, den Speicherort jedes Mal neu einzutippen ??

3. Möglichkeit:

Wenn es sich um ein System-Verzeichnis handelt, könnte der Pfad auch mit einer Umgebungsvariablen zusammengebaut werden:


Dim strDatei As String
strDatei = Environ(Userprofile) & "\Documents\" & Me.SterbefallVorname & "_Datenblatt-Trauerfeier.pdf"

Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 14:49:49
Hallo Franz,

ich sehe das Problem darin, dass die Anwendung regelmäßig erneuert wird. Wenn ich also einen festen Pfad eingebe, ist dieser Pfad auf jedem Computer / Laptop gleich. Da dies technisch nicht möglich ist, sind auf einigen Computer die Pfade anders. Um nicht auf jedem Computer nach jedem Update den Pfad im Code "von Hand" einstellen zu müssen, dachte ich mit, ich stelle einmal in dem Formular (Systemdatei) in dem Textfeld (pdf-Pfad) den jewiligen Pfad ein und anschließend wir automatisch der richtige Pfad ausgelesen und das pdf in diesem Pfad erstellt. Leider kann ich mit

ZitatDim strDatei As String
strDatei = Environ(Userprofile)

nichts anfangen.  :-[
Wo steht der Hinweis auf das Formular und das Textfeld?

Danke für die bisherige Hilfe.
Titel: Re: Bericht als pdf exportieren
Beitrag von: Lachtaube am Juli 25, 2017, 15:15:13
Ich würde Franzens Vorschlag aus #9 in Betracht ziehen. Dann wäre nur beim ersten Start des Frontends ein Erstellen des Verzeichnisses notwendig.Private Sub DeinPdfProzedere()
   Const ReportName As String = "Organisation Beerdigung-Trauerfeier"
   
   Dim Path As String
   
   
   Path = CurrentProject.Path & "\Pdf"
   If Not DirExists(Path) Then MkDir Path
   
   '...
   DoCmd.OutputTo acOutputReport, ReportName, acFormatPDF, _
         Pfad & "\" & SterbefallName & ", " & Me.SterbefallVorname & " - Datenblatt-Trauerfeier.pdf"
   '...
End Sub
und in einem allgemeinen VBA-Modul kannst Du die Funktion zur Prüfung, ob ein Verzeichnis existiert unterbringen.
Public Function DirExists(Path As String) As Boolean
   
   On Error Resume Next
   
   DirExists = CBool(GetAttr(Path) And vbDirectory)
   
   On Error GoTo 0
   
End Function
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 25, 2017, 15:21:45
Hallo,
wenn das eine Mehrbenutzerumgebung ist, so muss doch jeder User sein eigenes Frontend haben. Und dort kann man (der User) den Pfad doch fest eintragen. Zu seiner Hilfe könnte man noch den Dateiauswahldialog anbieten, damit sich der User seinen Pfad aussuchen kann.
Und auch gleich in einer Tabelle speichern. Diese Tabelle dann im Frontend.

Titel: Re: Bericht als pdf exportieren
Beitrag von: el_gomero am Juli 25, 2017, 16:21:15
Hallo,

bei der von Franz vorgeschlagegen Methode werden die Umgebungsvariablen des Benutzers ausgelesen und davon ausgehend ein weiterer vorgegebener Pfad berücksichtigt. Wenn dem Benutzer der Speicherort frei definierbar möglich sein soll, muss eine individuelle Speicherung erfolgen. Diese würde ich aber im Backend vornehmen, sonst müsste bei jeder Änderung am Frontend diese Tabelle vor Tausch aktualisiert werden.
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 16:29:24
Hallo Klaus!

du hast das glaube ich richtig verstanden. Jeder User (Computer) hat eine eigenes Frontend. In diesem Fall in Form eines Formulares Systemsteuerung (basierend auf der Tabelle 'tblSystemsteuerung'). Ich arbeite mit MS Access 2010 weil hiermit die Tabellen noch repliziert werden können. Die Tabelle 'Systemsteuerung' wird nicht repliziert und jeder User (Computer) hat seine eigene Systemsteuerung. Also ist es meines Erachtens am sinnvollsten in dieser Systemsteuerung einmal den Pfad einzugeben, dann muss der User nicht bei jedem Start den Pfad eingegeben oder den Pfad aus einer Liste aussuchen. Der Speicherpfad soll immer gleich sein.
ZitatDann wäre nur beim ersten Start des Frontends ein Erstellen des Verzeichnisses notwendig.


Ich versuche die Anwendung für den Anwender so einfach wie möglich zu gestalten, da einige Anwender jenseits der 70 sind.
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 25, 2017, 16:37:51
Hallo,
wenn jeder User seine eigenes Frontend hat, wo ist dann das Problem ?
Lege den Pfad in die Tabelle "Systemsteuerung" und gut ist.

Zitatda einige Anwender jenseits der 70 sind.
Vorsicht bitte, das wird schnell diskriminierend.  :D ;D  8)

Titel: Re: Bericht als pdf exportieren
Beitrag von: DF6GL am Juli 25, 2017, 16:40:18
Hallo,


ZitatDer Speicherpfad soll immer gleich sein

das ist er sowieso..  Es stellt sich eher die Frage, ob das Speicher-Verzeichnis von vornherein genau definiert sein muss. Das Ganze geht doch "automatisch", wenn einfach festgelegt wird, dass das PDF-Speicherverzeichnis (grundsätzlich) unter dem FE-Verzeichnis zu liegen kommt.  Dann kann das FE-Verzeichnis liegen, wo es will, es wird immer ein darunter liegendes "PDF"-Verzeichnis geben, was man (, wie Lachtaube gezeigt hat,) beim ersten Start der DB auf Existenz prüfen und ggfls. anlegen kann.

Wo ist da noch ein Problem?


@Klaus:
ZitatVorsicht bitte, das wird schnell diskriminierend.

Gut, dass Du mich auch darauf aufmerksam machst..  8)  ;D ;D
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 16:53:56
Hallo Klaus
Zitat
Vorsicht bitte, das wird schnell diskriminierend.  :D ;D  8)

dabei geht es hauptsächlich um meinen Vater und Onkel  ;)

@DF6GL
ZitatWo ist da noch ein Problem?

Wie sieht der code aus  um den Pfad aus der Systemsteuerung einzubinden? ???

DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, "D:\Users\User\Documents\Bemopro\" & SterbefallName & ", " & Me.SterbefallVorname & " - Datenblatt-Trauerfeier.pdf"
Titel: Re: Bericht als pdf exportieren
Beitrag von: DF6GL am Juli 25, 2017, 16:55:39
Hi,


was denn für eine "Systemsteuerung" ?
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 16:57:01
ZitatJeder User (Computer) hat eine eigenes Frontend. In diesem Fall in Form eines Formulares Systemsteuerung (basierend auf der Tabelle 'tblSystemsteuerung')
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 25, 2017, 16:59:31
Hallo,
DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, Me.FeldNameMitPfad & SterbefallName & "_" & Me.SterbefallVorname & "_Datenblatt_Trauerfeier.pdf"
Me.FeldNameMitPfad ist das Formularfeld das den Pfad aus der Tabelle "tblSystemsteuerung" anzeigt.
Ich würde Dir dringend raten auf Leer und Sonderzeichen in Dateinamen zu verzichten. Kein - und erst recht kein Komma und auch kein Leerzeichen. Allenfalls der Unterstrich (_). Ich habe das mal angepasst.
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 17:20:34
Fehlermeldung:

Methode oder Datenobjekt nicht gefunden.

Ich gehe davon aus, dass noch kein Bezug zur Tabelle tblSystemsteuerung erstellt wurde.
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 25, 2017, 17:36:50
Hallo,
zeigt das Formularfeld den Pfad an ?
Weiter oben hast Du geschrieben:
ZitatIn diesem Fall in Form eines Formulares Systemsteuerung (basierend auf der Tabelle 'tblSystemsteuerung').
Dann ist doch der Bezug zur Tabelle da und das Formularfeld kann den Pfad anzeigen.

Und bitte, bitte immer auch den Code zeigen, damit man sieht, ob sich ggf. andere Fehler eingeschlichen haben. Lasse mal im Direktbereich den zusammengesetzten Namen anzeigen.
Debug.Print Me.FeldNameMitPfad & SterbefallName & "_" & Me.SterbefallVorname & "_Datenblatt_Trauerfeier.pdf"
Stop
DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, Me.FeldNameMitPfad & SterbefallName & "_" & Me.SterbefallVorname & "_Datenblatt_Trauerfeier.pdf"
Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 17:44:21
Hallo Klaus,

hier der Code

DoCmd.OpenReport "Organisation Beerdigung-Trauerfeier", acViewPreview, , "Rechnungsnummer =" & Me!Rechnungsnummer, acHidden
DoCmd.OutputTo acOutputReport, "Organisation Beerdigung-Trauerfeier", acFormatPDF, Me.pdfPfad & SterbefallName & "_" & Me.SterbefallVorname & "-Datenblatt-Trauerfeier.pdf"
DoCmd.Close acReport, "Organisation Beerdigung-Trauerfeier"


Wie kommt der Bezug zum Formular oder der Tabelle Systemsteuerung zustande?
Der Befehl zum Erstellen einer pdf-Datei erfolgt aus dem Formular RegisterDaten (Tabelle tblRegisterDaten). Das Formular Systemsteuerung (Tabelle tblSystemsteuerung)ist nicht geöffnet.
Titel: Re: Bericht als pdf exportieren
Beitrag von: MzKlMu am Juli 25, 2017, 17:53:03
Hallo,
wenn das Formular nicht geöffnet ist, geht das natürlich nicht.
Du kannst den Pfad per DLookup direkt aus der Tabelle holen.

Dim DateiPfad As String
DateiPfad=DLookup("Pfad","tblSystemsteuerung")

Für OutputTo musst Du dann die Variable DateiPfad verwenden.


Titel: Re: Bericht als pdf exportieren
Beitrag von: tismo am Juli 25, 2017, 18:03:34
Danke für deine Geduld  :)
Klappt super.