SEPA und XML-Datei anstatt DTAUS

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang_B »

Hallo,
ich kriege langsam Panik. Der Termin mit der XML-Datei anstatt DTAUS rückt extrem schnell näher. Hat jemand schon irgendwas in der Richtung programmiert? Ich muß gestehen, ich habe keine Ahnung von XML. Aus der Literatur der Banken ist auch nichts vernünftiges rauszulesen. Hilfreich wäre z.B. mal ein Beispiel, wie die spezielle XML-Datei für DTA aussehen muß. Ideal wäre z.B. ein Konverter, der aus einer CSV-Datei die XML-Datei erzeugt (wenn für diesen Zweck möglich).

Bin für jeden Tipp dankbar....

Gruß Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Tom »

Hallo, Wolfgang.

Es gibt keinen Grund, Panik zu schieben. Wir haben für die gesamte SEPA-Umsetzung keine zwei Tage gebraucht.

Es sind aber inhaltlich einige Vorarbeiten nötig. So müssen bei Bankverbindungen zusätzlich oder alternativ IBAN und BIC erfasst werden, außerdem muss man sog. Mandatsreferenzen vergeben, was bei einmaligen Lastschriftaufträgen auch die Rechnungsnummer sein kann, aber bei wiederholten Lastschriften muss es ein gesondertes System geben (wenn die Kundennummer nicht verwendet werden kann, weil sie u.U. nicht ein-eindeutig ist). Die Firma, die die Lastschriftdateien einreicht, muss bei der Bundesbank eine Gläubiger-Identnummer beantragen. Ohne die geht nichts.

Ich habe hier im Forum irgendwo Code für einen IBAN-Generator hinterlegt, Dein Namensvetter Wolfgang Ciriack hat eine aktuelle Bankentabelle gepostet, die die BICs enthält. Mit beidem kannst Du Deine Kunden sofort auf den nötigen Stand bringen. Deine Software sollte die SEPA-Lastschriftmandatsbestätigungen drucken können.

Die Erzeugung der Datei selbst ist ziemlich unproblematisch, wenn man die eigentlich recht simple Dateistruktur verstanden hat, für die es aber leider bislang - stimmt - noch nicht so viele gute Beispiele gibt. XML ist auch keine Magie. Inhaltlich ähnelt es dem bisherigen Verfahren (entspricht ihm aber nicht, weil man zusätzliche/alternative Daten benötigt, weshalb auch ein "Umwandler" nicht so einfach machbar ist), und ist fallweise um einige Daten ergänzt. Es gibt insgesamt vier unterschiedliche Ansätze, die sich aber inhaltlich nur leicht unterscheiden, also im selben Code abgearbeitet werden können: 1. Einmalige Lastschriften mit Endkunden (Privatpersonen). 2. Wiederkehrende Lastschriften mit Endkunden. 3. Einmalige Lastschriften mit Firmenkunden. 4. Wiederkehrende Lastschriften mit Firmenkunden. 1 und 2 ("CORE") sowie 3 und 4 ("B2B") können innerhalb einer Datei abgebildet werden.

Den Code für die Dateierzeugung werde ich hier aber nicht posten. Auch wenn es nicht sehr viel Arbeit war, war es doch (geldwerte) Arbeit. Ich biete den Code aber auch nicht zum Verkauf an. Vielleicht poste ich dieser Tage aber mal eine Beispieldatei.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von georg »

Hallo,


es kann aber nie schaden, mal die eigene Hausbank zu fragen. Es sei denn, man ist bei einer der ganz grossen Banken, da kann es schon schiefgehen (weil keiner Ahnung hat), aber bei kleineren Banken ist meist wenigstens ein Mitarbeiter da, der das notwendige Know-How hat, das man abschöpfen kann.

Übrigens: auch die Banken kochen in Sachen SEPA nur mit Wasser ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von brandelh »

... nun Google "xml dtaus format" ... gibt ...

:arrow: http://bankenverband.de/downloads/04200 ... rblick.pdf

... Linkliste
- International Organization for Standardization – ISO 20022
Unter ISO 20022 wurden weltweit gültige Nachrichten für Überweisungen und Lastschriften erarbeitet, die auf der Syntax von XML beruhen. Internet-Adresse: http://www.iso20022.org/

