**********************************************************************
* Mise en Tableau du tableau de bord pour edition
* Programme chaine a partir d'un projet VB
* Sbastien                                               18/07/01
**********************************************************************
* Ouvertures des fichiers
**************************************************************
EXECUTE "DATE.FORMAT"
EXECUTE "SET-DEC ,"
EXECUTE "SET-THOUS ."

OPEN "","BUDGET" TO F.BUDGET ELSE PRINT "BUDGET"
OPEN "","BUDGETCLES" TO F.BUDGETCLES ELSE PRINT "BUDGETCLES"
OPEN "","BALANCEANAL" TO F.BALANCEANAL ELSE PRINT "BALANCEANAL"
OPEN "","BALANCEGENE" TO F.BALANCEGENE ELSE PRINT "BALANCEGENE"
OPEN "","SSCLASSE" TO F.SSCLASSE ELSE PRINT "SSCLASSE"
OPEN "","SCLASSE" TO F.SCLASSE ELSE PRINT "SCLASSE"
OPEN "","CLASSE" TO F.CLASSE ELSE PRINT "CLASSE"
OPEN "","TEMPO" TO F.TEMPO ELSE STOP

**************************************************************
* Recuperation des arguments
**************************************************************
PROCREAD ARGUMENTS ELSE PRINT "Procread"

W_REQUETEBUDGET = FIELD(ARGUMENTS, "|", 2)
W_REQUETEBALANCE = FIELD(ARGUMENTS, "|", 3)
W_MOISDEBUT = FIELD(ARGUMENTS, "|", 4)
W_MOISFIN = FIELD(ARGUMENTS, "|", 5)
W_CODESECTANAL = FIELD(ARGUMENTS, "|", 6)
W_CODEENTITE = FIELD(ARGUMENTS, "|", 7)
W_EXER = FIELD(ARGUMENTS, "|", 8)
W_CONVERSIONMOIS = ""
W_CONVERSIONMOIS<1> = FIELD(ARGUMENTS, "|", 9)
W_CONVERSIONMOIS<2> = FIELD(ARGUMENTS, "|", 10)
W_CONVERSIONMOIS<3> = FIELD(ARGUMENTS, "|", 11)
W_CONVERSIONMOIS<4> = FIELD(ARGUMENTS, "|", 12)
W_CONVERSIONMOIS<5> = FIELD(ARGUMENTS, "|", 13)
W_CONVERSIONMOIS<6> = FIELD(ARGUMENTS, "|", 14)
W_CONVERSIONMOIS<7> = FIELD(ARGUMENTS, "|", 15)
W_CONVERSIONMOIS<8> = FIELD(ARGUMENTS, "|", 16)
W_CONVERSIONMOIS<9> = FIELD(ARGUMENTS, "|", 17)
W_CONVERSIONMOIS<10> = FIELD(ARGUMENTS, "|", 18)
W_CONVERSIONMOIS<11> = FIELD(ARGUMENTS, "|", 19)
W_CONVERSIONMOIS<12> = FIELD(ARGUMENTS, "|", 20)

**************************************************************
* FORmat d'une ligne ENR_TEMPO
**************************************************************
* 1 : = 0 si total gnral
*     = 1 si total
*     = 2 si classe
*     = 3 si sous classe
*     = 4 si sous sous classe
*       = 5 si 4 chiffre ou plus
* 2 : n de compte (10 chiffre)
* 3 : Libelle du compte
* 4 : Periode (00,01,...)
* 5 : Prevision du mois
* 6 : Prevision cumul jusqu'au mois
* 7 : Realisation du mois
* 8 : Realisation cumul jusqu'au mois
* 9 : Ecart en valeur sur le cumul
* 10 : Ecart en % sur le cumul
**************************************************************

*********************************************************
*Initialisation des variables
*********************************************************
ENR_TEMPO = ""
ENR_BUDGET = ""
ENR_BUDGETCLES = ""
ENR_BALANCE = ""

* initialisation des cumuls par mois et par type de compte
W_CUMULPREVMOIS = ""
W_CUMULREELMOIS = ""
FOR i = 1 TO 5
        FOR j = 1 TO 12
                W_CUMULPREVMOIS<i,j> = 0
                W_CUMULREELMOIS<i,j> = 0
        NEXT j
