****************************************************************
* Mise en Tableau des balances pour edition balance auxiliaire *
* ou age                                                      *
* Programme chaine a partir d'un projet VB                     *
* Jrme                                        JANVIER 2000   *
* MODIF BALANCE AGEE 				FEVRIER 2000   *
* PB BALANCE AGEE ET HORS COMPTE SOLDES		JUILLET	2000   *
* PROBLEME DATE BALANCE AGEE                    OCTOBRE 2000   *
****************************************************************

***************************
* Ouvertures des fichiers *
***************************
EXECUTE "SET-THOUS ."
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE PRINT "ACTIVITESAIDE"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "ACTIVITES"
OPEN "","BALANCEAUX" TO F.BALANCEAUX ELSE PRINT "BALANCEAUX"
OPEN "","BALANCEAUXARCHIVE" TO F.BALANCEAUXARCHIVE ELSE PRINT "BALANCEAUXARCHIVE"
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE PRINT "CIVILAIDE"
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "TEMPO"
OPEN "","DETAILECRITUREAUX" TO F.DETAILECRITUREAUX ELSE PRINT "DETAILECRITUREAUX"
OPEN "","DETAILECRITUREAUXARCHIVE" TO F.DETAILECRITUREAUXARCHIVE ELSE PRINT "DETAILECRITUREAUXARCHIVE"
OPEN "","LIENCOMPTA" TO F.LIENCOMPTA ELSE PRINT "LIENCOMPTA"
OPEN "","SECTEUR" TO F.SECTEUR ELSE PRINT "SECTEUR"
OPEN "","RESPONSABLE" TO F.RESPONSABLE ELSE PRINT "RESPONSABLE"

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

W_REQUETENORMAL=FIELD(ARGUMENTS,"|",2)
W_TYPEEDITION=FIELD(ARGUMENTS,"|",3)
W_SELECTION=FIELD(ARGUMENTS,"|",4)
W_MOISDEBEX=FIELD(ARGUMENTS,"|",5)
W_MOISFINEX=FIELD(ARGUMENTS,"|",6)
W_MOISDEBPER=FIELD(ARGUMENTS,"|",7)
W_MOISFINPER=FIELD(ARGUMENTS,"|",8)
W_HORSSOLDE=FIELD(ARGUMENTS,"|",9)
W_EXERCICE=FIELD(ARGUMENTS,"|",10)
W_TXTECRITURE=FIELD(ARGUMENTS,"|",11)
W_SERVICE=FIELD(ARGUMENTS,"|",12)
W_ASSOC=FIELD(ARGUMENTS,"|",13)
W_FORME=FIELD(ARGUMENTS,"|",14)

******************************
* Recuperation des arguments *
******************************
*   100   -->   PARCOURS DE LA REQUETE
*   200   -->   TRAITEMENT COMMUN DU FICHIER
*   300   -->   SELECTION TYPE D'EDITION
*   400   -->   REMPLISSAGE BALANCE AUXILIAIRE
*   500   -->   REMPLISSAGE BALANCE AGEE
*   600   -->   CALCUL SOLDE DEBITEUR CREDITEUR
*   700   -->   CUMUL TAMPON SELECTION
*   800   -->   SAUVEGARDE TOTAL D'UNE SELECTION & TOTAL GENERAL
*   900   -->   TRAITEMENT CAS PAS DE TRI
*   1000  -->   FIN TRAITEMENT
*   1100  -->   TOTAL GENERAL
*   1200  -->   CONTROLE SUPPRESSION EVENTUELLE / DATE SAISIE SI BALANCE AGEE
*   1300  -->   CUMUL