- European Payments Council (EPC)
Das EPC als gemeinschaftliches Gremium der europäischen Kreditwirtschaft hat zur Schaffung der SEPA Verfahrensbeschreibung für europäische Überweisungen und Lastschriftenentwickelt. Diese basieren auf den ISO-20022-Nachrichten. Internet-Adresse: http://www.europeanpaymentscouncil.eu

- W3C: World Wide Web consortium
Das W3C ist ein internationales Konsortium, welches sich seit 1994 mit der Entwicklung vonStandards für das Internet beschäftigt. Das W3C ist maßgeblich an der Entwicklung von XML beteiligt. Internet-Adresse: http://www.w3.org/XML/

:arrow: http://www.sparkasse.de/_download_galle ... format.pdf

oder hier Konverter (bei meiner Sparkasse war auch ein Link) ...

:arrow: http://www.hettwer-beratung.de/sepa-spe ... konverter/

Xbase XML Datei erzeugen ...

Code: Alles auswählen

set alternate to MyXml.xml
set alternate on 
set console off
?? '<?xml version="1.0" encoding="UTF-8" ?>' // UTF-8 !!! Umlaute etc. wird man ANSI 2 UTF-8 schreiben müssen => OT4XB
?  '<Document...
...
set alternate off 
oder flexibler mit einem String ...

Code: Alles auswählen

cXML := '<?xml version="1.0" encoding="UTF-8" ?>'  +;    // UTF-8 !!! Umlaute etc. wird man ANSI 2 UTF-8 schreiben müssen => OT4XB
            '<Document...
zur Erleichterung könnte man eine Klasse schreiben, die die Sache vereinfacht, das ist Geschmackssache ...
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang_B »

Hallo Tom,
herzlichen Dank für die schnelle Antwort. Ich habe mich vielleicht zu umständlich ausgedrückt. Mir geht es nur um die XML Datei als Ersatz für die DTAUS-Datei. Die anderen Punkte (IBAN/BIC) sind schon erledigt. Meine Kunden habe ich schon umgestellt. Das war auch wirklich nicht so umfangreich. Jetzt brauche ich nur noch die Umsetzung der XML-Datei.

Für ein Beispiel einer solchen XML-Datei wäre ich schon dankbar.

viele Grüße
Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von brandelh »

Hallo Wolfgang,

in der auch oben aufgeführten PDF :arrow: http://bankenverband.de/downloads/04200 ... rblick.pdf

gibt es auf Seite 6 bis 8 eine Gegenüberstellung einer DTAUS und einer XML Nachricht.
Als ich mich vor Jahren mit DTAUS beschäftigen musste, fand ich das sehr zäh, XML ist zwar sicher länger aber besser lesbar :-)
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang_B »

vielen Dank erstmal für die umfangreichen Hinweise. Werde mich da mal "durchwurschteln". Huberts Tipp mit dem genannten Dokument -> Vergleich DTAUS-, MT- und SEPA-XML-Nachricht ist jetzt erstmal Pflichlktüre.

Gruß
Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang Ciriack »

Hallo Wolfgang,
zur Ergänzung zu Tom: Für Lastschriften wird auch noch das Datum der Unterzeichnung der Einverständniserklärung benötigt (falls nicht eine automatische Umstellung von Abbuchungsaufträgen erfolgt ist). Dieses Datum muss ggf. auch in der xml-Datei mit übergeben werden.

Mit dem Sepa File Converter (findet man noch irgendwo auf Bankseiten über Google) kannst du dir Beispieldateien aus DTAUS-Dateien erzeugen lassen. Bei der Sparkasse z.B. findest du auch ein PDF mit allen Strukturen der xml-Dateien.

Wenn man schon ein wenig XML-Erfahrungen gemacht hat, dauert das Umsetzen für die Erzeugung dieser Dateien wirklich nur einen Tag. Da ich das ganze mit eXPress++ (DC_XMLNode) erzeugt habe, kann ich hier auch kein reines XBase++ - Beispiel posten.
Viele Grüße
Wolfgang
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Bertram Hansen »

