**********************************************************
*  Intgrations des amortissements
*  Programme chaine  partir d'un projet VB
*  Vanessa
*  avril 2000
*********************************************************

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","IMMO" TO F.IMMO ELSE PRINT "OUVERTURE IMMO" ;* en lecture
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO" ;* en lecture criture
OPEN "","PARAMENTITECOMPTA" TO F.PARAMENTITECOMPTA ELSE PRINT "OUVERTURE PARAMENTITECOMPTA" ;* en lecture
OPEN "","BROUILLARDDETAIL" TO F.BROUILLARDDETAIL ELSE PRINT "OUVERTURE BROUILLARDDETAIL" ;* en lecture criture
OPEN "","BROUILLARDTETE" TO F.BROUILLARDTETE ELSE PRINT "OUVERTURE BROUILLARDTETE" ;* en lecture criture
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "OUVERTURE ACTIVITES" ;* en lecture
OPEN "","PLANCOMPTABLE" TO F.PLANCOMPTABLE ELSE PRINT "OUVERTURE PLANCOMPTABLE" ;* en lecture
*********************************************************
* initialisation des variables

W_TabDyn=""
*********************************************************
* Recuperation des arguments

PROCREAD ARGUMENTS ELSE STOP
W_Entite=FIELD(ARGUMENTS," ",2)
W_Journal=FIELD(ARGUMENTS," ",3)
W_DateDeb=FIELD(ARGUMENTS," ",4)
W_DateFin=FIELD(ARGUMENTS," ",5)
W_Exer=FIELD(ARGUMENTS," ",6)
*********************************************************
* PROGRAMME PRINCIPAL

   READ ENR_PARAMENTITECOMPTA FROM F.PARAMENTITECOMPTA,W_Entite ELSE ENR_PARAMENTITECOMPTA=""
   IF W_Exer="N0" THEN
      W_DateDebExer=ENR_PARAMENTITECOMPTA<1>
      W_DateFinExer=ENR_PARAMENTITECOMPTA<2>
      EXECUTE 'SSELECT IMMO AVEC 0 = "':W_Entite:']" AND AVEC 8 >= "':ENR_PARAMENTITECOMPTA<1>:'" OR = "" PAR 0'
   END ELSE
      W_DateDebExer=ENR_PARAMENTITECOMPTA<3>
      W_DateFinExer=ENR_PARAMENTITECOMPTA<4>
      EXECUTE 'SSELECT IMMO AVEC 0 = "':W_Entite:']" AND AVEC 8 >= "':ENR_PARAMENTITECOMPTA<3>:'" OR = "" PAR 0'
   END

   W_End="FAUX"
   LOOP 
      READNEXT W_CleImmo ELSE W_End="VRAI"
   WHILE W_End="FAUX" DO
      READ ENR_IMMO FROM F.IMMO,W_CleImmo ELSE ENR_IMMO=""
      IF ENR_IMMO<3> > ENR_IMMO<10> THEN
         W_Date=OCONV(ENR_IMMO<2>,"D4/")
         W_An=W_Date[7,4] + ENR_IMMO<5>
         W_Date2=W_Date[1,6]:W_An

         IF W_DateDeb < ICONV(W_Date2,"D4/") THEN
            W_CodeImmo=W_CleImmo[4,4]
            W_Type=ENR_IMMO<4>
            W_DateAcq=ENR_IMMO<2>
            W_Duree=ENR_IMMO<5>
            W_ValeurAcq=ENR_IMMO<3>
            W_Cumul=ENR_IMMO<10>
            W_FinExer=ENR_IMMO<11>
            W_DateCession=ENR_IMMO<8>

            GOSUB 10

            i=1
            LOOP
            UNTIL OCONV(W_DateDeb,"D4/")[7,4] = ENR_TEMPO<1,i> OR ENR_TEMPO<1,i>="" DO
               i=i+1
            REPEAT

            IF ENR_IMMO<8> = "" THEN
               W_Date=OCONV(ENR_IMMO<2>,"D4/")
               W_An=W_Date[7,4] + ENR_IMMO<5>
               W_DateFinImmo2=W_Date[1,6]:W_An
               W_DateFinImmo=ICONV(W_DateFinImmo2,"D4/")
            END ELSE
               W_DateFinImmo=ENR_IMMO<8>
            END
            IF W_DateDeb=W_DateDebExer AND W_DateFin=W_DateFinExer THEN
               W_Amort=ENR_TEMPO<3,i>
            END ELSE
               IF ENR_IMMO<2> < W_DateDebExer THEN
                  W_DebAmortExer=W_DateDebExer
               END ELSE
                  W_DebAmortExer=ENR_IMMO<2>
               END
               IF W_DateFinImmo < W_DateFinExer THEN
                  W_FinAmortExer=W_DateFinImmo
               END ELSE
                  W_FinAmortExer=W_DateFinExer
               END 
               IF W_DateDeb > W_FinAmortExer THEN
                  W_Amort=0
               END ELSE
                  IF W_DateFin < W_DebAmortExer THEN
                     W_Amort=0
                  END ELSE
                     IF W_DateDeb < ENR_IMMO<2> THEN
                        W_DateDebPeriode=ENR_IMMO<2>
                     END ELSE
                        W_DateDebPeriode=W_DateDeb
                     END
                     IF W_DateFin > W_DateFinImmo THEN
                        W_DateFinPeriode=W_DateFinImmo
                     END ELSE
                        W_DateFinPeriode=W_DateFin
                     END

                     W_Amort=ENR_TEMPO<3,i>/(W_FinAmortExer-W_DebAmortExer+1)*(W_DateFinPeriode-W_DateDebPeriode+1)
                  END
               END
            END
            IF W_Amort # 0 THEN
               W_Passe6="FAUX"
               W_Passe7="FAUX"

               IF ENR_IMMO<6> # "" THEN
                  i=1
                  LOOP
                  UNTIL W_TabDyn<1,i> = ENR_IMMO<6> OR W_TabDyn<1,i>="" DO
                     i=i+1
                  REPEAT
                  IF W_TabDyn<1,i> = ENR_IMMO<6> THEN
                     W_Passe6="VRAI"
                  END
                  IF W_Passe6="FAUX" THEN
                     W_TabDyn<1,i>=ENR_IMMO<6>
                     W_TabDyn<2,i>=INT(W_Amort+(1/2))
                  END ELSE
                     W_TabDyn<2,i>=W_TabDyn<2,i> + INT(W_Amort+(1/2))
                  END
               END

               IF ENR_IMMO<7> # "" THEN
                  i=1
                  LOOP
                  UNTIL W_TabDyn<1,i> = ENR_IMMO<7> OR W_TabDyn<1,i>="" DO
                     i=i+1
                  REPEAT
                  IF W_TabDyn<1,i> = ENR_IMMO<7> THEN
                     W_Passe7="VRAI"
                  END
                  IF W_Passe7="FAUX" THEN
                     W_TabDyn<1,i>=ENR_IMMO<7>
                     W_TabDyn<2,i>=INT(W_Amort+(1/2))
                  END ELSE
                     W_TabDyn<2,i>=W_TabDyn<2,i> + INT(W_Amort+(1/2))
                  END
               END
            END
            DELETE F.TEMPO,"IMMO":W_CodeImmo
         END
      END
   REPEAT

   W_Count=DCOUNT(W_TabDyn<1>,CHAR(253))
   FOR i = 1 TO W_Count
      W_SectAnal="FAUX"
      W_CleBrouillardTete=W_Journal:W_Exer:"1" 
      READ ENR_BROUILLARDTETE FROM F.BROUILLARDTETE,W_CleBrouillardTete ELSE ENR_BROUILLARDTETE=""
      IF ENR_BROUILLARDTETE<1>="" THEN
         W_Ligne=0
      END ELSE
         W_Ligne=ENR_BROUILLARDTETE<1>
      END
      ENR_BROUILLARDDETAIL=""
      ENR_BROUILLARDDETAIL<1>=DATE()
      ENR_BROUILLARDDETAIL<2>=W_DateFin
      ENR_BROUILLARDDETAIL<3>=""  
      ENR_BROUILLARDDETAIL<4>=W_TabDyn<1,i>
      ENR_BROUILLARDDETAIL<5>="AMT DU ":OCONV(W_DateDeb,"D4/"):" AU ":OCONV(W_DateFin,"D4/")
      ENR_BROUILLARDDETAIL<6>=""  
      IF W_TabDyn<1,i>[4,2]="68" THEN
         ENR_BROUILLARDDETAIL<7>=W_TabDyn<2,i>
      END ELSE
         ENR_BROUILLARDDETAIL<7>=""  
      END
      IF W_TabDyn<1,i>[4,2]="28" THEN
         ENR_BROUILLARDDETAIL<8>=W_TabDyn<2,i>
      END ELSE
         ENR_BROUILLARDDETAIL<8>=""
      END
      ENR_BROUILLARDDETAIL<9>=""  
      ENR_BROUILLARDDETAIL<10>=""
      IF W_TabDyn<1,i>[4,2]="28" THEN
         ENR_BROUILLARDDETAIL<11>=""
         W_SectAnal="FAUX"
      END ELSE
         READ ENR_PLANCOMPTABLE FROM F.PLANCOMPTABLE,W_TabDyn<1,i> ELSE ENR_PLANCOMPTABLE=""
         W_CountSect = DCOUNT(ENR_PLANCOMPTABLE<5>,CHAR(253))
         W_TotalSect=0
         IF ENR_PLANCOMPTABLE<5,1> # "" THEN
            ENR_BROUILLARDDETAIL<11>=ENR_PLANCOMPTABLE<5,1>
            IF W_TabDyn<1,i>[4,2]="68" THEN
               ENR_BROUILLARDDETAIL<7>=INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,1>) / 10000)+(1/2))
               W_TotalSect=INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,1>) / 10000)+(1/2))
            END ELSE
               ENR_BROUILLARDDETAIL<7>=""  
            END
            IF W_TabDyn<1,i>[4,2]="28" THEN
               ENR_BROUILLARDDETAIL<8>=INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,1>) / 10000)+(1/2))
            END ELSE
               ENR_BROUILLARDDETAIL<8>=""
            END
            W_Ligne=W_Ligne+1 "R%5"
            WRITE ENR_BROUILLARDDETAIL ON F.BROUILLARDDETAIL,W_CleBrouillardTete:W_Ligne
            ENR_BROUILLARDTETE<1>=W_Ligne
            IF W_TabDyn<1,i>[4,2]="68" THEN
               ENR_BROUILLARDTETE<2>=ENR_BROUILLARDTETE<2>+ENR_BROUILLARDDETAIL<7>
            END ELSE
               ENR_BROUILLARDTETE<3>=ENR_BROUILLARDTETE<3>+ENR_BROUILLARDDETAIL<8>
            END
            WRITE ENR_BROUILLARDTETE ON F.BROUILLARDTETE,W_CleBrouillardTete
            FOR l = 2 TO W_CountSect

               ENR_BROUILLARDDETAIL<11>=ENR_PLANCOMPTABLE<5,l>
               IF W_TabDyn<1,i>[4,2]="68" THEN
                  ENR_BROUILLARDDETAIL<7>=INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,l>) / 10000)+(1/2))
                  W_TotalSect=W_TotalSect + INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,l>) / 10000)+(1/2))              
               END ELSE
                  ENR_BROUILLARDDETAIL<7>=""  
               END
               IF W_TabDyn<1,i>[4,2]="28" THEN
                  ENR_BROUILLARDDETAIL<8>=INT(((W_TabDyn<2,i>*ENR_PLANCOMPTABLE<6,l>) / 10000)+(1/2))
               END ELSE
                  ENR_BROUILLARDDETAIL<8>=""
               END
               W_Ligne=W_Ligne+1 "R%5"
               WRITE ENR_BROUILLARDDETAIL ON F.BROUILLARDDETAIL,W_CleBrouillardTete:W_Ligne
               ENR_BROUILLARDTETE<1>=W_Ligne
               IF W_TabDyn<1,i>[4,2]="68" THEN
                  ENR_BROUILLARDTETE<2>=ENR_BROUILLARDTETE<2>+ENR_BROUILLARDDETAIL<7>
               END ELSE
                  ENR_BROUILLARDTETE<3>=ENR_BROUILLARDTETE<3>+ENR_BROUILLARDDETAIL<8>
               END
               WRITE ENR_BROUILLARDTETE ON F.BROUILLARDTETE,W_CleBrouillardTete

            NEXT l
            IF W_TotalSect # W_TabDyn<2,i> THEN
               W_Diff=W_TabDyn<2,i> - W_TotalSect
               IF W_TabDyn<1,i>[4,2]="68" THEN
                  ENR_BROUILLARDDETAIL<7>=ENR_BROUILLARDDETAIL<7>+W_Diff
               END
               IF W_TabDyn<1,i>[4,2]="28" THEN
                  ENR_BROUILLARDDETAIL<8>=ENR_BROUILLARDDETAIL<8>+W_Diff
               END
               WRITE ENR_BROUILLARDDETAIL ON F.BROUILLARDDETAIL,W_CleBrouillardTete:W_Ligne
               IF W_TabDyn<1,i>[4,2]="68" THEN
                  ENR_BROUILLARDTETE<2>=ENR_BROUILLARDTETE<2>+W_Diff
               END ELSE
                  ENR_BROUILLARDTETE<3>=ENR_BROUILLARDTETE<3>+W_Diff
               END
               WRITE ENR_BROUILLARDTETE ON F.BROUILLARDTETE,W_CleBrouillardTete
            END
            W_SectAnal="VRAI"
         END ELSE
            READ ENR_ACTIVITES FROM F.ACTIVITES,W_Entite:"001" ELSE ENR_ACTIVITES=""
            ENR_BROUILLARDDETAIL<11>=ENR_ACTIVITES<2>
            W_SectAnal="FAUX"
         END
      END
      IF W_SectAnal="FAUX" THEN
         W_Ligne=W_Ligne+1 "R%5"
         WRITE ENR_BROUILLARDDETAIL ON F.BROUILLARDDETAIL,W_CleBrouillardTete:W_Ligne
         ENR_BROUILLARDTETE<1>=W_Ligne
         IF W_TabDyn<1,i>[4,2]="68" THEN
            ENR_BROUILLARDTETE<2>=ENR_BROUILLARDTETE<2>+W_TabDyn<2,i>
         END ELSE
            ENR_BROUILLARDTETE<3>=ENR_BROUILLARDTETE<3>+W_TabDyn<2,i>
         END
         WRITE ENR_BROUILLARDTETE ON F.BROUILLARDTETE,W_CleBrouillardTete
      END
   NEXT i

