Lastschrifteinzug per Datenträgeraustausch

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

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar