[gelöst]BASE: Bericht aus Formular raus öffnen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

[gelöst]BASE: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi,

Ich habe eine Datenbank gebastelt, betehend aus
3 Tabellen
2 Abfragen
1 Formular mit einem Unterformular (verbunden mit einer Kundennummer)
1 Bericht

Alle Teile alleine funktionieren wunderbar.

Jetzt möchte ich den Bericht aus dem Formular heraus öffnen, dass ist auch kein Problem.
Das Problem besteht darin, dass immer der erste Datensatz im Bericht angezeigt wird und
nicht der des aktuellen aus dem Formular.

Wie bekomme ich es hin, dass übergeben wird welcher Datensatz im Bericht angezeigt wird.
Mit hilfe von Makros wahrscheinlich, aber wie habe leider keine Ahnung von Makros.

Das Ganze soll später mal daruf hinaus dass der Bericht direkt gedruckt werden soll.

Ich verwende:
OpenOffice 3.1 und Windows XP SP3


Brauche dringend Hilfe.

Gruß chairman


Moderation,4: Thema in BASIC-Unterbereich verschiben; Titel angepasst; CODE tags gesetzt
Zuletzt geändert von chairman am Mi, 13.05.2009 00:52, insgesamt 1-mal geändert.
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

Hallo,
ich habe das Problem so gelöst, daß ich dafür eine kleine Drucktabelle erstellt habe. Dort schreibe ich per Makro beispielsweise die ID des Datensatzes rein. Im Report verwende ich dann zum Drucken keine Tabelle sondern eine Abfrage, die als Steuerungstabelle eben die o.g. Drucktabelle verwendet. So existieren für den Bericht immer nur die Daten, die ich drucken will.
Hilft Dir das?
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi,

danke für die schnelle Antwort.

Könnte mein Problem beheben.

Aber wie gesagt habe keine Ahnung von Makros,
Ein kleines Beispiel wäre nett.

chairman
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

Schau Dir dieses hier mal an:

Code: Alles auswählen