*******************************
*Initialisation des variables *
*******************************
ENR_TEMPO=""
ENR_BALANCEAUX=""
ENR_CIVILAIDE=""
ENR_DETAILECRITUREAUX=""
W_NB = ""
i = ""
j = ""
k = ""
l = ""
W_VALEURDEBIT =""
W_VALEURCREDIT=""
W_QUANTITE =""
W_NBMOIS =""
W_MOISFIN =""
W_MOISDEB=""
W_MOISSEL=""
W_POSITION =0
W_COMPTE =""
MOISFIN=""
W_TABLEAU=""
W_FINI=""
W_CUMULTAMPON=""
W_CUMULTOTAL=""
W_ANCIENSELECT=""
W_POSITIONTRI=""
W_PERIODEFIN=""
W_PERIODEAGE=""
W_DATEOPERATION=""
W_TROUVE=""
W_NBMOISDETAIL=""
W_VALEURTEST=""
W_POSITIONTEST=""
W_CODESELECT=""
W_COMPTEUR=""
W_TROUVEDETAIL=""
W_PURGE=""
VALEUR=""
INDICE=""
TABCUMUL=""
W_TAMPDEB=""
W_TAMPCRED=""
W_INDICPOS=""
W_EXER=""
*********************
* TRAITEMENT GLOBAL *
*********************
 
    IF W_MOISFINPER <> "" THEN
        MOISFIN = W_MOISFINPER
    END ELSE
	* MODIF 1 
        * MOISFIN = W_MOISFINEX[4,2]
	IF W_TYPEEDITION=1 THEN
		MOISFIN = W_MOISFINEX[4,2]
	END ELSE
		MOISFIN = OCONV(W_TXTECRITURE,"D4/")[4,2]
	END
	* FIN MODIF 1
    END

    IF W_TYPEEDITION # 1 THEN

	W_PERIODEFIN=OCONV(W_TXTECRITURE,"D4/")
        W_PERIODEFIN=W_PERIODEFIN[7,4]:W_PERIODEFIN[4,2]    
        W_PERIODEAGE<1>=W_PERIODEFIN

        FOR i=1 TO 3
            W_PERIODEFIN=W_PERIODEFIN-1
            IF W_PERIODEFIN[5,2] = "00" THEN
                W_PERIODEFIN=W_PERIODEFIN[1,4]-1:"12"
            END
            W_PERIODEAGE<1+i>=W_PERIODEFIN
        NEXT i

    END

    W_POSITIONTRI=0
    W_ANCIENSELECT=""

    BEGIN CASE
        CASE W_SELECTION MATCHES "S"
            W_POSITIONTRI=40
        CASE W_SELECTION MATCHES "R"
            W_POSITIONTRI=39
        CASE W_SELECTION MATCHES "C"
            W_POSITIONTRI=11
    END CASE

    * TRAITEMENT FICHIER NORMAL     
    GOSUB 100        

STOP

**************************            
* PARCOURS DE LA REQUETE *
**************************

100

IF W_REQUETENORMAL # "" THEN

    EXECUTE W_REQUETENORMAL
    
    W_FINI="FAUX"
    i=0
    W_POSITION=0    

    LOOP
        READNEXT W_REQUETEBALANCE ELSE W_FINI="VRAI"

    WHILE W_FINI # "VRAI" DO

        i=i+1
	IF W_EXERCICE = 0 THEN
        	READ ENR_BALANCEAUX FROM F.BALANCEAUXARCHIVE,W_REQUETEBALANCE ELSE PRINT "LECTURE BALANCEAUXARCHIVE"                                               
	END ELSE
        	READ ENR_BALANCEAUX FROM F.BALANCEAUX,W_REQUETEBALANCE ELSE PRINT "LECTURE BALANCEAUX"  
	END

        W_POSITION=W_POSITION+1

        GOSUB 200


    REPEAT  

    * FIN TRAITEMENT
    GOSUB 1000

    ENR_TEMPO=W_TABLEAU
	
    GOSUB 1300

    IF W_FORME = "L" THEN
       WRITE ENR_TEMPO ON F.TEMPO,"BALANCEAUXILIAIRE"
    END ELSE
       
       IF W_EXERCICE=0 THEN
          W_EXER="N-"
       END ELSE
          IF W_EXERCICE=1 THEN
             W_EXER="N0"
       	  END ELSE
             W_EXER="N1"
	  END
       END

       EXECUTE "SET-DEC ,"

       W_Count=DCOUNT(ENR_TEMPO,CHAR(254))
       IF W_SELECTION="T" THEN
          ENR_TEMPO=DELETE(ENR_TEMPO,W_Count)
          FOR i = 1 TO W_Count-1
             ENR_TEMPO<i,3>=ENR_TEMPO<i,3>/100
             ENR_TEMPO<i,4>=ENR_TEMPO<i,4>/100
             ENR_TEMPO<i,5>=ENR_TEMPO<i,5>/100
             ENR_TEMPO<i,6>=ENR_TEMPO<i,6>/100
             ENR_TEMPO<i,7>=ENR_TEMPO<i,7>/100
             IF W_TYPEEDITION = 2 THEN
                ENR_TEMPO<i,8>=ENR_TEMPO<i,8>/100
             END
	  NEXT i
       END ELSE
          FOR i = 1 TO W_Count

             IF ENR_TEMPO<i,1>="" AND ENR_TEMPO<i,2>[1,5]="TOTAL" THEN
                ENR_TEMPO=DELETE(ENR_TEMPO,i)
                W_Count=W_Count-1
                i=i-1
             END ELSE
                IF ENR_TEMPO<i,9>="" THEN
                   IF ENR_TEMPO<i-1,9> # "" THEN
                      ENR_TEMPO<i,9>=ENR_TEMPO<i-1,9>
                   END ELSE
                      ENR_TEMPO<i,9>=ENR_TEMPO<i-1,8>
                   END
                END ELSE
                   BEGIN CASE
                      CASE W_SELECTION = "S"
                         READ ENR_SECTEUR FROM F.SECTEUR,ENR_TEMPO<i,9> ELSE ENR_SECTEUR=""   
                         ENR_TEMPO<i,9>=ENR_SECTEUR<1>  
                      CASE W_SELECTION = "R"
                         READ ENR_RESPONSABLE FROM F.RESPONSABLE,ENR_TEMPO<i,9> ELSE ENR_RESPONSABLE=""
                         ENR_TEMPO<i,9>=ENR_RESPONSABLE<1>    
                   END CASE
                END
                ENR_TEMPO<i,3>=ENR_TEMPO<i,3>/100
                ENR_TEMPO<i,4>=ENR_TEMPO<i,4>/100
                ENR_TEMPO<i,5>=ENR_TEMPO<i,5>/100
                ENR_TEMPO<i,6>=ENR_TEMPO<i,6>/100
                ENR_TEMPO<i,7>=ENR_TEMPO<i,7>/100
                IF W_TYPEEDITION = 2 THEN
                   ENR_TEMPO<i,8>=ENR_TEMPO<i,8>/100
                END
                IF W_TYPEEDITION = 1 THEN
                   ENR_TEMPO<i,8>=ENR_TEMPO<i,9>
                   ENR_TEMPO<i,9>=""
                END
             END

          NEXT i

       END

       CONVERT "" TO ";" IN ENR_TEMPO

       IF W_TYPEEDITION = 1 THEN
          W_Lib="N Cpte;Intitul;Dbit;Crdit;Quantit;Solde dbit;Solde Crdit;"
          W_Cle="BALAUX":W_ASSOC:W_EXER:W_SERVICE:".csv"
       END ELSE
          W_Lib="N Cpte;Intitul;":W_PERIODEAGE<1>[5,2]:"/":W_PERIODEAGE<1>[1,4]:";":W_PERIODEAGE<2>[5,2]:"/":W_PERIODEAGE<2>[1,4]:";":W_PERIODEAGE<3>[5,2]:"/":W_PERIODEAGE<3>[1,4]:";":W_PERIODEAGE<4>[5,2]:"/":W_PERIODEAGE<4>[1,4]:";En-de;Total;"
          W_Cle="BALAGEE":W_ASSOC:W_EXER:W_SERVICE:".csv"
       END

       BEGIN CASE
          CASE W_SELECTION = "S"
             W_Lib=W_Lib:"Secteur"
          CASE W_SELECTION = "R"
             W_Lib=W_Lib:"Responsable"
          CASE W_SELECTION = "C"
             W_Lib=W_Lib:"Commune"
       END CASE

       ENR_TEMPO=INSERT(ENR_TEMPO,1;W_Lib)
       WRITE ENR_TEMPO ON F.LIENCOMPTA,W_Cle
        
       ENR_TEMPO=""
       ENR_TEMPO<1>=W_Cle
       WRITE ENR_TEMPO ON F.TEMPO,"BALANCEAUXILIAIRE"

       EXECUTE "SET-DEC ."

    END