Hallo Wolfgang,

mit der Sepa Umsetzung bin auch schon fertig. Beispieldateien zu XML-Dateien gibt es im Internet. Tom und Wolfgang haben dazu schon einiges gepostet. Was mir noch so einfällt ist die Berücksichtigung der TARGET-Tage (europaweit gültige Bankarbeitstage) bei Datumswerten. In der XML-Datei steht unter anderem das Einreichungs- und das Fälligkeitsdatum. Beide müssen ein gültiges TARGET-Datum haben. Also kein Wochenende und kein Feiertag.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang_B »

Hallo,

habe jetzt mal die Tipps verfolgt und bin auf den "sepa-file-converter" gestoßen. Problem bei der Konvertierung von DTAUS zu XML ist ja, daß bei DTAUS die Mandantenreferenznr. nicht enthalten ist. Bei diesem Konverter (Demo - 5 Sätze max.) muß man zwar die Mand.ref.nr. manuell nachpflegen, das Ergebnis ist aber eine schöne Musterdatei-XML mit der man arbeiten kann.

Das Ganze sieht jetzt schon gar nicht mehr so tragisch aus. Nochmals vielen Dank für die Hilfe!!

http://www.sfirm.de/index.php?id=sepa-f ... r-download

Viele Grüße
Wolfgan
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Herbert »

Hier ein frei erhältliches Buch "ISO20022 for dummies" zu finden. In Englisch halt.
http://www.iso20022.ch/resources/iso_dummies.pdf
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Herbert »

Hier finden sich viele Erklärungen und Dokumente zu den verschiedenen Versionen.
http://www.iso20022.org/full_catalogue.page
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Wolfgang_B »

Hallo,
der Durchblick nähert sich!!! Nochmals vielen Dank an alle.

Gruß Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Manfred »

Hat jemand eine Ahnung, ob in der XML Datei ein Gesamtbetrag angegeben werden muß, oder ob es genügt die Einzelbeträge aufzuführen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von ramses »

.
Zuletzt geändert von ramses am Fr, 06. Sep 2013 23:30, insgesamt 1-mal geändert.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Jan »

Wie bitte?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Martin Altmann »

Wie bitte was? Was stand denn da?
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Jan »

Carlo hat sich begeistert darüber gezeigt, wie einem hier geholfen wird [/ironie off]. Das Geiz herrscht. Und noch einige andere nette Worte mehr in diese Richtung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von brandelh »

Ist "Carlo" gleich "ramses" ?
Vielleicht hatte er einen schlechten Tag :wink:
Was oben geschrieben stand kann man ja nicht mehr lesen, aber soviel freiwillige kostenlose Hilfe wie hier, da muss man lange suchen; ich kenne anderes Forum ...
Hätte ich so ein Problem, könnte es auch eine passende Klasse geben, aber zu erwarten dass jemand seinen Quellcode preisgeben MUSS ist schon blauäugig :D
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von ramses »

Anscheinend wurde mein Freitag Abend Beitrag doch gelesen. Also das ganze noch einmal.

Alle beschäftigen sich im Stillen Kämmerchen mit SEPA XML Files. Irgend eine klare Ansage so und so oder das sind die Probleme etc. war ja noch nie zu lesen.

Nur so wischi waschi Bemerkungen oder Links zu langen umfangreichen PDF's. SEPA muss ja unheimlich schwierig und Aufwendig sein. So dachte ich.

Schiesslich muss ich auch noch eine Anwendung abändern.

FRUST ON!

Heute morgen traf ich beim Frühschoppen einen Kumpel, irgendwie kam das Gespräch auf SEPA, er meinte nur: "Ach, Simplel, Simpel einfach, mach so und so ...." Ich war so was von paff. Also ab nach Hause. 4 Stunden am PC die vorhandene Klasse und das Testprogramm für DTAAUS Dateien auf XML umschreiben.

Ergebnis: Testprogramm SEPA läuft, Anwendung umgeschrieben, diese erstellt nun Para gesteuert die alten DTA und oder nur Sepa Files.

