Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

Hallo,

ich versuche gerade mich in LibreOffice Base 5.4.2.2 (Betriebssystem: Linux) einzuarbeiten. Mein Ziel ist das Erstellen einer Datenbank, die Kundendaten und Verkaufsposten enthält. Die Verkaufsposten sollen dann in regelmäßigen Zeitabständen (manuell) in einer Rechnung mit eindeutiger Rechnungsnummer aufgeführt werden.

Ich habe nach dieser Anleitung: http://www.linux-community.de/index.php ... und-Writer
mal angefangen eine Datenbank und ein Rechnungsschreiben (Writer) zu erstellen.

Das ist ja schonmal ein Anfang, aber es gibt ein paar Sachen die mich dabei stören:
  • In der Tabelle "Rechnugen" muss zu jeder Rechnungsnummer die komplette Anschrift des Kunden eingegeben werden. Besser wäre es, jeder Rechnungsnummer eine Kundennummer zuzuweisen, daraus ergibt sich ja dann der Rest.
  • Es gibt nur einen Gesamtbetrag. Ich würde gerne jeder Rechnungsnummer verschiedene Rechnugsposten zuweisen können, die dann aufsummiert werden.
Ich würde mich riesig freuen, wenn mir das jemand Schritt für Schritt erklären könnte :)
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

Hallo alviana,

schau dir einmal auf meiner Seite http://robert.familiegrosskopf.de den Link zu EGR-Rechnung an. Ist nicht das Einzige, was ich zu Rechnungsdatenbanken gemacht habe. Da müsste noch an anderen Stellen viel zu finden sein, auch im Base-Handbuch. Auch die Ausgabe von Rechnungen habe ich an den unterschiedlichsten Stellen auf unterschiedlichste Art und Weise beschrieben: Als internen Bericht der *.odb-Datenbank oder auch in Tabellenform im Writer mit Unterstützung von Makros.

Gruß

Robert
hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von hylli »

Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

Danke Robert und Hylli für die Links.
Es mangelt mir nicht an Beispielen, davon gibts ja genug und das "Beispiel_Bericht_Rechnung.odb" aus dem offiziellen Handbuch kommt dem was ich mir wünsche schon recht nahe. Es kommt aber leider nicht ohne Makros aus und zum Einstieg würde ich es gerne erstmal ohne Makros probieren. Außerdem geht es mir auch darum zu verstehen, wie ich mir selbst eine Datenbank zusammenbasteln kann und nicht nur darum eine bestehende Datenbank zu benutzen.

Ich habe mal angefangen und eine "Kunden_und_Rechnungen.odb" erstellt.
Es gibt vier Tabellen (siehe Anhang):
  • TBL_Produkte: Hier sollen die zu verkaufenden Produkte/Dienstleistungen inkl. Einzelpreis und optional Mehrwertsteuer aufgelistet sein
  • TBL_Verkauf: Hier sollen zu jedem verkauften Produkt das Verkaufsdatum, die Anzahl und die Rechnungsnummer, auf der das Produkt erscheint auftauchen
  • TBL_Rechnungen: Hier soll zu jeder Rechnungsnummer ein Rechnugsdatum, die Kundennummer des Käufers und die Rechnungssumme aufgeführt sein. Zusätzlich soll man ein Häkchen dransetzen können wenn die Rechnung bezahlt ist
  • TBL_Kunden: Hier sind alle Kunden unter einer eindeutigen Nummer registriert.
Die Beziehungen zwischen den Tabellen habe ich wie im Anhang dargestellt definiert:
Bildschirmfoto_2018-01-18_17-50-07.png
Bildschirmfoto_2018-01-18_17-50-07.png (36.88 KiB) 12174 mal betrachtet
Meine Frage ist jetzt zuerst mal: Ist das bisher so sinnvoll oder eher nicht?

Als nächstes brauche ich ein Formular, das ungefähr so aussieht:
Bildschirmfoto_2018-01-18_21-11-42.png
Bildschirmfoto_2018-01-18_21-11-42.png (70.11 KiB) 12174 mal betrachtet
Hab das mal mit Calc gemacht, damit klar ist was ich meine. Damit sollen dann alle Rechnungsposten einer Rechnung eingegeben werden.
Habe das mal in ein Formular mit Unterformular eingebaut:
Bildschirmfoto_2018-01-18_21-17-48.png
Bildschirmfoto_2018-01-18_21-17-48.png (85.88 KiB) 12174 mal betrachtet
Wenn ich dann versuche einen Datensatz in die Tabelle einzugeben kommt diese Fehlermeldung.
Wäre froh wenn mir jemand helfen kann :)
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