END

RETURN    

*************************
* TRAITEMENT DU FICHIER * 
*************************

200

    READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_REQUETEBALANCE[6,5] ELSE PRINT "LECTURE CIVILAIDE"

    IF W_SERVICE # "" THEN
       READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_REQUETEBALANCE[6,5] ELSE PRINT "LECTURE ACTIVITESAIDE"

       W_CountAct=DCOUNT(ENR_ACTIVITESAIDE<1>,CHAR(253))
       W_SansDateFin="FAUX"
  	 W_ActServ = 1

       FOR j = 1 TO W_CountAct
          IF ENR_ACTIVITESAIDE<1,j>[1,3]=W_ASSOC THEN
             IF ENR_ACTIVITESAIDE<3,j> = "" OR ENR_ACTIVITESAIDE<3,j> > DATE() THEN
                W_SansDateFin="VRAI"
		    IF ENR_ACTIVITESAIDE<2,j> <= ENR_ACTIVITESAIDE<2,W_ActServ> THEN
			W_ActServ = j
		    END
             END
          END ELSE
		 IF W_SansDateFin = "FAUX" THEN
			 W_ActServ = W_ActServ + 1
		 END
	    END
       NEXT j

       IF W_SansDateFin="FAUX" THEN
          W_ImprimePas="VRAI"
	    W_ActServ = 1
          FOR j = 1 TO W_CountAct
             IF ENR_ACTIVITESAIDE<1,j>[1,3] = W_ASSOC THEN
                IF ENR_ACTIVITESAIDE<3,j> => ENR_ACTIVITESAIDE<3,W_ActServ> THEN
                   W_ImprimePas="FAUX" 
			 W_ActServ = j
                END
          	 END ELSE
		    IF W_ImprimePas = "VRAI" THEN
			 W_ActServ = W_ActServ + 1
		    END
             END
          NEXT j
       END ELSE
          W_ImprimePas="FAUX"
       END
       
	 READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ACTIVITESAIDE<1,W_ActServ> ELSE PRINT "LECTURE ACTIVITES"




	 IF ENR_ACTIVITES<13> # W_SERVICE THEN
		W_ImprimePas="VRAI"
	 END

	* Gestion service prestataire
	IF ENR_ACTIVITES<12>="P" THEN
		IF ENR_ACTIVITESAIDE<6>#W_SERVICE THEN
			W_ImprimePas="VRAI"
		END ELSE
			W_ImprimePas="FAUX"
		END
	END

       IF W_ImprimePas="VRAI" THEN
          W_POSITION=W_POSITION-1
          RETURN
       END
    END

    * CAS DE TRI
    IF W_POSITIONTRI # 0 THEN
   
        IF W_POSITIONTRI=40 THEN
            W_CODESELECT=ENR_CIVILAIDE<W_POSITIONTRI>[1,3]
        END ELSE
            W_CODESELECT=ENR_CIVILAIDE<W_POSITIONTRI>
        END

        * MEME AIDE
        IF W_ANCIENSELECT = W_CODESELECT THEN

            GOSUB 700
        
        * AIDE DIFFERENT
        END ELSE

            IF W_POSITION # 1 THEN   
                GOSUB 800
            END   
            W_TABLEAU<W_POSITION,9>=W_CODESELECT
            W_ANCIENSELECT=W_CODESELECT
            W_CUMULTAMPON=""
            GOSUB 700

        END

    * CAS PAS DE TRI
    END ELSE
        GOSUB 900
    END

