Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Datenstruktur für Bankkonto (https://www.delphipraxis.net/171798-datenstruktur-fuer-bankkonto.html)

NormanNG 26. Nov 2012 08:06

Datenstruktur für Bankkonto
 
Hallo

ich bin unsicher, wie ich eine klassische Bankkonto-Struktur elegant abbilden kann.

Konto
o alKonto
o Bezeichnung

Buchung
o alBuchung
o alKonto
o Flag Soll/Haben
o Betrag

Zu jedem Buchungssatz gehören immer mindestens zwei Buchungen.

Mein Problem: der Konto-Saldo
Soll ich den immer wieder neu berechen, oder in einem Feld am Konto mitführen?
Wie soll ich einen Periodenwechsel (z.B. Jahresende) darstellen?

Kann mir bitte jemand auf die Sprünge helfen?

Union 26. Nov 2012 08:13

AW: Datenstruktur für Bankkonto
 
Ich würd mal das Flag Soll/Haben weglassen und stattdessen positive oder negative Zahlen verwenden. Was S/H ist hängt nämlich von der Sichtweise ab (Sicht Bank/Kunde).

In echten Bankanwendungen werden die Rechenwerte immer mitgeführt (Performance), und auch um Abweichungen und damit potentielle Fehler finden zu können.

Beim Jahreswechsel buchst Du den Saldo erst aus und dann wieder ein. Am besten über dafür vorgesehene Abschluss- und Eröffnungskonten.

NormanNG 26. Nov 2012 08:25

AW: Datenstruktur für Bankkonto
 
Dank für die schnelle Antwort.

Das mit dem S/H muss ich dann nochmal überdenken.

Mein eigendliches Problem ist aber, wohin mit dem Konto-Saldo?

Nersgatt 26. Nov 2012 08:33

AW: Datenstruktur für Bankkonto
 
Wenn Du es machst, wie vorgeschlagen (also negativ/positiv buchen), dann ist der Saldo immer ganz einfach
Code:
SELECT SUM(BETRAG) AS SALDO FROM BUCHUNGEN
Also einfacher kann die Saldoberechnung gar nicht sein. Daher würde ich ihn immer live berechnen, sonst hast Du ja eine Redundanz drin.
Nur wenn Du wirklich Performanceprobleme hast (unwarscheinlich), könntest Du den Saldo per Trigger in den Kopf schreiben.

NormanNG 26. Nov 2012 08:43

AW: Datenstruktur für Bankkonto
 
OK, dann darf eine "Archivierung" der Daten z.B. am Jahresanfang nie stattfinden. Es bleibt also immer alles "drin".

Wie machen das die Banken?
Dort müssen doch irgendwann mal alte Daten zur Seite gelegt (sprich archiviert) werden, oder nicht?

Union 26. Nov 2012 08:49

AW: Datenstruktur für Bankkonto
 
Ja, es wird natürlich immer archiviert. Und es werden bestimmte Werte (u.a. der Saldo) immer redundant mitgeführt. Dadurch kann man Probleme und Fehler im Tagesabschluss erkennen, wenn man das Ergebnis der SUM() mit dem gespeicherten Saldo vergleicht.

Blup 26. Nov 2012 09:47

AW: Datenstruktur für Bankkonto
 
Zwischen Soll- und Habenbuchung würde ich unabhängig vom Vorzeichen des Betrages unterscheiden.
So kann man Buchung und Storno besser darstellen z.B.:
- Soll Debitor, Haben Erlöskonto, positiver Betrag -> Rechnungsausgang
- Soll Debitor, Haben Erlöskonto, negativer Betrag -> Storno Rechnungsausgang
- Soll Sachkonto-Bank, Haben Debitor, positiver Betrag -> Zahlungseingang Lastschrift
- Soll Sachkonto-Bank, Haben Debitor, negativer Betrag -> Storno Zahlungseingang Lastschrift

Zusätzliche Saldentabellen bringen auch die Möglichkeit für zusätzliche Fehler.
Wenn nicht tausende Buchungen je Konto zu erwarten zu erwarten sind, den Saldo immer neu berechnen.

Periodenwechsel/Archivierung
- ein Konto "Saldo 2012" einrichten
- zum Jahreswechsel Saldo jedes Kontos auf "Saldo 2012" buchen
(diese und alle im Saldo berücksichtigten Buchungen wandern später ins Archiv)
- zum Jahresanfang von "Saldo 2012" wieder auf die einzelne Konten
(diese und alle neueren Buchungen bleiben im aktuellen Datenbestand)

Sir Rufo 26. Nov 2012 09:52

AW: Datenstruktur für Bankkonto
 
Bei den Buchungen fehlt mindestens ein Feld: das Buchungsdatum
(Banken haben normalerweise 2 Felder: Buchungsdatum, Valutadatum)

Weiterhin gibt es noch mindestens eine Tabelle mit den Salden pro Konto und Buch-Jahr und oder Buch-Monat, Buch-Tag.

Wird eine Buchung (Datensatz in der Tabelle Buchungen) eingebucht so wird nicht nur der Datensatz eingetragen, sondern auch alle betroffenen Salden entsprechend angepasst.

Dazu müssen aber die Salden nicht erneut mit allen Buchungen berechnet werden, sondern zum Saldo wird der neue Buchwert einfach hinzu addiert.

Bei einem Tagesabschluss werden dann alle Buchungen aufaddiert und mit den Salden verglichen (diese müssten ja eigentlich gleich sein) und bei Bedarf auch angepasst. Abweichungen sind auch ein Hinweis auf Probleme in der Buchungsroutine.

Sir Rufo 26. Nov 2012 09:59

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Blup (Beitrag 1192941)
So kann man Buchung und Storno besser darstellen z.B.:

AFAIK buchen Banken niemals einen Storno auf einem Kundenkonto.

Es werden Rückbuchungen erstellt, die den alten Vorgang zurücknehmen.
Dabei handelt es sich aber um eine eigenständige Buchung und keinen Storno.

NormanNG 26. Nov 2012 16:24

AW: Datenstruktur für Bankkonto
 
OK.
Wahrscheinlich berechne ich die Saldo jeweils neu und führe einen "Kontroll-Saldo" am Konto mit, um ggf. Fehler in den Buchungsroutinen sofort erkennen zu können.

Danke für die Antworten.

Furtbichler 26. Nov 2012 19:11

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Blup (Beitrag 1192941)
So kann man Buchung und Storno besser darstellen z.B.:
- Soll Debitor, Haben Erlöskonto, positiver Betrag -> Rechnungsausgang
- Soll Debitor, Haben Erlöskonto, negativer Betrag -> Storno Rechnungsausgang
- Soll Sachkonto-Bank, Haben Debitor, positiver Betrag -> Zahlungseingang Lastschrift
- Soll Sachkonto-Bank, Haben Debitor, negativer Betrag -> Storno Zahlungseingang Lastschrift

Wenn ich das richtig verstanden habe, willst Du eine Buchungsart so kodieren.
Blödsinn. Spendiere der Buchung ein eigenes Feld 'Buchungsart'.

Wenn ich das nicht richtig verstanden habe, ist der Blödsinn natürlich in meinen Ausführungen.

Captnemo 27. Nov 2012 07:54

AW: Datenstruktur für Bankkonto
 
Wenn es nur um ein reines Bankkonto geht, dann kann man eigentlich den Saldo sofort berechnen, da ja keine früheren Buchungen mehr hinzukommen dürften, bzw. keine Korrekturen. Bei einem Kassenbuch wäre das anders.

Ich rufe diese Daten von der Bank direkt ab, und da ist noch nie eine ältere Buchung zu einem späteren Zeitpunkt hinzugekommen. (allerding kann ich nur von meiner Bank reden).

Der Vorteil wäre ja, dass der Saldo unabhängig vom Datenbestand und von irgendwelchen Jahres-, Monatsabschlüssen.

Sir Rufo 27. Nov 2012 09:11

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Captnemo (Beitrag 1193145)
Ich rufe diese Daten von der Bank direkt ab, und da ist noch nie eine ältere Buchung zu einem späteren Zeitpunkt hinzugekommen. (allerding kann ich nur von meiner Bank reden).

Die Bank unterscheidet zwischen Buchungsdatum (Eingang der Buchung) und Valuta (Wertstellung).
Du holst die Daten nach dem Buchungsdatum ab (logischerweise, denn was noch nicht da ist, kann noch nicht abgeholt werden), aber die Berechnung von Zinsen erfolgt auf Basis des Valutadatums.

Und gerade bei Rückbuchungen ist das Valutadatum gleich dem Valutadatum der originalen Buchung und kann deshalb auch vor dem Buchungsdatum liegen.

Code:
Buchung..Valuta...SOLL...HABEN
04.01.12 03.01.12          5,00
02.01.12 03.01.12   5,00
Somit bekommst du von der Bank de facto doch alte Buchungen ;)