STOP

*****************************************************************************
*  Calcul amortissement
10

   READ ENR_TEMPO FROM F.TEMPO,"IMMO":W_CodeImmo ELSE ENR_TEMPO=""
   IF W_Cumul = W_ValeurAcq THEN
      WRITE ENR_TEMPO ON F.TEMPO,"IMMO":W_CodeImmo
      RETURN
   END
   W_DateAcqEx = OCONV(W_DateAcq,"D4/")
   IF W_Type = "D" THEN
      W_AnLimite = W_DateAcqEx[7,4]+W_Duree-1
      W_DateLimite = "31/12/":W_AnLimite
   END ELSE
      IF W_DateAcqEx[1,5] = "01/01" THEN
         W_AnLimite = W_DateAcqEx[7,4]+W_Duree-1
         W_DateLimite = "31/12/":W_AnLimite
      END ELSE
         W_AnLimite = W_DateAcqEx[7,4]+W_Duree
         W_DateLimite = W_DateAcqEx[1,6]:W_AnLimite
      END
   END
   W_DateLimite = ICONV(W_DateLimite,"D4/")
   IF W_DateCession = "" THEN W_DateCession = 0
   IF W_DateCession > W_DateLimite THEN
      W_DateCession = 0
   END
   IF W_Type = "L" THEN
      GOSUB 100
   END ELSE
      IF W_Type = "D" THEN
         GOSUB 200
      END
   END
   WRITE ENR_TEMPO ON F.TEMPO,"IMMO":W_CodeImmo

