Foro | | | | Thomas Freier | Bevor ich das Rad neu erfinde, hat sich schon einer mit dem Thema befasst und es umgesetzt? Nachdem ich nach langem Zaudern, unser Kassierer ist als echter DAU einfach nicht mit einer ext. Software zurecht gekommen, 2010 DTAUS in meinem Vereinsprogramm eingebaut hatte steht nun SEPA an, und ist im Moment noch ein Buch mit sieben Siegeln per mich. Würde mich freuen, wenn jemand mit einem entsprechenden Script (*.inc) helfen potuto, um eine *.xml erzeugen zu können. Eine kleine Aufwandsentschädigung ist nicht ausgeschlossen, denn sonst ich würde es erneut mit einer ext. Software versuchen und der Kassierer muß eben tüchtig üben damit die Kasse nicht leer bleibt. |
| | | | |
| | | Grüße!
Zwar nicht befasst und umgesetzt aber verstehe ich Dich richtig, dass Du letztendlich nur eine XML erzeugen möchtest? Das wiederum sehe ich als wenig problematisch an, habe auch schon xmls aus XProfan heraus erzeugt z.B. beim Leveleditor per OGL.
Hast Du mal solch XML parat dass man sehen kann wie Du sie gerne hättest? |
| | | | |
| | Thomas Freier | @iF, es geht im Wesentlichen um den Aufbau, bestehend aus Testata, Datensätze und Abschlußzeilen. Beim Pflichtenheft der Bundesbank steige ich noch nicht durch. Vieles ist sicher speziell und per eine Basis-Lastschrift nicht erforderlich. Mit einem Testprogramm habe ich mal eine xml (bitte umbenennen) erstellt. Beispiel per Ansi zu UTF-8 ist hier ja vorhanden. Ansonsten würde ich wie bei DTAUS die Daten aus einer Gridbox nehmen und die File Zeile per Zeile schreiben (Print #2,Zeile$). |
| | | | |
| | | Tjo, pauschal sehe ich da 2 Wege -
entweder ein "Template" oder wir bauen solch Node-Tree-Klasse, in die man quasi Äste einhängen kann mit a) Werten und b) Parametern.
Schade das XProfan (noch) keine assoziativen Arrays beherrscht, damit ginge es superfix aber wenn Du Dich per das (mit sicherheut deutlich einfachere) Template-Verfahren entscheidest dann sehe ich da auch eine schnelle Abhilfe.
Ich schätze, dass in Deinen Werten und Parametern per Eigenschaften von Ästen keine Zeichen vorkommen, die nicht auch per Ansi darstellbar sind, weshalb wir quasi nur mit Ansi arbeiten müssten und nur im letzten Schritt die ganze Textdatei nach UTF kodieren.
Von den einzelnen Positionen/ Ästen bzw. Eigenschaften und Parametern habe ich keine Ahnung, also ich weiß nicht welche Struktur abverlang wird.
Gibt es dazu eine Documentazione oder hast Du bereits ein File welches wir zum Template machen könnten? |
| | | | |
| | Thomas Freier | | | | | |
| | | Ich habe Torben soeben einmal angeschrieben - hoffentlich kann er uns etwas dazu mitteilen. |
| | | | |
| | Thomas Freier | Ja gut. Mein Planungsziel ist März 2014. Aber ich dachte, es ist jetzt die Zeit einmal Nachzufragen, ob sich ein Profaner schon damit beschäftigt oder es gar realisiert hat. Die Möglichkeit ext. Software einzusetzen bleibt immer noch. |
| | | | |
| | Torben Nissen | Hallo! Es freut mich, dass ich Euch mal helfen kann!!! Heute Abend kann ich Euch einen Auszug aus meinem Quellcode schicken, der eine SEPA-File erstellen kann! Im Abomanager ist der Punkt SEPA-File erstellen deaktiviert, da das Programm davon ausgeht, dass die Bankdaten zunächst im BLZ-Format und "normaler" Kontonummer vorliegen! Also legt zum Probieren einen Kunden an, gebt eine (gültige!) BLZ und Kontonummer ein. Dann geht Ihr auf "Programm" > "Wartung" und klickt auf IBAN / BIC berechnen. Danach può Ihr SEPA-File erstellen. Unter Benutzerdaten müsst Ihr naturalmente auch gültige Bankdaten hinterlegt haben! Als Gläubiger-ID può Ihr zum Probieren die ID DE98ZZZ09999999999 benutzen! Ach ja, Ihr müsst naturalmente einen Aboauftrag anlegen. Gebt mindestens eine fällige Rate ein. Zum Selektieren das entsprechende Fälligkeitsdatum eingeben! |
| | | | |
| | Torben Nissen | Ich nutze kurz die Mittagspause, um Euch den Quellcode zu posten (ist auf aufgrund der Schnelle nicht weiter kommentiert). Vielleicht hilft das trotzdem erstmal weiter: KompilierenMarkierenSeparieren'Eigentliche SEPA-Datein anlegen
Assign #1,($ProgDir+"\SEPA\Abo_"+datum$+".xml")
Rewrite #1
Append #1
Print #1,"<?xml version="+Chr$(34)+"1.0"+Chr$(34)+" encoding="+Chr$(34)+"UTF-8"+Chr$(34)+"?>"
Print #1,"<Document xmlns="+Chr$(34)+"urn:iso:std:iso:20022:tech:xsd:pain.008.002.02"+Chr$(34)+">"
Print #1,"<CstmrDrctDbtInitn>"
Print #1,"<GrpHdr>"
time_kennung$=@Time$(0)
Print #1,"<MsgId>Kennung-Msg"+@Date$(3)+"-"+time_kennung$+"</MsgId>"
'Erstellungsdatum der Datei berechnen
datei_date$=@Date$(3)
jahr$=@Left$(datei_date$,4)
monat$=@Mid$(datei_date$,5,2)
tag$=@Right$(datei_date$,2)
Print #1,"<CreDtTm>"+jahr$+"-"+monat$+"-"+tag$+"T"+@Time$(0)+":01</CreDtTm>"
Print #1,"<NbOfTxs>"+anzahl$+"</NbOfTxs>"
Print #1,"<CtrlSum>"+ergebnis$+"</CtrlSum>"
Print #1,"<InitgPty>"
Print #1,"<Nm>"+user_firma$ +"</Nm>"
Print #1,"</InitgPty>"
Print #1,"</GrpHdr>"
Print #1,"<PmtInf>"
Print #1,"<PmtInfId>Kennung-PmInf"+@Date$(3)+"-"+@Time$(0)+"-1</PmtInfId>"
Print #1,"<PmtMtd>DD</PmtMtd>"
Print #1,"<NbOfTxs>"+anzahl$+"</NbOfTxs>"
Print #1,"<CtrlSum>"+ergebnis$+"</CtrlSum>"
Print #1,"<PmtTpInf>"
Print #1,"<SvcLvl>"
Print #1,"<Cd>SEPA</Cd>"
Print #1,"</SvcLvl>"
Print #1,"<LclInstrm>"
Print #1,"<Cd>CORE</Cd>"
Print #1,"</LclInstrm>"
Print #1,"<SeqTp>RCUR</SeqTp>"
Print #1,"</PmtTpInf>"
'Ausführungstermin der Datei berechnen
termin_jahr$=@Right$(termin$,4)
termin_monat$=@Mid$(termin$,4,2)
termin_tag$=@Left$(termin$,2)
Print #1,"<ReqdColltnDt>"+termin_jahr$+"-"+termin_monat$+"-"+termin_tag$+"</ReqdColltnDt>"
Print #1,"<Cdtr>"
Print #1,"<Nm>"+user_firma$+"</Nm>"
Print #1,"</Cdtr>"
Print #1,"<CdtrAcct>"
Print #1,"<Id>"
Print #1,"<IBAN>"+user_iban$+"</IBAN>"
Print #1,"</Id>"
Print #1,"</CdtrAcct>"
Print #1,"<CdtrAgt>"
Print #1,"<FinInstnId>"
Print #1,"<BIC>"+user_bic$+"</BIC>"
Print #1,"</FinInstnId>"
Print #1,"</CdtrAgt>"
Print #1,"<ChrgBr>SLEV</ChrgBr>"
Print #1,"<CdtrSchmeId>"
Print #1,"<Id>"
Print #1,"<PrvtId>"
Print #1,"<Othr>"
id$ = @ReadIni$($ProgDir+"System.sfw","Header","SEPA-ID")
Print #1,"<Id>"+id$+"</Id>"
Print #1,"<SchmeNm>"
Print #1,"<Prtry>SEPA</Prtry>"
Print #1,"</SchmeNm>"
Print #1,"</Othr>"
Print #1,"</PrvtId>"
Print #1,"</Id>"
Print #1,"</CdtrSchmeId>"
' Ab hier beginnen die eigentlichen Kundenforderungen
WhileLoop 0, GetCount(Gridbox%)-1
lfdnr%=lfdnr%+1
lfdnr$=lfdnr%
daten$=GetString$(GridBox%, &loop)
nachname$=@Mid$(daten$,1,20)
vorname$=@Mid$(daten$,32,20)
bic$=@Mid$(daten$,63,11)
iban$=@Mid$(daten$,75,34)
betrag$=@Mid$(daten$,112,6)
zweck$=@Mid$(daten$,119,30)
mandat_id$=@Mid$(daten$,150,6)
nachname$=@Trim$(nachname$)
vorname$=@Trim$(vorname$)
bic$=@Trim$(bic$)
iban$=@Trim$(iban$)
betrag$=@Trim$(betrag$)
zweck$=@Trim$(zweck$)
mandat_id$=@Trim$(mandat_id$)
nachname$=@Translate$(nachname$,"Ü","Ue")
nachname$=@Translate$(nachname$,"Ö","Oe")
nachname$=@Translate$(nachname$,"Ä","Ae")
vorname$=@Translate$(vorname$,"Ü","Ue")
vorname$=@Translate$(vorname$,"Ö","Oe")
vorname$=@Translate$(vorname$,"Ä","Ae")
zweck$=@Translate$(zweck$,"Ü","Ue")
zweck$=@Translate$(zweck$,"Ö","Oe")
zweck$=@Translate$(zweck$,"Ä","Ae")
zweck$=@Translate$(zweck$,"&","und")
nachname$=@Translate$(nachname$,"ü","ue")
nachname$=@Translate$(nachname$,"ö","oe")
nachname$=@Translate$(nachname$,"ä","ae")
nachname$=@Translate$(nachname$,"ß","ss")
vorname$=@Translate$(vorname$,"ü","ue")
vorname$=@Translate$(vorname$,"ö","oe")
vorname$=@Translate$(vorname$,"ä","ae")
vorname$=@Translate$(vorname$,"ß","ss")
zweck$=@Translate$(zweck$,"ü","ue")
zweck$=@Translate$(zweck$,"ö","oe")
zweck$=@Translate$(zweck$,"ä","ae")
zweck$=@Translate$(zweck$,"ß","ss")
'nachname$=@Upper$(nachname$)
'vorname$=@Upper$(vorname$)
'zweck$=@Upper$(zweck$)
Print #1,"<DrctDbtTxInf>"
Print #1,"<PmtId>"
'Datum formatieren
kennung_date$=@Date$(0)
kennung_date$=@Translate$(kennung_date$,".","")
Print #1,"<EndToEndId>Kennung-EtE"+kennung_date$+"-"+@Time$(0)+"-"+lfdnr$+"</EndToEndId>"
Print #1,"</PmtId>"
Print #1,"<InstdAmt Ccy="+Chr$(34)+"EUR"+chr$(34)+">"+betrag$+"</InstdAmt>"
Print #1,"<DrctDbtTx>"
Print #1,"<MndtRltdInf>"
Print #1,"<MndtId>"+mandat_id$+"</MndtId>"
'Hier eventuell das Auftragsdatum? <<<<<<<<<<<<<<<<<<<<<<<<<<
mandat_date$=@Date$(3)
jahr_mandat$=@Left$(mandat_date$,4)
monat_mandat$=@Mid$(mandat_date$,5,2)
tag_mandat$=@Right$(mandat_date$,2)
Print #1,"<DtOfSgntr>"+jahr_mandat$+"-"+monat_mandat$+"-"+tag_mandat$+"</DtOfSgntr>"
Print #1,"</MndtRltdInf>"
Print #1,"</DrctDbtTx>"
Print #1,"<DbtrAgt>"
Print #1,"<FinInstnId>"
Print #1,"<BIC>"+bic$+"</BIC>"
Print #1,"</FinInstnId>"
Print #1,"</DbtrAgt>"
Print #1,"<Dbtr>"
Print #1,"<Nm>"+nachname$+", "+vorname$+"</Nm>"
Print #1,"</Dbtr>"
Print #1,"<DbtrAcct>"
Print #1,"<Id>"
Print #1,"<IBAN>"+iban$+"</IBAN>"
Print #1,"</Id>"
Print #1,"</DbtrAcct>"
Print #1,"<RmtInf>"
Print #1,"<Ustrd>"+zweck$+"</Ustrd>"
Print #1,"</RmtInf>"
Print #1,"</DrctDbtTxInf>"
EndWhile'WhileLoop 0, GetCount(Gridbox%)-1
Print #1,"</PmtInf>"
Print #1,"</CstmrDrctDbtInitn>"
Print #1,"</Document>&qu pan>
close # 1
'Ende Sepa-File Erstellung
Viele Grüße Torben |
| | | | |
| | Thomas Freier | Moin Torben, da bin ich beim Testen wohl circa BLZ/Konto gestolpert, weil ich gleich BIC/IBAN eingegeben hatte. Werde jetzt den beschriebenen Weg testen. Gesucht hatte ich noch eine Mandatsverwaltung (im Kundendatensatz), also min. Datum (ab wann gültig) und ob es sich um Erst-, bzw. Folgelastschrift handelt.
Oh, warst aber fix. DANKE! Werde es mal testen. |
| | | | |
| | Torben Nissen | Ich benutze als Mandat-ID die Kundennummer vom Abokunden und als Datum das Auftragsdatum. |
| | | | |
| | Thomas Freier | Habe einmal mit der Testversion von Sepasoft verglichen und nur ein Tag Differenz gefunden. Torben, ich gehe einmal davon aus, dass schon erfolgreich SEPA-Lastschriften mit deinem Script corsa worden sind. Wenn ich das Merkblatt unserer S-Kasse sehe, so bleibt der Punkt Erst- und Folgelastschrift zur Zeit noch offen.
– SEPA-Lastschrifteinzugdatei erstellen? – neues File-Format „xml“ – getrennt nach Erst-Lastschrift / Folge-Lastschrift
Könnte auch sein, dass das von Bank zu Bank unterschiedlich behandelt wird. Auf die Umwandlung von Ansi->UTF würde ich nicht verzichten um sicher zu sein, dass alle Zeichen ab 128 auch richtig eingepflegt werden. |
| | | | |
|
AnswerTopic-Options | 27.119 Views |
ThemeninformationenDieses Thema hat 3 subscriber: |