RETURN   

****************************            
* SELECTION TYPE D'EDITION *
****************************

300

    * BALANCE AUXILIAIRE
    IF W_TYPEEDITION=1 THEN
        GOSUB 400
        GOSUB 600

    * BALANCE AGEE
    END ELSE

        W_COMPTEUR=DCOUNT(ENR_BALANCEAUX<8>,CHAR(253))
        W_TROUVEDETAIL="FAUX"

        FOR j=1 TO W_COMPTEUR
		IF W_EXERCICE=0 THEN
           		 READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUXARCHIVE,ENR_BALANCEAUX<9,j> ELSE PRINT "DETAILECRITUREAUXARCHIVE"   
		END ELSE
           		 READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,ENR_BALANCEAUX<9,j> ELSE PRINT "DETAILECRITUREAUX"  
		END

	    	* si date d'ecriture <= date de saisie et non lettr    
            	IF ENR_DETAILECRITUREAUX<2> <= W_TXTECRITURE AND (ENR_DETAILECRITUREAUX<11> = "" OR (ENR_DETAILECRITUREAUX<11>[2,1]="1" AND W_EXERCICE < 2)) THEN

       			GOSUB 500
               		W_TROUVEDETAIL="VRAI"
               		EXIT
       		END

        NEXT j

        IF W_TROUVEDETAIL="FAUX" THEN
        
            * SUR EX N UNIQUEMENT
            IF W_EXERCICE < 2 THEN

*************************************************************
*  MODIF VANES POUR REMETTRE LE SECTEUR SI C'EST LA PREMIERE 
*  LIGNE ET SI ELLE EST ECRASEE
*  20/09/02
*************************************************************

                IF W_POSITIONTRI # 0 AND W_TABLEAU<W_POSITION,9> # "" THEN
                   W_TABLEAU<W_POSITION>=""
                   W_TABLEAU<W_POSITION,9>=W_CODESELECT
                   W_POSITION=W_POSITION-1

                END ELSE
                   W_TABLEAU<W_POSITION>=""
                   W_POSITION=W_POSITION-1
                END


**************************************************************


*                W_TABLEAU<W_POSITION>=""
*                W_POSITION=W_POSITION-1
               
            * SUR EX N & N+1
            END ELSE

                GOSUB 1200

            END

        END ELSE

            GOSUB 1200

        END

    END 

RETURN

**********************************            
* REMPLISSAGE BALANCE AUXILIAIRE *
**********************************

400

    IF W_MOISDEBPER = W_MOISDEBEX[4,2] AND MOISFIN = W_MOISFINEX[4,2] THEN
        * cas ou la periode selectionne correspond exactement a l'exercice        
        W_VALEURDEBIT = ENR_BALANCEAUX<1>
        W_VALEURCREDIT = ENR_BALANCEAUX<2>
        W_QUANTITE = ENR_BALANCEAUX<3>
   
    END ELSE
        
        * cas inverse --> parcours MV avec cumul mois
        W_VALEURDEBIT = 0
        W_VALEURCREDIT = 0
        W_QUANTITE = 0
        
        W_NBMOIS = DCOUNT(ENR_BALANCEAUX<4>,CHAR(253))
        
        W_MOISDEB = W_MOISDEBPER
        W_MOISFIN = MOISFIN
        
        FOR j = 1 TO W_NBMOIS
            
            W_MOISSEL = ENR_BALANCEAUX<4,j>
            
            IF W_MOISDEB <= W_MOISFIN THEN
                
                IF W_MOISSEL >= W_MOISDEB AND W_MOISSEL <= W_MOISFIN THEN
                    W_VALEURDEBIT = ENR_BALANCEAUX<5,j> + W_VALEURDEBIT
                    W_VALEURCREDIT = ENR_BALANCEAUX<6,j> + W_VALEURCREDIT
                    W_QUANTITE = ENR_BALANCEAUX<7,j> + W_QUANTITE
                END
            
            END ELSE
                
                IF W_MOISSEL >= W_MOISDEB OR W_MOISSEL <= W_MOISFIN THEN
                    W_VALEURDEBIT = ENR_BALANCEAUX<5,j> + W_VALEURDEBIT
                    W_VALEURCREDIT = ENR_BALANCEAUX<6,j> + W_VALEURCREDIT
                    W_QUANTITE = ENR_BALANCEAUX<7,j> + W_QUANTITE
                END
            
            END
        
        NEXT j
    
    END

    W_TABLEAU<W_POSITION,3>= W_VALEURDEBIT
    W_TABLEAU<W_POSITION,4>= W_VALEURCREDIT
    W_TABLEAU<W_POSITION,5>= W_QUANTITE

