Eine Vereinsverwaltung, die nur Mitglieder und Beiträge kennt, ist schnell gebaut. Soll der Verein die Beiträge per Lastschrift einziehen, fehlen ihr jedoch Angaben, die sich später nur mit Mühe ergänzen lassen: Bankverbindungen, Mandate mit Referenz und Unterschriftsdatum, Forderungen und die Läufe, in denen wir Lastschriften einreichen. Wie wir aus den Angaben der Datei „pain.008“ ein passendes Datenmodell ableiten und mit Beispieldaten füllen, zeigt der vorliegende Beitrag.
Was die Datei vom Modell verlangt
Die Datei aus dem Beitrag SEPA-Lastschrift: Das Format „pain.008“ (www.access-im-unternehmen.de/1628) verlangt für jeden Einzug Angaben, die ein Datenmodell liefern muss.
Wir ordnen sie den Tabellen zu, die wir in diesem Beitrag anlegen:
- MsgId, CreDtTm, ReqdColltnDt: Kennung, Erstellungszeitpunkt und Fälligkeit stehen in den Feldern MsgId, Erstellt und Faelligkeit der Tabelle tblLastschriftlaeufe.
- NbOfTxs, CtrlSum: Anzahl und Summe berechnen wir aus den Positionen eines Laufs. Wir speichern sie nicht.
- Cdtr, CdtrAcct, CdtrSchmeId: Name, IBAN und Gläubiger-Identifikationsnummer des Vereins stehen in den Feldern Vereinsname, VereinsIBAN und GlaeubigerID der Tabelle tblOptionen.
- MndtId, DtOfSgntr: Mandatsreferenz und Unterschriftsdatum stehen in den Feldern Mandatsreferenz und Unterschriftsdatum der Tabelle tblMandate.
- SeqTp: Den Folgetyp leiten wir aus den bisherigen Lastschriften eines Mandats ab.
- Dbtr, DbtrAcct: Kontoinhaber und IBAN stehen in den Feldern Kontoinhaber und IBAN der Tabelle tblBankverbindungen.
- InstdAmt: Der Betrag steht im Feld Betrag der Tabelle tblLastschriftpositionen.
- EndToEndId, Ustrd: Referenz und Verwendungszweck bilden wir beim Erzeugen der Datei aus dem Beitragsjahr, der Beitragsart und der Nummer der Forderung.
Die Vereinsverwaltung aus den Beiträgen Vereinsverwaltung: Von Excel zum Datenmodell (www.access-im-unternehmen.de/1106), Vereinsverwaltung: Migration (www.access-im-unternehmen.de/1107) und Vereinsverwaltung: Formulare (www.access-im-unternehmen.de/1134) endet bei den Formularen.
Sie enthält weder Bankverbindungen noch Mandate, Forderungen oder Läufe. Wir legen daher ein neues Modell an. Sie finden es in der Datenbank VereinsverwaltungDatenmodell.accdb.
Personen und Familien
Die Tabelle tblPersonen enthält die Stammdaten: Anrede, Vorname, Nachname, Geburtsdatum, Strasse, PLZ, Ort und EMail (siehe Bild 1).

Bild 1: Entwurf der Tabelle tblPersonen
Die Mitgliedschaft steht in der eigenen Tabelle tblMitgliedschaften, damit eine Person nach einem Austritt wieder eintreten kann.
Sie referenziert die Person, zu der die Mitgliedschaft gehört, sowie die Beitragsart über entsprechende Fremdschlüsselfelder. Außerdem speichert sie das Eintritts- und das Austrittsdatum (siehe Bild 2).

Bild 2: Entwurf der Tabelle tblMitgliedschaften
Die Tabelle tblFamilien besteht nur aus dem Primärschlüsselfeld FamilieID und dem Feld Familienname. Die Tabelle tblPersonen verweist über das Feld FamilieID darauf (siehe Bild 3). Das Feld ist optional, denn nicht jedes Mitglied gehört zu einer Familie. Die referenzielle Integrität lässt sich trotzdem erzwingen, weil Access für den Wert NULL keinen Verweis prüft. Wir nutzen die Familie später, um einen Familienbeitrag zu berechnen.

