eric leissler France Membre Simple # 0000002784 enregistré le 06/03/2010 http://www.aumeric.fr 68 ans LEISSLER Eric 85290 MORTAGNE SUR SEVRE de la société AUMERIC LOGICIELS Fiche personnelle
Note des membres 20/20 1 vote
Contributions > 01 - PRG : Programmation
PRELEVEMENTS SEPA
# 0000000874
ajouté le 31/01/2014 11:04:55 et modifié le 31/01/2014
consulté 12291 fois
Niveau
initié
Version(s) Foxpro : VFP 9.0 VFP 8.0
Le téléchargement des pièces jointes est limité aux membres Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description
Bonjour à tous
J'avais promis de le faire, alors il a fallu que je me replonge dans vfp...
Le code ci dessous permet
de lire un fichier ETEBAC ( fichier PO_RE)
et de le convertir un un fichier de type xml, conforme à la nouvelle norme SEPA.
Ce fichier xml a été testé et validé par le credit mutuel. et est valide à la norme pain.008.001.002
Dans le zip, un fichier BIC.DBF permettant d'obtenir les BIC d'un compte bancaire, à partir du code établissement de l'agence bancaire.
les comptes bancaires de l'exemple sont dépersonnalisés.
Bien cordialement à tous
Bon vent à tous et bonnes rencontres !
Eric LEISSLER
Code source :
*!* ******************************************* * AUMERIC - JANVIER 2014 ----- *REALISER UN FICHIER XML POUR LE PRELEVEMENTS A LA NORME SEPA * * CE PROGRAMME UTILISE LES FONCTIONS DE MA CONTRIB *http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000716 *POUR TRANSFORMER LES RIB EN IBAN DANS LE PRG LIB_RIBETIBAN * * * LA TABLE BIC.DBF CONTIENT 933 CODE ETABLISSEMENT ET BIC * * Le but de ce programme est de lire un fichier ETEBAC et d'en faire un fichier xml * à la norme SEPA * Le fichier xml produit a été testé et validé par le credit MUTUEL. * * ******************************************
*!* ouverture de la table des codes établissements et bic Use bic Alias bic In 0
*!* creation de la classe
oxml= Createobject("xmlsepa")
*!* -- paramètres *!* nom de l'organisme qui prélève
oxml.nom = "LENOMDUPRELEVEUR" *!* nom du message ( doit être unique )
oxml.msgid="LENOM-SDD-"+Right(Alltrim(Str(Year(Date()))),2)+Padl(jourdelannee(Date()),3,"0")+"-001"
*!* Informations sur le prélèvement
oxml.infopaiement="PRELEVEMENT MOIS "+ ALLTRIM(CMONTH(DATE()))
*!* N° siret de l'organisme qui prélève
oxml.siret = "1234567890123"
oxml.nics="FR99ZZZ999999" *!* Méthode de paiement
oxml.pmethode = "DD" *!* date d'échéance
oxml.date_ech= ALLTRIM(STR(YEAR(DATE())))+"-"+PADL(ALLTRIM(STR(MONTH(DATE()))),2,"0")+"-10" *!* organisme crediteur
oxml.crediteur="NOMPRELEVEUR"
*!* appel des methodes
oxml.lire_etebac_et_fait_etebac_dbf
DefineClass xmlsepa AsCustom
nom = ""
montant=""
nb_transactions=""
msgid=""
siret=""
nics=""
lachaineduxml=""
infopaiement=""
pmethode=""
date_ech=""
crediteur=""
bic="CMCIFR2A"
iban="FR7600000000000000000000000"&& cet IBAN N EXISTE PAS METTRE ICI L IBAN DU BENEFICIAIRE
Function calcbic Local oldselect
oldselect=Select() Local retour Select bic SetOrderTo etab Seek etebac.cetab IfFound()
retour =Alltrim(bic.bic) Else
msgbox("l'établissement "+etab.cteab + " n'a pas de bic connu ") && stopper la procédure s'il manque un bic ** *!* cancel *!* on shutdown *!* close all *!* quit
. Endif
Select (oldselect) Return retour Endfunc
Function jourdelannee
Parameter tdate
*isolate the year and convert it to a string
cYear = Right(Dtoc(tdate),2)
firstjan = Ctod("01/01/" + cYear)
*calculate the sequential number of the day
jday = tdate-firstjan+1 ReturnAlltrim(Str(jday))
Function Calculcleiban(sCodePays AsString, sRib AsString)
LOCAL tCodePays AsString LOCAL tRib AsString LOCAL tConcat AsString LOCAL in_i AsInteger LOCAL sRetenue As Variant LOCAL sCle As Variant LOCAL iNbInterm As Variant LOCAL sStrInterm As Variant LOCAL iCodeNum AsInteger LOCAL sCodeStr AsString LOCAL tIBAN AsString
Function FormatRib(sCodeBanque AsString, sCodeGuichet AsString, sNoCompte AsString, sCleRib AsString)
LOCAL tCodeBanque AsString LOCAL tCodeGuichet AsString LOCAL tNoCompte AsString LOCAL tCleRib AsString LOCAL tCodeStr AsString LOCAL tRib AsString LOCAL iNbCleRib AsInteger
FUNCTION cstr(truc) IFVARTYPE(truc)=="N" RETURNALLTRIM(STR(truc)) ELSE RETURN truc endif ENDFUNC
FUNCTION cvar(toto) IFVARTYPE(toto)=="C" RETURNVAL(toto) ELSE RETURN toto ENDIF endfunc
function clerib(nu_compte) local premier,deuxieme,troisime,prerest,deuxrest,troisrest,valretour *********************************************************************** * la fonction doit recevoir le numéro de compte en parametres * 5 digits pour le code établissement * 5 digits pour le code guichet * 11 digits pour le numéro de compte soit 21 digits au total * la clé rib est renvoyé par la fonction en numérique * * Pour les comptes CCP les lettres sont remplacées par des chiffres * selon la convention ci_dessous * * A=1 j=1 b=2 k=2 etc..etc * * * * * * *********************************************************************** * changement des lettres en chiffres grace à la fonction strtran
nu_compte=ChrTran(nu_compte,"AJBKSCLTDMUENVFOWGPXHQYIRZ","11222333444555666777888999") * vérification du numéro de compte 21 digits en tout iflen(nu_compte)#21
em_message(" Numéro de compte non valide") return"0" endif
valretour="0" * calcul de la clé
nu_compte=nu_compte+"00"
premier=substr(nu_compte,1,7)
deuxieme=substr(nu_compte,8,8)
troisieme=substr(nu_compte,16,8)
prerest=alltrim(str(mod(val(premier),97)))
deuxieme=prerest+deuxieme
deuxrest=alltrim(str(mod(val(deuxieme),97)))
troisieme=deuxrest+troisieme
troisrest=alltrim(str(mod(val(troisieme),97)))
le 28/06/2014, Francis Faure a écrit : Eric, De grands mercis pour cette contribution. Cordialement Francis
le 29/06/2014, eric leissler a écrit : Bonjour Francis , De rien. J'aurais voulu faire mieux mais pas trop de temps en ce moment. Le code peut surement être afiné. Cordialement Eric
Vous etes mon espoir dans la tache que je dois bientot rendre, je dois justement etablir un fichier XML pour des prelevements SEPA, mais je ne comprend absolument rien...Pouvez vous juste m’expliquer comment rentrer ce code afin de pouvoir transformer mon fichier en XML. Je vous remercie d’avance
le 01/07/2014, Francis Faure a écrit : Raypo, Eric a publié sa solution répondant à son problème c'est à dire de reprendre un fichier etabc/cfonb existant pour le transformer en SEPA xml. Mon besoin n'est pas identique car je génère directement les prélèvements SEPA xml avec des configurations différentes de la solution de Eric (un lot contenant plusieurs prélèvements groupés, des prélèvements récurrents et une gestion différente du "en to end" qui est fixe dans sa solution.) Grâce la contrib de Eric: Je me suis donc facilement créé une petite classe pour cela. Eric donne en pdf les spécifications compléte a lire en premier et il donne aussi un exemple de fichier xml et son approche : tout cela est très précieux. Maintenant avec tout cela si vous ne vous en sortez pas avec la spécification et le xml et selon vos besoins qui peuvent être différents : dans ce cas c'est une prestation, hors du champ associatif , qui est a envisager. Cordialement Francis
Eric,
De grands mercis pour cette contribution.
Cordialement
Francis