RETURN

*****************************************************************************
*  Si amortissement de type linaire
100

   IF W_DateCession = 0 THEN
      W_Passage = W_Duree-1
   END ELSE
      W_DateCessionEx = OCONV(W_DateCession,"D4/")
      W_DateAcqEx = OCONV(W_DateAcq,"D4/")
      W_Passage = W_DateCessionEx[7,4]-W_DateAcqEx[7,4]-1
      IF W_Passage < 0 THEN
         W_Passage = 0
      END
      IF W_Passage > W_Duree-1 THEN
         W_Passage = W_Duree-1
      END
   END

   W_TauxC = INT(10000/W_Duree)
   W_Annee = W_DateAcqEx[7,4]
   W_DebDateAcq = "01/01/":W_Annee
   W_DebDateAcq = ICONV(W_DebDateAcq,"D4/")
   W_FinDateAcq = "31/12/":W_Annee
   W_FinDateAcq = ICONV(W_FinDateAcq,"D4/")
   W_TotJour = W_FinDateAcq - W_DebDateAcq + 1 
   IF W_DateCession # 0 THEN
      IF W_DateCessionEx[7,4] = W_DateAcqEx[7,4] THEN
         W_NbJour = W_DateCession-W_DateAcq+1
      END ELSE
         W_NbJour = W_FinDateAcq-W_DateAcq+1
      END
   END ELSE
      W_NbJour = W_FinDateAcq-W_DateAcq+1
   END
   W_AnnuiteC = INT((W_ValeurAcq * W_TauxC/10000)+1/2)
   W_Amort = INT((W_AnnuiteC * W_NbJour/W_TotJour)+1/2)
   IF W_Cumul = "" THEN W_Cumul = 0
   IF W_Cumul = 0 THEN
      ENR_TEMPO<1,1> = W_Annee
      ENR_TEMPO<2,1> = W_ValeurAcq
      ENR_TEMPO<3,1> = W_Amort
      ENR_TEMPO<4,1> = W_ValeurAcq-W_Amort
      ENR_TEMPO<5,1> = W_DateAcq
      ENR_TEMPO<6,1> = W_FinDateAcq
      IF INT(ENR_TEMPO<2,1>) < INT(ENR_TEMPO<3,1>) THEN
         ENR_TEMPO<3,1>=ENR_TEMPO<2,1>
         ENR_TEMPO<4,1>=0
      END
      i=2
   END ELSE
      IF W_FinExer = W_Annee THEN
         ENR_TEMPO<1,1> = W_Annee
         ENR_TEMPO<2,1> = "000"
         ENR_TEMPO<3,1> = "000"
         ENR_TEMPO<4,1> = W_ValeurAcq-W_Cumul
         ENR_TEMPO<5,1> = W_DateAcq
         ENR_TEMPO<6,1> = W_FinDateAcq
         W_Cumul=0
         i=2
      END ELSE
         i=1
      END
   END
   FOR k = 1 TO W_Passage
      W_Annee = W_Annee + 1
      IF W_Cumul = 0 THEN
         ENR_TEMPO<1,i> = W_Annee
         ENR_TEMPO<2,i> = W_ValeurAcq
         IF k=W_Passage AND W_DateAcqEx[1,5]="01/01" AND W_DateCession=0 THEN
            ENR_TEMPO<3,i> = ENR_TEMPO<4,i-1>
            ENR_TEMPO<4,i> = "000"
         END ELSE
            ENR_TEMPO<3,i> = W_AnnuiteC
            ENR_TEMPO<4,i> = ENR_TEMPO<4,i-1>-W_AnnuiteC
         END
         W_DatDeb = "01/01/":W_Annee
         W_DatDeb = ICONV(W_DatDeb,"D4/")
         ENR_TEMPO<5,i> = W_DatDeb
         W_DatFin = "31/12/":W_Annee
         W_DatFin = ICONV(W_DatFin,"D4/")
         ENR_TEMPO<6,i> = W_DatFin
         IF INT(ENR_TEMPO<2,i>) < INT(ENR_TEMPO<3,i>) THEN
            ENR_TEMPO<3,i>=ENR_TEMPO<2,i>
            ENR_TEMPO<4,i>=0
         END
         i=i+1
      END ELSE
         IF W_FinExer = W_Annee THEN
            ENR_TEMPO<1,i> = W_Annee      
            ENR_TEMPO<2,i> = "000"  
            ENR_TEMPO<3,i> = "000"  
            ENR_TEMPO<4,i> = W_ValeurAcq - W_Cumul
            W_DatDeb = "01/01/":W_Annee
            W_DatDeb = ICONV(W_DatDeb,"D4/")              
            ENR_TEMPO<5,i> = W_DatDeb
            W_DatFin = "31/12/":W_Annee
            W_DatFin = ICONV(W_DatFin,"D4/")
            ENR_TEMPO<6,i> = W_DatFin
            i=i+1
            W_Cumul=0
         END
      END
   NEXT k
   IF W_DateAcqEx[1,5] = "01/01" AND W_DateCession = 0 THEN
      RETURN
   END
   IF W_DateCession # 0 THEN
      IF W_DateCessionEx[7,4] = W_DateAcqEx[7,4] THEN
	 RETURN
      END
   END
   W_Annee = W_Annee + 1
   ENR_TEMPO<1,i> = W_Annee  
   ENR_TEMPO<2,i> = W_ValeurAcq
   W_DatDeb = "01/01/":W_Annee
   W_DatDeb = ICONV(W_DatDeb,"D4/")              
   ENR_TEMPO<5,i> = W_DatDeb
   IF W_DateLimite > W_DateCession AND W_DateCession # 0 THEN
      W_DatFin = W_DateCession
      W_Borne = "31/12/":W_Annee
      W_Borne = ICONV(W_Borne,"D4/")
      W_TotJour = W_Borne - W_DatDeb + 1
      W_NbJour = W_DatFin - W_DatDeb + 1
      W_Amort = INT((W_AnnuiteC * W_NbJour / W_TotJour)+1/2)
      ENR_TEMPO<3,i> = W_Amort
      ENR_TEMPO<4,i> = ENR_TEMPO<4,i-1> - W_Amort
   END ELSE
      W_DatFin = W_DateLimite
      ENR_TEMPO<3,i> = ENR_TEMPO<4,i-1>
      ENR_TEMPO<4,i> = "000"
   END
   ENR_TEMPO<6,i> = W_DatFin
   IF INT(ENR_TEMPO<2,i>) < INT(ENR_TEMPO<3,i>) THEN
      ENR_TEMPO<3,i>=ENR_TEMPO<2,i>
      ENR_TEMPO<4,i>=0
   END

