Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bericht als pdf

Begonnen von gsaccess, Januar 24, 2024, 08:30:27

⏪ vorheriges - nächstes ⏩

gsaccess

Ich habe folgendes Problem:
über einen Button wird die Rechnung gedruckt. Dabei werden Felder wie ATUNr und Firmenbuchnummer ausgeblendet wenn sie keinen Wert haben.
Das funktioniert problemlos.(Siehe Rechnung Bericht)
Wenn ich aber den Bericht in eine pdf speichere werden diese Felder auch angezeigt, wenn sie keinen Wert haben. (Siehe RechnungPdf). Ist zwar nur eine formale Sache, aber nicht wirklich schön.
Vielleicht hat von euch schon jemand dieses Problem gehabt und eine Lösung!
Wäre dankbar!
Günther

markusxy

Zitat von: gsaccess am Januar 24, 2024, 08:30:27Dabei werden Felder wie ATUNr und Firmenbuchnummer ausgeblendet wenn sie keinen Wert haben.

Wie funktioniert das Ausblenden?
Die Ausführung von Events hängt ja auch davon ab, wie geöffnet wird.

gsaccess

Beim Laden des Berichtes:
If IsNull(Me.txtUID) Then
    Me.txtUID.Visible = False
    Me.lblUID.Visible = False
    End If
    If IsNull(Me.txtFBNr) Then
    Me.txtFBNr.Visible = False
    Me.lblFBNr.Visible = False
    End If

Beim Button als pdf speichern
DoCmd.OutputTo acOutputReport, "rptre", acFormatPDF, "C:\Rechnungen\" & "K_" & Me!txtKundenNr & "_" & Me!cboRechnungsart & "_" & Me!cboREAuswahl & "_" & strwert & ".pdf"

Beaker s.a.

Hallo,

Ich habe zwar keine Lösung des Problems, aber einen Vorschlag zur
Verkürzung des Codes
With Me
    .txtUID.Visible = IsNull(.txtUID)
'   .lblUID.Visible = IsNull(.txtUID)
'diese Zeile ist obsolet wenn das Label mit dem Textfeld verbunden
ist, - wird dann autom. mit ausgeblendet
    .txtFBNr.Visible = IsNull(.txtFBNr)
'   .lblFBNr.Visible = IsNull(.txtFBNr)
's.o.
End With
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

Ich sehe bisher keinen Grund, warum sich die Ausgabe auf einen Drucker von der Ausgabe in ein PDF unterscheiden sollte.
Was passiert, wenn du den Bericht erst in der Vorschau anzeigen lässt?
Was passiert, wenn du den Bericht aus der geöffneten Vorschau als PDF exportierst?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

gsaccess

Vielen Dank, das ist die Lösung.
Zuerst in die Vorschau und dann als pdf speichern.
stdocname = "rptRE"
    DoCmd.OpenReport stdocname, acPreview
DoCmd.OutputTo acOutputReport, "rptre", acFormatPDF, "C:\Rechnungen\" & "K_" & Me!txtKundenNr & "_" & Me!cboRechnungsart & "_" & Me!cboREAuswahl & "_" & strwert & ".pdf"

der code von Ekkehard ist mir nicht ganz klar:
Die Felder werden ausgeblendet wenn sie nicht leer sind.

gsaccess

Ich denke mir aber dass Ekkehard sicher auch für den folgenden Code bei dem überprüft wird welche Art von Rechnung im Kobinationsfeld ausgewählt wurde, und dann der entsprechende Bericht gedruckt wird, den code verkürzen kann.
Dim stdocname As String
If IsNull(cboREAuswahl) Then
MsgBox ("Es muss eine Rechnung ausgewählt werden")
DoCmd.GoToControl "cboREAuswahl"
Exit Sub
End If

    If Me.cboRechnungsart = "Bauleistung" Then
    stdocname = "rptREBauleistung"
    DoCmd.OpenReport stdocname, acPreview
    End If
   
    If Me.cboRechnungsart = "BarRe" Then
    stdocname = "rptREBar"
    DoCmd.OpenReport stdocname, acPreview
    End If
   
    If Me.cboRechnungsart = "EORI" Or Me.cboRechnungsart = "Export" Then
    stdocname = "rptREEORI"
    DoCmd.OpenReport stdocname, acPreview
    End If

    If Me.cboRechnungsart = "InnergemLief" Then
    stdocname = "rptREInnergemLief"
    DoCmd.OpenReport stdocname, acPreview
    End If
   
   
    If Me.cboRechnungsart = "RE" Then
    stdocname = "rptRE"
    DoCmd.OpenReport stdocname, acPreview
    End If
   
    If Me.cboRechnungsart = "SR" Then
    stdocname = "rptRESR"
    DoCmd.OpenReport stdocname, acPreview
    End If
   
   
    If Me.cboRechnungsart = "TR" Then
    stdocname = "rptRETR"
    DoCmd.OpenReport stdocname, acPreview
    End If
 
       

