Auf den Beitrag: (ID: 24718) sind "10" Antworten eingegangen (Gelesen: 804 Mal).
"Autor"

eine Frage zu MySQL...

Nutzer: prof.mastram
Status: Profiuser
Post schicken
Registriert seit: 21.04.2001
Anzahl Nachrichten: 1788

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"  
Nutzer: Brünette22
Status: Profiuser
Post schicken
Registriert seit: 14.11.2001
Anzahl Nachrichten: 696

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"  
Nutzer: prof.mastram
Status: Profiuser
Post schicken
Registriert seit: 21.04.2001
Anzahl Nachrichten: 1788

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"  
Nutzer: Steven
Status: Profiuser
Post schicken
Registriert seit: 25.08.2002
Anzahl Nachrichten: 3612

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"  
Nutzer: Brünette22
Status: Profiuser
Post schicken
Registriert seit: 14.11.2001
Anzahl Nachrichten: 696

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"  
Nutzer: Brünette22
Status: Profiuser
Post schicken
Registriert seit: 14.11.2001
Anzahl Nachrichten: 696

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"  
Nutzer: Steven
Status: Profiuser
Post schicken
Registriert seit: 25.08.2002
Anzahl Nachrichten: 3612

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"  
Nutzer: starchaser
Status: Profiuser
Post schicken
Registriert seit: 01.01.2000
Anzahl Nachrichten: 4935

geschrieben am: 27.06.2005    um 18:07 Uhr   
wie sieht die tabelle eigentlich genau aus ?
  Top
"Autor"  
Nutzer: prof.mastram
Status: Profiuser
Post schicken
Registriert seit: 21.04.2001
Anzahl Nachrichten: 1788

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"  
Nutzer: Steven
Status: Profiuser
Post schicken
Registriert seit: 25.08.2002
Anzahl Nachrichten: 3612

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"  
Nutzer: prof.mastram
Status: Profiuser
Post schicken
Registriert seit: 21.04.2001
Anzahl Nachrichten: 1788

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