L’import des relevés bancaires CFONB est disponible en standard dans Sage X3 au niveau de la comptabilité tiers > Transactions bancaires > Import relevé bancaire
L’automatisation de cette fonction nécessite de lui passer en paramètre un nom de fichier bien précis.
Mais toutes les entreprises reçoivent chaque jour une dizaine de relevés bancaires et importer un par un devient une opération fastidieuse et une pure perte de temps sans valeur ajoutée.
C’est pour cela, que je vous propose une amélioration de cette fonction en spécifique.
Nous pouvons schématiser cette solution en plusieurs étapes :
Création d’un écran ZRELBAN de type Boite de dialogue :
2. Creation d’un espace de stockage X3 et mettez le comme valeur par défaut au niveau écran. Exemple [RELEVES] qui pointe sur le repertoires “D:\INTERFACES\RELEVES\CFONB” dans lequel nous créons deux sous-dossiers ARCHIVES et ERREURS
3. Traitement ZRELBAN:
#-import relevés bancaires en masse
#- Programme fait par Boujamaa OULLAIJ
#- Version 1
If GSERVEUR=0
$ACTION
Case ACTION
When "INIT_DIA" : Gosub INIT_DIA
When "EXEC" : Gosub EXEC
Endcase
Return
Endif
#Si mode interactive, on active l'etiquette init_dia
If GSERVEUR=0
$INIT_DIA
If clalev([M:DIA])=0 : Local Mask ZRELBAN [DIA] : Endif
Raz [M:DIA]
Return
Else
If clalev([M:DIA])=0 : Local Mask ZRELBAN [DIA] : Endif
Raz [M:DIA]
Endif
#Si mode interactive, on active l'etiquette EXEC
If GSERVEUR=0
$EXEC
Endif
#Déclarer les variables
Local Char ZFICHIER(250),FICHIER(250),YNOMFICHIER(250),YREPIMP(250)
Local Integer FLAG_PB_FIC,ZNBFIC,YERREXISTE,YOUVRE_TRACE,YOKMOVE,YSAVGSERVEUR,FS, ZI, ZLIGNE,ZJ
Local Char ZFICHIERS(250)(200),YRETOUR(6)
Global Char GZFICHIER(250)
#Initier le volume
[L]YREPIMP=[M:DIA]FIC+"\"
Call GET_VOLUME(YREPIMP) From YRELBAN
YREPIMP=ctrans(YREPIMP,"/","\")
#Recupérer le nombre des fichiers
Call GET_FICHIERS([L]YREPIMP+"*.Rlv",ZFICHIERS,ZNBFIC)
#Si mode interactive, on ouvre la trace
If GSERVEUR=0
Call OUVRE_TRACE(mess(13,6001,1)) From LECFIC #"Import des relevés bancaires"
YOUVRE_TRACE=1
Endif
#Inscrire lecture de repertoire dans trace et le nombre des fichiers trouvés
Call ECR_TRACE(mess(14,6001,1)-ctrans(YREPIMP,"\","/"),0) From GESECRAN
Call ECR_TRACE(num$([L]ZNBFIC)-mess(15,6001,1),0) From GESECRAN
#Parcourir les fichiers
For [L]ZI=0 To [L]ZNBFIC-1
# Gestion de la trace - ouverture
Raz [V]GERRTRACE, [L]YERREXISTE
# Chargement du fichier
[L]ZFICHIER = [L]ZFICHIERS([L]ZI+1)
Call ECR_TRACE("---------------------------------------------------------------",0) From GESECRAN
Call ECR_TRACE(mess(16,6001,1)+ [L]ZFICHIER,0) From GESECRAN #Traitement du fichier
Call ECR_TRACE("---------------------------------------------------------------",0) From GESECRAN
#déplacement du fichier
Call MOVE([L]YREPIMP+[L]ZFICHIERS([L]ZI+1),[L]YREPIMP+"ARCHIVE",YOKMOVE) From ORDSYS
YSAVGSERVEUR=GSERVEUR
If GSERVEUR=0 : GSERVEUR=1 : Endif
#traitement du fichier
Close Local Mask [M:DIA]
GZFICHIER=[L]YREPIMP+"ARCHIVES\"+[L]ZFICHIERS([L]ZI+1)
Local Char VALBOUT(250) , PARBOUT(250)(1..20), SAVACT
SAVACT=GACTION
FLGEXE = 1
GACTION = "RELBAN"
Call TRAITE_CHAR(VALBOUT,PARBOUT,"","SUBRBK","FRELBAN",3,"SPERBK") From GTRAITE
GACTION=SAVACT
If GERRTRACE<>0 #erreur vous avez le choix de mettre le fichier en erreur via l
#Call MOVE(filpath("ZRELBAN","","")+"\"+[L]ZFICHIERS([L]ZI+1),filpath("ZRELBAN\ERREURS","",""),YOKMOVE) From ORDSYS
#on ne fait rien
Else
#Le fichier est déjà posé en ARCHIVES donc rien à faire
Endif
GSERVEUR=YSAVGSERVEUR
Local Mask ZRELBAN [DIA]
[M:DIA]FIC=[L]YREPIMP
Next
If (ZI=0 or ZI= ZNBFIC-1 ) then
Call ECR_TRACE("Fin du traitement ",0) From GESECRAN
Gosub FIN_EXEC
Endif
Return
#Fin fermeture de trace
$FIN_EXEC
If YOUVRE_TRACE=1
Call LEC_TRACE From LECFIC
Call FERME_TRACE From LECFIC
Endif
Kill GZFICHIER
Return
##########################################################
#GET_FICHIERS : Compter les fichiers et les placer dans une variable de type tableau
##########################################################
Subprog GET_FICHIERS(ZFILE,ZFICHIERS,ZNBFIC)
Value Char ZFILE
Variable Char ZFICHIERS()()
Variable Integer ZNBFIC
Local Char ZLIGNE(250)(100),ZFICW(250),ZFICEXT(250),ZCHEMIN(100)
Local Integer ZI,ZJ
Local Char ZSEP(1)
Raz [L]ZNBFIC
[L]ZFICW = ZFILE
[L]ZSEP = "\"
[L]ZFICW = ctrans([L]ZFICW,'#','*')
[L]ZFICEXT=[L]ZFICW
While instr(0,[L]ZFICEXT,[L]ZSEP)<>0
[L]ZFICEXT=right$([L]ZFICEXT,instr(0,[L]ZFICEXT,[L]ZSEP)+1)
Wend
[L]ZCHEMIN=left$([L]ZFICW,len([L]ZFICW)-len([L]ZFICEXT))
System [L]ZLIGNE = "ae_dir"-[L]ZFICW
For ZI = 0 To dim([L]ZLIGNE)-1
Repeat
[L]ZJ = instr(1,[L]ZLIGNE([L]ZI)," ")
If [L]ZJ <> 0 Then
[L]ZLIGNE([L]ZI) = right$([L]ZLIGNE([L]ZI),[L]ZJ+1)
Endif
Until [L]ZJ = 0
#------------------------------------------------------
If pat([L]ZLIGNE([L]ZI),[L]ZFICEXT) Then
[L]ZNBFIC+=1
[L]ZFICHIERS([L]ZNBFIC)=[L]ZLIGNE([L]ZI)
Endif
If [L]ZNBFIC>=dim([L]ZFICHIERS) Then
Call ECR_TRACE(mess(17,6101,1),0)From GESECRAN #Le nombre maximum de fichiers est atteint. Il sera nécessaire de faire plusieurs lancements."Menu local à créer"
Break
Endif
Next
End
######################################################################################
#GET_VOLUME : Si vous voulez ne pas utiliser cette fonction, vous pouvez passer le chemin D:\... directement
######################################################################################
Subprog GET_VOLUME(FICHIER)
Variable Char FICHIER
Local File AVOLUME [ZVOL]
For [F:ZVOL]
If instr(0,FICHIER,"["+[F:ZVOL]VOLUME+"]")>0
FICHIER=[F:ZVOL]ROOT+mid$(FICHIER,instr(0,FICHIER,"]")+1,len(FICHIER))
Break
Endif
Next
Close Local File [ZVOL]
End
4. Récupérer la variable globale GFICHIER au niveau du SPERBK de RELBAN :
#-SPERBK : Import relevés bancaires en masse à partir d'un repertoire
#-Boujamaa OULLAIJ (BOU)
#-Version 1
#######################################################################
$ACTION
Case ACTION
When "AVANT_PAR" : Gosub AVANT_PAR
Endcase
Return
#######################################################################
$AVANT_PAR
If dim(GFICHIER)>0
If !clalev([M:DIA])
Local Mask RELBAN [DIA]
Default Mask [M:DIA]
Gosub INIT_DIA From SUBRBK
[M:DIA]TYPEXP=2
[M:DIA]ALLBAN=2
[M:DIA]VOLFIL=GFICHIER
[M:DIA]FILNAM=GFICHIER
[M:DIA]LEG='FRA'
Endif
TYPPRG=0
Endif
Return
5. Crééz la fenêtre ZRELBAN avec les mêmes caractéristique de l’Ecran
6. Créez l’action ZRELBAN
7. Créer la fonction ZRELBAN si vous voulez donner la main aux utilisateurs au cas ou exceptionnellement, ils veulent importer des relevés en urgence .
8. Créez la tâche batch ZRELBAN sur la fonction ZRELBAN
9. Planifier l’abonnement X3 ZRELBAN selon les horaires que vous souhaitez
10. Ajouter l’entrée de menu et le côté SYRACUSE et donner les droits aux utilisateurs sur la fonction.
N’hesitez pas à m’écrire si vous rencontrerez un problème ou si vous avez une méthode plus optimisée
![[Développement spécifique]Import des relevés bancaires en masse](https://images.squarespace-cdn.com/content/v1/66edcb3eccfab75f0fd94e21/1727983638030-BMGLR816NRFO2X31SM0H/releves_bancaires.png)