NEXT i

W_RUPTURE = ""  ;* Rupture

W_POSITION = 0  ;* Position dans ENR_TEMPO

W_LIGNEID = ""  ;* IdentIFiant d'une ligne de la requete

W_FINI = "FAUX"

*****************************
* TRAITEMENT GLOBAL
*****************************

        EXECUTE W_REQUETEBUDGET

        GOSUB 200       ;* analyse du budget

        IF W_POSITION > 0 THEN
                GOSUB 600       ;* Ajoute 3 chiffre
                GOSUB 700       ;* Ajoute 2 chiffre
                GOSUB 800       ;* Ajoute 1 chiffre
                GOSUB 900       ;* Ajoute le total
        
		EXECUTE W_REQUETEBALANCE
		GOSUB 1200      ; * analyse de la balance

            * mise en forme des lignes
		W_TEMPOPOS = 1
		LOOP
        	WHILE W_TEMPOPOS <= W_POSITION
          		GOSUB 1000
          		W_TEMPOPOS = W_TEMPOPOS + 1
        	REPEAT
	END

        WRITE ENR_TEMPO ON F.TEMPO,"EDITIONTABLEAUBORD"
        
        STOP

*****************************
* TRAITEMENT D'UNE LIGNE DE LA REQUETE BUDGET
*****************************
100
        GOSUB 500       ;* Calcul du pourcentage

        W_POS = 0
	W_TEMPO = ""

	PRINT W_LIGNEID

        * initialise TOus les mois demands
        FOR i = W_MOISDEBUT + 1 TO W_MOISFIN + 1
                W_POS = W_POS + 1
                W_TEMPO<W_POS,1> = 5
                W_TEMPO<W_POS,2> = W_LIGNEID[6,10]
                W_TEMPO<W_POS,3> = ENR_BUDGET<1>
                W_TEMPO<W_POS,4> = i-1
                W_TEMPO<W_POS,5> = 0
                W_TEMPO<W_POS,6> = 0
                W_TEMPO<W_POS,7> = 0
                W_TEMPO<W_POS,8> = 0
		W_TEMPO<W_POS,9> = 0
		W_TEMPO<W_POS,10> = 0
        NEXT i

        * affecte la valeur de la prvision
        W_NBMOIS = DCOUNT(ENR_BUDGET<2>,CHAR(253))
        FOR i = 1 TO W_NBMOIS
                IF (W_MOISDEBUT <= ENR_BUDGET<2,i>) AND (ENR_BUDGET<2,i> <= W_MOISFIN) THEN
                        W_POS2 = ENR_BUDGET<2,i> - W_MOISDEBUT + 1
                        * prise en compte du signe pour un compte
                        IF W_LIGNEID[6,1] = "7" THEN
                                W_TEMPO<W_POS2,5> = -ENR_BUDGET<3,i>
                        END ELSE
                                W_TEMPO<W_POS2,5> = ENR_BUDGET<3,i>
                        END
                END
        NEXT i

        * calcul du cumul prevision
	W_CUMUL = 0
        FOR i = 1 TO W_POS
		IF W_TEMPO<i,5> < 0 THEN
			W_TEMPO<i,5> = INT((W_TEMPO<i,5>/100) * (W_POURCENT / 100) - 0.5)
		END ELSE
			W_TEMPO<i,5> = INT((W_TEMPO<i,5>/100) * (W_POURCENT / 100) + 0.5)
		END
                W_CUMULPREVMOIS< 5, W_MOISDEBUT + i > = W_CUMULPREVMOIS< 5, W_MOISDEBUT + i >  + W_TEMPO<i,5>
		W_CUMUL = W_CUMUL + W_TEMPO<i,5>
                W_TEMPO<i,6> = W_CUMUL
        NEXT i

        GOSUB 300       ;* Cumul

        * on rajoute dans la liste
        FOR j = 1 TO W_POS
                W_POSITION = W_POSITION + 1
                FOR i = 1 TO 10
                        ENR_TEMPO<W_POSITION,i> = W_TEMPO<j,i>
                NEXT i
        NEXT j

        RETURN


