* remonte les fichiers BALANCEANAL - BALANCEGENE - BALANCEAUX
* vanessa            26/09/02

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "OUVERTURE ACTIVITES" ;* en lecture
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE PRINT "OUVERTURE ASSOCIATION" ;* en lecture
OPEN "","BALANCEANAL" TO F.BALANCEANAL ELSE PRINT "OUVERTURE BALANCEANAL" ;* en lecture criture
OPEN "","BALANCEAUX" TO F.BALANCEAUX ELSE PRINT "OUVERTURE BALANCEAUX" ;* en lecture criture
OPEN "","BALANCEGENE" TO F.BALANCEGENE ELSE PRINT "OUVERTURE BALANCEGENE" ;* en lecture criture
OPEN "","DETAILECRITUREGENE" TO F.DETAILECRITUREGENE ELSE PRINT "OUVERTURE DETAILECRITUREGENE" ;* en lecture criture
OPEN "","DETAILECRITUREAUX" TO F.DETAILECRITUREAUX ELSE PRINT "OUVERTURE DETAILECRITUREAUX" ;* en lecture criture

   W_TabDyn = ""
   W_DetailEcriture = ""

   EXECUTE 'VIDER-FICHIER BALANCEANAL'

   EXECUTE 'VIDER-FICHIER BALANCEGENE'

   EXECUTE 'VIDER-FICHIER BALANCEAUX'

   * boucle les entits juridiques
   EXECUTE 'SELECT ASSOCIATION PAR 0'
   EXECUTE 'SAUVE-LISTE W_RequeteAsso'
   EXECUTE "LISTE W_RequeteAsso" RETURNING MSGCODE

   IF MSGCODE<1> # 209 THEN

      SELECT F.ASSOCIATION TO W_RequeteAsso

      W_Fin="FAUX"
      W_SectAnal=""

      LOOP
         READNEXT W_CleAsso FROM W_RequeteAsso ELSE W_Fin = "VRAI"
      WHILE W_Fin = "FAUX" DO
         READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CleAsso ELSE ENR_ASSOCIATION=""

         * cherche la section analytique
         EXECUTE 'SELECT ACTIVITES AVEC 0 = "':W_CleAsso:']" PAR 0'
         EXECUTE 'SAUVE-LISTE W_RequeteAct'
         EXECUTE "LISTE W_RequeteAct" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.ACTIVITES TO W_RequeteAct

            W_End="FAUX"
 
            LOOP
               READNEXT W_CleAct FROM W_RequeteAct ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO

               READ ENR_ACTIVITES FROM F.ACTIVITES,W_CleAct ELSE ENR_ACTIVITES=""

               W_SectAnal=ENR_ACTIVITES<2>
               W_End="VRAI"
         
            REPEAT
         END

         * rajoute les sections analytiques sur les comptes 6 et 7 
         EXECUTE 'SELECT DETAILECRITUREGENE AVEC 3 = "':W_CleAsso:'6]" OR = "':W_CleAsso:'7]" AND AVEC 10 = ""'

         EXECUTE 'SAUVE-LISTE W_RequeteDetail'
         EXECUTE "LISTE W_RequeteDetail" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREGENE TO W_RequeteDetail

            W_End="FAUX"

            LOOP
               READNEXT W_Cle FROM W_RequeteDetail ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREGENE FROM F.DETAILECRITUREGENE,W_Cle ELSE ENR_DETAILECRITUREGENE=""

               ENR_DETAILECRITUREGENE<10> = W_SectAnal
               WRITE ENR_DETAILECRITUREGENE ON F.DETAILECRITUREGENE,W_Cle

            REPEAT

         END

         * si la date d'opration = 12421, la passer  0
         EXECUTE 'SELECT DETAILECRITUREGENE AVEC 2 = "12421" AND AVEC Journal = "':W_CleAsso:'21"'

         EXECUTE 'SAUVE-LISTE W_RequeteDetail2'
         EXECUTE "LISTE W_RequeteDetail2" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREGENE TO W_RequeteDetail2

            W_End="FAUX"

            LOOP
               READNEXT W_Cle FROM W_RequeteDetail2 ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREGENE FROM F.DETAILECRITUREGENE,W_Cle ELSE ENR_DETAILECRITUREGENE=""
 
               IF ENR_DETAILECRITUREGENE<6> # "" THEN
                  ENR_DETAILECRITUREGENE<6> = 0
               END ELSE
                  IF ENR_DETAILECRITUREGENE<7> # "" THEN
                     ENR_DETAILECRITUREGENE<7> = 0
                  END
               END 
               IF ENR_DETAILECRITUREGENE<9> # "" THEN
                  ENR_DETAILECRITUREGENE<9> = 0
               END 

               WRITE ENR_DETAILECRITUREGENE ON F.DETAILECRITUREGENE,W_Cle

            REPEAT

         END

         * REMONTE FICHIER BALANCEANAL
         EXECUTE 'SELECT DETAILECRITUREGENE AVEC 3 = "':W_CleAsso:'6]" OR = "':W_CleAsso:'7]" AND AVEC 10 # "" PAR 10 PAR 3'
 
         EXECUTE 'SAUVE-LISTE W_RequeteDet'
         EXECUTE "LISTE W_RequeteDet" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREGENE TO W_RequeteDet


            W_End="FAUX"

            LOOP
               READNEXT W_Cle FROM W_RequeteDet ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREGENE FROM F.DETAILECRITUREGENE,W_Cle ELSE ENR_DETAILECRITUREGENE=""
               W_DetailEcriture=ENR_DETAILECRITUREGENE
               W_CleBalance = W_Cle[6,2]:ENR_DETAILECRITUREGENE<3>:ENR_DETAILECRITUREGENE<10>
               READ ENR_BALANCEANAL FROM F.BALANCEANAL,W_CleBalance ELSE ENR_BALANCEANAL =""
               W_TabDyn=ENR_BALANCEANAL
               GOSUB 10
               ENR_BALANCEANAL=W_TabDyn
               W_TabDyn=""
               WRITE ENR_BALANCEANAL ON F.BALANCEANAL,W_CleBalance

            REPEAT
         END


         * REMONTE FICHIER BALANCEGENE
         EXECUTE 'SELECT DETAILECRITUREGENE AVEC 0 = "':W_CleAsso:']" PAR 3 PAR 11'
  
         EXECUTE 'SAUVE-LISTE W_RequeteGene'
         EXECUTE "LISTE W_RequeteGene" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREGENE TO W_RequeteGene

            W_End="FAUX"
 
            LOOP
               READNEXT W_Cle FROM W_RequeteGene ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREGENE FROM F.DETAILECRITUREGENE,W_Cle ELSE ENR_DETAILECRITUREGENE=""
               W_DetailEcriture=ENR_DETAILECRITUREGENE         
               W_CleBalance = W_Cle[6,2]:ENR_DETAILECRITUREGENE<3>
               READ ENR_BALANCEGENE FROM F.BALANCEGENE,W_CleBalance ELSE ENR_BALANCEGENE =""
               W_TabDyn=ENR_BALANCEGENE
               GOSUB 10

               * reprend le lettrage
               IF ENR_DETAILECRITUREGENE<11><>"" THEN
                  IF W_TabDyn<10>="" THEN 
		     W_TabDyn<10>=ENR_DETAILECRITUREGENE<11>
	          END ELSE
		     IF SEQ(ENR_DETAILECRITUREGENE<11>)>SEQ(W_TabDyn<10>) THEN
			W_TabDyn<10>=ENR_DETAILECRITUREGENE<11>	
		     END
	          END
               END

               ENR_BALANCEGENE=W_TabDyn
               W_TabDyn=""
               WRITE ENR_BALANCEGENE ON F.BALANCEGENE,W_CleBalance

            REPEAT
         END

         * si la date d'opration = 12421, la passer  0
         EXECUTE 'SELECT DETAILECRITUREAUX AVEC 2 = "12421" AND AVEC 0 = "':W_CleAsso:'21]"'

         EXECUTE 'SAUVE-LISTE W_RequeteDetailAux'
         EXECUTE "LISTE W_RequeteDetailAux" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREAUX TO W_RequeteDetailAux

            W_End="FAUX"

            LOOP
               READNEXT W_Cle FROM W_RequeteDetailAux ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,W_Cle ELSE ENR_DETAILECRITUREAUX=""
               IF ENR_DETAILECRITUREAUX<6> # "" THEN
                  ENR_DETAILECRITUREAUX<6> = 0
               END ELSE
                  IF ENR_DETAILECRITUREAUX<7> # "" THEN
                     ENR_DETAILECRITUREAUX<7> = 0
                  END
               END 
               IF ENR_DETAILECRITUREAUX<9> # "" THEN
                  ENR_DETAILECRITUREAUX<9> = 0
               END 
               WRITE ENR_DETAILECRITUREAUX ON F.DETAILECRITUREAUX,W_Cle

            REPEAT

         END

         * REMONTE FICHIER BALANCEAUX
         EXECUTE 'SELECT DETAILECRITUREAUX AVEC 0 = "':W_CleAsso:']" PAR 3 PAR 11'
  
         EXECUTE 'SAUVE-LISTE W_RequeteAux'
         EXECUTE "LISTE W_RequeteAux" RETURNING MSGCODE

         IF MSGCODE<1> # 209 THEN

            SELECT F.DETAILECRITUREAUX TO W_RequeteAux

            W_End="FAUX"
 
            LOOP
               READNEXT W_Cle FROM W_RequeteAux ELSE W_End = "VRAI"
            WHILE W_End = "FAUX" DO
               READ ENR_DETAILECRITUREAUX FROM F.DETAILECRITUREAUX,W_Cle ELSE ENR_DETAILECRITUREAUX=""
               W_DetailEcriture=ENR_DETAILECRITUREAUX
               W_CleBalance = W_Cle[6,2]:W_Cle[1,3]:ENR_DETAILECRITUREAUX<3>
               READ ENR_BALANCEAUX FROM F.BALANCEAUX,W_CleBalance ELSE ENR_BALANCEAUX =""
               W_TabDyn=ENR_BALANCEAUX
               GOSUB 10

               * reprend le lettrage
               IF ENR_DETAILECRITUREAUX<11><>"" THEN
                  IF W_TabDyn<10>="" THEN 
		     W_TabDyn<10>=ENR_DETAILECRITUREAUX<11>
	          END ELSE
		     IF SEQ(ENR_DETAILECRITUREAUX<11>)>SEQ(W_TabDyn<10>) THEN
			W_TabDyn<10>=ENR_DETAILECRITUREAUX<11>	
		     END
	          END
               END

               ENR_BALANCEAUX=W_TabDyn
               W_TabDyn=""
               WRITE ENR_BALANCEAUX ON F.BALANCEAUX,W_CleBalance

            REPEAT
         END

      REPEAT
   END