RETURN

*****************************************************************************
*  Si amortissement de type dgressif
200

   W_TauxC = INT(10000/W_Duree)
   IF W_DateAcq < 12055 THEN
   	IF W_Duree = 3 OR W_Duree = 4 THEN
      		W_Coeff = 15
   	END ELSE
      		IF W_Duree = 5 OR W_Duree = 6 THEN
         		W_Coeff = 20
      		END ELSE
         		W_Coeff = 25
      		END
   	END
   END ELSE
      	IF W_Duree = 3 OR W_Duree = 4 THEN
         	W_Coeff = "12.5"
      	END ELSE
         	IF W_Duree = 5 OR W_Duree = 6 THEN
            		W_Coeff = "17.5"
         	END ELSE
            		W_Coeff = "22.5"
         	END
      	END
   END

   IF W_DateCession # 0 THEN
      W_DateCessionEx = OCONV(W_DateCession,"D4/")
      W_AnDateCession = W_DateCessionEx[7,4]
   END ELSE
      W_AnDateCession = 0
   END
   W_TauxD = W_TauxC * W_Coeff
   W_Annee = W_DateAcqEx[7,4]
   W_MoisAcq = W_DateAcqEx[4,2]
   IF W_DateCession # 0 THEN
      IF W_DateCessionEx[7,4] = W_Annee THEN
         W_NbMois = W_DateCessionEx[4,2]-W_MoisAcq+1
      END ELSE
         W_NbMois = 12-W_MoisAcq+1
      END
   END ELSE
      W_NbMois = 12-W_MoisAcq+1
   END
   W_AnnuiteD = INT((W_ValeurAcq * W_TauxD / 100000)+1/2)
   W_Amort = INT((W_AnnuiteD * W_NbMois/12)+1/2)
   IF W_Cumul = "" THEN W_Cumul = 0
   IF W_Cumul = 0 THEN
      ENR_TEMPO<1,1> = W_Annee
      ENR_TEMPO<2,1> = W_ValeurAcq
      ENR_TEMPO<3,1> = W_Amort
      ENR_TEMPO<4,1> = W_ValeurAcq-W_Amort
      W_DatDeb = "01/":W_DateAcqEx[4,7]
      W_DatDeb = ICONV(W_DatDeb,"D4/")
      ENR_TEMPO<5,1> = W_DatDeb
      W_DatFin = "31/12/":W_Annee
      W_DatFin = ICONV(W_DatFin,"D4/")
      ENR_TEMPO<6,1> = W_DatFin
      IF W_DateCession # 0 THEN
         IF W_Annee = W_DateCessionEx[7,4] THEN
            RETURN
         END
      END
      IF INT(ENR_TEMPO<2,1>) < INT(ENR_TEMPO<3,1>) THEN
         ENR_TEMPO<3,1>=ENR_TEMPO<2,1>
         ENR_TEMPO<4,1>=0
      END
      i=2
   END ELSE
      IF W_FinExer = W_Annee THEN
         ENR_TEMPO<1,1> = W_Annee
         ENR_TEMPO<2,1> = "000"
         ENR_TEMPO<3,1> = "000"
         ENR_TEMPO<4,1> = W_ValeurAcq-W_Cumul
         W_DatDeb = "01/":W_DateAcqEx[4,7]
         W_DatDeb = ICONV(W_DatDeb,"D4/")
         ENR_TEMPO<5,1> = W_DatDeb
         W_DatFin = "31/12/":W_Annee
         W_DatFin = ICONV(W_DatFin,"D4/")
         ENR_TEMPO<6,1> = W_DatFin
         W_Cumul = 0
         IF W_DateCession # 0 THEN
            IF W_Annee = W_DateCessionEx[7,4] THEN
               RETURN
            END
         END
         i=2
      END ELSE
         i=1
      END
   END
   W_Fini = "NON"
   W_NbAn = 1
   LOOP
      IF i > 1 THEN
         W_AnnuiteD = INT((ENR_TEMPO<4,i-1> * W_TauxD / 100000)+1/2)
      END
      UNTIL W_Fini = "OUI" DO
         W_Annee = W_Annee + 1
         W_AnCourir = W_Duree-W_NbAn
         W_TauxC = INT(100000/W_AnCourir)
         IF W_TauxC < W_TauxD THEN
            GOSUB 300
         END ELSE
            GOSUB 400
         END
         W_NbAn = W_NbAn+1
   REPEAT