Er, der Kumpel, hatte recht, so was von SIMPEL EINFACH!!! !!! Nur Fleissarbeit....... Quellcode ist dafür schon fast eine Beleidigung ....

Hier mein Resulat des Testprogramms, welches alle nötigen Aufgaben für meine APP erfüllt:

Code: Alles auswählen

#define   CRLF    (Chr(13)+Chr(10))
//  ---------------------------------------------------------
//  ---------------------------------------------------------
//  MAIN =  Testprogramm  -- > CLASS   DTAAUSXML
//  ---------------------------------------------------------
//  ---------------------------------------------------------

PROCEDURE Main
local oKrZahl

local cFilePath := padr( diskname()+":"+dirname(), 35 )
local cName := padr("Eigener Firma/Kontenname: Gstav & Kesselring",60), cName2 := padr("Kreditor:  Big&Top Gmbh <;>",60)
local cBic  :=  "GENODEF1M04"
local cBic2 := cBic
local cIban  := padr(k140MakeIBAN( "DE" , "70090100", "1234567890" ),34)
local cIban2 := "DE 70090100"
local dValuta := k140chkValutaDat(date())
local nAnz := 5 , nBetrag := 1000.23, a, x, getlist := {}
local cZGrund := padr("Zahlungs Grund: Brom”bel ",40)

 SET EPOCH TO 1950
 SET DATE TO GERMAN
 SET CENTURY OFF

set cursor on
setcolor("w+/bl")


 @ 0,0 clear
 @ 1,0 say   "Test DTAAUSXml Class  -> SEPA FILE Creator"
 @ 3,0 say   "Eigener Kontoname  " get cName
 @ 4,0 say   "Eigene BIC         " get cBic
 @ 5,0 say   "Eigene IBAN        " get cIban
 @ 6,0 say   "Valuta             " get dValuta
 @ 9,0  say  "IBAN Kredi Anfang  " get cIban2
 @ 10,0 say  "BIC fr Dates„tze  " get cBic2
 @ 11,0 say  "Erster Betrag      " get nBetrag
 @ 12,0 say  "LW/Pfad Ausgabefile" get cFilePath
 @ 13,0 say  "Kreditor Kontoname " get cName2
 @ 14,0 say  "Zahlungsgrund      " get cZGrund
 @ 15,0 say  "Anzahl Tests„tze   " get nAnz
 @ 20,0 say  "KrediName, IBAN-Kredi, Zlg.Grund, Betrag werden bei jeden Satz ge„ndert"
 @ 21,0 say  "Datum auf SA/SO werden auf n„chsten MO verschoben"
 read

 oKrZahl := DtaAusXml():new()

do while .t.

   if !oKrZahl:create( cFilePath , cName, cBIC, cIBAN, dValuta )
       ? "šberweisungsfile nicht angelegt!"
       exit
   endif

   for a = 1 to nAnz
    x := k140MakeIBAN( token(cIban2," ",1) , token(cIban2," ",2), str(10000+a) )
    // DtaAusAml:AddKredi(cName, cBic, cIBAN, nBetrag, cZGrund )
   oKrZahl:AddKredi(trim(cName2)+" Satz:"+trim(str(a)), cBic2, x , nBetrag+(a-1*10), trim(cZGrund)+" Satz:"+trim(str(a)) )
   next

   if oKrZahl:Close()
      ? "Zeitstempel " + oKrZahl:TimeStamp
      ? "Kredi-S„tze " + str( oKrZahl:Anzahl)
      ? "Kredi-TOT   " + str( oKrZahl:totbet)
      ? "Verwendets Valuta " + dtoc( oKrZahl:valuta )
      ? oKrZahl:filename    + " Erfolgreich angelegt  Size:" + str(filesize(oKrZahl:filename))
   endif
   exit
enddo
? "**Ende**"
wait
return


//  ---------------------------------------------------------
//  ---------------------------------------------------------
//  CLASS   DTAAUSXml
//  ---------------------------------------------------------
//  ---------------------------------------------------------