*****************************
* TRAITEMENT DE LA REQUETE DU BUDGET
*****************************
200
        W_FINI = "FAUX"

        LOOP
                READNEXT W_LIGNEID ELSE W_FINI = "VRAI"
        WHILE W_FINI <> "VRAI" DO
                
                READ ENR_BUDGET FROM F.BUDGET,W_LIGNEID THEN
			PRINT W_LIGNEID
                        IF W_RUPTURE = "" THEN
                                W_RUPTURE = W_LIGNEID[6,10]
                        END
                        GOSUB 100
                END ELSE
                        PRINT "LECTURE BUDGET " : W_LIGNEID
                END
        REPEAT
        
        RETURN


****************************
* EFFECTUE LE CUMUL SUR LE BUDGET
****************************
300
        IF W_RUPTURE[1,1] = W_LIGNEID[6,1] THEN
                IF W_RUPTURE[2,1] = W_LIGNEID[7,1] THEN
                        IF W_RUPTURE[3,1] = W_LIGNEID[8,1] THEN
                                * Rien a faire
                        END ELSE
                                GOSUB 600       ;* Ajoute sous sous classe
                        END
                END ELSE
                        GOSUB 600       ;* Ajoute sous sous classe
                        GOSUB 700       ;* Ajoute sous classe
                END
        END ELSE
                GOSUB 600       ;* Ajoute sous sous classe
                GOSUB 700       ;* Ajoute sous classe
                GOSUB 800       ;* Ajoute classe
        END
        W_RUPTURE = W_LIGNEID[6,3]
        FOR i = 1 TO 12
                W_CUMULPREVMOIS<4,i> = W_CUMULPREVMOIS<4,i> + W_CUMULPREVMOIS<5,i>
                W_CUMULPREVMOIS<5,i> = 0
        NEXT i

        RETURN
                        

*****************************
* CALCUL POURCENTAGE
*****************************

500
        IF W_CODESECTANAL = "" THEN
                W_POURCENT = 10000
        END ELSE
                W_POURCENT = 0
                READ ENR_BUDGETCLES FROM F.BUDGETCLES, (TRIM(W_CODEENTITE) : TRIM(ENR_BUDGET<4>)) THEN
                        W_NBSECTANAL = DCOUNT(ENR_BUDGETCLES<2>, CHAR(253))
                        FOR i = 1 TO W_NBSECTANAL
                                IF ENR_BUDGETCLES<2,i> = W_CODESECTANAL THEN
					IF W_EXER="0" THEN
						W_POURCENT = ENR_BUDGETCLES<3,i>
						EXIT
					END ELSE
						W_POURCENT = ENR_BUDGETCLES<4,i>
						EXIT
					END
                                END
                        NEXT i
                END ELSE
                        W_POURCENT = "INTROUVABLE"
                        PRINT "CODE REPARTITION ", W_CODEENTITE : ENR_BUDGET<4>, " MANQUANTE POUR LE COMPTE ", W_LIGNEID
                END
        END
        RETURN

*****************************
* Ajoute sous sous classe prevision
*****************************
600
        READ ENR_SSCLASSE FROM F.SSCLASSE, W_RUPTURE[1,3] THEN
                W_LIB = ENR_SSCLASSE<1>
        END ELSE
                W_LIB = ""
        END

        W_CUMULMOIS = 0
        FOR i = W_MOISDEBUT + 1 TO W_MOISFIN + 1
                W_POSITION = W_POSITION + 1
                ENR_TEMPO<W_POSITION,1> = 4
                ENR_TEMPO<W_POSITION,2> = W_RUPTURE[1,3]
                ENR_TEMPO<W_POSITION,3> = W_LIB
                ENR_TEMPO<W_POSITION,4> = i -1
                ENR_TEMPO<W_POSITION,5> = W_CUMULPREVMOIS<4,i>
                W_CUMULMOIS = W_CUMULMOIS + W_CUMULPREVMOIS<4,i>
                ENR_TEMPO<W_POSITION,6> = W_CUMULMOIS
                ENR_TEMPO<W_POSITION,7> = 0
                ENR_TEMPO<W_POSITION,8> = 0
		ENR_TEMPO<W_POSITION,9> = 0
		ENR_TEMPO<W_POSITION,10> = 0
        NEXT i

        * transfert des cumuls
        FOR i = 1 TO 12
                W_CUMULPREVMOIS<3,i> = W_CUMULPREVMOIS<3,i> + W_CUMULPREVMOIS<4,i>
                W_CUMULPREVMOIS<4,i> = 0
        NEXT

        RETURN