RETURN

****************************
* REMPLISSAGE BALANCE AGEE *
****************************

500

    * traitement d'un ecriture ex0 sur traitement ex1
    IF W_REQUETEBALANCE[1,2]="N0" AND W_EXERCICE=2 THEN
       
       W_NBMOISDETAIL = DCOUNT(ENR_BALANCEAUX<8>,CHAR(253)) 
	
       * parcours des multi valeurs de la balance
       FOR k=1 TO W_NBMOISDETAIL
  	   * lecture de detailecritureaux sans erreur

		IF W_EXERCICE=0 THEN
           		READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUXARCHIVE,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
	   	END ELSE
           		READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
	   	END	

		IF ENR_DETAILECRITUREAUX # "" THEN
   	      		* pas lettrage
              		IF ENR_DETAILECRITUREAUX<11>="" THEN
			
	         		* recupere mois de l'operation
 	         		W_DATEOPERATION=(OCONV(ENR_BALANCEAUX<8,k>,"D4/"))[7,4]:(OCONV(ENR_BALANCEAUX<8,k>,"D4/"))[4,2]
 
       	         		IF W_DATEOPERATION="" THEN
		    			EXIT
	         		END ELSE
		   			 W_Passe="FAUX"

		    			* parcours des 4 mois standarts pour savoir si il faut mettre dedans ou pas (Pas case en decas)
                    			FOR l=1 TO 4
		        			* correspondance donc sauvegarde en position
    	    	        			IF W_DATEOPERATION=W_PERIODEAGE<l> THEN
			   				* valeur mois
                           				W_TABLEAU<W_POSITION,l+2>= W_TABLEAU<W_POSITION,l+2> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
			   				* cumul total
			   				W_TABLEAU<W_POSITION,8>= W_TABLEAU<W_POSITION,8> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
			   				* modifie valeur W_Indicpos pour bornage maxi pour remplissage ultrieur des valeurs avant 
			   				IF W_INDICPOS=0 OR k<W_INDICPOS THEN
			      					W_INDICPOS=k
		           				END
                           				W_Passe="VRAI"
			   				* sortie des qu'il y a correspondance
			   				EXIT
           					END
		     			NEXT l
                     			IF W_Passe="FAUX" THEN
                        			W_TABLEAU<W_POSITION,8> = W_TABLEAU<W_POSITION,8> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
                        			W_TABLEAU<W_POSITION,7> = W_TABLEAU<W_POSITION,7> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
                     			END
                 		END
              		END
		END

      NEXT k

*       W_TABLEAU<W_POSITION,8> = W_TABLEAU<W_POSITION,8>+(ENR_BALANCEAUX<1> - ENR_BALANCEAUX<2>)
*       W_TABLEAU<W_POSITION,7> = W_TABLEAU<W_POSITION,8>

    * traitement autrement
    END ELSE

	* controle date operation prsente
        IF ENR_BALANCEAUX<8,1> # "" THEN

	    W_INDICPOS=0

            W_NBMOISDETAIL = DCOUNT(ENR_BALANCEAUX<8>,CHAR(253)) 

            * parcours des multi valeurs de la balance
	    FOR k=1 TO W_NBMOISDETAIL

		* lecture de detailecritureaux sans erreur
		IF W_EXERCICE=0 THEN
           		READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUXARCHIVE,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
	   	END ELSE
                	READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
		END

		IF ENR_DETAILECRITUREAUX # "" THEN
			* pas lettrage
                	IF ENR_DETAILECRITUREAUX<11>="" OR (ENR_DETAILECRITUREAUX<11>[2,1]="1" AND W_EXERCICE < 2) THEN

				* recupere mois de l'operation
				* W_DATEOPERATION=(OCONV(ENR_BALANCEAUX<8,k>,"D4/"))[4,2]
  	                        W_DATEOPERATION=(OCONV(ENR_BALANCEAUX<8,k>,"D4/"))[7,4]:(OCONV(ENR_BALANCEAUX<8,k>,"D4/"))[4,2]
                    		
				IF W_DATEOPERATION="" THEN
		        		EXIT
		    		END ELSE

					* parcours des 4 mois standarts pour savoir si il faut mettre dedans ou pas (Pas case en decas)
                        		FOR l=1 TO 4
						* correspondance donc sauvegarde en position