/*
Erstellt SEPA  XML Datei

Limit:  Nur fr 1 eigenes Bankkonto(Belastungskonto) Pro File,
        Nur berweisungen   KEINE LASTSCHRIFTEN (Einzug)

Voraussetzung: Alle bergebenen Angaben sind korrekt validiert, keine Fehlenden o. Ungltige Werte

Ungltige Zeichen in cName oder cZGrund  werden gel”scht oder gewandelt!


method DtaAusXml:create( cFilePath , cName, cBIC, cIBAN, dValuta )

    --> Aufruf 1 Mal, Start

    cFilePath  = Laufwerk und Pfad  der Ziel XML Datei
    cName      = Eigener Firmen resp. Kontoname
    cBIC       = Eigene BIC
    cIBAN      = Eigene IBAN Nummer   in Elektronischer oder Briefform
    dValuta    = Valutadatum Ausfhrung muss in der Zukunft liegen  ohne SA/SO
                 (Ungltiges Datum wird auf ersten gltiger Tag gesetzt)

method DtaAusXml:AddKredi(cName, cBic, cIBAN, nBetrag, cZGrund )


    --> Aufruf 1 Mal fr jede berweisung Kreditor

    cName      = Name Zahlungsempf„nger resp. Name des Kontoinhabers
    cBIC       = BIC
    cIBAN      = IBAN des Zahlungsempf„ngers  in Elektronischer oder Briefform
    nBetrag    = Zahlungsbetrag in Euro
    cZGrund    = Zahlungsgrund Text, z.B. Rg. 123


method DtaAusXml:Close()

    --> Aufruf am Ende -> Schreibt ganzes xml File in einem Stck


*/

class   DtaAusXml

    protected

    var  nHandle, datum, zeit, buffer, aHead

    exported:

    var Filename, timestamp, valuta, Anzahl, TOTBet

    method  init, create, AddKredi, close

endclass


//  ---------------------------------------------------------

method DtaAusXml:init()

     ::filename := ""
     ::nHandle := -1
     ::timestamp := ""
     ::valuta := nil
     ::anzahl := 0
     ::TOTBet := 0
     ::datum := nil
     ::Zeit := nil
     ::buffer := ""
     ::aHead := {}

return self


//  ---------------------------------------------------------

