"Autor" |
eine Frage zu MySQL... |
|
geschrieben am: 20.06.2005 um 21:42 Uhr
|
|
Hallo Leute,
ich bin's wieder mal mit einem kleinen Problem...
Es geht um folgendes...
Ich habe in meiner MySQL-Datenbank eine Tabelle "Rechnungen", wo der Kunde seine offene Rechnung begleichen soll (Termingebunden). Wie kann ich über eine MySQL-Syntax feststellen, dass der Kunde bereits bezahlt hat? (ähnlich wie bei der Checkbox unter MS Access)
Da der Kunde sowieso 14 Tage Zeit hat seine Rechnung zu begleichen, könnte man das an eine Bedingung knüpfen (dass der Kunde am soundso vielten Tag bezahlt hat, etc.).
Aber ich habe keine Möglichkeit zu prüfen, ob die Bedingung wahr oder falsch ist...
Kann mir jemand von euch einen Tipp dazu geben?
Besten Dank im Voraus,
Euer oller *prof* |
 |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 20.06.2005 um 21:55 Uhr
|
|
Wenn Du eine Spalte "Rechnungsdatum" hast, mach doch einfach eine Spalte "Rechnung bezahlt am" dazu, die bis zum Bezahlen leer ist/auf 1.1.1970 steht.
Dann kannst Du ohne Probleme sehen, ob die Rechnung bezahlt ist (WHERE bezahlt_am > rechnung_am, ggf. mit Datumsfunktionen einpacken). Und Du kannst -- wiederrum mit Datumsfunktionen -- die Anzahl Tage zwischen Rechnung und Zahlungseingang feststellen (Stichwort Skonto, Verzug).
Nebenbei: Ich weiß allerdings nicht, ob die "Zahlungsfrist" von 14 Tagen rechtlich wasserdicht ist. Kaufleute sollten nach 30 Tagen eh im Verzug sein, bei Privatkunden gibt es seit einiger Zeit ein neues, vereinfachtes Mahnwesen.
Noch nebenbeier: Es gibt irgendwo ein Linux-FiBu-Projekt (das bei meinem letzten Blick allerdings noch sehr rudimentär war und trotzdem unsinnig hohe Systemanforderungen hatte). Und für Nichtkaufleute gibt es eine ganze Menge 20€-Windows-Programme, die das alles können.
|
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 20.06.2005 um 22:05 Uhr
|
|
hi brünette22,
*gg* nee, ich will keine FiBu für ne Firma machen... es ist ein Datenbankprojekt für Testzwecke...
Ich habe ne nette kostenlose FiBu-Software für Windows (Lexware-BüroEasy für kleinere und mittlere Firmen). Da ist alles drin, was man so braucht als Selbstständiger...
Das mit der neuen Spalte hinzufügen ist zwar eine gute Idee, aber ebenso könnte ich das ja auch über ein externes Skript steuern lassen...
Nee, das mit der Syntax ist schon komisch, da ja jeder Kunde unterschiedliche Zahlungszeiträume haben kann bzw. auch mehrere Rechnungen.
Wie soll ich mir denn da zum Bsp. alle offenen Rechnungen anzeigen lassen, wenn die Zahlfrist unterschiedlich ist?
Es muss da noch einen einfacheren Weg geben...
naja, trotzdem danke... ich werde deinen Tipp mal ausprobieren und schauen was dabei passiert...
bis demnächst,
der olle *prof* |
 |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 20.06.2005 um 23:42 Uhr