End Sub

PhilS

Ich würde eine Tabelle mit der Rechnungsart und dem zugehörigen Berichtsname erstellen und beide Spalten in die Combobox packen, den Berichtsname ggfls. unsichtbar.
Dann liest du auch den Berichtsname aus der CBO und kannst dir kompletten Sermon dazu sparen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

gsaccess

Vielen Dank für den Tipp. Eigentlich logisch. Werde ich umsetzen und testen. Dazu muss ich aber bei den bestehenden Datensätzen (alles JN Felder) einiges umbauen und die von dir angesprochene Tabelle Rechnungsart verwenden.

Beaker s.a.

Sorry, zu schnell geschrieben. Es muss natürlich negiert werden
.txtUID.Visible = Not IsNull(.txtUID)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

gsaccess

@Beaker s.a.  Vielen Dank, so funktioniert der Code für das ausblenden.
@PhilS:
Ich habe eine Tabelle tblRechnungsart
ReArtID    Rechnungsart
1    Rechnung
2    Barrechnung
3    Teilrechnung
4    Schlussrechnung

und eine Tabelle tblMWstArt
MwStArtID    MwStArtBeschreibung    Steuersatz
1    Innergemeinschaftliche Lieferung    0,00%
2    Bauleistung    0,00%
3    Export    0,00%
4    Inlandsrechnung    20,00%
Jede dieser MWst Arten ist eine Rechnungsart, die wieder als RE, TR, SR oder Barrechnung ausgestellt werden kann.
Dazu gibt es die verschiedenen Berichte, die ich über obigen Code aufrufe.
Ich habe derzeit keine Idee wie ich damit deinen Tipp umsetzen kann.

Günther

PhilS

#11
Zitat von: gsaccess am Januar 30, 2024, 17:38:42Jede dieser MWst Arten ist eine Rechnungsart, die wieder als RE, TR, SR oder Barrechnung ausgestellt werden kann.

Dazu gibt es die verschiedenen Berichte, die ich über obigen Code aufrufe.
Dann brauchst du eine zusätzliche Tabellen "tblRechnungsBericht". Diese hat die Spalten ReArtID, MwStArtID, und BerichtsnameReArtID und MwStArtID sollten zusammen einen eindeutigen Index haben, dieser kann der Primärschlüssel der Tabelle sein. Optional kannst du noch einen Autowert ergänzen, dafür sehe ich aber bisher keine Notwendigkeit.
Der Inhalt deiner Combobox wäre dann eine Abfrage auf die drei beteiligten Tabellen.

EDIT
Für die Combobox wäre der o.a. Autowert als eindeutige Spalte eine Erleichterung, andernfalls müsstest du die andere beiden ID-Spalten in der Abfrage für die Combo zu einer eindeutigen Spalte kombinieren.
/EDIT


PS:
Zitat von: gsaccess am Januar 30, 2024, 01:03:54Dazu muss ich aber bei den bestehenden Datensätzen (alles JN Felder) einiges umbauen
Mehrere Ja/Nein-Spalten, die verschiedene Aspekte ein und desselben Zusammenhangs abbilden, sind ein deutliches Zeichen, dass an dieser Stelle eine weitere Tabelle mit 1-N-Zuordnung sinnvoll wäre. - Das macht erstmal ein wenig Arbeit bei der Umstellung, ist aber längerfristig höchstwahrscheinlich die bessere Lösung.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

gsaccess

Vielen Dank für die ausführliche Auseinandersetzung mit meinem Problem.

ZitatDann brauchst du eine zusätzliche Tabellen "tblRechnungsBericht". Diese hat die Spalten ReArtID, MwStArtID, und Berichtsname.  ReArtID und MwStArtID sollten zusammen einen eindeutigen Index haben, dieser kann der Primärschlüssel der Tabelle sein. Optional kannst du noch einen Autowert ergänzen, dafür sehe ich aber bisher keine Notwendigkeit.
Der Inhalt deiner Combobox wäre dann eine Abfrage auf die drei beteiligten Tabellen.
Ist das so gemeint, dass in der Spalte Berichtsname, der richitge Bericht zB über comboboc. Column() angesteuert wird.

