Bericht aus Formular aufrufen und drucken

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Bericht aus Formular aufrufen und drucken

Beitrag von Frewer »

Halle,
habe erneut Probleme mit der Weiterführung meiner Datenbank. Habe einen Bericht, der funktioniert, den ich aus einem Formular aufrufen und auch mit der Druckfunktion des Hauptmenüs ausdrucken kann. Den Aufruf des Berichtes steuere ich über einen Button im Formblatt.
Das 1te Problem ist, dass der Macro nach dem Aufruf des Berichtes nicht wartet bis der Bericht ausgegeben ist sondern sofort den Rest des Macros abarbeitet.
Das 2te ist, dass ich gerne den Bericht per Macro ausdrucken möchte, was mir trotz Studium im Internet nicht gelingt. Ich finde auch keinerlei Erklärungen in Bezug auf meine Macrofolge, die ich gefunden habe:
SUB Ausdruck
DIM oRep AS OBJECT, oDoc AS OBJECT, oDrawpage AS OBJECT
DIM .....
.........
ThisDatabaseDocument.ReportDocuments.getByName("Bericht_BH").open 'die Zeile funktioniert ohne den Rest
REm ab hier ist das Ganze unklar und bringt OO zum Absturz
WAIT2000
oPrinter = oRep.printer
aName = oPrinter(0)
aName.name = "Name"
aName.Value = "HP Laserjet 1010"
oPrinter(0) = aName
oRep.printer = oPrinter
oDruckOpt(0).Name = "CopyCount"
oDruckOpt(0).Value = 1
oRep.print(oDruckOpt())
oRep.close(true)
.........
END SUB
Der LaserJet von HP ist mein Standard-Drucker. Ob der hier erneut zu benennen ist und wie ist unklar. Im Beispiel hat man wohl einen anderen Drucker ausgewählt.
Auch wundert mich, dass oPrinter(0), oDruckOpt() - nehme an, dass dies ARRAYs sind - nicht deklariert werden müssen (Option explicit ist gewählt). Auch aName wird nicht angemekkert, obwohl es nicht deklariert ist. Vermute, dass ooBase bereits beim WAIT sich "aufhängt", warum unklar.

Gibt es Hilfe?
Gruß Frewer
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht aus Formular aufrufen und drucken

Beitrag von RobertG »

Hallo Frewer,

Du hast oRep nicht definiert.

Code: Alles auswählen

oRep = ThisDatabaseDocument.ReportDocuments.getByName("Bericht_BH").open
... und dann sind mir da zu viele Unwägbarkeiten in dem weiteren Code. Ich kopiere hier einfach den Code aus dem Handbuch:

Code: Alles auswählen

Sub BerichtDruckenUndSchliessen(oReport AS OBJECT)
DIM Props
DIM stDrucker AS STRING
Props = oReport.getPrinter()
stDrucker = Props(0).value
DIM arg(1) AS NEW com.sun.star.beans.PropertyValue
arg(0).name = "Name"
arg(0).value = "<" & stDrucker & ">"
arg(1).name = "Wait"
arg(1).value = True
oReport.print(arg())
oReport.close(true)
End Sub
oRep wird bei Dir jetzt einfach von einer Prozedur weitergegeben an die obige Prozedur:

Code: Alles auswählen

BerichtDruckenUndSchliessen(oRep)
Da Du Dir ja sicher zu sein scheinst, wie Der Drucker intern heißt, kannst Du Dir die Bestimmung des ersten Drucker sparen. und

Code: Alles auswählen

stDrucker = "HP Laserjet 1010"
statt der beiden Zeilen zur Bestimmung des Namens schreiben.
Auch das Schließen des Berichts kannst Du gegebenenfalls raus nehmen.

Gruß

Robert
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Bericht aus Formular aufrufen und drucken

Beitrag von F3K Total »

So vielleicht ...

Code: Alles auswählen

sub PR
    oRep = ThisDatabaseDocument.ReportDocuments.getByName("Bericht_BH").open
    oPrinter = oRep.printer
    aName = oPrinter(0)
    aName.name = "Name"
    aName.Value = "HP Laserjet 1010"
    oPrinter(0) = aName
    oRep.printer = oPrinter
    Dim oDruckOpt(1) as new com.sun.star.beans.PropertyValue
    oDruckOpt(0).Name = "Wait"
    oDruckOpt(0).Value = true
    oDruckOpt(1).Name = "CopyCount"
    oDruckOpt(1).Value = 1
    oRep.print(oDruckOpt)
    do 
        wait 10
    loop until oprinter(4).value = false
    oRep.close -1
end sub
Gruß R
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Bericht aus Formular aufrufen und drucken

Beitrag von Frewer »