STOP

*********************************************************
*  MAJ du fichier BALANCE

10
   
   * cumul dbit
   IF W_DetailEcriture<6> # "" THEN
      IF W_TabDyn<1>="" THEN
         W_TabDyn<1>=W_DetailEcriture<6>
      END ELSE
         W_TabDyn<1>=W_TabDyn<1> + W_DetailEcriture<6>
      END
   END

   * cumul crdit
   IF W_DetailEcriture<7> # "" THEN
      IF W_TabDyn<2>="" THEN
         W_TabDyn<2>=W_DetailEcriture<7>
      END ELSE
         W_TabDyn<2>=W_TabDyn<2> + W_DetailEcriture<7>
      END
   END

   * cumul quantit
   IF W_DetailEcriture<9> # "" THEN
      IF W_TabDyn<3>="" THEN
         W_TabDyn<3>=W_DetailEcriture<9>
      END ELSE
         W_TabDyn<3>=W_TabDyn<3> + W_DetailEcriture<9>
      END
   END

   * recherche le mois
   W_Date = OCONV(W_DetailEcriture<2>,"D4/")
   W_Mois=W_Date[4,2]
   k=1
   LOOP
   WHILE INT(W_TabDyn<4,k>) < INT(W_Mois) AND W_TabDyn<4,k> # "" DO
      k=k+1
   REPEAT

   * dbit par mois
   IF W_DetailEcriture<6> # "" THEN
      IF W_TabDyn<4,k>=W_Mois THEN
         W_TabDyn<5,k>=W_TabDyn<5,k> + W_DetailEcriture<6>
      END ELSE
         W_TabDyn=INSERT(W_TabDyn,4,k;W_Mois)
         W_TabDyn=INSERT(W_TabDyn,5,k;W_DetailEcriture<6>)
         W_TabDyn=INSERT(W_TabDyn,6,k;"0")
      END
   END ELSE
      IF W_TabDyn<4,k> = "" THEN
         W_TabDyn=INSERT(W_TabDyn,4,k;W_Mois)
         W_TabDyn=INSERT(W_TabDyn,5,k;"0")
      END
   END

   * crdit par mois
   IF W_DetailEcriture<7> # "" THEN
      IF W_TabDyn<4,k>=W_Mois THEN
         W_TabDyn<6,k>=W_TabDyn<6,k> + W_DetailEcriture<7>
      END ELSE
         W_TabDyn=INSERT(W_TabDyn,4,k;W_Mois)
         W_TabDyn=INSERT(W_TabDyn,5,k;"0")
         W_TabDyn=INSERT(W_TabDyn,6,k;W_DetailEcriture<7>)
      END
   END ELSE
      IF W_TabDyn<6,k> = "" THEN
         W_TabDyn<6,k>="0"
      END
   END

   * quantit par mois
   k = 1
   LOOP
   WHILE INT(W_TabDyn<4,k>) # INT(W_Mois) AND W_TabDyn<4,k>#"" DO
      k=k+1
   REPEAT

   IF W_DetailEcriture<9> # "" THEN
      IF W_TabDyn<7,k>="" THEN
         W_TabDyn<7,k>=W_DetailEcriture<9>
      END ELSE
         W_TabDyn<7,k>=W_TabDyn<7,k> + W_DetailEcriture<9>
      END
   END ELSE
      IF W_TabDyn<7,k> = "" THEN
         W_TabDyn=INSERT(W_TabDyn,7,k;"0")
      END
   END

   * date opration
   k=1
   LOOP
   WHILE INT(W_TabDyn<8,k>) <= INT(W_DetailEcriture<2>) AND W_TabDyn<8,k>#"" DO
      k=k+1
   REPEAT

   W_TabDyn=INSERT(W_TabDyn,8,k;W_DetailEcriture<2>)
   W_TabDyn=INSERT(W_TabDyn,9,k;W_Cle)

RETURN
