def add_c( booking )
      zahlungsart = if @typ == 'LK'
                      booking.account_key || Booking::LASTSCHRIFT_EINZUGSERMAECHTIGUNG
                    elsif @typ == 'GK'
                      booking.account_key || Booking::UEBERWEISUNG_GUTSCHRIFT
                    end
      #Extended segments Long name & booking texts
      exts = []
      # 1. Part
      #data1 = '%4i' % ?? #Satzlänge kommt später
      data1 = 'C'
      data1 +=  '%08i' % 0
      data1 +=  '%-08i' % booking.account.bank_number
      data1 +=  '%010i' % booking.account.bank_account_number
      data1 +=  '0%011i0' % (booking.account.owner_number || 0)   #interne Kundennummer
      data1 +=  zahlungsart
      data1 +=  ' '
      data1 +=  '0' * 11
      data1 +=  '%08i' % @account.bank_number
      data1 +=  '%010i' % @account.bank_account_number
      data1 +=  '%011i' % booking.value #Betrag in Euro einschl. Nachkomma
      data1 +=  ' ' * 3
      data1 +=  '%-27.27s' % booking.account.owner_name
      exts << ['01', booking.account.owner_name[27..999] ] if booking.account.owner_name.size > 27
      data1 +=  ' ' * 8
      #Einfügen erst möglich, wenn Satzlänge bekannt

      # 2. Part
      data2 = "%27.27s" % @account.owner_name
      booking_txt = booking.text || default_text
      #Erste 27 Zeichen
      #if text < 26  fill with spaces
      data2 += booking_txt[0..26].ljust(27)
      booking_txt = booking_txt[27..999]
      # cut text into 27 long pieces
      while booking_txt && booking_txt.size > 0 && exts.size < 13
        exts << ['02', booking_txt.ljust(27) ]
        booking_txt = booking_txt[27..999]
      end
      exts << ['03', @account.owner_name[27..999] ] if @account.owner_name.size > 27

      data2 +=  '1' #EUR
      data2 +=  ' ' * 2
      # Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
      data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size + 2 + exts.size * 29 )
      raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner_name}" unless data1.size == 128
      dta_string << data1
      #Anzahl Erweiterungen anfügen
      data2 +=  '%02i' % exts.size  #Anzahl Erweiterungsteile
      #Die ersten zwei Erweiterungen gehen in data2,
      #Satz 3/4/5 à 4 Erweiterungen  -> max. 14 Erweiterungen (ich ignoriere möglichen Satz 6)
      exts  += [ ['00', "" ]  ] * (14 - exts.size)
      #Die ersten zwei Erweiterungen gehen in data2,  wenn leer nur mit blanks als füllung
      exts[0..1].each{|e| data2 +=  "%2.2s%-27.27s" % format_ext(e[0], e[1]) }
      data2 +=  ' ' * 11
      # add the final piece of the second C section
      raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.owner_name}" unless data2.size == 128
      dta_string << data2
      #Create 4 text extensions
      add_ext( exts[2..5] )
      add_ext( exts[6..9] )
      add_ext( exts[10..13] )
      dta_string
    end
