Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Unterbericht beim öffnen ansprechen - Report_open

Begonnen von cyberchris, März 13, 2025, 17:19:43

⏪ vorheriges - nächstes ⏩

cyberchris

Hallo zusammen,

ich habe eine kleine Herausforderung, die ich irgendwie nicht gelöst bekomme.

In einem Bericht im Seitenkopf ist ein Unterbericht eingebettet.
Aufgrund einer Prozessanpassung möchte ich diesen Bericht mehrfach verwenden.
Hierzu ist es erforderlich zwei Bezeichnungsfelder im Unterbericht sichtbar / unsichtbar zu machen.

Dieses Bezeichnungsfeld über den übergeordneten Bericht anzusprechen funktioniert bei mir nicht:
"Reports![Seitenkopf PP].Bezeichnungsfeld167.Visible = False" (im Bereich "Report_Open")
--> Laufzeitfehler: 2451 Berichtsname nicht vorhanden oder nicht geöffnet...

Ich vermute, dass es daran liegt, dass der Bericht nur kurz im Hintergrund (beabsichtigt) zum Drucken geöffnet wird.
DoCmd.OpenReport "Pruefprotokolle", acPreview, , PMFilter, acHidden, sOrder
DoCmd.SendObject acReport, "Pruefprotokolle", acFormatPDF, An, "", "", GetMessage(273), nachricht, True, ""
DoCmd.Close acReport, "Pruefprotokolle", acSaveNo

Hat hierzu irgendjemand eine Idee / Lösung?

Herzlichen Dank!

Viele Grüße
Christoph

markusxy

Innerhalb des Reports würde ich folgendes versuchen:

Me.NameUnterberichtSteuerelement.Report!NameSteuerelement.Visible

Knobbi38

Hallo,

einen Unterbericht kann man nicht über die Reports-Auflistung ansprechen, dort wird nur der Hauptbericht verwaltet. Ich würde die Steuerung in den Hauptbericht verlegen und beim Öffnen des Berichts per Openargs die notwendigen Argumente übergeben.

Gruß
Knobbi38

cyberchris

Guten Morgen,

ja, das hat bei mir auch nicht funktioniert.
Me.NameUnterberichtSteuerelement.Report!NameSteuerelement.Visible

Das mit OpenArgs hatte ich mir auch schon mal überlegt gehabt, nur weiß ich leide nicht, wie ich das mitgeben soll, da der Unterbericht ja im Seitenkopf eingebettet ist und beim öffnen des Hauptberichts automatisch mit geladen wird.

Wo kann ich das mitgeben? Oder gilt OpenArgs auch für Unterberichte, die automatisch mit geöffnet werden?
D. h. dass die Parameter, die ich beim Öffnen des Hauptformulars mitgebe, dort auch mit verwendet werden können?

Vielen Dank

Knobbi38

Hallo,

nochmal: die Unterberichte kannst du nicht direkt von Außen ansprechen, nur immer über das SubReport-Steuerelement!

OpenArgs gibst du beim Öffnen des Berichtes mit und das wird dann "Beim Öffnen" oder "Beim Laden" Ereignis ausgewertet.

Gruß
Knobbi38

cyberchris

Hallo knobbi38,

ja, hatte ich auch so verstanden.
Ich wollte es trotzdem nicht unversucht lassen, was markusxy geschrieben hatte:-).

Also habe ich in meinem Fall keine Möglichkeit, oder?

Denn OpenArgs Argumente kann ich ja nicht mitgeben, da der Unterbericht, wie geschrieben, eingebettet ist und nicht mittels VBA-Code aufgerufen wird. Sondern automatisch zusammen mit dem Hauptbericht geladen wird.
Ich weiß zumindest nicht, wie das konkret gehen könnte.

Vielen Dank
Christoph

Knobbi38

Hallo Christoph,

sicherlich kannst du Openargs mitgeben und dann im Hauptbericht in den bereits beschriebenen Ereignissen auswerten - wo ist das Problem. Im Bereicht selber hast du doch problemlos Zugriff auf die Unterberichte über das SubReport-Steuerelement. Schau dir das nochmal genauer an.

Gruß
Knobbi38



Beaker s.a.

ZitatDenn OpenArgs Argumente kann ich ja nicht mitgeben, da der Unterbericht, wie geschrieben, eingebettet ist
Du sollst und kannst die OpenArgs ja nur dem HRpt mitgeben.
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)

cyberchris

Hallo ein letztes Mal:-)

