Bericht via Makro mit Bedingung aufrufen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

hpott
*
Beiträge: 17
Registriert: So, 07.02.2010 20:11

Bericht via Makro mit Bedingung aufrufen

Beitrag von hpott »

Hallo,

durch http://www.oooforum.de/viewtopic.php?f= ... 2174d0c1c7 bin ich auf http://members.aon.at/schardinger/openoffice/index.html aufmerksam geworden.

Dort findet sich ein Codeschnipsel, mit dessen Hilfe Formulare via Makro aufgerufen werden können. Meine Abwandlung zum Aufruf eines Berichtes (mit SRB erstellt) ist die folgende:

Code: Alles auswählen

sub evCtl_OpenReport_Rechnungen
  dim oController as object
  oController = ThisDatabaseDocument.CurrentController
  If ( Not oController.isConnected() ) Then
    oController.connect()
  End If

  oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
  oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
  oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode

end sub
Das funktioniert auch. Allerdings kann es vorkommen, dass der Aufruf eines dieser Berichte (ber_1, ber_2 oder ber_3) nicht sinnvoll ist. Diesen nicht sinnvollen Fall möchte ich gerne in dem Makro abfangen.

Nicht sinnvoll ist ein Aufruf dann, wenn die Abfrage, auf welcher der Bericht beruht, kein Ergebnis liefert - also leer ist. Dies kann je nach Datenlage in den Basistabellen auftreten.

Wie muss ich also das folgende Codeschnipsel ändern:

Code: Alles auswählen

sub evCtl_OpenReport_Rechnungen
  dim oController as object
  oController = ThisDatabaseDocument.CurrentController
  If ( Not oController.isConnected() ) Then
    oController.connect()
  End If

  If (nicht leer <Abfrage_1-in-ber_1>) Then
    oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
  endif
  If (nicht leer <Abfrage_2-in-ber_2>) Then
    oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
  endif
  If (nicht leer <Abfrage_3-in-ber_3>) Then
    oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode
  endif

end sub
Bei <Abfrage_x-in-ber_x> handelt es sich um eigenständige Abfragen, d.h. sie sind nicht nur als SQL-Befehl direkt im Bericht hinterlegt.

Vielen Dank im voraus.

HPott
AOo 4.01 unter WIN 7/8.1
http://www.norderney-seeadler.de
hpott
*
Beiträge: 17
Registriert: So, 07.02.2010 20:11

Re: Bericht via Makro mit Bedingung aufrufen

Beitrag von hpott »

Da es bisher keine Antworten gab ist der vorgeschlagene Weg möglicherweise nicht "einfach".

Ich formuliere die Frage einmal um: Wie kann ich vermeiden, dass ein Bericht aufgerufen wird, dessen zugrundeliegende Datenabfrage leer ist?

Danke für die Antwort.

HPott
AOo 4.01 unter WIN 7/8.1
http://www.norderney-seeadler.de
hpott
*
Beiträge: 17
Registriert: So, 07.02.2010 20:11

Re: Bericht via Makro mit Bedingung aufrufen

Beitrag von hpott »

Danke für Deine Antwort. Im Moment lebe ich damit, die unnötig geöffneten Fenster per Klick einfach zu schliessen.

Es gibt aber einige Beiträge hier im Forum, aus denen sich der von Dir vorgeschlagene Lösungsweg ableiten läßt. Die Umsetzung liegt jetzt bei mir.

HPott
AOo 4.01 unter WIN 7/8.1
http://www.norderney-seeadler.de
Antworten