*****************************
* Ajoute sous classe prevision
*****************************
700
        READ ENR_SCLASSE FROM F.SCLASSE, W_RUPTURE[1,2] THEN
                W_LIB = ENR_SCLASSE<1>
        END ELSE
                W_LIB = ""
        END

        W_CUMULMOIS = 0
        FOR i = W_MOISDEBUT + 1 TO W_MOISFIN + 1
                W_POSITION = W_POSITION + 1
                ENR_TEMPO<W_POSITION,1> = 3
                ENR_TEMPO<W_POSITION,2> = W_RUPTURE[1,2]
                ENR_TEMPO<W_POSITION,3> = W_LIB
                ENR_TEMPO<W_POSITION,4> = i - 1
                ENR_TEMPO<W_POSITION,5> = W_CUMULPREVMOIS<3,i>
                W_CUMULMOIS = W_CUMULMOIS + W_CUMULPREVMOIS<3,i>
                ENR_TEMPO<W_POSITION,6> = W_CUMULMOIS
                ENR_TEMPO<W_POSITION,7> = 0
                ENR_TEMPO<W_POSITION,8> = 0
		ENR_TEMPO<W_POSITION,9> = 0
		ENR_TEMPO<W_POSITION,10> = 0
        NEXT i

        * transfert des cumuls
        FOR i = 1 TO 12
                W_CUMULPREVMOIS<2,i> = W_CUMULPREVMOIS<2,i> + W_CUMULPREVMOIS<3,i>
                W_CUMULPREVMOIS<3,i> = 0
        NEXT

        RETURN

*****************************
* Ajoute classe prevision
*****************************
800
        READ ENR_CLASSE FROM F.CLASSE, W_RUPTURE[1,1] THEN
                W_LIB = ENR_CLASSE<1>
        END ELSE
                W_LIB = ""
        END

        W_CUMULMOIS = 0
        FOR i = W_MOISDEBUT + 1 TO W_MOISFIN + 1
                W_POSITION = W_POSITION + 1
                ENR_TEMPO<W_POSITION,1> = 2
                ENR_TEMPO<W_POSITION,2> = W_RUPTURE[1,1]
                ENR_TEMPO<W_POSITION,3> = W_LIB
                ENR_TEMPO<W_POSITION,4> = i - 1
                ENR_TEMPO<W_POSITION,5> = W_CUMULPREVMOIS<2,i>
                W_CUMULMOIS = W_CUMULMOIS + W_CUMULPREVMOIS<2,i>
                ENR_TEMPO<W_POSITION,6> = W_CUMULMOIS
                ENR_TEMPO<W_POSITION,7> = 0
                ENR_TEMPO<W_POSITION,8> = 0
		ENR_TEMPO<W_POSITION,9> = 0
		ENR_TEMPO<W_POSITION,10> = 0
        NEXT i

        * transfert des cumuls
        FOR i = 1 TO 12
                W_CUMULPREVMOIS<1,i> = W_CUMULPREVMOIS<1,i> + W_CUMULPREVMOIS<2,i>
                W_CUMULPREVMOIS<2,i> = 0
        NEXT

        RETURN

