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