Blog von MuLu

10. Januar 2010

PHP DTAUS-Klasse

Filed under: IT — Schlagwörter: , , — Lukas @ 18:18

Beim Arbeiten an einer Vereinsverwaltung kam irgendwann der Punkt, an dem die Mitgliedsbeiträge halbautomatisch eingezogen werden sollten.
Deutsche Banken haben für solche Fälle (Massenlastschriften und -überweisungen) ihr eigenes Format entwickelt.

Simpel gesagt besteht eine DTAUS-Datei aus 3 Teilen: A-, C- und E-Satz.
Der A-Satz enthält allgemeine Infos wie Typ, Sender, Referenznummer und Ausführungsdatum.
Der E-Satz enthält Checksummen aus Kontonummern, Bankleitzahlen und Betrag.

Das nervigste überhaupt ist der C-Satz, der mehrfach vorkommen kann. Jeder Satz steht für einen Datensatz.
Name und Verwendungszeck besitzen ihr eigenes Feld, das aber max. 27 Zeichen lang sein darf.
Da durchaus ‘mal ein längere Satz vorkommen kann, gibt es sog. “Erweiterungssätze”. Maximal 15 an der Zahl.
Ein Erweiterungssatz besteht aus einer ID + 27 Zeichen. Gesamt kann also ein Name oder Verwendungszweck 432 Zeichen lang sein: 27 + 15 * 27

Allerdings teilen sich Name Sender, Name Empfänger, Verwendungszweck die Sätze. Damit steht z.B. folgende Möglichkeit zur Verfügung: Sendername von 54, Empfängername von 81 und Verwendungszweck von 297 Zeichen.
Mehr ist einfach nicht drin.
Das klingt ja an sich gar nicht mal so schlecht, wäre da nicht noch ein Haken: Es gibt 5 Blöcke in denen die Erweiterungssätze untergebracht werden.
1. Block: Max. 2 Sätze
3. bis 5. Block: Max. 4 Sätze
6. Block: Max. 1 Satz
Dabei muss allerdings jeder Block 128 Zeichen lang sein. Im Klartext: Auffüllen wenn’s nicht passt. Yay!

Naja, nachdem ich an diesem “Ding” mehre Tage saß, bin ich nun so weit, es als Alpha zu bezeichnen.
Es muss zwar noch ein wenig dran geschraubt werden und ein Beispiel ist auch noch nötig, aber “soweit, so gut”: http://phpdtaus.sourceforge.net/

Viel Spaß!