|
|
(zitat)alle offenen Rechnungen anzeigen lassen, wenn die Zahlfrist unterschiedlich ist?(/zitat)Öhm, indem ich ne Spalte hinzufüge, wo die Zahlungsfrist in Tagen drinsteht und ich dann nach den Rechnungen frage, wo das Datum größer ist als Rechnungsdatum + Zahlungsfrist?!
Steven |
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin. |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 20.06.2005 um 23:43 Uhr
|
|
Jetzt mal Pseudocode ...
rechnung_am : Datumsfeld, wird mit Rechnungsdatum gefüllt
bezahlt_am : Datumsfeld, 1970-01-01, wird mit Buchungsdatum gefüllt
frist : integer, sagen wir 14 (Tage)
offenseit : "heute" minus rechnung_am
Bedingung "Rechnung ist offen und Zahlungsverzug" = offenseit größer als frist.
(zitat)SELECT
rechnungsnummer,
frist,
(TO_DAYS(NOW()) - TO_DAYS(rechnung_am)) AS offenseit
FROM Rechnungen
WHERE (bezahlt_am > rechnung_am)
AND (offenseit > frist)(/zitat)
Und ja, damit musst Du noch rumexperimentieren. ;-)
|
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 20.06.2005 um 23:45 Uhr
|
|
Steven: Ja, noch besser.
Pseudo: verzug_ab = rechnung_am + frist, SELECT WHERE "heute" > verzug_ab.
|
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 21.06.2005 um 00:15 Uhr
|
|
Hm...das setzt natürlich voraus, dass es eine Spalte gibt, in der steht, ob bezahlt oder offen (was ja das Buchungsdatum sein kann) und ich dann nur innerhalb derrer suche, welche offen sind.
Steven |
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin. |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 27.06.2005 um 18:07 Uhr
|
|
wie sieht die tabelle eigentlich genau aus ? |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 01.07.2005 um 19:12 Uhr
|
|
hehe, danke für eure lustigen Tipps, wenn auch nützlich... :-)
mittlerweile habe ich mich intensiver mit dem prob herumgeschlagen und bin quasi auf das gleiche Ergebnis gekommen wie "brünette22" (eine Art Seelenverwandtschaft?).
Ich habe folgendes:
Rechnungsdatum, Zahlfrist_bis und Rechnungsstatus.
Rechnungszeitraum in der Regel 14 Tage (wenn nicht anders vereinbart) bei private Kunden. Firmenkunden haben 30 Tage Zeit die Rechnung zu begleichen. Der REchnungsstatus gibt bloß an, dass eine Rechnung bezahlt wurde, dass die Zahlung pünktlich erfolgte oder in Verzug ist. je nach Situation habe ich 6 (von 0 bis 5) verschiedene Variationen gefunden, wo eine Rechnung bezahlt wird, oder nicht.
Entscheidend für eine Statusänderung zu Gunsten der Firma und des Kunden, ist die Differenz zwischen rechnungsdatum und Zahlfrist_bis. Die kann man logischerweise als Bedingung betrachten, die entweder erfüllt wurde oder nicht.
Darauf basiert anschließend auch die Abfrage, ob eine bestimmte Rechnung bezahlt wurde oder nicht.
Ich finde, dass dies eine optimale Lösung ist, und ohne großen Zeitaufwand zu programmieren. Möglicherweise kann man auch gewisse Abfragen automatisieren im Zusammenhang mit einem (zum Bsp.) darauffolgenden Mahnschreiben, wenn eine Rechnung gerade nicht bezahlt wurde oder schon lange überfällig ist...
Was haltet ihr davon?
bis denne,
der olle *prof* |
 |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 01.07.2005 um 21:38 Uhr
|
|
Zahlfrist_bis?!
Soll heißen, da steht dann ein Datum drin, welches Rechnungsdatum + Zahlfrist ist? Wie lässt du das eintragen? Etwa per Hand? Oder hast du in einer anderen Tabelle diese Zahlungsfrist und addierst diese dann zum Rechnungsdatum und lässt sie dann eintragen?
Wie mans am Ende macht, ist egal. Das Ergebnis bleibt das gleiche. Wenn sind halt die Abfragen/Kombinationen anders.
Steven |
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin. |
|
|
|
|
Top
|
"Autor" |
|
|
geschrieben am: 09.07.2005 um 21:41 Uhr
|
|
hi steven,
sicher ist da ein Datum drin bei "Zahlfrist_bis", weil es bestimmte Zahlfristen gibt (7, 14, 30 Tage). Die kann man so zu sagen als Konstante betrachten (Rechnungsdatum + Konstante (7 oder 14 oder 30 Tage) = "Zahlfrist_bis").
c ya next,
the *prof* |
 |
|
|
|
|
Top
|