*****************************
* Ajoute total prevision
*****************************
900
        W_CUMULMOIS = 0
        FOR i = W_MOISDEBUT + 1 TO W_MOISFIN + 1
                W_POSITION = W_POSITION + 1
                ENR_TEMPO<W_POSITION,1> = 1
                ENR_TEMPO<W_POSITION,2> = ""
                ENR_TEMPO<W_POSITION,3> = "total"
                ENR_TEMPO<W_POSITION,4> = i - 1
                ENR_TEMPO<W_POSITION,5> = W_CUMULPREVMOIS<1,i>
                W_CUMULMOIS = W_CUMULMOIS + W_CUMULPREVMOIS<1,i>
                ENR_TEMPO<W_POSITION,6> = W_CUMULMOIS
                ENR_TEMPO<W_POSITION,7> = 0
                ENR_TEMPO<W_POSITION,8> = 0
		ENR_TEMPO<W_POSITION,9> = 0
		ENR_TEMPO<W_POSITION,10> = 0
        NEXT i

        W_POSITION = W_POSITION + 1
        ENR_TEMPO<W_POSITION,1> = 0
        ENR_TEMPO<W_POSITION,2> = ""
        ENR_TEMPO<W_POSITION,3> = "total GENERAL"
        ENR_TEMPO<W_POSITION,4> = 0
        ENR_TEMPO<W_POSITION,5> = 0
        ENR_TEMPO<W_POSITION,6> = W_CUMULMOIS
	ENR_TEMPO<W_POSITION,7> = 0
	ENR_TEMPO<W_POSITION,8> = 0

        RETURN

****************************
* Met en FORme l'enr actuel
****************************
1000
        * calcul ecart
        W_ECART = ENR_TEMPO<W_TEMPOPOS,6> - ENR_TEMPO<W_TEMPOPOS,8>
        IF ABS(ENR_TEMPO<W_TEMPOPOS,6>) >= 1 THEN
                W_ECARTPOURCENT = INT(W_ECART / ENR_TEMPO<W_TEMPOPOS,6> * 100*100 + 0.5)
        END ELSE
                W_ECARTPOURCENT = 0
        END

        ENR_TEMPO<W_TEMPOPOS,2> = ENR_TEMPO<W_TEMPOPOS,2> "L#10"
        ENR_TEMPO<W_TEMPOPOS,5> = ENR_TEMPO<W_TEMPOPOS,5> "R26 #14"
        ENR_TEMPO<W_TEMPOPOS,6> = ENR_TEMPO<W_TEMPOPOS,6> "R26 #14"
        ENR_TEMPO<W_TEMPOPOS,7> = ENR_TEMPO<W_TEMPOPOS,7> "R26 #14"
        ENR_TEMPO<W_TEMPOPOS,8> = ENR_TEMPO<W_TEMPOPOS,8> "R26 #14"
        ENR_TEMPO<W_TEMPOPOS,9> = W_ECART "R26 #14"
        ENR_TEMPO<W_TEMPOPOS,10> = W_ECARTPOURCENT "R26 #8"


        RETURN