8 Comments »

  1. Auf der suche DTA Dateien zu erstellen, habe ich es zuerst mit dem PEAR Paket Payment_DTA versucht. Damit bin ich aber überhaupt nicht klar gekommen. Dann habe ich diese Variante entdeckt. Mit der Version 0.1 hatte ich leider auch kein Glück, aber dann habe ich die Version 0.2 mit dem Beispiel bei Sourceforge gefunden. Da sind zwar noch ein paar kleine Fehler drin, doch nachdem ich diese dann korrigiert hatte konnte ich meine erste DTA erstellen die mein Starmoney akzeptiert hat. Einfach Klasse!!!

    Kommentar by Bernd — 6. Oktober 2011 @ 14:36

  2. Hallo,

    teilst Du die korrigierten Fehler mit? Man muss das ja nicht noch einmal auf die Fehlerbeseitigung gehen.

    Kommentar by Klaus — 31. August 2012 @ 07:32

  3. […] ist dafür der Überweisungs-Export als DTA-Datei. Bei unseren Recherchen haben wir dann die Seite PHP DTAUS entdeckt. Mit der Version 0.1 hatten wir leider nicht so viel Glück, aber auf Sourceforge gibt es […]

    Pingback by DTA Dateien erstellen mit PHP | BKonsulting – Blog — 6. Oktober 2011 @ 14:52

  4. Vielen Dank!!!!

    Hast Du derartiges auch für Sepa geplant? “PHP SEPA XML Klasse” quasi…. 😉

    Kommentar by Hermann — 5. November 2013 @ 09:09

  5. DTAUS hat mir auch sehr geholfen, den Beitragseinzug für meinen Verein zu erledigen. Vielen Dank.

    Auch ich habe in der aktuellen Version noch 2 Fehler gefunden:
    a) die Reihenfolge der Extensions war falsch und wurde so von der Bank abgelehnt (in einem Fall wo es sowohl 01 als aus 02 extensions gab, und b) Handhabung von deutschem Excel Export mit , statt .

    Patch in Dtaus_Builder.php:
    for ($i = 1; $i 1, ‘text’ => $name[$i]);
    /* changed order – VCW */
    for ($i = 1; $i 2, ‘text’ => $reference[$i]);

    # added conversion , to . for german decimal points VCW
    $amount = strtr($amount, “,”, “.”) * 100;
    $this->entries[] = array

    $ diff -c Dtaus.dist/Dtaus_Builder.php Dtaus/Dtaus_Builder.php
    *** Dtaus.dist/Dtaus_Builder.php 2013-12-04 14:48:31.891493200 +0100
    — Dtaus/Dtaus_Builder.php 2013-12-27 18:44:49.479053100 +0100
    ***************
    *** 197,209 ****

    array_map(array($this, ‘_convertText’), $reference, $name);


    – for ($i = 1; $i 2, ‘text’ => $reference[$i]);
    for ($i = 1; $i 1, ‘text’ => $name[$i]);
    !
    ! $amount = $amount * 100;
    $this->entries[] = array
    (
    ‘name’ => $name[0],
    — 197,210 —-

    array_map(array($this, ‘_convertText’), $reference, $name);

    for ($i = 1; $i 1, ‘text’ => $name[$i]);
    ! /* changed order – VCW */
    ! for ($i = 1; $i 2, ‘text’ => $reference[$i]);
    !
    ! # added conversion , to . for german decimal points VCW
    ! $amount = strtr($amount, “,”, “.”) * 100;
    $this->entries[] = array
    (
    ‘name’ => $name[0],

    Kommentar by Volker — 27. Dezember 2013 @ 22:24

  6. sorry, da wurden duch HTML Tage einige Zeichen verschluckt.

    $ diff -c Dtaus.dist/Dtaus_Builder.php Dtaus/Dtaus_Builder.php
    *** Dtaus.dist/Dtaus_Builder.php 2013-12-04 14:48:31.891493200 +0100
    — Dtaus/Dtaus_Builder.php 2013-12-27 18:44:49.479053100 +0100
    ***************
    *** 197,209 ****

    array_map(array($this, ‘_convertText’), $reference, $name);


    – for ($i = 1; $i 2, ‘text’ => $reference[$i]);
    for ($i = 1; $i 1, ‘text’ => $name[$i]);
    !
    ! $amount = $amount * 100;
    $this->entries[] = array
    (
    ‘name’ => $name[0],
    — 197,210 —-

    array_map(array($this, ‘_convertText’), $reference, $name);

    for ($i = 1; $i 1, ‘text’ => $name[$i]);
    ! /* changed order – VCW */
    ! for ($i = 1; $i 2, ‘text’ => $reference[$i]);
    !
    ! # added conversion , to . for german decimal points VCW
    ! $amount = strtr($amount, “,”, “.”) * 100;
    $this->entries[] = array
    (
    ‘name’ => $name[0],

    Kommentar by Volker — 27. Dezember 2013 @ 22:28

  7. @Volker
    Kannst Du Deine Dateien evtl. als zip irgendwo hochladen? Danke

    P.S.: Hast Du bereits nach SEPA Builder Ausschau gehalten?

    Kommentar by Hermann — 9. Januar 2014 @ 16:02

  8. @Volker
    Kannst Du Deine Dateien evtl. als zip irgendwo hochladen? Danke

    P.S.: Hast Du bereits nach SEPA Builder Ausschau gehalten?

    Kommentar by Hermann — 9. Januar 2014 @ 16:01

RSS feed for comments on this post. TrackBack URL

Leave a comment

*

Powered by WordPress