*************************************************************
*  MODIF VANES POUR TESTER PAR RAPPORT A LA DATE ET PAS
*  UNIQUEMENT PAR RAPPORT AU MOIS
*  20/09/02
*************************************************************

    	    	            			IF W_DATEOPERATION=W_PERIODEAGE<l> AND ENR_BALANCEAUX<8,k> <= W_TXTECRITURE THEN
							* valeur mois
                                			W_TABLEAU<W_POSITION,l+2>= W_TABLEAU<W_POSITION,l+2> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
							* cumul total
							W_TABLEAU<W_POSITION,8>= W_TABLEAU<W_POSITION,8> + ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>                               
			        			* modifie valeur W_Indicpos pour bornage maxi pour remplisasge ultrieur des valeurs avant 
							IF W_INDICPOS=0 OR k<W_INDICPOS THEN
			                			W_INDICPOS=k
		               				END
							* sortie des qu'il y a correspondance
							EXIT
			    			END
					NEXT l
                   		END
                	END

		END

	    NEXT k

	    * si indicateur  0, pas correspondance avant, donc doit boucler sur toutes les valeurs
	    IF W_INDICPOS=0 THEN
		W_INDICPOS=W_NBMOISDETAIL+1
	    END

	    IF W_INDICPOS > 1 THEN
		* cumul des MV de balance aux de 1  borne suprieure (soit toutes, soit limit par celle de boucle) 
                FOR k=1 TO W_INDICPOS-1
		    IF W_EXERCICE=0 THEN
           		READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUXARCHIVE,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
	   	    END ELSE
                        READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,ENR_BALANCEAUX<9,k> ELSE ENR_DETAILECRITUREAUX=""
		    END
                    IF (ENR_DETAILECRITUREAUX<11>="" OR (ENR_DETAILECRITUREAUX<11>[2,1]="1" AND W_EXERCICE < 2)) AND ENR_BALANCEAUX<8,k> <= W_TXTECRITURE THEN
		        W_TABLEAU<W_POSITION,7>=W_TABLEAU<W_POSITION,7>+ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7>
		        W_TABLEAU<W_POSITION,8>=W_TABLEAU<W_POSITION,8>+ENR_DETAILECRITUREAUX<6> - ENR_DETAILECRITUREAUX<7> 		
		    END
		NEXT k
	    END
                  
	* pas de date presente donc met en-deca et total
        END ELSE
            IF ENR_DETAILECRITUREAUX<11>="" OR (ENR_DETAILECRITUREAUX<11>[2,1]="1" AND W_EXERCICE < 2) THEN
               W_TABLEAU<W_POSITION,8> = W_TABLEAU<W_POSITION,8> + ENR_BALANCEAUX<1> - ENR_BALANCEAUX<2>
               W_TABLEAU<W_POSITION,7> = W_TABLEAU<W_POSITION,7> + ENR_BALANCEAUX<1> - ENR_BALANCEAUX<2>
            END
        END
           
    END

RETURN

****************
* CALCUL SOLDE *
****************

600

    IF W_VALEURDEBIT > W_VALEURCREDIT THEN
        * solde debiteur        
        W_TABLEAU<W_POSITION,6> = W_VALEURDEBIT - W_VALEURCREDIT
        W_TABLEAU<W_POSITION,7> = ""
    
    END ELSE
        
        IF W_VALEURCREDIT > W_VALEURDEBIT THEN
            * solde credit
            W_TABLEAU<W_POSITION,7> = W_VALEURCREDIT - W_VALEURDEBIT
            W_TABLEAU<W_POSITION,6> = ""
        END ELSE
            * aucun solde
            W_TABLEAU<W_POSITION,6> = 0
            W_TABLEAU<W_POSITION,7> = ""
        END
    
    END

RETURN

***********************
* SAUVEGARDE INFO TRI *
***********************

700
   
    W_TABLEAU<W_POSITION,1> = W_REQUETEBALANCE[6,5]
    W_TABLEAU<W_POSITION,2> = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>

    W_POSITIONTEST=W_POSITION-1

    IF W_REQUETEBALANCE[1,2]="N1" AND W_EXERCICE=2 AND W_TABLEAU<W_POSITION,1> = W_TABLEAU<W_POSITIONTEST,1> AND W_POSITIONTEST # 0 THEN

        W_VALEURTEST=1
        W_TABLEAU<W_POSITION>=""        
        W_POSITION=W_POSITION-1

    END ELSE

        W_VALEURTEST=0

    END

    GOSUB 300

    IF W_TYPEEDITION = 1 AND W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,6> = 0  THEN

                W_TABLEAU<W_POSITION,1>=""
                W_TABLEAU<W_POSITION,2>=""
                W_TABLEAU<W_POSITION,3>=""
                W_TABLEAU<W_POSITION,4>=""
                W_TABLEAU<W_POSITION,5>=""
                W_TABLEAU<W_POSITION,6>=""
                W_TABLEAU<W_POSITION,7>=""
                W_TABLEAU<W_POSITION,8>=""
                W_POSITION=W_POSITION-1

*        W_TABLEAU<W_POSITION>=""
*        W_POSITION=W_POSITION-1

    END ELSE

        IF W_TYPEEDITION = 1 THEN

        END ELSE

            IF (W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_REQUETEBALANCE[1,2] = "N1") OR (W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_REQUETEBALANCE<i>[6,5] # W_REQUETEBALANCE<i+1>[6,5]) OR (W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_EXERCICE=2) THEN
               
                W_TABLEAU<W_POSITION,1>=""
                W_TABLEAU<W_POSITION,2>=""
                W_TABLEAU<W_POSITION,3>=""
                W_TABLEAU<W_POSITION,4>=""
                W_TABLEAU<W_POSITION,5>=""
                W_TABLEAU<W_POSITION,6>=""
                W_TABLEAU<W_POSITION,7>=""
                W_TABLEAU<W_POSITION,8>=""
                W_POSITION=W_POSITION-1

            END

        END

    END

RETURN

***********************
* SAUVEGARDE INFO TRI *
***********************

800

        W_TABLEAU<W_POSITION,2>="TOTAL"
        W_TABLEAU<W_POSITION,3>="TOTAL" 
        W_POSITION=W_POSITION+1

RETURN

***************************
* SAUVEGARDE INFO PAS TRI *
***************************

900

    W_TABLEAU<W_POSITION,1> = W_REQUETEBALANCE[6,5]
    W_TABLEAU<W_POSITION,2> = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
    
    W_POSITIONTEST=W_POSITION-1

    IF W_REQUETEBALANCE[1,2]="N1" AND W_EXERCICE=2 AND W_TABLEAU<W_POSITION,1> = W_TABLEAU<W_POSITIONTEST,1> AND W_POSITIONTEST # 0 THEN

        W_VALEURTEST=1
        W_TABLEAU<W_POSITION>=""
        W_POSITION=W_POSITION-1

    END ELSE

        W_VALEURTEST=0

    END

    GOSUB 300

    IF W_TYPEEDITION = 1 AND W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,6> = 0 THEN

        W_TABLEAU<W_POSITION,1>=""
        W_TABLEAU<W_POSITION,2>=""
        W_TABLEAU<W_POSITION,3>=""
        W_TABLEAU<W_POSITION,4>=""
        W_TABLEAU<W_POSITION,5>=""
        W_TABLEAU<W_POSITION,6>=""
        W_TABLEAU<W_POSITION,7>=""
        W_TABLEAU<W_POSITION,8>=""
        W_POSITION=W_POSITION-1

*        W_TABLEAU<W_POSITION>=""
*        W_POSITION=W_POSITION-1
 
    END ELSE

        IF (W_TYPEEDITION # 1 AND W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_REQUETEBALANCE[1,2] = "N1") OR (W_TYPEEDITION # 1 AND W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_REQUETEBALANCE<i>[6,5] # W_REQUETEBALANCE<i+1>[6,5]) OR (W_TYPEEDITION # 1 AND W_HORSSOLDE = 1 AND W_TABLEAU<W_POSITION,8> = 0 AND W_EXERCICE= 2) THEN

            W_TABLEAU<W_POSITION>=""
            W_POSITION=W_POSITION-1

        END

    END

RETURN

******************
* FIN TRAITEMENT *
******************

1000
    
    W_POSITION=W_POSITION+1
    
    IF W_POSITIONTRI=0 THEN

        GOSUB 1100

    END ELSE

        GOSUB 800
        GOSUB 1100

    END   

RETURN

*********
* TOTAL *
*********

1100

    W_TABLEAU<W_POSITION,2>="TOTAL GENERAL"
    W_TABLEAU<W_POSITION,3>="TOTAL GENERAL"

    W_COMPTEUR=DCOUNT(W_TABLEAU,CHAR(254)) 

    FOR j=W_COMPTEUR TO 1 STEP -1

        IF W_TABLEAU<j,1>="" AND W_TABLEAU<j,2>="" THEN
            W_TABLEAU=DELETE(W_TABLEAU,j)
        END ELSE
            EXIT
        END
    NEXT j

RETURN

**************************************************
* CONTROLE SUPPRESSION PAR RAPPORT A DATE SAISIE *
**************************************************

1200

IF W_HORSSOLDE=1 THEN

    * CONTROLE SI SUR N+1
    IF W_REQUETEBALANCE[1,2]="N1" THEN         
        * IF W_TABLEAU<W_POSITION-1,2> # "" AND W_TABLEAU<W_POSITION-1,3> = "" AND W_TABLEAU<W_POSITION-1,4> = "" AND W_TABLEAU<W_POSITION-1,5> = "" AND W_TABLEAU<W_POSITION-1,6> = "" AND W_TABLEAU<W_POSITION-1,7> = "" AND W_TABLEAU<W_POSITION-1,8> = "" THEN   
*	IF W_TABLEAU<W_POSITION-1,8> = 0 OR W_TABLEAU<W_POSITION-1,8>="" OR W_TABLEAU<W_POSITION-1,8>="0" THEN
*            W_TABLEAU<W_POSITION-1>=W_TABLEAU<W_POSITION>
*            W_TABLEAU<W_POSITION>=""
*            W_POSITION=W_POSITION-1	

*        END
    END
       
     * IF W_TABLEAU<W_POSITION,2> # "" AND W_TABLEAU<W_POSITION,3> = "" AND W_TABLEAU<W_POSITION,4> = "" AND W_TABLEAU<W_POSITION,5> = "" AND W_TABLEAU<W_POSITION,6> = "" AND W_TABLEAU<W_POSITION,7> = "" AND W_TABLEAU<W_POSITION,8> = "" THEN
*     IF W_TABLEAU<W_POSITION,8> = 0 OR W_TABLEAU<W_POSITION,8>="" OR W_TABLEAU<W_POSITION,8>="0" THEN
*         W_TABLEAU<W_POSITION>=""
*         W_POSITION=W_POSITION-1
*     END
*    END

END

RETURN

*********************
* CALCUL DES CUMULS *
*********************

1300

    W_COMPTEUR=DCOUNT(ENR_TEMPO,CHAR(254))-1

    FOR i=1 TO W_COMPTEUR

        W_COMPTE=DCOUNT(ENR_TEMPO<i>,CHAR(253))

        IF W_COMPTE>=3 THEN

            IF W_SELECTION="T" THEN

                TABCUMUL=W_CUMULTOTAL

                FOR j=1 TO 6
                    VALEUR=ENR_TEMPO<i,j+2>
                    INDICE=j
                    GOSUB 1400
                NEXT j
                
                W_CUMULTOTAL=TABCUMUL

             END ELSE   

                IF ENR_TEMPO<i,2>="TOTAL" THEN
                    IF ENR_TEMPO<i-1,2>=ENR_TEMPO<i,2> AND ENR_TEMPO<i,1>="" THEN

                        ENR_TEMPO=DELETE(ENR_TEMPO,i)
                        i=i-1
                        W_COMPTEUR=W_COMPTEUR-1

                    END ELSE

                        FOR j=1 TO 6

                            VALEUR=W_CUMULTAMPON<j>
                            INDICE=j+2
                            GOSUB 1500

                        NEXT j

                        W_CUMULTOTAL<1>=W_CUMULTOTAL<1>+W_CUMULTAMPON<1>            
                        W_CUMULTOTAL<2>=W_CUMULTOTAL<2>+W_CUMULTAMPON<2>   
                        W_CUMULTOTAL<3>=W_CUMULTOTAL<3>+W_CUMULTAMPON<3>   
                        W_CUMULTOTAL<4>=W_CUMULTOTAL<4>+W_CUMULTAMPON<4>   
                        W_CUMULTOTAL<5>=W_CUMULTOTAL<5>+W_CUMULTAMPON<5>
                
                        IF W_TYPEEDITION # 1 THEN
                            W_CUMULTOTAL<6>=W_CUMULTOTAL<6>+W_CUMULTAMPON<6>  
                            W_CUMULTAMPON<6>=0 
                        END

                        W_CUMULTAMPON<1>=0
                        W_CUMULTAMPON<2>=0
                        W_CUMULTAMPON<3>=0
                        W_CUMULTAMPON<4>=0
                        W_CUMULTAMPON<5>=0

                    END

                END ELSE

                    IF ENR_TEMPO<i,2> # "TOTAL GENERAL" THEN

                        TABCUMUL=W_CUMULTAMPON

                        FOR j=1 TO 6
                            VALEUR=ENR_TEMPO<i,j+2>
                            INDICE=j
                            GOSUB 1400
                        NEXT j
                
                        W_CUMULTAMPON=TABCUMUL

                    END

                END

            END

        END ELSE

            ENR_TEMPO=DELETE(ENR_TEMPO,i)
            i=i-1
            W_COMPTEUR=W_COMPTEUR-1

        END

    NEXT i

    ENR_TEMPO<W_COMPTEUR+1,3>=W_CUMULTOTAL<1>
    ENR_TEMPO<W_COMPTEUR+1,4>=W_CUMULTOTAL<2>
    ENR_TEMPO<W_COMPTEUR+1,5>=W_CUMULTOTAL<3>
    ENR_TEMPO<W_COMPTEUR+1,6>=W_CUMULTOTAL<4>
    ENR_TEMPO<W_COMPTEUR+1,7>=W_CUMULTOTAL<5>

    IF W_TYPEEDITION # 1 THEN
       ENR_TEMPO<W_COMPTEUR+1,8>=W_CUMULTOTAL<6>
    END

RETURN

******************
* CUMUL DU TOTAL *
******************

1400

    IF VALEUR = "" THEN
        VALEUR=0
    END

    TABCUMUL<INDICE>=TABCUMUL<INDICE> + VALEUR

RETURN

*******************
* CUMUL DU TAMPON *
*******************

1500

    IF VALEUR # "" THEN
        ENR_TEMPO<i,INDICE>=W_CUMULTAMPON<INDICE-2>
    END ELSE
        ENR_TEMPO<i,INDICE>=0
    END

RETURN