***************************
* Traitement d'une ligne de la balance
***************************
1100

  W_CLE = W_LIGNEID[6,10]
  * recherche du la correspondante dans ENR_TEMPO  partir W_TEMPOPOS
  * NB : W_POSITION contient le nb d'enr de ENR_TEMPO
  LOOP
  WHILE (W_TEMPOPOS <= W_POSITION)
    IF ENR_TEMPO<W_TEMPOPOS,1> = 5 THEN
      * c'est un compte normale
      W_CLESIGNIFICATIVE = ENR_TEMPO<W_TEMPOPOS,2>
      GOSUB 1300      ;* suppression des chiffres non signIFicatIFs
      IF W_CLE[1, LEN(W_CLESIGNIFICATIVE )] = W_CLESIGNIFICATIVE THEN
        * le compte de balance est un sous compte, on est sur le 1er compte budget
        * => on le comptabilise, on cumul

	* on compte sur un temporaire
	W_MODIF = ""
	FOR i = 1 TO 12 
	  W_MODIF<i> = 0
	NEXT i

	FOR i = 1 TO DCOUNT(ENR_BALANCE<4>, CHAR(253))
          * pour TOus les mois
          W_INDEX = W_CONVERSIONMOIS< ENR_BALANCE<4,i>+1-1 >
	  IF (W_MOISDEBUT <= W_INDEX) AND (W_INDEX <= W_MOISFIN) THEN 
	    * c'est un mois que l'on considre
            W_MODIF<W_INDEX- W_MOISDEBUT+1> = ENR_BALANCE<5,i> - ENR_BALANCE<6,i>
	  END
      NEXT i

	* on reporte les rsultats temporaires
	W_CUMUL = 0
	FOR i = 0 TO W_MOISFIN - W_MOISDEBUT
	  ENR_TEMPO<W_TEMPOPOS+i,7> = ENR_TEMPO<W_TEMPOPOS+i,7> + W_MODIF<i+1>
	  W_CUMUL = W_CUMUL + W_MODIF<i+1>
	  ENR_TEMPO<W_TEMPOPOS+i,8> = ENR_TEMPO<W_TEMPOPOS+i,8> + W_CUMUL
	  W_CUMULREELMOIS<5,W_MOISDEBUT + i + 1> = W_CUMULREELMOIS<5,W_MOISDEBUT+ i + 1> + W_MODIF<i+1>
          W_CUMULREELMOIS<4,W_MOISDEBUT + i + 1> = W_CUMULREELMOIS<4,W_MOISDEBUT+ i + 1> + W_MODIF<i+1>
          W_CUMULREELMOIS<3,W_MOISDEBUT + i + 1> = W_CUMULREELMOIS<3,W_MOISDEBUT+ i + 1> + W_MODIF<i+1>
          W_CUMULREELMOIS<2,W_MOISDEBUT + i + 1> = W_CUMULREELMOIS<2,W_MOISDEBUT+ i + 1> + W_MODIF<i+1>
          W_CUMULREELMOIS<1,W_MOISDEBUT + i + 1> = W_CUMULREELMOIS<1,W_MOISDEBUT+ i + 1> + W_MODIF<i+1>
	NEXT i

        * on a fini, on quitte pour passer  enr balance suivant
        RETURN
      END ELSE
	FOR i = 1 TO 12
	  W_CUMULREELMOIS<5,i> = 0
	NEXT i
	* 6000000000 > 1000000000
        IF ENR_TEMPO<W_TEMPOPOS,2> > W_CLE THEN
          * On a dpass l'ENDroit o on aurait pu le mettre => fini, on passe  enr_balance suivant
          RETURN
        END ELSE
	  * 6000000000 <= 6200000000
	  * on passe au suivant de enr_tempo
          W_TEMPOPOS = W_TEMPOPOS + W_MOISFIN - W_MOISDEBUT + 1
	  END
      END
    END ELSE
	* gestion des 3, 2, 1 et 0 chiffres
	GOSUB 1400
    END
  REPEAT
  * si on arrive ici c'est que l'on a parcouru TOut le budget => pas la peine de continuer
  W_FINI = "VRAI"
  
  RETURN

***************************
* Analyse de la balance
***************************
1200
        IF W_POSITION > 1 ELSE
                RETURN
        END

        * on dtermine une fois pour TOute le fichier concern
        IF W_CODESECTANAL = "" THEN
                F.BALANCE = F.BALANCEGENE
        END ELSE
                F.BALANCE = F.BALANCEANAL
        END

        W_FINI = "FAUX"

        W_TEMPOPOS = 1

        LOOP
                READNEXT W_LIGNEID ELSE W_FINI = "VRAI"
        WHILE W_FINI <> "VRAI" DO
                READ ENR_BALANCE FROM F.BALANCE, W_LIGNEID THEN
                        GOSUB 1100
                END ELSE
                        PRINT "LECTURE BALANCE"
                END
        REPEAT

	* mise a jours des cumuls restants
	LOOP
	WHILE W_TEMPOPOS <= W_POSITION
		GOSUB 1400
		IF ENR_TEMPO<W_TEMPOPOS,1> = 5 THEN
			W_TEMPOPOS = W_TEMPOPOS +1
		END
	REPEAT
        

        RETURN

*****************************
* Suppression des chiffres non signIFicatIF
*****************************

1300
        LOOP
                L = LEN(W_CLESIGNIFICATIVE)
        WHILE W_CLESIGNIFICATIVE [L,1] = "0"
                W_CLESIGNIFICATIVE = W_CLESIGNIFICATIVE [1,L-1]
                L = LEN(W_CLESIGNIFICATIVE)
        REPEAT

        RETURN


*****************************
* mise a jours des cumuls reels des classes
*****************************
1400
    IF ENR_TEMPO<W_TEMPOPOS,1> = 4 THEN
      * on effectue le cumul 3 chiffre
      W_CUMUL = 0
      FOR i = 0 TO W_MOISFIN - W_MOISDEBUT
        W_INDEX = W_MOISDEBUT + i + 1
        ENR_TEMPO<W_TEMPOPOS+i,7> = W_CUMULREELMOIS<4,W_MOISDEBUT+i+1>
        W_CUMULREELMOIS<4,W_INDEX> = 0
        W_CUMUL = W_CUMUL + ENR_TEMPO<W_TEMPOPOS+i,7>
        ENR_TEMPO<W_TEMPOPOS+i,8> = W_CUMUL
      NEXT i
      W_TEMPOPOS = W_TEMPOPOS + W_MOISFIN - W_MOISDEBUT + 1
    END ELSE
      IF ENR_TEMPO<W_TEMPOPOS,1> = 3 THEN
        * on effectue le cumul 2 chiffre
        W_CUMUL = 0
        FOR i = 0 TO W_MOISFIN - W_MOISDEBUT
          W_INDEX = W_MOISDEBUT + i + 1
          ENR_TEMPO<W_TEMPOPOS+i,7> = W_CUMULREELMOIS<3,W_INDEX>
	  W_CUMULREELMOIS<3,W_INDEX> = 0
          W_CUMUL = W_CUMUL + ENR_TEMPO<W_TEMPOPOS+i,7>
          ENR_TEMPO<W_TEMPOPOS+i,8> = W_CUMUL
        NEXT i
        W_TEMPOPOS = W_TEMPOPOS + W_MOISFIN - W_MOISDEBUT + 1
      END ELSE
        IF ENR_TEMPO<W_TEMPOPOS,1> = 2 THEN
          * on effectue le cumul 1 chiffre
          W_CUMUL = 0
          FOR i = 0 TO W_MOISFIN - W_MOISDEBUT
            W_INDEX = W_MOISDEBUT + i + 1
            ENR_TEMPO<W_TEMPOPOS+i,7> = W_CUMULREELMOIS<2,W_INDEX>
            W_CUMULREELMOIS<2,W_INDEX> = 0
            W_CUMUL = W_CUMUL + ENR_TEMPO<W_TEMPOPOS+i,7>
            ENR_TEMPO<W_TEMPOPOS+i,8> = W_CUMUL
          NEXT i
	  W_TEMPOPOS = W_TEMPOPOS + W_MOISFIN - W_MOISDEBUT + 1
        END ELSE
          IF ENR_TEMPO<W_TEMPOPOS,1> = 1 THEN
            * on effectue le cumul 0 chiffre (total)
            W_CUMUL = 0
            FOR i = 0 TO W_MOISFIN - W_MOISDEBUT
              W_INDEX = W_MOISDEBUT + i + 1
              ENR_TEMPO<W_TEMPOPOS+i,7> = W_CUMULREELMOIS<1,W_INDEX>
              W_CUMUL = W_CUMUL + ENR_TEMPO<W_TEMPOPOS+i,7>
              ENR_TEMPO<W_TEMPOPOS+i,8> = W_CUMUL
            NEXT i
	    W_TEMPOPOS = W_TEMPOPOS + W_MOISFIN - W_MOISDEBUT + 1
          END ELSE
	    IF ENR_TEMPO<W_TEMPOPOS,1> = 0 THEN
	      * total gnrale
	      W_CUMUL = 0
	      FOR i = 1 TO 12
		W_CUMUL = W_CUMUL + W_CUMULREELMOIS<1,i>
		W_CUMULREELMOIS<1,i> = 0	
	      NEXT i
	      ENR_TEMPO<W_TEMPOPOS,7> = ""
	      ENR_TEMPO<W_TEMPOPOS,8> = W_CUMUL
	      W_TEMPOPOS = W_TEMPOPOS + 1
	    END
	  END
        END
      END
    END
    RETURN