Hallo Robert, Hallo R,
zunächst vielen Dank nochmal. Ich habe beide Varianten ausprobiert ohne Erfolg.
Bei beiden Varianten passiert eigentlich das Gleiche. Drücke ich den Button im Formular, dann geht ein neues Fenster auf mit oben blauer Randleiste (oo Logo), das Fenster ist total grau, unten links eine Zeile mit "Dokument wird geladen", dann 20 schwarze Kästchen (gehen an wie ein Ladevorgang), dann ist soffice.bin im "Wald".
Eine Rettung ist nur über den Taskmanager durch Löschen von soffice.bin möglich.
Wohlgemerkt, ich arbeite noch mit WIN XP, weil "never change a running system!!" Arbeite mit vielen Programmen, die mit den modernen Betriebssystemen nicht zusammen funktionieren.

Gruß
Frewer
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Bericht aus Formular aufrufen und drucken

Beitrag von F3K Total »

Moin Frewer,
kann ich eigentlich kaum glauben, da ich meinen Code vorher ausprobiert habe, an einer meiner Datenbanken mit eigenem Bericht.
Wenn, können wir nur noch helfen, wenn du deine DB mit Bericht hier zur Verfügung stellst. Ggf. verfremdet.
Gruß R
"Wenn du merkst, dass du ein totes Pferd reitest, solltest du absteigen..."
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht aus Formular aufrufen und drucken

Beitrag von RobertG »

Gilt genauso für den Code im Handbuch. Alles getestet, bevor es da erschienen ist. Selbst bei umfangreichen Berichten klappt das, weil der weitere Code erst ausgeführt wird, wenn das Dokument verfügbar ist.

Wie groß ist den der Bericht?

Allerdings: Mit OpenOffice kann ich so etwas nicht testen, da ich dafür nicht einmal mehr eine java-Umgebung an Bord habe, die mit so einem alten Programm noch zusammen arbeitet.

Gruß

Robert
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Bericht aus Formular aufrufen und drucken

Beitrag von Frewer »

Hallo,
der Bericht ist gerade mal 1/2 Seite und beinhaltet ein bisschen Text und eine mit Abfrage erstellte Tabelle mit 6Spalten pro Zeile und zu Testen 6 Zeilen. Er wird nie über 1 Seite hinausgehen.

Nochmal meine 1te Frage: von welchem Handbuch sprichst Du? Ich habe das Base_Gesamtband_V40, Basic_Makros und jetzt noch das Handbuch (Dein Untertitel). Trotzdem finde ich die Druckroutine mit Erklärungen nicht.

also ohne Druckroutine läuft alles wie gehabt, der Bericht wird dargestellt, im Hintergrund läuft der Macro weiter zum Ende der SUB. Es muss also an der Druckroutine liegen. Vielleicht sollte hinter dem Öffnen des Report mal eine Warteroutine eingebaut werden? Werde mal ein paar Versuche machen.

Gruß Frewer
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Bericht aus Formular aufrufen und drucken

Beitrag von RobertG »

Hallo Frewer,

das ist das Handbuch mit der Versionsbezeichnung 6.2. Kannst Du direkt über den ersten Link von der LibreOffice-Seite herunterladen. Und dort ist dann ein Kapitel von fast 100 Seiten zu Makros mit Base enthalten. Unterkapitel "Datenbankaufgaben mit Makros erweitert" > "Drucken aus Base heraus".
So ungefähr S. 515. So ungefähr, weil ich da beständig etwas ändere und in meiner momentanen Fassung das Kapitel bei S. 516 beginnt.

... und diese Überarbeitung gibt es auf https://www.familiegrosskopf.de/robert/, dort rechts auf die letzten Upload schauen:
http://www.familiegrosskopf.de/robert/l ... seitig.pdf

Gruß

Robert
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Bericht aus Formular aufrufen und drucken

Beitrag von Frewer »

Hallo Robert,

vielen Dank für die info. Jetzt gehen die Lichter an. Bisher habe ich in anderen Büchern und Quellen studiert (ein anderes OpenOffice.Forum, etc). Habe Deine Empfehlung umgesetzt. Hatte zunächst den Band V40 heruntergeladen (weil ich OO V4.1.3 am Laufen habe), dort aber nicht das gefunden, was ich brauchte. Wobei ich sagen muß, daß die Bücher ja soviel Info bieten, dass man total verzweifelt.
Da Du einer der Autoren bist - mein Respekt, eine ausgezeichnste Arbeit!!!

Ich mach jetzt mal weiter mit meinen Versuchen, da ich noch einige Dinge zu programmieren habe. Das Drucken wird vielleicht auf meinem System auch noch mal klappen, bei ACCESS funktioniert es ja einwandfrei und ich plane natürlich irgendwann mal auf WIN10 und dann LO umzustellen. Ich will allerdings zunächst mal meine ganzen Bastelprogramme für die MC-Programmierung auf WIN10 fit machen, damit ich weiter meinem Pensionärs-Hobby frönen kann.

Gruß Frewer
Antworten