Bild 3: Entwurf der Tabelle tblFamilien
Mitgliedschaften und Beitragsarten
Die Tabelle tblMitgliedschaften verknüpft eine Person mit einer Beitragsart und enthält die Felder Eintritt und Austritt. Solange das Feld Austritt den Wert NULL hat, ist die Person Mitglied. Ein Wiedereintritt erzeugt eine zweite Mitgliedschaft derselben Person.
Die Tabelle tblBeitragsarten enthält die vier Arten Kinder, Jugendliche, Erwachsene und Senioren. Die Beträge stehen nicht dort, sondern in der Tabelle tblBeitragssaetze mit den Feldern GueltigAb, GueltigBis und Jahresbeitrag. Warum? Ganz einfach: So behalten wir bei einer Beitragsänderung den bisherigen Satz für zurückliegende Jahre und können für jeden Stichtag den gültigen Beitrag ermitteln. In den Beispieldaten kostet die Beitragsart Erwachsene bis zum 31.12.2025 55,00 Euro und ab dem 01.01.2026 60,00 Euro im Jahr (siehe Bild 4).

Bild 4: Daten der Tabellen tblBeitragsarten und tblBeitragssaetze
Den Satz, der an einem Stichtag gilt, liefert die Abfrage qryBeitragssaetzeAmStichtag:
PARAMETERS Stichtag DateTime; SELECT a.Beitragsart, s.GueltigAb, s.GueltigBis, s.Jahresbeitrag FROM tblBeitragssaetze AS s INNER JOIN tblBeitragsarten AS a ON s.BeitragsartID = a.BeitragsartID WHERE s.GueltigAb <= [Stichtag] AND (s.GueltigBis >= [Stichtag] OR s.GueltigBis IS NULL) ORDER BY a.Beitragsart;
Die Abfrage erwartet den Parameter Stichtag. Sie wählt alle Sätze, die an diesem Tag bereits gültig und noch nicht abgelaufen sind. Ein offener Satz hat im Feld GueltigBis den Wert NULL.
Ein Vergleich mit NULL ergibt NULL statt Wahr. Daher prüfen wir das Feld zusätzlich mit IS NULL. Für den 30.06.2025 liefert die Abfrage bei der Beitragsart Erwachsene den Betrag 55,00, für den 01.01.2026 den Betrag 60,00 (siehe Bild 5).

Bild 5: Beitragssätze am 1.1.2026
Bankverbindungen und Mandate
Die Tabelle tblBankverbindungen gehört zu einer Person und enthält die Felder Kontoinhaber, IBAN und BIC.
Der Kontoinhaber ist ein Textfeld, denn der Name auf dem Konto muss nicht der des Mitglieds sein: Bei einem Kind zahlt in der Regel ein Elternteil. Das Feld BIC bleibt optional, weil die Datei ohne BIC auskommt (siehe Bild 6).

Bild 6: Tabelle zum Speichern der Bankverbindung einer Person
Das Mandat steht in der Tabelle tblMandate (siehe Bild 7).

Bild 7: Tabelle zum Speichern der Mandate
Sie enthält diese Felder:
- BankverbindungID: Das Konto, von dem eingezogen wird.
- Mandatsreferenz: Die Kennung des Mandats mit höchstens 35 Zeichen. Der eindeutige Index idxMandatsreferenz lässt jede Referenz nur einmal zu.
- Unterschriftsdatum: Das Datum der Unterschrift auf dem Mandat.
- Mandatsart: Der Standardwert ist Wiederkehrend. Für ein Mandat, das nur für eine Lastschrift gilt, steht dort Einmalig.
- Status: Der Standardwert ist Aktiv. Weitere Werte, etwa für gesperrte Mandate, ergänzen wir im Beitrag zur Erfassung der Mandate.
In den Beispieldaten gibt es zu jedem Mitglied eine Bankverbindung und ein Mandat. Die vier Mitglieder der Familie Mueller teilen sich ein Konto, haben aber jeweils ein eigenes Mandat (siehe Bild 8).

Bild 8: Personen mit Mandaten und Bankdaten
Den Folgetyp speichern wir nicht. Er ergibt sich aus den Lastschriften, die ein Mandat bereits hatte: Hat das Mandat die Mandatsart Einmalig, gilt OOFF. Gibt es noch keine Lastschrift in einem eingereichten Lauf, gilt FRST, andernfalls RCUR. Ein gespeicherter Wert könnte dem tatsächlichen Verlauf widersprechen. Wie wir diese Ableitung per VBA umsetzen, zeigt der Beitrag Vereinsverwaltung: Mitglieder, Bankverbindungen und Mandate (www.access-im-unternehmen.de/1630).
Forderungen, Läufe und Positionen
Unser exklusives Angebot für Dich!
(Gilt für den Abschluss eines Jahres-Abonnements im ersten Jahr, danach 189,-/Jahr)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →