[Développement spécifique]Import des relevés bancaires en masse

by Boujamaa OULLAIJ
Oct03
[Développement spécifique]Import des relevés bancaires en masse

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 :

  1. 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