Mitgliedsbeiträge in Vereinen, Versicherungsbeiträge und andere regelmäßig anfallende Zahlungen zieht der Begünstigte am einfachsten per Lastschrift ein. Voraussetzung für den Lastschrifteinzug ist die Erteilung einer Einzugsermächtigung durch den Zahlungspflichtigen. Fallen nur wenige Lastschrifteinzüge an, verwendet man der Einfachheit halber ein entsprechendes Papierformular, aber wer etwa Kassenwart eines Vereins mit vielen Mitgliedern ist, möchte vielleicht mit weniger Arbeit auskommen.
Abgesehen von den nötigen Einzugsermächtigungen erfordert das Vereinfachen des Lastschrifteinzugs das Vorhandensein einiger Daten der Zahlungspflichtigen, am besten in Tabellenform:
- Name
- Bankleitzahl
- Kontonummer
Damit ausgerüstet widmen Sie sich dann dem sogenannten Datenträgeraustauschverfahren (abgekürzt DTA beziehungsweise DTAUS) und dem damit verbundenen Format. Das Datenträgeraustauschverfahren dient der Ausführung bargeldloser Zahlungen wie etwa von Gutschriften oder der in diesem Beitrag betrachteten Lastschriften.
Kern dieses Verfahrens ist die Zusammenfassung der Informationen, die normalerweise auf dem Überweisungsträger landen, in einer Textdatei und deren Übermittlung per Speichermedium oder via Internet an die Bank des Begünstigten.
Das in dieser Textdatei zu verwendende Format wird zum Beispiel im Internet an verschiedenen Stellen beschrieben, etwa bei Wikipedia unter dem Stichwort Datenträgeraustauschverfahren.
Die Textdatei besteht aus drei Teilen:
- Der A-Satz enthält Informationen über die Art der Transaktion (Lastschrift oder Gutschrift) und die Auftraggeberdaten sowie das Auftragsdatum und die Währung.
- Der C-Satz enthält Informationen über die einzelnen Vorgänge. Dazu gehören – im Falle der Lastschrift – die Daten des Zahlungspflichtigen (also Name, Bankleitzahl und Kontonummer), Verwendungszweck und Währung.
- Der E-Satz enthält die Anzahl der Transaktionen sowie diverse Prüfsummen wie etwa die Summe der Beträge.
Nun stellen sich zwei Fragen: Woher kommen die Daten und wie gelangen diese in die benötigte Textdatei
- Die Auftraggeberdaten speichern wir am besten in einer Optionen-Tabelle.
- Die Transaktionsdaten stammen aus einer weiteren Tabelle. Bei Institutionen wie Sportvereinen liegen diese meist in Form einer Excel-Tabelle vor. Diese können Sie verknüpfen oder importieren, um sie in Access verfügbar zu machen. Dazu später mehr – erstmal kümmern wir uns um die grundsätzliche Erstellung der Datenaustauschdatei.
Einschränkungen
Die hier vorgestellte Lösung zum Erstellen von Datenträgeraustauschdateien hat folgende Einschränkungen, die sich jedoch durch änderung des Codes beheben lassen – im Kontext der Erstellung einer solchen Datei etwa für den Einzug von Mitgliedsbeiträgen ist dies jedoch vermutlich nicht nötig:
- Sie können damit nur Lastschriften anstoßen, keine anderen Vorgänge.
- Bankleitzahl von Zahlungsempfänger und ausführender Bank sind identisch.
- Die Angabe des Namens des Empfängers und des Begünstigten sowie der Verwendungszweck unterliegt Einschränkungen bezüglich der maximal zulässigen Zeichenanzahl (jeweils 27 Zeichen, theoretisch könnten diese Informationen um weitere 27 Zeichen erweitert werden).
Datenaustauschdatei erstellen
Das Format der Datenaustauschdatei können Sie für eine eingeschränkte Anzahl von Fällen direkt den nachfolgend vorgestellten Funktionen entnehmen. Die erste Funktion (s. Listing 1) liefert den A-Satz der Datenträgeraustauschdatei und erwartet die folgenden Parameter:
Listing 1: Diese Funktion liefert den ersten von mindestens drei Teilen der Datenträgeraustauschdatei.
Public Function ASatz(strBLZAuftraggeber As String, strNameAbsender As String, _ strKontoAuftraggeber As String) As String Dim str As String str = str & "0128" ''Satzlänge str = str & "A" ''Satzart str = str & "LK" ''Kennzeichen: L = Lastschrift, K = Kundendiskette str = str & strBLZAuftraggeber str = str & "00000000" str = str & Auffuellen(strNameAbsender, " ", 27) ''Name Absender str = str & Format(Date, "DDMMYY") ''Erstellungsdatum str = str & " " str = str & Auffuellen("", "0", 10 - Len(strKontoAuftraggeber)) _ & strKontoAuftraggeber ''Kontonummer Auftraggeber str = str & Auffuellen("", "0", 10) ''Sammel-Referenznummer, hier Nullen) str = str & Auffuellen("", " ", 47) str = str & "1" ''Währung, Euro entspricht 1 Debug.Print Len(str), str ASatz = str End Function
- strBLZAuftraggeber: Bankleitzahl des Auftraggebers
- strNameAuftraggeber: Name des Auftraggebers
- strKontoAuftraggeber: Kontonummer des Auftraggebers
Die Prozedur verwendet eine String-Variable namens str, um den Inhalt des A-Satzes zusammenzustellen. Den Start macht bei A-, C- und E-Satz jeweils die Satzlänge mit vier Stellen. Diese enthält die Länge der einzulesenden Zeichenkette. Das nächste Zeichen enthält jeweils einen Kennbuchstaben (A für A-Satz, C für C-Satz und E für E-Satz). Die folgenden beiden Zeichen des A-Satzes enthalten die Zeichenkombination LK für Lastschrift/Kundendiskette. Nach der Bankleitzahl des Auftraggebers (immer achtstellig) und einer Reihe Nullen, die keine Bedeutung hat, folgt die Kontonummer des Empfängers. Diese kann maximal zehn Stellen aufweisen, Kontonummern haben aber oft auch weniger Stellen.
Die fehlenden Stellen sollen vorne mit Nullen aufgefüllt werden. Zu diesem Zweck verwenden wir eine kleine Hilfsfunktion namens Auffuellen, die Sie in Listing 2 finden und welche die folgenden Parameter erwartet:
- strOriginal: Aufzufüllende Zeichenkette
- strFuellzeichen: Zeichen, mit dem aufgefüllt werden soll
- intLaenge: Länge nach dem Auffüllen
- bolVorne: Gibt an, ob vorn oder hinten aufgefüllt werden soll.
Listing 2: Die Hilfsfunktion Auffuellen füllt eine Zeichenkette bis zur gewünschten Anzahl mit dem angegebenen Zeichen auf – wahlweise vorn oder hinten.
Public Function Auffuellen(strOriginal As String, strFuellzeichen As String, _ intLaenge As Integer, Optional bolVorne As Boolean = True) As String Dim str As String str = strOriginal If bolVorne Then If Len(str) < intLaenge Then str = str & String(strFuellzeichen, intLaenge - Len(str)) Loop Else If Len(str) < intLaenge Then str = String(strFuellzeichen, intLaenge - Len(str)) & str Loop End If Auffuellen = str End Function