joachimd 27. Nov 2012 09:15

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Captnemo (Beitrag 1193145)
Ich rufe diese Daten von der Bank direkt ab

Hast du dazu Details? Ich habe mir auch ein kleines Haushaltsbuch geschrieben und das fehlt noch;)

Sir Rufo 27. Nov 2012 09:26

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von joachimd (Beitrag 1193160)
Zitat:

Zitat von Captnemo (Beitrag 1193145)
Ich rufe diese Daten von der Bank direkt ab

Hast du dazu Details? Ich habe mir auch ein kleines Haushaltsbuch geschrieben und das fehlt noch;)

DataDesign HBCI Banking Application Components (DDBAC) für Windows

joachimd 27. Nov 2012 10:03

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Sir Rufo (Beitrag 1193165)

Danke Dir dafür, aber leider
Zitat:

Dazu wird im Controlpanel der Banking Administrator installiert.
Meine Software läuft vom Stick, eine lokale Installation möchte ich vermeiden.

Captnemo 27. Nov 2012 10:54

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von Sir Rufo (Beitrag 1193156)
Die Bank unterscheidet zwischen Buchungsdatum (Eingang der Buchung) und Valuta (Wertstellung).
Du holst die Daten nach dem Buchungsdatum ab (logischerweise, denn was noch nicht da ist, kann noch nicht abgeholt werden), aber die Berechnung von Zinsen erfolgt auf Basis des Valutadatums.

Und gerade bei Rückbuchungen ist das Valutadatum gleich dem Valutadatum der originalen Buchung und kann deshalb auch vor dem Buchungsdatum liegen.

Code:
Buchung..Valuta...SOLL...HABEN
04.01.12 03.01.12          5,00
02.01.12 03.01.12   5,00
Somit bekommst du von der Bank de facto doch alte Buchungen ;)

Okay, das kann sein. Ich persönlich hatte so einen Fall noch nicht.

Captnemo 27. Nov 2012 10:59

AW: Datenstruktur für Bankkonto
 
Zitat:

Zitat von joachimd (Beitrag 1193172)
Zitat:

Zitat von Sir Rufo (Beitrag 1193165)

Danke Dir dafür, aber leider
Zitat:

Dazu wird im Controlpanel der Banking Administrator installiert.
Meine Software läuft vom Stick, eine lokale Installation möchte ich vermeiden.

Wenn du dazu was findest, dann sag mal bescheid. Würde mich auch brennend interessieren. Ich habe es mit DDBAC gemacht, und bin damit recht zufrieden.
Ohne die zwingende Installation wäre natürlich noch schöner. Aber ich habe seinerzeit nichts brauchbares gefunden.

gb0 27. Nov 2012 12:09

AW: Datenstruktur für Bankkonto
 
Hatte vor ein paar Wochen soetwas ...
Zitat:

Zitat von Sir Rufo
AFAIK buchen Banken niemals einen Storno auf einem Kundenkonto.
Es lief in der später von Sir Rufo beschriebenen Weise (Valutierung einer Buchung ein paar Tage später ab, unter der Bezeichnung Storno). Ausgewiesen wird von der Bank hier aber nur Eingang/Abbuchung per Vorzeichen (nicht 2 Spalten).
Der Empfänger hatte Spalten entsprechend S/H, trotzdem mit Vorzeichen. Dadurch war die Storno-Buchung bei den Einzahlungen, aber durch das Vorzeichen unterschieden. Dort war keine Valuta-Spalte - nur das tatsächliche Eingangs=Buchungsdatum. Zur Nachvollziehbarkeit jedoch gab es noch eine Belegreferenz als Feld. Die Bank führt soetwas immer im Text an..., vermute aber, dass es dafür auch intern ein Feld geben dürfte.

Günther


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz