Accueil du site > Les articles > Composant de conversion de devise avec l’euro comme pivot sous (...)
Version à imprimer Enregistrer au format PDF

Composant de conversion de devise avec l’euro comme pivot sous Adélia.

mardi 18 mai 2004, par Grégory Jarrige Visites  1659

Si vous avez besoin de développer un composant de conversion Euro, cette page peut vous intéresser.

Mon composant de conversion se compose d’une règle de gestion qui appelle un programme. Le source du composant étant documenté, j’ajouterai simplement que le programme de conversion s’appuie sur un fichier des taux de conversion à l’euro que j’ai appelé DEVISE (pas très original, je sais). Il est possible de définir le niveau d’arrondi (de 1 à 5) du montant calculé en devise de destination.


Structure du fichier DEVISEL1 :

Règle de gestion CONVER_DEVISE :

Classe : Règle de gestion avec paramètres

Commentaires  :
  Cette règle de gestion reçoit 3 paramètres (code et valeur de la monnaie
  de départ, code de la monnaie d'arrivée) et retourne 2 paramètres qui
  sont la valeur de la monnaie d'arrivée et un code erreur.
  Si le code erreur est retourné à blanc, alors il n'y pas d'erreur
  dans le calcul de la valeur d'arrivée, s'il est retourné à "*"
  la valeur calculée est incorrecte.
  Points importants :
     - toute conversion passe par la monnaie pivot qu'est l'euro
     - si la valeur d'une devise par rapport à l'euro n'est pas fixée,
       alors il y aura une division par zéro, d'où l'importance de tester
       le diviseur et de retourner un code erreur en cas d'anomalie.

Paramètres : 1 - code devise d'origine                3     OBLI
            2 - valeur d'origine                    15 5   OBLI
            3 - code devise de destination           3     OBLI
            4 - valeur devise de destination        15 5   OBLI
            5 - code anomalie                        1     OBLI

Source :

DECLARER WGCDOR;WG_COD_DEV_ORI  3
DECLARER WGVAOR;WG_VAL_DEV_ORI 15;5
DECLARER WGAAOR;WG_ALP_DEV_ORI 15
DECLARER WGCDDS;WG_COD_DEV_DES  3
DECLARER WGVADS;WG_VAL_DEV_DES 15;5
DECLARER WGAADS;WG_ALP_DEV_DES 15
DECLARER WGCCER;WG_COD_CNV_ERR  1
*
WG_COD_DEV_ORI = :01
WG_VAL_DEV_ORI = :02
WG_ALP_DEV_ORI = WG_VAL_DEV_ORI
WG_COD_DEV_DES = :03
WG_VAL_DEV_DES = 0
WG_COD_CNV_ERR = *BLANK
*
APPELER DEVCNV WG_COD_DEV_ORI WG_ALP_DEV_ORI WG_COD_DEV_DES
  WG_ALP_DEV_DES WG_COD_CNV_ERR
*
WG_VAL_DEV_DES = WG_ALP_DEV_DES
:04 = WG_VAL_DEV_DES
:05 = WG_COD_CNV_ERR

Programme DEVCNV :

Environnement de données :

---------------------------------------------
!  Code     ! Mot Directeur !Type! Lg  !Dec.!
---------------------------------------------
!PVADES     !P_VAL_DEV_DES  ! A  !   15!    !
!PVAORI     !P_VAL_DEV_ORI  ! A  !   15!    !
!WARDC0     !W_ARR_DEC_0    ! N  !    6!  0 !
!WARDC1     !W_ARR_DEC_1    ! N  !    7!  1 !
!WARDC2     !W_ARR_DEC_2    ! N  !    8!  2 !
!WARDC3     !W_ARR_DEC_3    ! N  !    9!  3 !
!WARDC4     !W_ARR_DEC_4    ! N  !   10!  4 !
!WARDVD     !W_ARR_DEV_DES  ! N  !    1!  0 !
!WCNERR     !W_COD_CNV_ERR  ! A  !    1!    !
!WCDDES     !W_COD_DEV_DES  ! A  !    3!    !
!WCDORI     !W_COD_DEV_ORI  ! A  !    3!    !
!WTADES     !W_TAU_DEV_DES  ! N  !   18!  9 !
!WTAORI     !W_TAU_DEV_ORI  ! N  !   18!  9 !
!WVADES     !W_VAL_DEV_DES  ! N  !   15!  5 !
!WVAORI     !W_VAL_DEV_ORI  ! N  !   15!  5 !
---------------------------------------------

Liste des vues :

Source du programme :

********************************************************************
* TITRE       : CONVERSION D'UNE DEVISE EN UNE AUTRE               *
* Créé par    : GREGORY JARRIGE              Le: 27/07/2000        *
*------------------------------------------------------------------*
* Paramètres  : CODE DEVISE D'ORIGINE                   3          *
*               VALEUR D'ORIGINE                       15;5        *
*               CODE DEVISE DE DESTINATION              3          *
*               VALEUR DEVISE DE DESTINATION           15;5        *
*               CODE ANOMALIE                           1          *
********************************************************************
RECEVOIR W_COD_DEV_ORI P_VAL_DEV_ORI W_COD_DEV_DES P_VAL_DEV_DES W_COD_CNV_ERR
*
W_VAL_DEV_ORI = P_VAL_DEV_ORI  
W_VAL_DEV_DES = 0
W_TAU_DEV_ORI = 0
W_TAU_DEV_DES = 0
W_COD_CNV_ERR = *BLANK
W_ARR_DEV_DES = *BLANK
*
*-- Si Devise Origine = Devise Destination Alors Pas de conversion
SI W_COD_DEV_ORI = W_COD_DEV_DES
 W_VAL_DEV_DES = W_VAL_DEV_ORI
SINON
 *-- Si les 2 devises sont différentes de l'euro alors on utilise
 *    l'euro comme devise pivot pour la conversion
 *
 *-- Init. Taux Devise principale
 SI W_COD_DEV_ORI <> 'EUR' ET W_COD_DEV_DES <> 'EUR'
   T2_COD_DEV = *BLANK
   T2_COD_DEV = W_COD_DEV_ORI
   LIRE DEVISEL1
   SI DEVISEL1 EXISTE
     W_TAU_DEV_ORI = T2_TAU_DEV
   SINON
     W_TAU_DEV_ORI = 0
   FIN
   *
   *-- Init. Taux Devise secondaire
   T2_COD_DEV = *BLANK
   T2_COD_DEV = W_COD_DEV_DES
   LIRE DEVISEL1
   SI DEVISEL1 EXISTE
     W_TAU_DEV_DES = T2_TAU_DEV
     W_ARR_DEV_DES = T2_ARRONDI
   SINON
     W_TAU_DEV_DES = 0
   FIN
   SI W_TAU_DEV_ORI <> 0
     W_VAL_DEV_DES H = W_VAL_DEV_ORI / W_TAU_DEV_ORI * W_TAU_DEV_DES
   SINON  
     W_COD_CNV_ERR = '*'
   FIN
 SINON
   *-- Conversion d'une devise X en Euro
   SI W_COD_DEV_DES = 'EUR'
     T2_COD_DEV = *BLANK
     T2_COD_DEV = W_COD_DEV_ORI
     LIRE DEVISEL1
     SI DEVISEL1 EXISTE
       W_TAU_DEV_ORI = T2_TAU_DEV
     SINON
       W_TAU_DEV_ORI = 0
     FIN
     T2_COD_DEV = *BLANK
     T2_COD_DEV = W_COD_DEV_DES
     LIRE DEVISEL1
     SI DEVISEL1 EXISTE
       *-- Récupération du niveau d'arrondi
       W_ARR_DEV_DES = T2_ARRONDI
     FIN
     SI W_TAU_DEV_ORI <> 0
       W_VAL_DEV_DES H = W_VAL_DEV_ORI / W_TAU_DEV_ORI
     SINON
       W_COD_CNV_ERR = '*'
     FIN
   SINON
     *-- Conversion de l'Euro en une devise X
     T2_COD_DEV = *BLANK
     T2_COD_DEV = W_COD_DEV_DES
     LIRE DEVISEL1
     SI DEVISEL1 EXISTE
       W_VAL_DEV_DES H = W_VAL_DEV_ORI * T2_TAU_DEV
       W_ARR_DEV_DES   = T2_ARRONDI
     SINON
       W_COD_CNV_ERR = '*'
     FIN
   FIN  
 FIN
FIN
*
*-- Calcul de l'arrondi
*
SI W_VAL_DEV_DES <> 0 ET W_ARR_DEV_DES <> *BLANK ET W_COD_CNV_ERR = *BLANK
 SI W_ARR_DEV_DES = 4
   W_ARR_DEC_4 H = W_VAL_DEV_DES
   W_VAL_DEV_DES = W_ARR_DEC_4
 SINON
   SI W_ARR_DEV_DES = 3
     W_ARR_DEC_3 H = W_VAL_DEV_DES
     W_VAL_DEV_DES = W_ARR_DEC_3
   SINON
     SI W_ARR_DEV_DES = 2
       W_ARR_DEC_2 H = W_VAL_DEV_DES
       W_VAL_DEV_DES = W_ARR_DEC_2
     SINON
       SI W_ARR_DEV_DES = 1
         W_ARR_DEC_1 H = W_VAL_DEV_DES
         W_VAL_DEV_DES = W_ARR_DEC_1
       SINON
         SI W_ARR_DEV_DES = 0
           W_ARR_DEC_0 H = W_VAL_DEV_DES
           W_VAL_DEV_DES = W_ARR_DEC_0
         FIN
       FIN
     FIN
   FIN
 FIN
FIN
*
P_VAL_DEV_DES = W_VAL_DEV_DES
*
TERMINER