Rechnung aus DB erstellen

Das Textverarbeitungsprogramm

Moderator: Moderatoren

ractive
Beiträge: 3
Registriert: Fr, 22.08.2003 18:43
Wohnort: Zürich
Kontaktdaten:

Rechnung aus DB erstellen

Beitrag von ractive »

Hallo zusammen

Wir haben einen kleinen Online-Shop, in dem Kunden Produkte bestellen (was sonst :-)). Die Bestellungen werden in einer MySQL-Datenbank gespeichert.
Ganz vereinfacht sieht die Tabellen-Struktur der DB folgendermassen aus:

Code: Alles auswählen

Bestellungen:
+----------+-----------+-------------+
| order_id | firstname | lastname    |
+----------+-----------+-------------+
|        1 | Bergamin  | Jean-Pierre |
|        2 | Müller    | Hans        |
|        3 | Muster    | Peter       |
+----------+-----------+-------------+

Produktebestellungen:
+----------+----------+--------+
| order_id | prod_id  | amount |
+----------+----------+--------+
|        1 | N01      |      1 |
|        2 | FR04     |      9 |
|        2 | N03      |      2 |
|        2 | N01      |      1 |
|        3 | FR04     |      1 |
|        3 | N03      |      1 |
+----------+----------+--------+

Produkte:
+---------+------------------+-------+
| prod_id | descr            | price |
+---------+------------------+-------+
| N01     | MS Office        |  1500 |
| FR04    | OpenOffice       |     0 |
| N03     | StarOffice 6     |    80 |
+---------+------------------+-------+
Nun möchte ich daraus automatisch eine Rechnung im OpenOffice-Writer (1.1 RC3) generieren. Als einziger Parameter dient die Bestellnummer. Es sollte also ein Dokument anhand einer Bestellnummer erstellt werden im Stil von:

Code: Alles auswählen

Müller Hans

Bestellnummer 2

Sie haben bestellt:
   9 FR04 OpenOffice    Fr.    0.-    Fr.    0.-
   2 N03  StarOffice    Fr.   80.-    Fr.  160.-
   1 N01  MS Office     Fr. 1500.-    Fr. 1500.-
   Total                              Fr. 1660.-
Mein erster Versuch sieht nun so aus, dass ich ein Formular (namens Bestellung) kreiert habe, mit dem man durch die Tabelle "Bestellungen" browsen kann. Das ist schon mal sehr praktisch.

Ich habe jetzt herausgefunden, dass man bei einem Unterformular einen Parameter für eine SQL-Abfrage angeben kann (mit "Verknüpfen von order_id" und "Verknüpfen nach x"). Also benutze ich für das Unterformular "SQL-Befehl" als "Art des Inhalts" und als "Inhalt" "SELECT amount, prod_id, descr, price FROM Produktebestellungen WHERE order_id = : x"

Hier hänge ich nun fest. Im Unterformular (namens Produkte) kann ich nun durch die Produkte browsen, die bestellt wurden, aber ich schaffe es nicht, sie einfach untereinander auszugeben.

Ich könnte zwar ein Tabellen-Kontrollfeld in das Unterformular einbinden, doch das sieht für den Ausdruck nicht wirklich gut aus.

Wie kann ich nun Felder einfügen, die sich auf die Datensätze beziehen, die mit dem SQL-Befehl im Unterformular auslese? Ich hab verschiedenes versucht, wie "Bestellung.Produkte.prod_id". Das funktioniert aber leider nicht. Wenn ich die Datenquelle des Unterformulars anzeigen lassen und die Datensätze (sprich die bestellten Produkte) ins Dokument ziehe, wird auch nichts eingefügt.

Ich habe auch schon versucht, das ganze auf einem mit dem AutoPiloten erstellten Bericht aufzubauen, dort verstehe ich allerdings überhaupt nicht, wie der Bericht mit Daten gefüllt wird. :(

Vielen Dank für eure Hilfe.


Grüsse

James
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Re: Rechnung aus DB erstellen

Beitrag von openmind »

ractive hat geschrieben:Ich könnte zwar ein Tabellen-Kontrollfeld in das Unterformular einbinden, doch das sieht für den Ausdruck nicht wirklich gut aus.
Wie soll denn das ohne Tabelle gemacht werden? Du brauchst ein Control, dass eine unbeschränkte Anzahl von bestellten Produkten anzeigen kann, da biete sich wohl ein Tabellen-Control an. Wenn Du da eine andere Lösung weist, dann wäre ich daran interessiert.

Persönlich würde ich das ganze mit basic erledigen. Das ist am Schluss klarer und flexibler als die Formlar-Lösung. In der Tabelle, Bestellungen sollte es ein Flag geben, welches kennzeichnet, ob schon ein Rechnung produziert worden ist oder nicht. Mache ein SELECT, welches alle Bestellungen ohne Rechnung heraussucht, loope durch das Resultset und starte für jeden Record ein Macro, das ein neues Writer-Dok produziert (eine Vorlage öffnet), die Daten aus der DB zieht und sie in Writer-Doc einfügt. Dann hast Du gar keine Formulare mehr, das Writer-Doc schaut tiptop aus, Du kannst die Sache offscreen und im Hintergurnd erledigen lassen und erst noch ein Writer und PDF (OOo1.1) aufs mal erzeugen oder es gleich an den Printer schicken.


Sollte Basic nicht ok sein, dann würde ich da eher mit Datenbankfeldern (Feldbefehle) bzw. Serienbrieffunktionen arbeiten, als mit Formularen, denn wie Du richtig bemerkst, sollte eine Rechnung keine Formularelemente enthalten.

Sorry, mehr als Anregungen kann ich sonnst nicht bieten


Beispiel zu OOoBasic: http://www.kaldewey-online.de/postnuke/ ... m&forum=20
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
ractive
Beiträge: 3
Registriert: Fr, 22.08.2003 18:43
Wohnort: Zürich
Kontaktdaten:

Beitrag von ractive »

Ich glaube langsam auch, dass es ohne OOo-Basic nicht möglich ist. Dann für ich mir das halt zu Gemüte... :?

Wenn jemand schon mal sowas gemacht hat, wäre ich froh, wenn er ein paar Code-Schnipsel posten könnte.

Übrigens: Wie funktionieren eigentlich die Berichte? Wenn ich eine Berichtsvorlage anschaue, sehe ich rein gar keine Feldbefehle, die die Dateninhalte repräsentieren. Steckt das Magie dahinter?


Viele Grüsse

James
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

In der KnowledgeDb, die ich oben erwähnte hat es einige Beispiele. Dort findest Du auch einen Beitrag mit Links zu Dokumentation zu Basic.

Vor allem das SunDocument zu BAsic ist sehr empfehlenswert.

Dan was zu finden, auch wenn das noch lange nicht vollständig ist:

http://www.openoffice.org/issues/show_bug.cgi?id=18327
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Antworten