* remonte le fichier BALANCEANAL
* vanessa            28-02-2002

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 "","DETAILECRITUREGENE" TO F.DETAILECRITUREGENE ELSE PRINT "OUVERTURE DETAILECRITUREGENE" ;* en lecture criture

   EXECUTE 'VIDER-FICHIER BALANCEANAL'

   * 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

         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_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

      REPEAT
   END

STOP

*********************************************************
*  MAJ du fichier BALANCEANAL

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

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

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

   * recherche le mois
   W_Date = OCONV(ENR_DETAILECRITUREGENE<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 ENR_DETAILECRITUREGENE<6> # "" THEN
      IF W_TabDyn<4,k>=W_Mois THEN
         W_TabDyn<5,k>=W_TabDyn<5,k> + ENR_DETAILECRITUREGENE<6>
      END ELSE
         W_TabDyn=INSERT(W_TabDyn,4,k;W_Mois)
         W_TabDyn=INSERT(W_TabDyn,5,k;ENR_DETAILECRITUREGENE<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 ENR_DETAILECRITUREGENE<7> # "" THEN
      IF W_TabDyn<4,k>=W_Mois THEN
         W_TabDyn<6,k>=W_TabDyn<6,k> + ENR_DETAILECRITUREGENE<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;ENR_DETAILECRITUREGENE<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 ENR_DETAILECRITUREGENE<9> # "" THEN
      IF W_TabDyn<7,k>="" THEN
         W_TabDyn<7,k>=ENR_DETAILECRITUREGENE<9>
      END ELSE
         W_TabDyn<7,k>=W_TabDyn<7,k> + ENR_DETAILECRITUREGENE<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(ENR_DETAILECRITUREGENE<2>) AND W_TabDyn<8,k>#"" DO
      k=k+1
   REPEAT

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

RETURN