method DtaAusXml:create( cFilePath , cName, cBIC, cIBAN, dValuta )
local ret_val := .f., i := 0, t, e

    cFilePath := trim(cFilePath)
    cFilePath += iif(right(cFilePath,1)="\","","\")

    if substr( cFilePath, 2, 2 ) != ":\"
        msgbox("Pfadangabe fr DTAAUS File ist ungltig.","Fehler")
    else
        t := time()
        ::datum := date()
        ::zeit := t
        ::TimeStamp := dtos(date()) + charrem(":", t )
        ::filename := "DTAAUS"+ ::TimeStamp
        e := stuff(dtos(::datum), 5, 0,"-" )
        e := stuff(e, 8, 0,"-" ) + "T" + t + "Z"

        do while i < 10 .and. file( cFilePath + ::filename + str(i,1)+".xml" )
           i ++
        enddo

        if i < 10
            ::filename :=  cFilePath + ::filename + str(i,1)+".xml"
            ::nHandle := fcreate(  ::filename  )
            ::TimeStamp += str(i,1)
        endif

        if ::nhandle > 0
            ret_val := .t.   // File angelegt
        else
            msgbox("DTAAUS File im Pfad "+cFilePath+" kann nicht angelegt werden.","Fehler")
        endif

    endif

    aadd(::aHead , {"%%Name%%", k140convertRecord( alltrim(cName) ) } )
    aadd(::aHead , {"%%BIC%%" , alltrim(cBic) } )
    aadd(::aHead , {"%%IBAN%%", charrem(" -",cIBAN) } )
    aadd(::aHead , {"%%MSGId%%", "DTAAUS" + ::timestamp } )
    aadd(::aHead , {"%%Erstellt%%", e  } )
    aadd(::aHead , {"%%TimeStamp%%", ::timeStamp  } )
    e := k140chkValutaDat(dValuta)
    ::valuta := e
    e := stuff(dtos(e), 5, 0, "-" )
    e := stuff(e, 8, 0, "-" )
    aadd(::aHead , {"%%Valuta%%", e } )

return ret_val

//  ---------------------------------------------------------

method DtaAusXml:AddKredi(cName, cBic, cIBAN, nBetrag, cZGrund )
local t, arr := {}, a

    if empty(cZGrund)
        cZGrund := "Gem„ss u. Abrechnung / Ihrer Rechnung"
    endif

    aadd(arr , {"%%Name%%", k140convertRecord(alltrim(cName)) } )
    aadd(arr , {"%%BIC%%" , alltrim(cBic) } )
    aadd(arr , {"%%IBAN%%", charrem(" -",cIBAN) } )
    a := str(nBetrag,12,2)
    aadd(arr , {"%%Betrag%%", alltrim(stuff(a, 10,1,".")) } )  // Sicherstellen  dass . als DezPunkt
    aadd(arr , {"%%Grund%%", k140convertRecord(alltrim(cZGrund)) } )


text into t WRAP CRLF
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>NOTPROVIDED</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">%%Betrag%%</InstdAmt>
        </Amt>
        <CdtrAgt>
          <FinInstnId>
            <BIC>%%BIC%%</BIC>
          </FinInstnId>
        </CdtrAgt>
        <Cdtr>
          <Nm>%%Name%%</Nm>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>%%IBAN%%</IBAN>
          </Id>
        </CdtrAcct>
        <RmtInf>
          <Ustrd>%%Grund%%</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
endtext

       // Angaben einsetzten
       for a = 1 to len( arr )
           t := strtran( t, arr[a,1], arr[a,2] )
       next

      ::buffer += t

      ::Anzahl ++
      ::totbet += nBetrag

return self



//  ---------------------------------------------------------

method DtaAusXml:Close()
local ret_val := .f., t, h, a


text into h WRAP CRLF
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>%%MSGId%%</MsgId>
      <CreDtTm>%%Erstellt%%</CreDtTm>
      <NbOfTxs>%%Anzahl%%</NbOfTxs>
      <CtrlSum>%%TOTBet%%</CtrlSum>
      <InitgPty>
        <Nm>%%Name%%</Nm>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>%%TimeStamp%%</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <NbOfTxs>%%Anzahl%%</NbOfTxs>
      <CtrlSum>%%TOTBet%%</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>%%Valuta%%</ReqdExctnDt>
      <Dbtr>
        <Nm>%%Name%%</Nm>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>%%IBAN%%</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BIC>%%BIC%%</BIC>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
endtext


text into t WRAP CRLF
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>
endtext


       a := str(::totBet,12,2)
       aadd(::aHead, {"%%TOTBet%%", alltrim(stuff(a, 10,1,".")) } )  // Sicherstellen  dass . als DezPunkt
       aadd(::aHead, {"%%Anzahl%%" , alltrim(str(::anzahl,12,0 )) } )

       // Kopfangaben einsetzten
       for a = 1 to len( ::aHead )
           h := strtran( h, ::aHead[a,1], ::aHead[a,2] )
       next

       // Schreiben
       ::buffer :=   h + ::buffer + t

       if fwrite(::nHandle, ::buffer ) = len(::buffer)
          ret_val := .t.
       endif
       // schliessen
       fclose(::nHandle)
       ::nHandle := -1


return ret_val



function k140MakeIBAN( cLand, cBLZ, cKto )     //  Land  BLZ  Ktonummer --->  IBAN
local cC  := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
local cN  := ""
local a, n, cVal, pZ := 0
local flag := .t., ret_val := ""

  do case
     case cLand = "AT"
        cBLZ := padl(alltrim(cBLZ), 5 , "0")
        cKto := padl(alltrim(cKto), 11 , "0")
     case cLand = "DE"
        cBLZ := padl(alltrim(cBLZ), 8 , "0")
        cKto := padl(alltrim(cKto), 10 , "0")
     case cLand $ "CH}LI"
        cBLZ := padl(alltrim(cBLZ), 5 , "0")
        cKto := padl(alltrim(cKto), 12 , "0")
  endcase

  cVal := cBLZ + cKto + cLand + "00"

  // Umstellen der Charakter
  for a = 1 to len(cVal)
      n := at( substr(cVal, a, 1 ), cC )
      if n = 0  // ungltiges Zeichen --> Abbruch
         flag := .f.
      elseif n <= 10  // Ziffer
         cN += substr(cVal, a, 1 )
      else
         cN += str(n-1,2)
      endif
  next
  // Prfziffer berechnen
  do while !empty(cN)
     // 9 Zeichen
     n := substr(cN,1,iif(len(cN)>9,9,len(cN)))
     cN := right(cN,len(cN)-len(n))
     pZ := int( val(n)/97 )
     pZ := val(n)-(pZ*97)   // Restwert berechnen
     if !empty(cN)
        cN := alltrim(str(pz)) + cN
     endif
  enddo

  if flag
    ret_val := cLand + padl(alltrim(str(98-PZ)),2,"0") + cBLZ + cKto
  endif

return(ret_val)



function k140chkValutaDat( ausf_dat )  // Nur Datum in Zukunft ohne SA/SO m”glich
   if ausf_dat <= date()
      ausf_dat := date()+1
   endif
   if dow(ausf_dat) = 1
     ausf_dat := ausf_dat + 1
   endif
   if dow(ausf_dat) = 7
     ausf_dat := ausf_dat + 2
   endif
return( ausf_dat )


function  k140convertRecord( cText )   // Nur erlaubte Zeichen andere bersetzten / l”schen
local a := 1,x,i,l

do while a<= len(cText)
    x := upper( (l := substr(cText,a,1)) )
    i := at(l,"”„™Žš")
    if i != 0
        cText := stuff(cText, a, 1, substr( " oeaeueOeAeUe" ,i*2,2))
    elseif x = "&"
        cText := stuff(cText, a, 1, "+" )
    else
       if  at(x, [1234567890QWERTZUIOPASDFGHJKLYXCVBNM ':?,+()/."] ) = 0
          cText := stuff(cText, a, 1, " ")
       endif
    endif
    a ++
enddo

return( cText )


Mein Fazit: Entweder benötigen alle Vorredner(Schreiber) andere Funktionen als ich, sehen es kompizierter oder eben doch "Geiz ist Geil" was auch immer...


Gruss

Carlo


PS: Nur OPEN-Source hat Zukunft.....
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von brandelh »

brandelh hat geschrieben:Hätte ich so ein Problem, könnte es auch eine passende Klasse geben, aber zu erwarten dass jemand seinen Quellcode preisgeben MUSS ist schon blauäugig :D
wie geschrieben, ich habe das Problem nicht (DTAUS oder SEPA Dateien erstellen zu müssen),
schön dass du deinen Quellcode zur Verfügung stellst. :-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Tom »

Hallo, Carlo.
Mein Fazit: Entweder benötigen alle Vorredner(Schreiber) andere Funktionen als ich, sehen es kompizierter oder eben doch "Geiz ist Geil" was auch immer...
Ich erlaube mir, mich angesprochen zu fühlen.

Mit Verlaub, aber Deine persönliche Haltung in dieser Angelegenheit ist mir ganz persönlich scheißegal, und ich lasse mir von niemandem vorschreiben, was ich wann zur Verfügung zu stellen habe. Ich habe bereits im Rahmen der SEPA-Diskussion eine Funktion zur Kalkulation von IBANs gepostet, und ich kann muss mir hier, in diesem Forum, ganz sicher nicht vorwerfen lassen, zu wenig Unterstützung anzubieten. Ich habe dieses Forum übrigens gegründet, Du Schwachmatikus.

Das "Problem" ist nicht magisch und mit einem gewissen Einsatz auch relativ leicht zu bewältigen. Was auch Dir ja nicht allein gelungen ist, und vielleicht auch nicht wäre, hätte es diesen Kumpel nicht gegeben. Ab einer gewissen Grenze erschöpft sich meinerseits jedoch die Bereitschaft, das Ergebnis langfristiger Vorarbeiten zu veröffentlichen, zumal es auch keine allgemeine Lösung gibt (SEPA-Lastschrift unterscheidet vier Fälle). Was meine Sache ist, weshalb ich höflichst darum bitten möchte, mit solchen Angriffen wie oben (und dem vorher gelöschten) in Zukunft sparsamer zu sein, sonst zücke ich nämlich auch mal die rhetorische Bewaffnung.
PS: Nur OPEN-Source hat Zukunft.....
Schwachsinn. Hat. Zukunft.
Leider.
Herzlich,
Tom
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von UliTs »

Tom hat geschrieben:...Du Schwachmatikus. ...
Tom, bitte nicht übertreiben :badgrin: 8) .

Carlo, bitte nicht eskalieren lassen :shock: :)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Jan »

Da ich ja "Schuld" an der inzwischen nicht mehr ganz am eigentlichen Thema orientierten Diskussion bin, da ich den später gelöschten Beitrag von Carlo kommentiert hatte:

Dieses Forum ist toll. Hier wird einem geholfen. Vielleicht nicht immer so, wie man sich das vorstellt. Und vielleicht auch nicht immer bevorzugt (wie man in den Wald hineinruft, so schallt es auch wieder hinaus). Was hier an Hilfestellungen gegeben wurde ist enorm. Und hat immensen geldwerten Vorteil. Das betrifft nicht nur die gesondert abgelegten Codes in der Wissensbasis, sondern auch das komplett frei verfügbare Know How in Form von Hinweisen, Vorgehensweisen, Code.

Ich kann durchaus verstehen, wenn manche Entwickler hier ihr mit viel Aufwand (und Zeit ist bekanntlich auch Geld) entwickelten Lösungen nicht (immer) frei herausgeben möchten. Ich habe schon genug Programmbeispiele gesehen die einfach nur Lust auf mehr gemacht haben, wo der entsprechende Entwickler aber natürlich den dahinter stehenden Code nicht rausgerückt hat. Das ist vollkommen legitim in meinen Augen.

Von daher kann ich in diesem Zusammenhang durchaus Toms Einstellung verstehen. Insbesondere da er üblicher weise extrem freigiebig ist mit Hinweisen, Anregungen, und auch Code.

Ich habe allerdings auch schon erlebt, das der dahinter stehende Code dann bilateral ausgetauscht wurde. Ob dann frei oder gegen einen kleinen Obolus sei dahin gestellt. Man muß ja nicht alles Wissen öffentlich machen, und kann dennoch mal aushelfen. Immerhin sind wir alle Entwickler und verdienen unser Geld mit dem Code, den wir schreiben. Aber wenn man nett fragt bekommt man häufig auch eine nette Antwort.

Zu der Diskussion Open Source ja/nein sage ich lieber nichts. Es gibt hier im Forum eine Menge Open Source, und auch ich habe ab und an dazu ein klein wenig mit ein paar Zeilen beigetragen. Aber deswegen würde ich noch lange nicht meinen hart erarbeiteten Code meiner kommerziellen Produkte (mit denen ich meinen Lebensunterhalt verdiene) komplett freigeben. Was ich aus rechtlichen Gründen vielfach auch garnicht darf, da der Code meinen Kunden gehört.

Und jetzt hoffe ich, das die Diskussion von beiden Seiten mit weniger Kraftausdrücken und persönlichen Angriffen weitergeführt werden könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: SEPA und XML-Datei anstatt DTAUS

Beitrag von Tom »

Dieses Forum wurde dafür ins Leben gerufen, dass wir uns gegenseitig helfen (können).

Aber niemand hat vorzuschreiben, ob diese Hilfe auch stattzufinden hat oder wie sie im Einzelfall aussehen sollte. Auch wenn die neue Konsumenten- und Lebensmaxime "Will haben!" lautet ("Will" steht dabei u.a. als Synonym für "Darf" oder "Kann"), weshalb Menschen Dinge einfach klauen, an denen andere die Rechte halten, ist bislang - glücklicherweise - noch niemand gezwungen, diesem Ansatz auch zu folgen.

Wer mag, kann gerne all seine Quellcodes veröffentlichen, hier oder anderswo, meinetwegen auf einer eigens dafür geschaffenen Website oder bei Facebook oder per Twitter.

Ich will das nicht. Und was ich will, das entscheide ich bitteschön immer noch selbst.
Herzlich,
Tom
Antworten