Ich blicke leider irgendwie nicht :-[ .

Ich öffne den Hauptbericht zum Drucken oder Mailen im Hintergrund mittels 2 Varianten:

DoCmd.OpenReport "4401_Pruefprotokolle", acPreview, , PMFilter, acHidden, "4403" & sOrder (zum Versenden per Mail)
oder
DoCmd.OpenReport "4401_Pruefprotokolle", acViewNormal, , PMFilter, , "4403" (zum klassischen Drucken)

in diesem Bericht ist ein Unterbericht eingebettet, der ja beim Laden automatisch mit geöffnet wird.
Wie soll ich denn dem Unterbericht irgendwelche OpenArgs Argumente mitgeben??

Viele Grüße
Christoph

markusxy

#9
Zitat von: cyberchris am März 14, 2025, 08:23:43Guten Morgen,

ja, das hat bei mir auch nicht funktioniert.
Me.NameUnterberichtSteuerelement.Report!NameSteuerelement.Visible

Das sollte schon funktionieren.
Wie lautet die Fehlermeldung, bzw wie lautet die Anweisung und von wo aus startest du sie?


Zitat von: cyberchris am März 14, 2025, 16:32:08Wie soll ich denn dem Unterbericht irgendwelche OpenArgs Argumente mitgeben??
Die Openargs kannst du nur dem Hauptbericht mitgeben. Danach brauchst du noch die Methode die ich dir schon gezeigt habe  :-\



Ergänzung: Es sollte auch außerhalb des Hauptreports klappen. Du musst nur die Anweisung entsprechend ergänzen:
Reports!NameHauptreport!NameUnterberichtSteuerelement.Report!NameSteuerelement.VisibleAber natürlich nur, wenn du den Report mittels PreView öffnest - ansonsten brauchst du OpenArgs oder eine andere Art um die Argumente zu übergeben.





cyberchris

Hallo Markus,

danke für deine Antwort.

Also ich öffne den Report u. a. mit:

DoCmd.OpenReport "4401_Pruefprotokolle", acPreview, , PMFilter, acHidden

in Form_Open habe ich mal beide Varianten von dir getestet:

Me.[Seitenkopf_PP].Report!Bezeichnungsfeld186.Visible = True
--> Laufzeitfehler 2465: Datenbank kann das in Ihrem Ausdruck angesprochene Feld '|1' nicht finden.

Reports![4401_Pruefprotokolle]!Seitenkopf_PP.Report!Bezeichnungsfeld186.Visible = True
--> Laufzeitfehler 2465: Datenbank kann das in Ihrem Ausdruck angesprochene Feld 'Seitenkopf_PP' nicht finden.

Hauptformular heißt: 4401_Pruefprotokolle
Unterformular heißt: Seitenkopf_PP

In Form_Load habe ich das nicht getestet, da das bei Berichten glaube nicht funktioniert, oder?
Ich hatte in der Vergangenheit zumindest immer Probleme, wenn ich bei Berichten mit Form_Load gearbeitet hatte.

Anschließend wird eine E-Mail geöffnet und der Bericht angefügt, mit:
DoCmd.SendObject acReport, "4401_Pruefprotokolle", acFormatPDF, _ ...


Schönen Abend
Christoph


Knobbi38

Hallo Christoph,

also die Grundlagen von Access sollte man schon verstehen und kennen. Das ein Form_Open nicht in einem Report existiert, sollte eigentlich klar sein und wie man Openargs in einem Formular oder einem Bericht auswertet, eigentlich auch.

Wie dem auch sei, in der Anlage ein kleines Beispiel, wie so etwas gelöst werden könnte.


markusxy

@Ulrich,
Me.subContainer.Report.VisibleID = CBool(OpenArgs)vs
Me.subContainer.Report.txtID.Visible = CBool(OpenArgs)
VisibleID ist mir jetzt neu und daher verwirrend? Klappt das auch für die anderen Controls in ähnlicher Weise?

@Christoph,
den Namen des Subreports darfst du nicht verwenden. Von der Logik her muss dir einfach klar sein, dass man einen SubReport auch mehrfach einsetzen könnte (vor allem bei SubForms beliebt) und dieser daher nicht eindeutig ist. Es muss also immer des Name des SubReportControls verwendet werden.

Knobbi38

@markusxy

Wie du dem Code entnehmen kannst, ist "VisibleID" eine Public Property im Report. Anstatt direkt auf das Control im Report zuzugreifen, habe ich hier im Sinne von OOP die Variante mit der Property verwendet. Der Name des Controls sollte für den Aufrufer keine Rolle spielen.

Grüße
Ulrich


markusxy

@Ulrich,
alles klar. Da hab ich nicht rein geschaut.

OOP? Da würde ich eher auf EarlyBinding gehen, dann kann man auf den Bang Operator verzichten und der Compiler meldet falsche Bezüge und die IntelliSense funktioniert auch ...
Und der code bleibt einfach.
Aber jedem seine Spielereien  :)