Hallo alivana,

die Rechnungssumme solltest Du nicht in eine Tabelle schreiben, sondern aus dem Verkauf ermitteln. Dann passen die Daten entsprechend immer zusammen. Ansonsten reicht das Ganze erst einmal, sofern Du nicht gleich zu Anfang darauf Rücksicht nehmen willst, dass sich die Preise der Produkte auch einmal ändern können.

Die Fehlermeldung in Deinem Formular kommt daher, dass Du in TBL_Verkauf ein Feld "ID" hast, das der Primärschlüssel sein soll. Vermutlich hast Du das zwar auf INTEGER gesetzt, aber vergessen, daraus auch noch einen AutoWert zu machen.

Das Makro in "Beispiel_Bericht_Rechnung.odb" habe ich übrigens nur für die Filterung des anzuzeigenden Datensatzes und den Start des Berichtes verwendet. Ohne zumindest ein einfaches Makro kannst Du keinen Bericht aus einem Formular heraus starten. Dann musst Du eben in die Berichtsansicht gehen und das erledigen.

Gruß

Robert
alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

RobertG hat geschrieben: Fr, 19.01.2018 18:49die Rechnungssumme solltest Du nicht in eine Tabelle schreiben, sondern aus dem Verkauf ermitteln. Dann passen die Daten entsprechend immer zusammen. Ansonsten reicht das Ganze erst einmal, sofern Du nicht gleich zu Anfang darauf Rücksicht nehmen willst, dass sich die Preise der Produkte auch einmal ändern können.
Ich hatte mir das mit der Rechnungssumme so vorgestellt, dass die Rechnungssummer ein Feld ist, das automatisch aus den Verkäufen berechnet und ausgefüllt wird.
Wie könnte ich berücksichtigen, dass sich die Preise auch mal ändern können? Die "alten" Rechnungen sollten dann natürlich nicht nachträglich ihren Betrag ändern...
RobertG hat geschrieben: Fr, 19.01.2018 18:49Die Fehlermeldung in Deinem Formular kommt daher, dass Du in TBL_Verkauf ein Feld "ID" hast, das der Primärschlüssel sein soll. Vermutlich hast Du das zwar auf INTEGER gesetzt, aber vergessen, daraus auch noch einen AutoWert zu machen.
Ja, genau das war das Problem, danke :)
RobertG hat geschrieben: Fr, 19.01.2018 18:49Ohne zumindest ein einfaches Makro kannst Du keinen Bericht aus einem Formular heraus starten. Dann musst Du eben in die Berichtsansicht gehen und das erledigen.
Damit kann ich leben.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

Hallo aliviana,

wenn Du Preisänderungen mit drin haben willst, dann musst Du irgendwie Preise in einer separaten Tabelle verwalten. Die Preise werden dann abhängig von einem Datum gespeichert. Als Fremdschlüsselfeld müsste dann die ID_Produkte enthalten sein.

Schau Dir einfach einmal die Unterrichtsreihe Rechnungsdatenbanken an. Da ist dafür ein Beispiel enthalten. Die Unterrichtsreihe entspricht in weiten Teilen dem, was Du bisher in Deinem Entwurf stehen hast.

Die Summe, wie gesagt, bleibt draußen. Die wird berechnet. Bei tatsächlichen Rechnungen würde ich über den ReportBuilder eine *.pdf-Datei erzeugen und natürlich die Rechnung auch noch ausdrucken. Dann hast Du immer den Preis zur Sicherheit noch einmal irgendwo abgelegt.

(Link geändert ...)

Gruß

Robert
Zuletzt geändert von RobertG am Sa, 20.01.2018 17:54, insgesamt 2-mal geändert.
alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

Der Link funktioniert leider nicht.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von F3K Total »

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

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

... da hatte ich doch glatt falsche Links auf meiner Homepage.

Gruß

Robert
alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