ZitatMehrere Ja/Nein-Spalten, die verschiedene Aspekte ein und desselben Zusammenhangs abbilden, sind ein deutliches Zeichen, dass an dieser Stelle eine weitere Tabelle mit 1-N-Zuordnung sinnvoll wäre. - Das macht erstmal ein wenig Arbeit bei der Umstellung, ist aber längerfristig höchstwahrscheinlich die bessere Lösung.
Den Ansatz mit den J/N feldern habe ich gewählt, damit der Anwender nur die richtige Auswahl anhacken muss.
Bei einer eigenen Tabelle müsste der Anwender über eine Combobox die jeweilige ReArt und MWStArt auswählen.
Oder gibt es da eine bessere Lösung.

Günther

Beaker s.a.

Hallo Günther,
ZitatIst das so gemeint, dass in der Spalte Berichtsname, der richitge Bericht zB über comboboc. Column() angesteuert wird.
Genau, die von Philip angesprochene Tabelle in eine n:m zwischen den beiden
Wertetabellen.
ZitatBei einer eigenen Tabelle müsste der Anwender über eine Combobox die jeweilige ReArt und MWStArt auswählen.
Nein, aus der n:m kann man einfach die gewünschte Kombination auswählen.
ZitatIch denke mir aber dass Ekkehard sicher auch für den folgenden Code bei dem überprüft wird welche Art von Rechnung im Kobinationsfeld ausgewählt wurde, und dann der entsprechende Bericht gedruckt wird, den code verkürzen kann.
Sicher, mir würde dazu "Select Case" einfallen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Hankook

Es hört sich so an, als gäbe es möglicherweise eine gewisse Diskrepanz zwischen der Darstellung des Berichts beim Drucken und beim Speichern als PDF.

Überprüfen Sie die Einstellungen oder Optionen, wenn Sie den Bericht direkt drucken. Stellen Sie sicher, dass diese Einstellungen mit der Art und Weise übereinstimmen, wie der Bericht generiert wird, wenn er als PDF gespeichert wird. Manchmal können Druckeinstellungen bestimmte Anzeigeeigenschaften außer Kraft setzen.
Sehen Sie sich die spezifischen Einstellungen oder Optionen zum Exportieren des Berichts als PDF an. Möglicherweise gibt es eine Einstellung, die sich darauf auswirkt, wie leere Felder während des Exportvorgangs behandelt werden. Stellen Sie sicher, dass diese Einstellungen so konfiguriert sind, dass sie Ihrem gewünschten Ergebnis entsprechen.
Überprüfen Sie noch einmal die bedingten Formatierungsregeln, die auf Felder wie ATUNr und Firmenbuchnummer angewendet werden. Stellen Sie sicher, dass diese Regeln richtig konfiguriert sind, um die Felder auszublenden, wenn sie keinen Wert haben, sowohl beim Drucken als auch beim PDF-Export.
Stellen Sie sicher, dass Ihre Software, sei es die Anwendung, die den Bericht erstellt, oder das PDF-Exporttool, auf dem neuesten Stand ist. Manchmal können solche Probleme in neueren Versionen durch Fehlerbehebungen oder Funktionsverbesserungen behoben werden.
Versuchen Sie nach Möglichkeit, den Bericht mit verschiedenen Methoden oder Tools als PDF zu exportieren. Wenn Sie beispielsweise eine bestimmte Softwarefunktion für den PDF-Export verwenden, versuchen Sie es mit einer anderen Methode oder einem PDF-Exporttool eines Drittanbieters, um zu sehen, ob das Problem weiterhin besteht.
Sehen Sie sich die Dokumentation oder Support-Ressourcen für die Software an, die Sie verwenden, um den Bericht zu erstellen und ihn als PDF zu exportieren. Möglicherweise stehen spezielle Anleitungen oder Schritte zur Fehlerbehebung zur Verfügung, die zur Behebung dieses Problems beitragen können.

Durch die systematische Überprüfung und Anpassung dieser Faktoren können Sie möglicherweise die Ursache der Diskrepanz identifizieren und eine Lösung finden, um sicherzustellen, dass leere Felder sowohl in gedruckten Berichten als auch in PDF-Exporten konsistent ausgeblendet werden.
Ich arbeite als Unternehmensberater in der Data Analytis