def add_c( booking )
      zahlungsart = if @typ == 'LK'
                      booking.account_key || Booking::LASTSCHRIFT_EINZUGSERMAECHTIGUNG
                    elsif @typ == 'GK'
                      booking.account_key || Booking::UEBERWEISUNG_GUTSCHRIFT
                    end
      #Extended segments Long name & booking texts
      exts = []
      # 1. Part
      #data1 = '%4i' % ?? #Satzlänge kommt später
      data1 = 'C'
      data1 +=  '%08i' % 0
      data1 +=  '%-08i' % booking.account.bank_number
      data1 +=  '%010i' % booking.account.bank_account_number
      data1 +=  '0%011i0' % (booking.account.owner_number || 0)   #interne Kundennummer
      data1 +=  zahlungsart
      data1 +=  ' '
      data1 +=  '0' * 11
      data1 +=  '%08i' % @account.bank_number
      data1 +=  '%010i' % @account.bank_account_number
      data1 +=  '%011i' % booking.value #Betrag in Euro einschl. Nachkomma
      data1 +=  ' ' * 3
      data1 +=  '%-27.27s' % booking.account.owner_name
      exts << ['01', booking.account.owner_name[27..999] ] if booking.account.owner_name.size > 27
      data1 +=  ' ' * 8
      #Einfügen erst möglich, wenn Satzlänge bekannt

      # 2. Part
      data2 = "%27.27s" % @account.owner_name
      booking_txt = booking.text || default_text
      #Erste 27 Zeichen
      #if text < 26  fill with spaces
      data2 += booking_txt[0..26].ljust(27)
      booking_txt = booking_txt[27..999]
      # cut text into 27 long pieces
      while booking_txt && booking_txt.size > 0 && exts.size < 13
        exts << ['02', booking_txt.ljust(27) ]
        booking_txt = booking_txt[27..999]
      end
      exts << ['03', @account.owner_name[27..999] ] if @account.owner_name.size > 27

      data2 +=  '1' #EUR
      data2 +=  ' ' * 2
      # Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
      data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size + 2 + exts.size * 29 )
      raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner_name}" unless data1.size == 128
      dta_string << data1
      #Anzahl Erweiterungen anfügen
      data2 +=  '%02i' % exts.size  #Anzahl Erweiterungsteile
      #Die ersten zwei Erweiterungen gehen in data2,
      #Satz 3/4/5 à 4 Erweiterungen  -> max. 14 Erweiterungen (ich ignoriere möglichen Satz 6)
      exts  += [ ['00', "" ]  ] * (14 - exts.size)
      #Die ersten zwei Erweiterungen gehen in data2,  wenn leer nur mit blanks als füllung
      exts[0..1].each{|e| data2 +=  "%2.2s%-27.27s" % format_ext(e[0], e[1]) }
      data2 +=  ' ' * 11
      # add the final piece of the second C section
      raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.owner_name}" unless data2.size == 128
      dta_string << data2
      #Create 4 text extensions
      add_ext( exts[2..5] )
      add_ext( exts[6..9] )
      add_ext( exts[10..13] )
      dta_string
    end
dataA
Erstellen C-Segmente (Buchungen mit Texten) der DTAUS-Datei
Aufbau:
  Nr. St  Länge  Beschreibung
  1   0    4     Länge des Datensatzes, 187 + x * 29 (x..Anzahl Erweiterungsteile)
  2   4    1     Datensatz-Typ, immer 'C'
  3   5    8     Bankleitzahl des Auftraggebers (optional)
  4   13   8     Bankleitzahl des Kunden
  5   21   10    Kontonummer des Kunden
  6   31   13    Verschiedenes
                 1. Zeichen: "0"
                 2. - 12. Zeichen: interne Kundennummer oder Nullen
                 13. Zeichen: "0"
                 Die interne Nummer wird vom erstbeauftragten Institut zum endbegünstigten Institut weitergeleitet.
                 Die Weitergabe der internenen Nummer an den Überweisungsempfänger ist der Zahlstelle freigestellt.
  7   44  5    Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
               "04000" Lastschrift des Abbuchungsauftragsverfahren
               "05000" Lastschrift des Einzugsermächtigungsverfahren
               "05005" Lastschrift aus Verfügung im elektronischen Cash-System
               "05006" Wie 05005 mit ausländischen Karten
               "51000" Überweisungs-Gutschrift
               "53000" Überweisung Lohn/Gehalt/Rente
               "5400J" Vermögenswirksame Leistung (VL) ohne Sparzulage
               "5400J" Vermögenswirksame Leistung (VL) mit Sparzulage
               "56000" Überweisung öffentlicher Kassen
               Die im Textschlüssel mit J bezeichnete Stelle, wird bei Übernahme
               in eine Zahlung automatisch mit der jeweils aktuellen Jahresendziffer (7, wenn 97) ersetzt.
  8   49  1    Reserviert, " " (Blank)
  9   50  11   Betrag in DM
  10  61  8    Bankleitzahl des Auftraggebers
  11  69  10   Kontonummer des Auftraggebers
  12  79  11   Betrag in Euro einschließlich Nachkommastellen
  13  90  3    Reserviert, 3 Blanks
  14a 93  27   Name des Kunden
  14b 120 8    Reserviert, 8 Blanks
    Insgesamt 128 Zeichen

  15  128  27  Name des Auftraggebers
  16  155  27  Verwendungszweck
  17a 182  1   Währungskennzeichen  "1" = Euro
  17b 183  2   Reserviert, 2 Blanks
  18  185  2   Anzahl der Erweiterungsdatensätze, "00" bis "15"
  19  187  2   Typ (1. Erweiterungsdatensatz)
               "01" Name des Kunden
               "02" Verwendungszweck
               "03" Name des Auftraggebers
  20  189  27  Beschreibung gemäß Typ
  21  216  2   wie C19, oder Blanks (2. Erweiterungsdatensatz)
  22  218  27  wie C20, oder Blanks
  23  245  11  Blanks
  Insgesamt 256 Zeichen, kann wiederholt werden (max 3 mal)

 === Parameter
 booking<Object>::Booking object to be written to c-section

 === Returns
 <String>:: The current dta_string