Sub DruckAuftrag
	Dim sText As String, sSQL As String
   	Dim oStatement As Object, oReportDoc As Object, oVerbindung As Object
  	Dim Args(1) As New com.sun.star.beans.PropertyValue
	Dim oDataBaseContext As Object, oDataSource As Object
       ' die folgende Zeile übernimmt die Ausweis-Nummer aus einem Feld des aktiven Formulars 
    	sText = thisComponent.drawpage.forms.getByName("Kundendaten").getByName("Ausweis_Nr").Text    ' Bericht für genau diesen Kunden drucken!
	oDataBaseContext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
	oDataSource = oDataBaseContext.getByName( "Kunden" )
	oVerbindung = oDataSource.getConnection( "" , "" )
	oStatement = oVerbindung.createStatement
	sSQL = "UPDATE ""DruckSteuerung"" SET ""Ausweis_Nr"" = " + sText   ' Hilfstabelle mit der Ausweisnummer des aktiven Kunden beschreiben
	oStatement.executeUpdate( sSQL )
   	Args(0).Name="ActiveConnection" : Args(0).Value=oVerbindung
   	Args(1).Name="OpenMode" : Args(1).Value="open"
	on Error goto Fehler
   	oReportDoc=oDataSource.DatabaseDocument.ReportDocuments.loadComponentFromURL("meinBericht,"_self",2,Args)  ' Aufruf des Berichts
   	oReportDoc.CurrentController.Frame.ContainerWindow.setFocus()
	Fehler:
End Sub
Hoffe, das hilft Dir weiter...... mußt natürlich den Berichtsnamen, Formular- und Datenbank-Namen anpassen.
Dann legst Du dieses Makro auf den PushButton, mit dem Du den Druck starten willst und fertig ist die Kiste.
Gruß und viel Erfolg
eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Ich weiß ist so langsam peinlich
aber was ist was?

Kunden (klar) = Datenbank
meinBericht (auch klar) =Bericht
Kundendaten = Name des Formulars?
Ausweis_Nr bei mir Kundennummer?

Muss sonst noch was geändert werden?

Ansonsten kommt bei mir ein Laufzeitfehler in der Zeile mit sText = ....

Es ist eine Exception aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: .
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

Kundendaten = Dein Formular
Ausweis_Nr = Kundennummer
Du mußt darauf achten, daß Dein Formular den ritigen Namen unter Formular-Eigenschaften hat (ganz wichtig)
1. irgendein Kontrollelement des Formulars mit der rechten Maustaste anklicken
2. dann Formular anklicken
3. unter Allgemein bei Name den richtigen Namen eintragen
Nun kannst Du Dich mal etwas weiter vortasten.
Viel Spaß
eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi eBayer!

Hilft alles nichts bleibt bei der Fehlermeldung. An der gleichen Stelle.

Hab mal ein Bild vom Bildcschirm drangehängt, wo zusehen ist was passiert wenn ich auf den Button drücke.
Und unten den Kompletten Code

Zuerklärung:
Reitschule2 = Name des Formulars
Kundenummer Klar Primärschlüssel (nicht im Formular angezeigt)
Reitschule = Name der Datenbank
Karten = Name des Berichts


chairman

Code: Alles auswählen

Sub DruckAuftrag
Dim sText As String, sSQL As String
Dim oStatement As Object, oReportDoc As Object, oVerbindung As Object
Dim Args(1) As New com.sun.star.beans.PropertyValue
Dim oDataBaseContext As Object, oDataSource As Object
' die folgende Zeile übernimmt die Ausweis-Nummer aus einem Feld des aktiven Formulars
sText = thisComponent.drawpage.forms.getByName("Reitschule2").getByName("Kundennummer").Text ' Bericht für genau diesen Kunden drucken!
oDataBaseContext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
oDataSource = oDataBaseContext.getByName( "Reitschule" )
oVerbindung = oDataSource.getConnection( "" , "" )
oStatement = oVerbindung.createStatement
sSQL = "UPDATE ""DruckSteuerung"" SET ""Kundennummer"" = " + sText ' Hilfstabelle mit der Ausweisnummer des aktiven Kunden beschreiben
oStatement.executeUpdate( sSQL )
Args(0).Name="ActiveConnection" : Args(0).Value=oVerbindung
Args(1).Name="OpenMode" : Args(1).Value="open"
on Error goto Fehler
oReportDoc=oDataSource.DatabaseDocument.ReportDocuments.loadComponentFromURL("Karten","_self",2,Args) ' Aufruf des Berichts
oReportDoc.CurrentController.Frame.ContainerWindow.setFocus()
Fehler:
End Sub
Dateianhänge
Screenshot
Screenshot
screen.jpg (126.67 KiB) 2754 mal betrachtet
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

Hallo Chairman,
erlaube mir bitte eine kritische Anmerkung......
Dieses Forum soll Dir Hilfe zur Selbsthilfe bieten, also Anstöße geben, die Dich in die Lage versetzen, SELBST weiterzudenken. OK?
Und nun zu Deinem Problem. Du hast doch die Lösung schon selbst vorgegeben.
Logisch, daß Dein Makro meckert. Wenn das Formular das Feld nicht kennt, kann es Dir auch nicht den Inhalt zur Verfügung stellen.
Wenn Du den Primärschlüssel (Kundennummer) brauchst, dann mußt Du ihn Dir halt besorgen. Der einfachste Weg ist, Du definierst Dir im Formular ein Feld, welches Du mit der Kundennummer in der Tabelle verbindest. Setze dann die Eigenschaften des Feldes auf "NICHT editierbar" und kein Tabstop. Dann kannst Du erst einmal testen. Wenn der Test erfolgreich ist, verkleinerst Du das Feld im Formular auf die kleinste mögliche Größe und versteckst es irgendwo im Formular. Es sollte nicht mehr im Formular sichtbar sein - notfalls änderst Du noch die Hintergrundfarbe des Feldes in die Formularfarbe.
Diese Lösung habe ich mir selbst erarbeitet, da ich auch ohne Unterstüzung schnell weiterkommen mußte. Kann sein, daß jemand eine bessere Lösung hat, aber sie ist wirklich die einfachste und mir gefällt sie.
So, jetzt besinne Dich auf Deine Fantasie und schau, daß Du vorankommst. Ich denke, die meisten haben so angefangen.
Viel Erfolg und besten Gruß
eBayer
ps. über eine Rückmeldung zu Deinem Fortschritt würde ich mich freuen
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi eBayer,

hab jetzt das Makro am laufen,
aber es passiert genau das Gleich wie bei dem normalen öffnen mit folgendem Makro.
Öffnet den Bericht mit dem aller ersten Datensatz der DB.

chairman

Code: Alles auswählen

Sub Open_Karten
Dim oDatenbankKontext AS Object
Dim oVerbindung As Object
Dim oDatenquelle As Object
Dim oReportDoc As Object
Dim Args(1) As New com.sun.star.beans.PropertyValue

oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
oDatenquelle = oDatenbankKontext.getByName("Reitschule")
oVerbindung = oDatenquelle.getConnection( "" , "" )

Args(0).Name="ActiveConnection" : Args(0).Value=oVerbindung
Args(1).Name="OpenMode" : Args(1).Value="open"
oReportDoc=oDatenquelle.DatabaseDocument.ReportDocuments.loadComponentFromURL("Karten","_self",2,Args)
oReportDoc.CurrentController.Frame.ContainerWindow.setFocus()

End Sub
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

ja logisch....... Du mußt natürlich Deinen Bericht anpassen, damit die Steuerung des Berichts über die Drucksteuerungstabelle erfolgen kann. Also nicht direkt auf die Tabelle gehen, sondern eine Abfrage im Bericht definieren, die Dir nur den Datensatz zur Verfügung stellt, der in der Drucksteuerungstabelle angefordert wird.
Hast Du denn zunächst mal kontrolliert, ob die Drucksteuerungstabelle ordnungsgemäß beschrieben wird?
Das wäre die erste Voraussetzung.
In der Abfrage müsste dann die Verbindung zur Drucksteuerungstabelle so ähnlich mit einer WHERE-Bedingung hergestellt werden:
SELECT........................... WHERE `Kundendatei`.`Ausweis_Nr` = `DruckSteuerung`.`Ausweis_Nr`
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi,

muss ich mal aus probieren.
Problem ist nur das die Tabelle leer bleibt.
Was brauch ich an Spalten in der Tabelle wenn ich das richtig verstehe brauch ich doch nur eine Spalte mit dem Namen Kundennummer.

chairman
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

das ist richtig....
jetzt kümmere Dich erst einmal um den Bericht.
Pflege manuell in die Drucksteuerungstabelle irgendeine Nummer ein und bring den Bericht zum laufen!
Die leere Tabelle wird wohl damit zusammen hängen, daß Du den falschen Datentyp verwendest. Um das ganze abzukürzen kann ich Dir auch anbieten, daß Du mir Deine Anwendung mit ein paar Testdaten zur Verfügung stellst. Entweder ich bringe dann die Korrekturen an oder ich teile Dir mit was zu machen ist.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
chairman
Beiträge: 9
Registriert: So, 10.05.2009 00:56

Re: Bericht aus Formular raus öffnen

Beitrag von chairman »

Hi eBayer,

so jetzt funktioniert es so dass man auch nur den aktuellen Datensatz angezeigt bekommt.

Wenn man natürlich Zeichen im Spaltennamen der Hilfstabelle verdreht, dann kann das ja auch nicht klappen :x .

Vielen vielen Dank für deine Hilfe.

chairman

PS:
Vielleicht kannste mir noch veraten, wie ich das jetzt so hin bekomme,
damit der Bericht sofort gedruckt wird(ohne das man manuell noch auf irgendetwas klicken muss)
und wieder geschlossen wird.
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Bericht aus Formular raus öffnen

Beitrag von eBayer »

na super..... ist doch schön, wenn man sich durchgekämpft hat.
Für die Frage nach dem Druck solltest Du Dich mal stark machen und mir dann das Ergebnis mitteilen :D
Ich suche dafür auch nach einer Lösung.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Antworten