Ok, ich habe mir die Unterrichtsreihe_Rechnungsdatenbanken mal angeschaut und habe mal meine Abfrage entsprechend umgebaut.

Hier meine ursprüngliche Abfrage:

Code: Alles auswählen

SELECT "TBL_Verkauf".*, "TBL_Produkte"."Preis", "Anzahl" * "Preis" FROM "TBL_Verkauf", "TBL_Produkte" WHERE "TBL_Verkauf"."ID_Produkte" = "TBL_Produkte"."ID"
Es sollen alle Felder aus TBL_Verkauf sowie der Einzelpreis und die Einzelsumme der verkauften Produkte angezeigt werden.
Analog zur Unterrichtsreihe habe ich das mal angepasst:

Der Tabelle TBL_Verkauf den Alias a zuweisen:

Code: Alles auswählen

SELECT "a".*, "TBL_Produkte"."Preis", "Anzahl" * "Preis" FROM "TBL_Verkauf" AS "a", "TBL_Produkte" WHERE "a"."ID_Produkte" = "TBL_Produkte"."ID"
"Anzahl" * "Preis" durch Unterabfrage ersetzen:

Code: Alles auswählen

SELECT "a".*, "TBL_Produkte"."Preis", ( SELECT "a"."Anzahl" * "Preis" FROM "TBL_Produkte" WHERE "ID" = "a"."ID_Produkte" ) AS "Anzahl * Preis" FROM "TBL_Verkauf" AS "a", "TBL_Produkte" WHERE "a"."ID_Produkte" = "TBL_Produkte"."ID"
Tabelle TBL_Produkte aus der Anfrage entfernen, d.h. "TBL_Produkte"."Preis" durch Unterabfrage ersetzen:

Code: Alles auswählen

SELECT "a".*, (select "Preis" from "TBL_Produkte" where "ID" = "a"."ID_Produkte") as "Preis", ( SELECT "a"."Anzahl" * "Preis" FROM "TBL_Produkte" WHERE "ID" = "a"."ID_Produkte" ) AS "Anzahl * Preis" FROM "TBL_Verkauf" AS "a"
So, ich hoffe das ist soweit richtig. Die Abfrage liefert zumindest mal die erwarteten Werte.

Aber ich habe nicht verstanden was ich da genau getan habe und vor allem Warum? Das Ergebnis unterscheidet sich ja nicht. Laut Unterrichtsreihe kann man keine neuen Daten eingeben, wenn man diesen Firlefanz nicht macht. Aber warum geht es ohne nicht und warum funktioniert es mit?
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

Hallo alviana,

grundsätzlich benötigt eine Abfrage, in der weiter Daten eingegeben werden können, immer die Primärschlüssel aller Tabelle, aus denen Du Felder in der Abfrage hast. Ausgenommen davon sind Tabellen, die irgendwo z.B. in einer korrelierenden Unterabfrage liegen. Wie weit das jetzt auf Deine Konstruktion zutrifft habe ich jetzt nicht noch überprüft. Zumindest in der ersten Abfrage fehlt von TBL_Produkte der Primärschlüssel in der Abfrage.

Gruß

Robert
alviana
Beiträge: 6
Registriert: Di, 16.01.2018 15:37

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von alviana »

Ich verstehe nicht wieso der Primärschlüssel fehlt. Mit:
SELECT "TBL_Verkauf".* ...
sind doch alle Felder der Tabelle TBL_Verkauf ausgewählt, oder nicht?
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Kundendatenbak mit Rechnungsposten und Rechnungserstellung

Beitrag von RobertG »

Hallo alviana,

Du hast auch noch die Tabelle "TBL_Produkte" mit dabei.

Code: Alles auswählen

SELECT "TBL_Verkauf".*, "TBL_Produkte".*, "Anzahl" * "Preis" 
FROM "TBL_Verkauf", "TBL_Produkte" WHERE "TBL_Verkauf"."ID_Produkte" = "TBL_Produkte"."ID"
müsste editierbar sein.
Jetzt hast Du aber noch das Problem, dass bei Änderungen die zu berechnenden Summen/Produkte nicht aktualisiert werden. Das habe ich hier als Bug gemeldet:
https://bugs.documentfoundation.org/sho ... i?id=61871

Deswegen der Umweg über die korrelierende Unterabfrage.

Gruß

Robert
Antworten