RETURN

*****************************************************************************
*  Calcul des annuits dgressives dans l'amortissement dgressif
300

   IF W_Cumul = 0 THEN
      ENR_TEMPO<1,i> = W_Annee
      ENR_TEMPO<2,i> = ENR_TEMPO<4,i-1>
      W_DatDeb = "01/01/":W_Annee
      W_DatDeb = ICONV(W_DatDeb,"D4/")
      ENR_TEMPO<5,i> = W_DatDeb
      IF W_AnDateCession = W_Annee THEN
         W_DatFin = W_DateCession
         W_NbMois = W_DateCessionEx[4,2]
         W_Amort = INT((W_AnnuiteD * W_NbMois/12)+1/2)
         ENR_TEMPO<3,i> = W_Amort
         ENR_TEMPO<4,i> = ENR_TEMPO<2,i>-W_Amort
         W_Fini = "OUI"
      END ELSE
         W_DatFin = "31/12/":W_Annee
         W_DatFin = ICONV(W_DatFin,"D4/")
         ENR_TEMPO<3,i> = W_AnnuiteD
         ENR_TEMPO<4,i> = ENR_TEMPO<2,i>-W_AnnuiteD
      END
      ENR_TEMPO<6,i> = W_DatFin
      IF INT(ENR_TEMPO<2,i>) < INT(ENR_TEMPO<3,i>) THEN
         ENR_TEMPO<3,i>=ENR_TEMPO<2,i>
         ENR_TEMPO<4,i>=0
      END
      i=i+1
   END ELSE
      IF W_FinExer = W_Annee THEN
         ENR_TEMPO<1,i> = W_Annee
         ENR_TEMPO<2,i> = "000"
         ENR_TEMPO<3,i> = "000"
         ENR_TEMPO<4,i> = W_ValeurAcq - W_Cumul
         W_DatDeb = "01/01/":W_Annee
         W_DatDeb = ICONV(W_DatDeb,"D4/")
         ENR_TEMPO<5,i> = W_DatDeb
         W_DatFin = "31/12/":W_Annee
         W_DatFin = ICONV(W_DatFin,"D4/")
         ENR_TEMPO<6,i> = W_DatFin
         W_Cumul = 0
         i=i+1
      END
   END

RETURN

*****************************************************************************
*  Calcul des annuits constantes dans l'amortissement dgressif
400

   IF i > 1 THEN
      W_AnnuiteC = INT((ENR_TEMPO<4,i-1> * W_TauxC/100000)+1/2)
   END
   FOR k = 1 TO W_AnCourir
      IF W_Cumul = 0 THEN
         ENR_TEMPO<1,i> = W_Annee           
         ENR_TEMPO<2,i> = ENR_TEMPO<4,i-1>
         W_DatDeb = "01/01/":W_Annee
         W_DatDeb = ICONV(W_DatDeb,"D4/")
         ENR_TEMPO<5,i> = W_DatDeb
         IF W_AnDateCession = W_Annee THEN
            W_DatFin = W_DateCession
            W_NbMois = W_DateCessionEx[4,2]
            W_Amort = INT((W_AnnuiteC * W_NbMois/12)+1/2)
            ENR_TEMPO<3,i> = W_Amort  
            ENR_TEMPO<4,i> = ENR_TEMPO<2,i>-W_Amort  
            k = W_AnCourir+1
         END ELSE
            W_DatFin = "31/12/":W_Annee
            W_DatFin = ICONV(W_DatFin,"D4/")
            ENR_TEMPO<3,i> = W_AnnuiteC
            ENR_TEMPO<4,i> = ENR_TEMPO<2,i>-W_AnnuiteC
         END
         ENR_TEMPO<6,i> = W_DatFin 
         IF INT(ENR_TEMPO<2,i>) < INT(ENR_TEMPO<3,i>) THEN
            ENR_TEMPO<3,i>=ENR_TEMPO<2,i>
            ENR_TEMPO<4,i>=0
         END
         i=i+1
      END ELSE
         IF W_FinExer = W_Annee THEN
            ENR_TEMPO<1,i> = W_Annee  
            ENR_TEMPO<2,i> = "000"
            ENR_TEMPO<3,i> = "000"
            ENR_TEMPO<4,i> = W_ValeurAcq - W_Cumul
            W_DatDeb = "01/01/":W_Annee
            W_DatDeb = ICONV(W_DatDeb,"D4/")
            ENR_TEMPO<5,i> = W_DatDeb
            W_DatFin = "31/12/":W_Annee
            W_DatFin = ICONV(W_DatFin,"D4/")
            ENR_TEMPO<6,i> = W_DatFin
            W_AnnuiteC = INT((ENR_TEMPO<4,i>/(W_AnCourir-k))+1/2)
            W_Cumul=0
            i=i+1
         END
      END
      W_Annee = W_Annee + 1
   NEXT k
   W_Fini = "OUI"
RETURN
