**************************************************************
* Generation du fichier DetailPrestInv a partir de DetailPrest
* Programme chaine a partir d'un projet VB
* Moulin christophe
**************************************************************
* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","DETAILPRESTINV" TO F.DETAILPRESTINV ELSE STOP
OPEN "","ORGPRISECHARGE" TO F.ORGPRISECHARGE ELSE STOP
OPEN "","ACCORD" TO F.ACCORD ELSE STOP
OPEN "","DEMANDACC" TO F.DEMANDACC ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "","TEMPFACTURAIDE" TO F.TEMPFACTURAIDE ELSE STOP
OPEN "","FACTURAIDE" TO F.FACTURAIDE ELSE STOP
OPEN "","HRESATTENTE" TO F.HRESATTENTE ELSE STOP
OPEN "","HRESHISTOR" TO F.HRESHISTOR ELSE STOP
OPEN "","FACTURORG" TO F.FACTURORG ELSE STOP
OPEN "","TABLES" TO F.TABLES ELSE STOP
OPEN "","HRESHISTOR" TO F.HRESHISTOR ELSE STOP
OPEN "","ELTSFACTAIDE" TO F.ELTSFACTAIDE ELSE STOP
OPEN "","NUMEROFACT" TO F.NUMEROFACT ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
* OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","COTISANAIDE" TO F.COTISANAIDE ELSE STOP
OPEN "","STATACTAIDE" TO F.STATACTAIDE ELSE STOP
OPEN "","COMPLFACT" TO F.COMPLFACT ELSE STOP
OPEN "","FEDEASSOC" TO F.FEDEASSOC ELSE STOP
OPEN "","COMPTEUR" TO F.COMPTEUR ELSE STOP
W_ExistCompta="VRAI"
OPEN "","COMPTESPARTICULIERS" TO F.COMPTESPARTICULIERS ELSE W_ExistCompta="FAUX"
*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_CodAssoc=FIELD(ARGUMENTS," ",2)
W_CodeSectResp=FIELD(ARGUMENTS," ",3)
W_CboAnneeMois=FIELD(ARGUMENTS," ",4)
W_ListeActivites=FIELD(ARGUMENTS," ",5)
W_NbActivites=FIELD(ARGUMENTS," ",6)
W_CodeAide=FIELD(ARGUMENTS," ",7)
********************************************************************
* Prog Principal

   W_RespSect=""
*ici
   IF W_CodeAide="R" OR W_CodeAide="S" OR W_CodeAide="A" THEN
      W_RespSect=W_CodeAide
      W_CodeAide=""
   END
   IF W_CodeSectResp # "VIDE" THEN
      W_CodeSectResp=W_CodeSectResp[1,3]
      W_RespSect=W_CodeSectResp[4,1]
   END

   W_Activites=""
   W_ActivitesAide=""
   W_SectionAnal=""
   W_FacturOrgAbatt=""

   IF W_NbActivites # 1 THEN
      FOR i=1 TO W_NbActivites
         W_Activites=REPLACE(W_Activites,i;FIELD(W_ListeActivites,"|",i))
         READ ENR_ACTIVITES FROM F.ACTIVITES,W_Activites<i> ELSE STOP
         W_Activites<i,2>=ENR_ACTIVITES<2>
         j=1
         jTrouve="FAUX"
         LOOP
         WHILE W_SectionAnal<j> # "" AND jTrouve#"VRAI" DO
            IF W_SectionAnal<j,1>=ENR_ACTIVITES<2> THEN
               jTrouve="VRAI"
            END ELSE
               j=j+1
            END
         REPEAT
         IF jTrouve#"VRAI" THEN
            W_SectionAnal<j>=ENR_ACTIVITES<2>
            W_SectionAnal<j,2>=0
            W_SectionAnal<j,3>=W_Activites<i,1>
         END ELSE
            W_CountSectAnal=DCOUNT(W_SectionAnal<j,3>,CHAR(252))+1
            W_SectionAnal<j,3,W_CountSectAnal>=W_Activites<i,1>            
         END
      NEXT i
   END ELSE
      W_Activites=REPLACE(W_Activites,1;W_ListeActivites)
      READ ENR_ACTIVITES FROM F.ACTIVITES,W_Activites<1> ELSE STOP
      W_Activites<1,2>=ENR_ACTIVITES<2>
      W_SectionAnal<1>=ENR_ACTIVITES<2>
      W_SectionAnal<1,2>=0
      W_SectionAnal<1,3>=W_Activites<1,1>
   END

   W_TypeAct=ENR_ACTIVITES<12>

   ENR_TEMPFACTURAIDE=""
   ENR_FACTURORG=""
   READ ENR_TAUXTVA FROM F.TABLES,"TAUXTVA" ELSE STOP
   READ ENR_MUTUELLE FROM F.TABLES,"MUTUELLE" ELSE STOP
   READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CodAssoc ELSE STOP
   READ ENR_COMPTEUR FROM F.COMPTEUR,"999" ELSE STOP
   IF ENR_COMPTEUR<17>="" OR ENR_COMPTEUR<17>="000" THEN
      W_GestionFede="FAUX"
   END ELSE
      W_GestionFede="VRAI"
   END

   W_CodeComptaPrest=""
   W_CodeComptaCoti=""
   IF W_ExistCompta="VRAI" THEN
      READ ENR_COMPTESPARTICULIERS FROM F.COMPTESPARTICULIERS,W_CodAssoc THEN
         W_CodeComptaPrest=ENR_COMPTESPARTICULIERS<1>
         IF ENR_COMPTESPARTICULIERS<2>#"" THEN
             W_CodeComptaCoti=ENR_COMPTESPARTICULIERS<2>
         END ELSE
             W_CodeComptaCoti=ENR_COMPTESPARTICULIERS<9>
         END
      END
   END

   * Traitement des heures en attente
   GOSUB 300

   * Requete Rubsaisie
   W_RienSelect="FAUX"
   GOSUB 150

   IF W_RienSelect="FAUX" THEN

*      * Requete DetailPrest
*     GOSUB 100
*
*      * Gestion Requete
*     GOSUB 110
*     EXECUTE 'EFFACER-LISTE W_RequeteRub'

      * Gestion de DetailPrestInv
      GOSUB 400

      * Transformation de TEMPFACTURAIDE EN FACTURAIDE
      GOSUB 500

      EXECUTE 'EFFACER-LISTE W_RequeteHres'
      EXECUTE 'EFFACER-LISTE W_RequeteInv'
      EXECUTE 'EFFACER-LISTE W_RequeteAccord'
      EXECUTE 'EFFACER-LISTE W_RequeteAccordComp'

   END 

STOP

********************************************************************
150 * Listage des rubriques directes
   EXECUTE 'SSELECT RUBSAISIE AVEC 2 = "3" OR = "4" PAR 2'
   EXECUTE 'SAUVE-LISTE W_RequeteRub'
   EXECUTE "LISTE W_RequeteRub" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RienSelect="VRAI"
   END ELSE
      SELECT F.RUBSAISIE TO W_RequeteRub
   END
RETURN

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

***************************************************************************
* Traitement des heures en attente                                        *
***************************************************************************

* Requete des heures en attentes.
300 W_Vide = "FAUX"
    W_Temp='SSELECT HRESATTENTE AVEC EntiteHresAttente = "':W_CodAssoc:'"'
    IF W_CodeSectResp # "VIDE" THEN
       IF W_RespSect="R" THEN
          W_TempBis=' AND AVEC CodeRespHresAttente = "':W_CodeSectResp:'"'
       END ELSE
          W_TempBis=' AND AVEC CodeSectHresAttente = "':W_CodeSectResp:']"'
       END
    END ELSE
       W_TempBis=''
    END
    IF W_CodeAide = "" THEN
       W_Temp=W_Temp:W_TempBis:' PAR @ID'
    END ELSE
       W_Temp=W_Temp:W_TempBis:' AND AVEC @ID = "':W_CodeAide:']" PAR @ID'
    END
    EXECUTE W_Temp
    EXECUTE 'SAUVE-LISTE W_RequeteHres'
    EXECUTE "LISTE W_RequeteHres" RETURNING MSGCODE
    IF MSGCODE<1> # 209 THEN
       SELECT F.ACCORD TO W_RequeteHres
    END ELSE
      W_Vide="VRAI"
    END
    IF W_Vide = "FAUX" THEN
       * Parcours de la requete des heures en attente
       GOSUB 310
    END

RETURN

**********************************************************************
* Affectation des heures aux sections analytiques
305
  iAnal=1
  LOOP 
  WHILE W_SectionAnal<iAnal,1> # "" DO
     jAnal=1
     LOOP
     WHILE W_SectionAnal<iAnal,3,jAnal> # "" DO
        IF W_ActAnal=W_SectionAnal<iAnal,3,jAnal> THEN
           iAnal=999
        END
        jAnal=jAnal+1
     REPEAT
     iAnal=iAnal+1
  REPEAT
  IF iAnal#1000 THEN
     W_SectionAnal<iAnal,2>=W_SectionAnal<iAnal,2>+W_NbrHAnal
  END
RETURN

**********************************************************************
* Parcours de la requete des heures en attente
310 
 W_Fini="FAUX"
 W_CleHresAtt=""
 * W_CleHresAttAnc=""
 W_SurHresAtt="VRAI"


 LOOP
    READNEXT W_CleHresAtt FROM W_RequeteHres ELSE W_Fini="VRAI"
 WHILE W_Fini="FAUX" DO
   W_Aide=W_CleHresAtt[1,5]
   READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_Aide THEN
      IF ENR_ELTSFACTAIDE<24> # W_CboAnneeMois THEN
         * Gestion des heures en attente
         GOSUB 311
      END
   END ELSE
       * Gestion des heures en attente
       WRITEV "M" ON F.ELTSFACTAIDE,W_Aide,1
       GOSUB 311
   END
 REPEAT 
   * Change d'article de la requete Heures Attente
RETURN

*********************************************************************
* Gestion des heures en attente
311
         iAnal=1
         LOOP 
         WHILE W_SectionAnal<iAnal,1> # "" DO
            W_SectionAnal<iAnal,2>=0
            iAnal=iAnal+1
         REPEAT

         READ ENR_DEMANDACC FROM F.DEMANDACC,W_Aide THEN

           W_Periode=W_CleHresAtt[9,6]
           W_DatDebHres=W_CleHresAtt[13,2]:"/":W_CleHresAtt[9,4]
           W_DatDebHres=ICONV("01/":W_DatDebHres,"D4/")
           W_DatePeriode=W_DatDebHres+32
           W_DatePeriode=OCONV(W_DatePeriode,"D4/")
           W_DatePeriode="01/":W_DatePeriode[4,7]
           W_DatePeriode=ICONV(W_DatePeriode,"D4/")-1


           W_DatFinHres=W_DatDebHres+32
           W_DatFinHres=OCONV(W_DatFinHres,"D4/")
           W_DatFinHres="01/":W_DatFinHres[4,7]
           W_DatFinHres=ICONV(W_DatFinHres,"D4/")-1

           * Preparation des demandes d'accord
           i=1
           LOOP
           WHILE ENR_DEMANDACC<1,i>#"" DO
             W_DemAccInactif="FAUX"
             IF ENR_DEMANDACC<3,i> <= W_DatFinHres THEN
                IF ENR_DEMANDACC<4,i> >= W_DatDebHres THEN
                   * Compris dans la periode
                   READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_DEMANDACC<1,i> ELSE STOP
                   IF ENR_ORGPRISECHARGE<18>="P" AND ENR_ORGPRISECHARGE<24>="H" THEN
                      j=1
                      l=0
                      LOOP
                         W_ActOrg=ENR_ORGPRISECHARGE<47,j>
                      WHILE W_ActOrg#"" DO
                         FOR k=1 TO W_NbActivites
                            IF W_Activites<k,1>=W_ActOrg THEN
                               l=l+1
                               ENR_DEMANDACC<7,i,l>=W_ActOrg
                               W_DemAccInactif="VRAI"
                            END
                         NEXT k
                         j=j+1
                      REPEAT
                   END
                END
             END
             IF W_DemAccInactif="FAUX" THEN
                ENR_DEMANDACC<7,i,1>=0
             END
             i=i+1
           REPEAT
         END
        * Recherche des demandes d'accord pour l'activite
         READ ENR_HRESATTENTE FROM F.HRESATTENTE,W_CleHresAtt ELSE STOP

         READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_Aide ELSE ENR_TEMPFACTURAIDE=""
*         READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_Aide THEN
*            iCivilAidant=1
*            LOOP
*            WHILE ENR_TEMPFACTURAIDE<10,iCivilAidant> # "" DO
*               READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,ENR_TEMPFACTURAIDE<10,iCivilAidant> ELSE ENR_CIVILAIDANT=""
*               ENR_TEMPFACTURAIDE<13,iCivilAidant>=ENR_CIVILAIDANT<2>:ENR_CIVILAIDANT<3>
*               iCivilAidant=iCivilAidant+1
*            REPEAT
*         END ELSE
*            ENR_TEMPFACTURAIDE=""
*         END

         IF ENR_HRESATTENTE<4> # "" THEN
            * Traitement des Mv
            i=1
            LOOP
            WHILE ENR_HRESATTENTE<4,i> # "" DO
               j=1
               W_ExistActDem="FAUX"
               LOOP
               WHILE ENR_DEMANDACC<7,j> # "" DO
                  k=1 
                  LOOP
                  WHILE ENR_DEMANDACC<7,j,k> # "" DO
                     IF ENR_DEMANDACC<7,j,k>=ENR_HRESATTENTE<4,i> THEN
                        j=999
                        W_ExistActDem="VRAI"
                     END
                     k=k+1
                  REPEAT
                  j=j+1
               REPEAT
               IF W_ExistActDem="FAUX" THEN
                  * si pas de demande alors recherche d'accord
                  W_Mv="VRAI"
                  NbrHeuresAtt=ENR_HRESATTENTE<3,i>
                  W_ActHres=ENR_HRESATTENTE<4,i>
                  READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP
                  W_RubSaisie=ENR_HRESATTENTE<2,i>
                  W_CodeAidant=ENR_HRESATTENTE<1,i>
                  GOSUB 320
                  * Delete de la Mv ou Ms d'HresAttente car pas de demandes d'accord
                  GOSUB 325
               END
               i=i+1
            REPEAT
         END ELSE
            GOSUB 315
         END
      
         * Si abattement alors affectation
         IF W_FacturOrgAbatt#"" THEN
            GOSUB 380
            W_FacturOrgAbatt=""
         END

         * Gestion des accords complementaires
         GOSUB 460
         GOSUB 470
      
         * Ecriture d'activitesaide
         GOSUB 495
         ENR_TEMPFACTURAIDE=DELETE(ENR_TEMPFACTURAIDE,13)
         IF ENR_TEMPFACTURAIDE # "" THEN
            WRITE ENR_TEMPFACTURAIDE ON F.TEMPFACTURAIDE,W_Aide
         END
       
         IF ENR_HRESATTENTE<1>="" THEN
            DELETE F.HRESATTENTE,W_CleHresAtt
         END ELSE
            WRITE ENR_HRESATTENTE ON F.HRESATTENTE,W_CleHresAtt
         END

        * W_CleHresAttAnc=W_CleHresAtt


RETURN

*********************************************************************
315
         * Traitement des Ms
         i=1
         LOOP
         WHILE ENR_HRESATTENTE<1,i> # "" DO
            j=1
            LOOP
            WHILE ENR_HRESATTENTE<8,i,j> # "" DO
               k=1
               W_ExistActDem="FAUX"
               LOOP
               WHILE ENR_DEMANDACC<7,k> # "" DO
                  l=1 
                  LOOP
                  WHILE ENR_DEMANDACC<7,k,l> # "" DO
                     IF ENR_DEMANDACC<7,k,l>=ENR_HRESATTENTE<8,i,j> THEN
                        k=999
                        j=999
                        W_ExistActDem="VRAI"
                     END
                     l=l+1
                  REPEAT
                  k=k+1
               REPEAT
               IF W_ExistActDem="FAUX" THEN
                  * si pas de demande alors recherche d'accord
                  W_Mv="FAUX"
                  NbrHeuresAtt=W_NbrHAnal
                  W_CodeAidant=ENR_HRESATTENTE<1,i>
                  W_ActHres=ENR_HRESATTENTE<8,i,j>
                  READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP
                  W_DateJour=ENR_HRESATTENTE<5,i,j>:"/":W_CleHresAtt[13,2]:"/":W_CleHresAtt[9,4]
                  W_DateJour=ICONV(W_DateJour,"D4/")
                  W_RubSaisie=ENR_HRESATTENTE<6,i,j>
                  GOSUB 320
                  * Delete de la Mv d'HresAttente car pas de demandes d'accord
                  GOSUB 325
               END
               j=j+1
            REPEAT
            i=i+1
         REPEAT

RETURN 

*********************************************************************
* Parcours des accords et affectation des heures en attente.
320
   * Requete et preparation des Accords
   W_ReqAcc=""
   GOSUB 330

   W_Count=DCOUNT(W_ReqAcc,CHAR(254))
   HeuresPrisAcc=0

   * parcours les accords
   FOR k=1 TO W_Count
    IF NbrHeuresAtt > 0 THEN
      W_MontHistOrg=0   
      l=1
      W_Pass="FAUX"
      W_CleAcc=W_ReqAcc<k,1>

      READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
      IF W_Mv="FAUX" THEN
         IF ENR_ACCORD<5> <= W_DateJour AND ENR_ACCORD<6> >= W_DateJour THEN
            W_Pass="VRAI"
         END
      END ELSE
          W_Pass="VRAI"
      END           

      IF W_Pass="VRAI" THEN

         LOOP
         WHILE W_ReqAcc<k,2,l> # "" DO

              IF W_ActHres = W_ReqAcc<k,2,l> THEN      
  
                  NbrHeuresAcc=W_ReqAcc<k,3>-NbrHeuresAtt

                  IF NbrHeuresAcc > 0 THEN
                     HeuresPrisAcc=NbrHeuresAtt
                     W_ReqAcc<k,3>=NbrHeuresAcc
                     NbrHeuresAtt=0
                     NbrHeuresAcc=0
                     l=999
                     k=999
                  END ELSE
                     HeuresPrisAcc=W_ReqAcc<k,3>
                     W_ReqAcc=DELETE(W_ReqAcc,k)
                     W_Count=W_Count-1
                     k=k-1
                     NbrHeuresAtt=ABS(NbrHeuresAcc)
                     l=999
                  END

                  W_ActAnal=W_ActHres
                  W_NbrHAnal=HeuresPrisAcc
                  GOSUB 305

                  * TEMPFACTURAIDE et FACTURORG             
                  GOSUB 340

                  * Gestion du tableau tampon d'ActivitesAide
                  GOSUB 490

                  *Mise a jour de l'historique
                  GOSUB 390
              END
              l=l+1
          REPEAT
      END
    END
   NEXT k

   IF NbrHeuresAtt > 0 THEN
      * il y a des heures non affectes = Facturation  taux plein
      HeuresPrisAcc=0
      GOSUB 360
   END

RETURN

**********************************************************************
* Delete de la Mv d'HresAttente car pas de demandes d'accord
325
   IF W_Mv="FAUX" THEN
      IF ENR_HRESATTENTE<5,i,j+1> = "" THEN
         ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,1,i)
      END
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,5,i,j)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,6,i,j)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,7,i,j)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,8,i,j)
   END ELSE
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,1,i)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,2,i)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,3,i)
      ENR_HRESATTENTE=DELETE(ENR_HRESATTENTE,4,i)
   END
   i=i-1
RETURN

**********************************************************************
* Requete Accord
330
   W_FiniAcc="FAUX"
   W_Vide="FAUX"
   W_Temp='SSELECT ACCORD AVEC @ID = "':W_Aide:']" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "P" AND AVEC ActivitesOrg = "':EXTRACT(W_Activites,1,1):'"'

   FOR k=2 TO W_NbActivites
      W_Temp=W_Temp:' OR = "':W_Activites<k,1>:'"'
   NEXT i
   W_Temp=W_Temp:' PAR 8 PAR 5 PAR 6'
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteAccord'
   EXECUTE "LISTE W_RequeteAccord" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_Vide="VRAI"
   END ELSE
      SELECT F.ACCORD TO W_RequeteAccord
   END

   IF W_Vide#"VRAI" THEN
      W_ReqAcc=""
      W_IndReqAcc=0
      LOOP
         READNEXT W_CleAcc FROM W_RequeteAccord ELSE W_FiniAcc="VRAI"
      WHILE W_FiniAcc="FAUX" DO
         READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
         IF ENR_ACCORD<5> <= W_DatFinHres THEN
            IF ENR_ACCORD<6> >= W_DatDebHres THEN
               * Compris dans la periode
                READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
                k=1
                m=0
                LOOP
                   W_ActOrg=ENR_ORGPRISECHARGE<47,k>
                WHILE W_ActOrg#"" DO
                     FOR l=1 TO W_NbActivites
                        IF W_Activites<l,1>=W_ActOrg THEN
                           IF m=0 THEN
                              W_HeuresReste=0
                              IF ENR_ORGPRISECHARGE<19>=2 THEN
                                 iAccHresHisto=1
                                 LOOP
                                 WHILE W_Periode < ENR_ACCORD<14,iAccHresHisto> AND ENR_ACCORD<14,iAccHresHisto> # "" DO
                                    iAccHresHisto=iAccHresHisto+1
                                 REPEAT
                                 IF ENR_ACCORD<14,iAccHresHisto> = W_Periode THEN
                                     W_HeuresReste=ENR_ACCORD<9>-ENR_ACCORD<16,iAccHresHisto>
                                 END ELSE
                                     W_HeuresReste=ENR_ACCORD<9>
                                 END
                              END ELSE
                                 IF ENR_ACCORD<17,1>="" THEN
                                    W_HeuresReste=ENR_ACCORD<9> 
                                 END ELSE
                                    W_HeuresReste=ENR_ACCORD<17,1>
                                 END
                              END
                              IF W_HeuresReste # 0 THEN
                                 W_IndReqAcc=W_IndReqAcc+1
                                 W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;W_HeuresReste)
                                 W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,1;W_CleAcc)
                              END
                           END
                           IF W_HeuresReste # 0 THEN
                               m=m+1
                               W_ReqAcc<W_IndReqAcc,2,m>=W_ActOrg
                           END
                        END
                     NEXT l
                   k=k+1
                REPEAT
            END
         END
      REPEAT
   END

RETURN

**********************************************************************
* Rempli les fichiers TEMPFACTURAIDE et FACTURORG
340
    * Remplissage de TempFacturAide
    READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
    W_LibOrg=ENR_ORGPRISECHARGE<1>

    * READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP

    IF W_DatePeriode >= ENR_ACCORD<11,1> THEN
       W_Taux=ENR_ACCORD<13,1>
       W_TauxMutuelle=ENR_ACCORD<12,1>
    END ELSE
       iTaux=2
       LOOP
       WHILE W_DatePeriode < ENR_ACCORD<11,iTaux> AND ENR_ACCORD<11,iTaux> # "" DO
          iTaux=iTaux+1
       REPEAT
       IF ENR_ACCORD<11,iTaux> # "" THEN 
          W_Taux=ENR_ACCORD<13,iTaux>
          W_TauxMutuelle=ENR_ACCORD<12,iTaux>
       END ELSE
          W_Taux=0
          W_TauxMutuelle=0
       END
    END
    IF W_TauxMutuelle="" THEN
       W_TauxMutuelle=0
    END

    * Recherche et affecte dans TempFacturAide
    iFact=1
    GOSUB 370
    READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_RubSaisie ELSE STOP
    * Positionnement sur l'article de FacturOrg
    W_CleFacturOrg=ENR_ACCORD<1>:"P":W_CleAcc:W_Periode
    W_NumOrdre="01"
    iCleFact=1
    LOOP
       READ ENR_FACTURORG FROM F.FACTURORG,W_CleFacturOrg:W_NumOrdre ELSE ENR_FACTURORG = ""
    WHILE ENR_FACTURORG<9> # "" DO
       iCleFact=iCleFact+1
       W_NumOrdre=iCleFact "R%2"
    REPEAT

    IF ENR_RUBSAISIE<2>=4 THEN
       * Recherche du taux normal de l'organisme
       GOSUB 350
       * Recherche du taux major de l'organisme
       GOSUB 345
       IF W_TauxRembOrg=W_TauxRembOrgMaj THEN
          ENR_RUBSAISIE<2>=3
       END
    END

    IF ENR_RUBSAISIE<2>=3 THEN
       * main d'oeuvre directe
       * MFP
       IF ENR_ORGPRISECHARGE<39> = "M" THEN
          IF ENR_FACTURORG<1> = "" THEN
             * Recherche du taux normal de l'organisme
             GOSUB 350
             ENR_FACTURORG<1>=HeuresPrisAcc                
             ENR_FACTURORG<2>=W_Taux
             ENR_FACTURORG<3>=W_TauxRembOrg-W_Taux-W_TauxMutuelle
             ENR_FACTURORG<4>=INT(ENR_FACTURORG<3> * HeuresPrisAcc/100+1/2)
             W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<2> * HeuresPrisAcc/100+1/2)
             W_TauxOrgAnal=ENR_FACTURORG<3>
             GOSUB 341
          END ELSE
             W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<2> * ENR_FACTURORG<1>/100+1/2)
             ENR_FACTURORG<1>=ENR_FACTURORG<1> + HeuresPrisAcc
             ENR_FACTURORG<4>=INT(ENR_FACTURORG<3> * ENR_FACTURORG<1>/100+1/2)
             W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<2> * ENR_FACTURORG<1>/100+1/2)
             W_TauxOrgAnal=ENR_FACTURORG<3>
             GOSUB 341
          END
*           IF W_TauxMutuelle # "" AND W_TauxMutuelle # 0 THEN
          IF W_TauxMutuelle # 0 THEN
             IF ENR_FACTURORG<1,2> = "" THEN
                ENR_FACTURORG<1,2>=HeuresPrisAcc                
                ENR_FACTURORG<2,2>=W_Taux
                ENR_FACTURORG<3,2>=W_TauxMutuelle
                ENR_FACTURORG<4,2>=INT(ENR_FACTURORG<3,2> * HeuresPrisAcc/100+1/2)
*                W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<3,2> * ENR_FACTURORG<1>/100+1/2)

*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1,-1;W_Periode)
*                iTabMut=1
*                LOOP
*                WHILE ENR_ACCORD<4> # ENR_MUTUELLE<2,iTabMut> DO
*                   iTabMut=iTabMut+1
*                REPEAT
*                W_LibMut="PARTICIPATION ":ENR_MUTUELLE<3,iTabMut>
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2,-1;W_LibMut)
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,-1;HeuresPrisAcc)
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4,-1;-W_TauxMutuelle)
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,-1;-INT(W_TauxMutuelle*HeuresPrisAcc/100+1/2))
*                W_Count6FacturAide=DCOUNT(ENR_TEMPFACTURAIDE<1>,CHAR(253))
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,W_Count6FacturAide;W_CodeComptaPrest)
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7,-1;ENR_ACTIVITES<2>)

             END ELSE
                W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<3,2> * ENR_FACTURORG<1>/100+1/2)
                ENR_FACTURORG<1,2>=ENR_FACTURORG<1,2> + HeuresPrisAcc
                ENR_FACTURORG<4,2>=INT(ENR_FACTURORG<3,2> * ENR_FACTURORG<1,2>/100 +1/2)
*                W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<3,2> * ENR_FACTURORG<1>/100+1/2)
*                iTempFactMut=1
*                LOOP
*                UNTIL ENR_TEMPFACTURAIDE<1,iTempFactMut> # W_Periode AND ENR_TEMPFACTURAIDE<2,iTempFactMut>=W_LibMut AND ENR_TEMPFACTURAIDE<4,iTempFactMut>=ENR_FACTURORG<3,2> DO
*                   iTempFactMut=iTempFactMut+1
*                REPEAT
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,iTempFactMut;ENR_TEMPFACTURAIDE<3,iTempFactMut>+HeuresPrisAcc)
*                ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,iTempFactMut;INT(ENR_TEMPFACTURAIDE<3,iTempFactMut>*ENR_TEMPFACTURAIDE<4,iTempFactMut>/100-1/2))
             END
          END          
         * FIN MFP
       END ELSE

          IF ENR_FACTURORG<1> = "" THEN
             * Recherche du taux normal de l'organisme
             GOSUB 350
             ENR_FACTURORG<1>=HeuresPrisAcc                
             ENR_FACTURORG<2>=W_Taux
             ENR_FACTURORG<3>=W_TauxRembOrg-W_Taux
             ENR_FACTURORG<4>=INT(ENR_FACTURORG<3> * HeuresPrisAcc/100+1/2)
             W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<2> * HeuresPrisAcc/100+1/2)
             W_TauxOrgAnal=ENR_FACTURORG<3>
             GOSUB 341
          END ELSE
             W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<2> * ENR_FACTURORG<1>/100+1/2)
             ENR_FACTURORG<1>=ENR_FACTURORG<1> + HeuresPrisAcc
             ENR_FACTURORG<4>=INT(ENR_FACTURORG<3> * ENR_FACTURORG<1>/100+1/2)
             W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<2> * ENR_FACTURORG<1>/100+1/2)
             W_TauxOrgAnal=ENR_FACTURORG<3>
             GOSUB 341
          END
       END
    END ELSE
       IF ENR_FACTURORG<5>="" THEN
          * Recherche du taux normal de l'organisme
          GOSUB 350
          * Recherche du taux major de l'organisme
          GOSUB 345
          ENR_FACTURORG<5>=HeuresPrisAcc
          ENR_FACTURORG<6>=W_Taux
          ENR_FACTURORG<7>=W_TauxRembOrgMaj-W_Taux
          ENR_FACTURORG<8>=INT(ENR_FACTURORG<7> * HeuresPrisAcc/100+1/2)
          W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<6> * HeuresPrisAcc/100+1/2)
          W_TauxOrgAnal=ENR_FACTURORG<7>
          GOSUB 341
       END ELSE
          W_MontHistOrg=W_MontHistOrg-INT(ENR_FACTURORG<6> * ENR_FACTURORG<5>/100+1/2)
          ENR_FACTURORG<5>=ENR_FACTURORG<5>+HeuresPrisAcc
          ENR_FACTURORG<8>=INT(ENR_FACTURORG<7> * ENR_FACTURORG<5>/100+1/2)
          W_MontHistOrg=W_MontHistOrg+INT(ENR_FACTURORG<6> * ENR_FACTURORG<5>/100+1/2)
          W_TauxOrgAnal=ENR_FACTURORG<7>
          GOSUB 341
       END
    END

    IF ENR_ORGPRISECHARGE<29,1> # "" THEN
       iFacturOrgAbatt=1
       LOOP
       WHILE W_FacturOrgAbatt<iFacturOrgAbatt> # "" DO
          IF W_FacturOrgAbatt<iFacturOrgAbatt>=W_CleFacturOrg:W_NumOrdre THEN
             iFacturOrgAbatt=999
          END  
          iFacturOrgAbatt=iFacturOrgAbatt+1
       REPEAT
       IF iFacturOrgAbatt#1000 THEN
          W_FacturOrgAbatt=REPLACE(W_FacturOrgAbatt,-1;W_CleFacturOrg:W_NumOrdre)
       END
    END

    *Ecriture FacturOrg
    WRITE ENR_FACTURORG ON F.FACTURORG,W_CleFacturOrg:W_NumOrdre

RETURN

************************************************************************
* Rempli les att 11,12,13 de FACTURORG
341
   IF ENR_FACTURORG<11> # "" THEN
      iFactOrgAnal=1
      LOOP
      WHILE ENR_FACTURORG<11,iFactOrgAnal> # "" DO
         IF ENR_FACTURORG<11,iFactOrgAnal> = ENR_ACTIVITES<2> THEN
            ENR_FACTURORG<12,iFactOrgAnal>=ENR_FACTURORG<12,iFactOrgAnal> + INT(W_TauxOrgAnal * HeuresPrisAcc/100+1/2)
            ENR_FACTURORG<13,iFactOrgAnal>=ENR_FACTURORG<13,iFactOrgAnal> + HeuresPrisAcc
         END
         iFactOrgAnal=iFactOrgAnal+1
      REPEAT
      IF ENR_FACTURORG<11,iFactOrgAnal> = "" THEN
         ENR_FACTURORG<11,iFactOrgAnal>=ENR_ACTIVITES<2>
         ENR_FACTURORG<12,iFactOrgAnal>=ENR_FACTURORG<12,iFactOrgAnal> + INT(W_TauxOrgAnal * HeuresPrisAcc/100+1/2)
         ENR_FACTURORG<13,iFactOrgAnal>=ENR_FACTURORG<13,iFactOrgAnal> + HeuresPrisAcc
      END
   END ELSE
      ENR_FACTURORG<11>=ENR_ACTIVITES<2>
      ENR_FACTURORG<12>=INT(W_TauxOrgAnal * HeuresPrisAcc/100+1/2)
      ENR_FACTURORG<13>=HeuresPrisAcc
   END
RETURN

************************************************************************
* Recherche le taux de remboursement de l'organisme major
345
 W_TauxRembOrgMaj=""
 IF ENR_ORGPRISECHARGE<27,1> # "" THEN
    IF W_DatePeriode >= ENR_ORGPRISECHARGE<25,1> THEN
       W_TauxRembOrgMaj=ENR_ORGPRISECHARGE<27,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePeriode < ENR_ORGPRISECHARGE<25,iTaux> AND ENR_ORGPRISECHARGE<25,iTaux> # "" DO
          iTaux=iTaux+1
       REPEAT
       IF ENR_ORGPRISECHARGE<25,iTaux> # "" THEN
          W_TauxRembOrgMaj=ENR_ORGPRISECHARGE<27,iTaux>
       END ELSE
          W_TauxRembOrgMaj=0
       END
    END
 END ELSE
    * a Voir
    IF W_TauxRembOrg # 0 THEN
       W_TauxRembOrgMaj=W_TauxRembOrg
    END
 END
RETURN
          
************************************************************************
* Recherche le taux de remboursement de l'organisme
350
    W_TauxRembOrg=0
    IF W_DatePeriode >= ENR_ORGPRISECHARGE<25,1> THEN
       W_TauxRembOrg=ENR_ORGPRISECHARGE<26,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePeriode < ENR_ORGPRISECHARGE<25,iTaux> AND ENR_ORGPRISECHARGE<25,iTaux> # "" DO
          iTaux=iTaux+1
       REPEAT
       IF ENR_ORGPRISECHARGE<25,iTaux> # "" THEN
          W_TauxRembOrg=ENR_ORGPRISECHARGE<26,iTaux>
       END
    END
RETURN

************************************************************************
* Recherche l'emplacement du code aidant dans TempFacturAide
*355
*   iAidant=1
*   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CodeAidant ELSE STOP
*   W_NomPrenomAidant=ENR_CIVILAIDANT<2>:ENR_CIVILAIDANT<3>
*   LOOP
*   WHILE ENR_TEMPFACTURAIDE<10,iAidant> # "" AND W_NomPrenomAidant > ENR_TEMPFACTURAIDE<13,iAidant> DO
*      iAidant=iAidant+1
*   REPEAT
*   IF ENR_TEMPFACTURAIDE<10,iAidant> = "" THEN
*      ENR_TEMPFACTURAIDE<10,iAidant>=W_CodeAidant
*      ENR_TEMPFACTURAIDE<13,iAidant>=W_NomPrenomAidant
*   END ELSE
*      IF ENR_TEMPFACTURAIDE<13,iAidant> > W_NomPrenomAidant THEN
*         ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,10,iAidant;W_CodeAidant)
*         ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,13,iAidant;W_NomPrenomAidant)
*      END
*   END
*RETURN

******************************************
* Facturation a taux plein
360
    * Remplissage de TempFacturAide

    W_LibOrg="TAUX PRESTATION"

    * Recherche de la valeur du taux plein
    IF W_DatePeriode >= ENR_ACTIVITES<15,1> THEN
       W_Taux=ENR_ACTIVITES<14,1>
    END ELSE
       iTauxPlein=1
       LOOP
       WHILE W_DatePeriode < ENR_ACTIVITES<15,iTauxPlein> AND ENR_ACTIVITES<15,iTauxPlein> # "" DO
          iTauxPlein=iTauxPlein+1
       REPEAT
       IF ENR_ACTIVITES<15,iTauxPlein> # "" THEN
          W_Taux=ENR_ACTIVITES<14,iTauxPlein>
       END ELSE
          W_Taux=0
       END
    END

    * Recherche et affecte dans TempFacturAide
    iFact=1
    GOSUB 370

    READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_RubSaisie ELSE STOP
    W_CleFacturOrgPlein="000P":W_Aide:W_CodAssoc:W_Periode
    W_NumOrdre="01"
    iCleFact=1
    LOOP 
      READ ENR_FACTURORG FROM F.FACTURORG,W_CleFacturOrgPlein:W_NumOrdre ELSE ENR_FACTURORG =""
    WHILE ENR_FACTURORG<9> # "" DO
       iCleFact=iCleFact+1
       W_NumOrdre=iCleFact "R%2"
    REPEAT

       IF ENR_RUBSAISIE<2>=3 THEN
          * main d'oeuvre directe
          IF ENR_FACTURORG<1> = "" THEN
             ENR_FACTURORG<1>=NbrHeuresAtt                
             ENR_FACTURORG<2>=W_Taux
             ENR_FACTURORG<3>=0
             ENR_FACTURORG<4>=0
          END ELSE
             ENR_FACTURORG<1>=ENR_FACTURORG<1> + NbrHeuresAtt
             ENR_FACTURORG<4>=0
          END
       END ELSE
          IF ENR_FACTURORG<5>="" THEN
             ENR_FACTURORG<5>=NbrHeuresAtt
             ENR_FACTURORG<6>=W_Taux
             ENR_FACTURORG<7>=0
             ENR_FACTURORG<8>=0
          END ELSE
             ENR_FACTURORG<5>=ENR_FACTURORG<5>+NbrHeuresAtt
             ENR_FACTURORG<8>=0
          END
       END

       *Ecriture FacturOrg
       WRITE ENR_FACTURORG ON F.FACTURORG,W_CleFacturOrgPlein:W_NumOrdre

RETURN

*************************************************************************
* Recherche dans TempFacturAide l'emplacement
370
   IF ENR_TEMPFACTURAIDE<1,iFact> # "" THEN
      IF W_Periode > ENR_TEMPFACTURAIDE<1,iFact> THEN
         iFact=iFact+1
         GOSUB 370
      END ELSE
        IF W_Periode = ENR_TEMPFACTURAIDE<1,iFact> THEN
           IF W_LibOrg = ENR_TEMPFACTURAIDE<2,iFact> AND W_Taux = ENR_TEMPFACTURAIDE<4,iFact> AND ENR_ACTIVITES<2> = ENR_TEMPFACTURAIDE<7,iFact> THEN
              * Replace
              IF HeuresPrisAcc=0 THEN
                 HeuresPrisAcc=NbrHeuresAtt
              END
              ENR_TEMPFACTURAIDE<3,iFact>=ENR_TEMPFACTURAIDE<3,iFact> + HeuresPrisAcc   
              ENR_TEMPFACTURAIDE<5,iFact>=INT(ENR_TEMPFACTURAIDE<4,iFact> * ENR_TEMPFACTURAIDE<3,iFact>/100+1/2)

              * Recherche l'emplacement du code aidant dans TempFacturAide
*              GOSUB 355

           END ELSE
              iFact=iFact+1
              GOSUB 370
           END
        END ELSE
           * Insert
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,1,iFact;W_Periode)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,2,iFact;W_LibOrg)
           IF HeuresPrisAcc=0 THEN
              HeuresPrisAcc=NbrHeuresAtt
           END
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,3,iFact;HeuresPrisAcc)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,4,iFact;W_Taux)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,5,iFact;INT(W_Taux*HeuresPrisAcc/100+1/2))
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,6,iFact;"0")
           ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,iFact;W_CodeComptaPrest)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,7,iFact;ENR_ACTIVITES<2>)

           * Recherche l'emplacement du code aidant dans TempFacturAide
*            GOSUB 355

        END
      END
   END ELSE
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1,-1;W_Periode)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2,-1;W_LibOrg)
        IF HeuresPrisAcc=0 THEN
           HeuresPrisAcc=NbrHeuresAtt
        END
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,-1;HeuresPrisAcc)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4,-1;W_Taux)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,-1;INT(W_Taux*HeuresPrisAcc/100+1/2))
        W_Count6FacturAide=DCOUNT(ENR_TEMPFACTURAIDE<1>,CHAR(253))
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,W_Count6FacturAide;W_CodeComptaPrest)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7,-1;ENR_ACTIVITES<2>)

        IF ENR_TEMPFACTURAIDE<8> = "" THEN
           * READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP
           ENR_TEMPFACTURAIDE<8>=ENR_TAUXTVA<4,ENR_ACTIVITES<11>>
        END

        * Recherche l'emplacement du code aidant dans TempFacturAide
*        GOSUB 355

        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,11;0)
   END
RETURN

*********************************************************************
* Gestion de l'abattement
380
W_CountFactOrgAbatt=DCOUNT(W_FacturOrgAbatt,CHAR(254))
FOR iFactAbatt=1 TO W_CountFactOrgAbatt

    W_TempOrgAbatt=W_FacturOrgAbatt<iFactAbatt>
    W_TempOrgAbatt=W_TempOrgAbatt[1,3]
    W_TempAccAbatt=W_FacturOrgAbatt<iFactAbatt>
    W_TempAccAbatt=W_TempAccAbatt[5,8]
    READ ENR_FACTURORG FROM F.FACTURORG,W_FacturOrgAbatt<iFactAbatt> ELSE STOP
    READ ENR_ACCORD FROM F.ACCORD,W_TempAccAbatt ELSE STOP
    READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,W_TempOrgAbatt ELSE STOP
   W_NbHeures=ENR_FACTURORG<1,1>
   IF ENR_FACTURORG<5,1> # "" THEN
      W_NbHeures=W_NbHeures+ENR_FACTURORG<5,1>
   END

   IF W_SurHresAtt="VRAI" THEN
       lAbatt=1
       LOOP
       WHILE W_Periode < ENR_ACCORD<14,lAbatt> DO
          lAbatt=lAbatt+1
       REPEAT
       IF W_Periode=ENR_ACCORD<14,lAbatt> THEN
          W_NbHeures=ENR_ACCORD<16,lAbatt>
       END
   END

   W_Sup=0
   iAbat=1
   LOOP
   WHILE ENR_ORGPRISECHARGE<29,iAbat> # "" DO
     IF W_NbHeures > ENR_ORGPRISECHARGE<29,iAbat> THEN
        IF W_NbHeures > ENR_ORGPRISECHARGE<30,iAbat> THEN
           W_Sup=ENR_ORGPRISECHARGE<30,iAbat>
        END ELSE
           W_Sup=W_NbHeures
        END

        jAbat=iAbat+1
        ENR_FACTURORG<1,jAbat>=W_Sup-ENR_ORGPRISECHARGE<29,iAbat>
        W_Reste=ENR_FACTURORG<1,jAbat>

        kAbat=1
        LOOP
          ENR_FACTURORG<1,kAbat>=ENR_FACTURORG<1,kAbat>-W_Reste
          ENR_FACTURORG<4,kAbat>=INT(ENR_FACTURORG<1,kAbat>*ENR_FACTURORG<3,kAbat>/100+1/2)
        WHILE ENR_FACTURORG<1,kAbat> < 0 DO
           W_Reste=ABS(ENR_FACTURORG<1,kAbat>)
           ENR_FACTURORG<1,kAbat>=0
           kAbat=kAbat+1
        REPEAT

        ENR_FACTURORG<16,jAbat>=ENR_FACTURORG<2,1>
        ENR_FACTURORG<2,jAbat>=INT(ENR_FACTURORG<2,1>-ENR_FACTURORG<2,1>*ENR_ORGPRISECHARGE<31,iAbat>/10000+1/2)
        ENR_FACTURORG<3,jAbat>=ENR_FACTURORG<3,1>+ENR_FACTURORG<2,1>-ENR_FACTURORG<2,jAbat>
        ENR_FACTURORG<4,jAbat>=INT(ENR_FACTURORG<1,jAbat>*ENR_FACTURORG<3,jAbat>/100+1/2)
        ENR_FACTURORG<14,jAbat>=ENR_ORGPRISECHARGE<29,iAbat>/100
        ENR_FACTURORG<15,jAbat>=W_Sup/100

        * Nb heures max sur la section analytique
        W_MaxAbat=ENR_FACTURORG<13,1>
        W_IndSectAbat=1
        lAbat=2
        LOOP
        WHILE ENR_FACTURORG<11,lAbat> # "" DO
           IF ENR_FACTURORG<13,lAbat> > W_MaxAbat THEN
              W_MaxAbat=ENR_FACTURORG<13,lAbat>
              W_IndSectAbat=lAbat
           END
           lAbat=lAbat+1
        REPEAT
        W_CalculPartOrg=INT(ENR_FACTURORG<1,jAbat> * ENR_FACTURORG<3,1> /100 + 1/2)
        ENR_FACTURORG<12,W_IndSectAbat>=ENR_FACTURORG<12,W_IndSectAbat> - W_CalculPartOrg  + INT(ENR_FACTURORG<1,jAbat> * ENR_FACTURORG<3,jAbat>/100 + 1/2)
        iAbat=iAbat+1
     END ELSE
        iAbat=999
     END
   REPEAT

   iAbatt=1
   LOOP
   WHILE ENR_FACTURORG<1,iAbatt>=0 DO
      ENR_FACTURORG=DELETE(ENR_FACTURORG,16,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,15,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,14,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,4,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,3,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,2,iAbatt)
      ENR_FACTURORG=DELETE(ENR_FACTURORG,1,iAbatt)
   REPEAT

   iAbatt=1
   LOOP
   WHILE ENR_FACTURORG<1,iAbatt># "" DO
      * Remplir Abattement sur TempFacturAide
      IF ENR_FACTURORG<14,iAbatt> # "" THEN
         GOSUB 385
      END
      iAbatt=iAbatt+1
   REPEAT

   ENR_FACTURORG=DELETE(ENR_FACTURORG,16)
   ENR_FACTURORG=DELETE(ENR_FACTURORG,15)
   ENR_FACTURORG=DELETE(ENR_FACTURORG,14)
   WRITE ENR_FACTURORG ON F.FACTURORG,W_FacturOrgAbatt<iFactAbatt>


NEXT iFactAbatt

RETURN

*********************************************************************
* Remplir Abattement sur TempCalculFactrAide
385
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1,-1;W_Periode)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2,-1;"ABATTEMENT ":ENR_ORGPRISECHARGE<1>:" DE ":ENR_FACTURORG<14,iAbatt>:" A ":ENR_FACTURORG<15,iAbatt>:" HEURES")
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,-1;ENR_FACTURORG<1,iAbatt>)

   W_ReducTaux=-(ENR_FACTURORG<16,iAbatt>-ENR_FACTURORG<2,iAbatt>)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4,-1;W_ReducTaux)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,-1;INT(W_ReducTaux*ENR_FACTURORG<1,iAbatt>/100-1/2))
   W_Count6FacturAide=DCOUNT(ENR_TEMPFACTURAIDE<1>,CHAR(253))
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,W_Count6FacturAide;W_CodeComptaPrest)

   lAbattAccHist=1
   LOOP
   WHILE W_Periode < ENR_ACCORD<14,lAbattAccHist> DO
      lAbattAccHist=lAbattAccHist+1
   REPEAT
   IF W_Periode=ENR_ACCORD<14,lAbattAccHist> THEN
      ENR_ACCORD<15,lAbattAccHist>=ENR_ACCORD<15,lAbattAccHist>+ENR_TEMPFACTURAIDE<5,W_Count6FacturAide>
      WRITE ENR_ACCORD ON F.ACCORD,W_TempAccAbatt
   END

  * Recherche de la section analytique qui a le plus nombre d'heures
  W_MaxAnal=W_SectionAnal<1,2>
  W_SectAnal=W_SectionAnal<1,1>  
  jAnal=2
  LOOP
  WHILE W_SectionAnal<jAnal,1> # "" DO
     IF W_SectionAnal<jAnal,1> > W_MaxAnal THEN
        W_MaxAnal=W_SectionAnal<jAnal,2>
        W_SectAnal=W_SectionAnal<jAnal,1>
     END
     jAnal=jAnal+1
  REPEAT
  ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7,-1;W_SectAnal)

RETURN

*********************************************************************
* Mise a jour de l'historique
390
   IF W_SurHresAtt="FAUX" THEN
      IF ENR_ACCORD<14,1> = W_CboAnneeMois THEN
         IF ENR_ORGPRISECHARGE<19>=2 THEN
            ENR_ACCORD=REPLACE(ENR_ACCORD,15,1;ENR_ACCORD<15,1>+W_MontHistOrg)
            ENR_ACCORD=REPLACE(ENR_ACCORD,16,1;ENR_ACCORD<16,1>+HeuresPrisAcc)
         END ELSE
            ENR_ACCORD=REPLACE(ENR_ACCORD,15,1;ENR_ACCORD<15,1>+W_MontHistOrg)
            ENR_ACCORD=REPLACE(ENR_ACCORD,16,1;ENR_ACCORD<16,1>+HeuresPrisAcc)
            IF ENR_ACCORD<17,1>="" THEN
               ENR_ACCORD=REPLACE(ENR_ACCORD,17,1;ENR_ACCORD<9>-HeuresPrisAcc)
            END ELSE
*               IF ENR_ORGPRISECHARGE<19>=3 THEN
                  ENR_ACCORD=REPLACE(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-HeuresPrisAcc)           
*               END ELSE
*                  ENR_ACCORD=REPLACE(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-HeuresPrisAcc)
*               END
            END
         END
      END ELSE

        IF ENR_ORGPRISECHARGE<19>=2 THEN
           ENR_ACCORD=INSERT(ENR_ACCORD,14,1;W_Periode)
           ENR_ACCORD=INSERT(ENR_ACCORD,15,1;W_MontHistOrg)
           ENR_ACCORD=INSERT(ENR_ACCORD,16,1;HeuresPrisAcc)         
        END ELSE
           ENR_ACCORD=INSERT(ENR_ACCORD,14,1;W_Periode)
           ENR_ACCORD=INSERT(ENR_ACCORD,15,1;W_MontHistOrg)
           ENR_ACCORD=INSERT(ENR_ACCORD,16,1;HeuresPrisAcc)
           IF ENR_ACCORD<17,1>="" THEN
              ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<9>-HeuresPrisAcc)
           END ELSE
              IF ENR_ORGPRISECHARGE<19>=3 THEN
                 ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-HeuresPrisAcc)
              END ELSE
                 ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<9>+ENR_ACCORD<17,1>-HeuresPrisAcc)
              END
           END
        END
      END
   END ELSE

      iHistoAcc=1
      LOOP
      WHILE ENR_ACCORD<14,iHistoAcc> > W_Periode AND ENR_ACCORD<14,iHistoAcc> # "" DO
         iHistoAcc=iHistoAcc+1
      REPEAT
      IF ENR_ACCORD<14,iHistoAcc> = W_Periode THEN
         ENR_ACCORD=REPLACE(ENR_ACCORD,16,iHistoAcc;ENR_ACCORD<16,iHistoAcc>+HeuresPrisAcc)
         ENR_ACCORD=REPLACE(ENR_ACCORD,15,iHistoAcc;ENR_ACCORD<15,iHistoAcc>+W_MontHistOrg)
         IF ENR_ORGPRISECHARGE<19>#2 THEN
            *Parcourir les mv dessous pour mise a jour
            FOR jHistoAcc=iHistoAcc TO 1
                ENR_ACCORD<17,jHistoAcc>=ENR_ACCORD<17,jHistoAcc>-HeuresPrisAcc
            NEXT jHistoAcc
         END
      END ELSE
         ENR_ACCORD=INSERT(ENR_ACCORD,14,iHistoAcc;W_Periode)
         ENR_ACCORD=INSERT(ENR_ACCORD,15,iHistoAcc;W_MontHistOrg)
         ENR_ACCORD=INSERT(ENR_ACCORD,16,iHistoAcc;HeuresPrisAcc)          
         IF ENR_ORGPRISECHARGE<19>#2 THEN
            IF ENR_ACCORD<17,iHistoAcc+1>#"" THEN
               ENR_ACCORD=INSERT(ENR_ACCORD,17,iHistoAcc;ENR_ACCORD<17,iHistoAcc+1>-HeuresPrisAcc)
              *Parcourir les mv dessous pour mise a jour
              iHistoAcc=iHistoAcc-1
               FOR jHistoAcc=iHistoAcc TO 1
                   ENR_ACCORD<17,jHistoAcc>=ENR_ACCORD<17,jHistoAcc>-HeuresPrisAcc
               NEXT jHistoAcc
            END ELSE
               ENR_ACCORD=INSERT(ENR_ACCORD,17,iHistoAcc;ENR_ACCORD<9>-HeuresPrisAcc)
            END
         END
      END
   END
   WRITE ENR_ACCORD ON F.ACCORD,W_CleAcc
RETURN

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

********************************************************************
* Gestion de DetailPrestInv
400
    W_RienSelect="FAUX"
    W_Temp='SSELECT DETAILPRESTINV AVEC EntitePrestInv = "':W_CodAssoc:'"'
    IF W_CodeSectResp # "VIDE" THEN
       IF W_RespSect="R" THEN
          W_TempBis=' AND AVEC CodeRespInv = "':W_CodeSectResp:'"'
       END ELSE
          W_TempBis=' AND AVEC CodeSectInv = "':W_CodeSectResp:']"'
       END
    END ELSE
       W_TempBis=''
    END
    IF W_CodeAide = "" THEN
       W_Temp=W_Temp:W_TempBis:' PAR @ID'
    END ELSE
       W_Temp=W_Temp:W_TempBis:' AND AVEC @ID = "':W_CodeAide:']" PAR @ID'
    END
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteInv'
   EXECUTE "LISTE W_RequeteInv" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RienSelect="VRAI"
   END ELSE
      SELECT F.DETAILPRESTINV TO W_RequeteInv
   END

   W_Pass1="FAUX"
   W_FiniInv="FAUX"
   W_SurHresAtt="FAUX"
   W_CleInvAnc=""

   IF W_RienSelect#"VRAI" THEN
      LOOP
         READNEXT W_CleInv FROM W_RequeteInv ELSE W_FiniInv="VRAI"
         * READNEXT W_CleInvAtt FROM W_RequeteInv ELSE W_FiniInv="VRAI"
         * W_CleInv=FIELD(W_CleInvAtt,CHAR(253),1)
      WHILE W_FiniInv="FAUX" DO

          W_Aide=W_CleInv[1,5]
          READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_Aide THEN
             IF ENR_ELTSFACTAIDE<24>#W_CboAnneeMois THEN
                * Gestion de DetailPrestInv
                GOSUB 401
             END
          END ELSE
             WRITEV "M" ON F.ELTSFACTAIDE,W_Aide,1
             * Gestion de DetailPrestInv
             GOSUB 401
          END 

      REPEAT
   END

RETURN

********************************************************************
* Gestion de DetailPrestInv
401
             iAnal=1
             LOOP 
             WHILE W_SectionAnal<iAnal,1> # "" DO
                W_SectionAnal<iAnal,2>=0
                iAnal=iAnal+1
             REPEAT

             W_Periode=W_CleInv[9,6]
             W_DatePeriode="01/":W_CleInv[13,2]:"/":W_CleInv[9,4]
             W_DatePeriode=ICONV(W_DatePeriode,"D4/")+32
             W_DatePeriode=OCONV(W_DatePeriode,"D4/")
             W_DatePeriode="01/":W_DatePeriode[4,7]
             W_DatePeriode=ICONV(W_DatePeriode,"D4/")-1

             W_DateDebPeriode="01/":W_CboAnneeMois[5,2]:"/":W_CboAnneeMois[1,4]
             W_DateDebPeriode=ICONV(W_DateDebPeriode,"D4/")
             W_DateFinPeriode=W_DateDebPeriode+32
             W_DateFinPeriode=OCONV(W_DateFinPeriode,"D4/")
             W_DateFinPeriode="01/":W_DateFinPeriode[4,7]
             W_DateFinPeriode=ICONV(W_DateFinPeriode,"D4/")-1      

             READ ENR_DETAILPRESTINV FROM F.DETAILPRESTINV,W_CleInv ELSE STOP

             * Preparation de la requete Accord
             GOSUB 410
 
             READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_Aide ELSE ENR_TEMPFACTURAIDE=""
*             READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_Aide THEN
*                iCivilAidant=1
*                LOOP
*                WHILE ENR_TEMPFACTURAIDE<10,iCivilAidant> # "" DO
*                   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,ENR_TEMPFACTURAIDE<10,iCivilAidant> ELSE ENR_CIVILAIDANT=""
*                   ENR_TEMPFACTURAIDE<13,iCivilAidant>=ENR_CIVILAIDANT<2>:ENR_CIVILAIDANT<3>
*                   iCivilAidant=iCivilAidant+1
*                REPEAT
*             END ELSE
*                ENR_TEMPFACTURAIDE=""
*             END
      
            *READ ENR_HRESHISTOR FROM F.HRESHISTOR,W_Aide:W_CodAssoc:W_Periode ELSE ENR_HRESHISTOR = ""
            READ ENR_STATACTAIDE FROM F.STATACTAIDE,W_Aide:W_CodAssoc:W_Periode ELSE ENR_STATACTAIDE = ""
            ENR_HRESHISTOR = ""
            * ENR_STATACTAIDE = ""

            ENR_HRESATTENTE=""

            IF ENR_DETAILPRESTINV<4> # "" THEN
               * Traitement des Mv
               i=1
               LOOP
               WHILE ENR_DETAILPRESTINV<4,i> # "" DO
                  W_Mv="VRAI"
                  W_CodeAidant=ENR_DETAILPRESTINV<1,i>
                  W_CodeAidant=W_CodeAidant[1,5]
                  NbrHeuresAtt=ENR_DETAILPRESTINV<3,i>
                  W_ActHres=ENR_DETAILPRESTINV<4,i>
                  READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP
                  W_RubSaisie=ENR_DETAILPRESTINV<2,i>

                  * Mise a jour d'HRESHISTOR
                  GOSUB 510
                  * Mise a jour de STATACTAIDE
                  GOSUB 520

                  * Affectation des heures aux accords
                  GOSUB 430
                  IF W_ExistAct="FAUX" OR NbrHeuresAtt > 0 THEN
      
                     * Preparation de la requete Demande d'Accord
                     GOSUB 420

                     * si pas d'accord  alors recherche de demande d'accord
                     GOSUB 440

                     IF NbrHeuresAtt>0 THEN
      
                        * Facturation a taux plein
                        HeuresPrisAcc=0
                        GOSUB 360
                     END
                  END
                  i=i+1
               REPEAT

            END ELSE
               * Traitement des Ms
               i=1
               LOOP
               WHILE ENR_DETAILPRESTINV<1,i> # "" DO
                  j=1
                  LOOP
                  WHILE ENR_DETAILPRESTINV<8,i,j> # "" DO
                     W_Mv="FAUX"
                     NbrHeuresAtt=ENR_DETAILPRESTINV<7,i,j>
                     W_ActHres=ENR_DETAILPRESTINV<8,i,j>
                     READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE STOP
                     W_DateJour=ENR_DETAILPRESTINV<5,i,j>:"/":W_CboAnneeMois[5,2]:"/":W_CboAnneeMois[1,4]
                     W_DateJour=ICONV(W_DateJour,"D4/")
                     W_RubSaisie=ENR_DETAILPRESTINV<6,i,j>
                     W_CodeAidant=ENR_DETAILPRESTINV<1,i>
                     W_CodeAidant=W_CodeAidant[1,5]
                     * Mise a jour d'HRESHISTOR
                     GOSUB 510
                     * Mise a jour de STATACTAIDE
                     GOSUB 520

                     * Affectation des heures aux accords
                     GOSUB 430
                     IF W_ExistAct="FAUX" OR NbrHeuresAtt > 0 THEN
                        * Preparation de la requete Demande d'Accord
                        GOSUB 420
                        * si pas d'accord  alors recherche de demande d'accord
                        GOSUB 440
                        IF NbrHeuresAtt>0 THEN
                           * Facturation a taux plein
                           HeuresPrisAcc=0
                           GOSUB 360
                        END
                     END
                     j=j+1
                  REPEAT
                  i=i+1
               REPEAT
            END         
      
             * Si abattement alors affectation
             IF W_FacturOrgAbatt#"" THEN
                GOSUB 380
                W_FacturOrgAbatt=""
             END
      
            * Ecriture d'activitesaide
            GOSUB 495
            ENR_TEMPFACTURAIDE=DELETE(ENR_TEMPFACTURAIDE,13)
            IF ENR_TEMPFACTURAIDE # "" THEN
               WRITE ENR_TEMPFACTURAIDE ON F.TEMPFACTURAIDE,W_Aide
            END
            ENR_HRESHISTOR=DELETE(ENR_HRESHISTOR,3)
            WRITE ENR_HRESHISTOR ON F.HRESHISTOR,W_Aide:W_CodAssoc:W_Periode
            WRITE ENR_STATACTAIDE ON F.STATACTAIDE,W_Aide:W_CodAssoc:W_Periode
            IF ENR_HRESATTENTE # "" THEN
               WRITEV W_CboAnneeMois ON F.ELTSFACTAIDE,W_Aide,24
               WRITE ENR_HRESATTENTE ON F.HRESATTENTE,W_CleInv:"P"
            END
         
            * Gestion des accords complementaires
            GOSUB 460
            GOSUB 470
      
            * Mise a jour de COTISANAIDE
            GOSUB 530

            ENR_TEMPFACTURAIDE=""
            ENR_HRESHISTOR=""
            * ENR_STATACTAIDE=""
      
            W_CleInvAnc=W_CleInv


RETURN

********************************************************************
* Requete et preparation des accords
410
   W_AucunAcc="FAUX"
   W_ReqAcc=""
   W_ExecAcc='SSELECT ACCORD AVEC @ID = "':W_Aide:']" AND AVEC 5 <= "':W_DateFinPeriode:'" AND AVEC 6 >= "':W_DateDebPeriode:'" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "P" AND AVEC ActivitesOrg = "':EXTRACT(W_Activites,1,1):'"'

   FOR iNbActAcc=2 TO W_NbActivites
      W_ExecAcc=W_ExecAcc:' OR = "':EXTRACT(W_Activites,iNbActAcc,1):'"'
   NEXT iNbActAcc

   W_ExecAcc=W_ExecAcc:' PAR 8 PAR 5 PAR 6'
   EXECUTE W_ExecAcc
   EXECUTE 'SAUVE-LISTE W_RequeteAccord'
   EXECUTE "LISTE W_RequeteAccord" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_AucunAcc="VRAI"
   END ELSE
      SELECT F.ACCORD TO W_RequeteAccord
   END

 IF W_AucunAcc#"VRAI" THEN
   W_IndAccAct=0
   W_IndAcc=0
   W_FiniAcc="FAUX"
   W_ActOrg=0
   k=0
   W_IndReqAcc=0

   LOOP
      READNEXT W_CleAcc FROM W_RequeteAccord ELSE W_FiniAcc="VRAI"
   WHILE W_FiniAcc#"VRAI" DO
      READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
      IF ENR_ACCORD<5> <= W_DateFinPeriode THEN
         IF ENR_ACCORD<6> >= W_DateDebPeriode THEN
            * Compris dans la periode
             READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
             jOrg=1
             mAct=0
             LOOP
                W_ActOrg=ENR_ORGPRISECHARGE<47,jOrg>
             WHILE W_ActOrg#"" DO
                FOR kAct=1 TO W_NbActivites
                   IF W_Activites<kAct,1>=W_ActOrg THEN
                      * ici
                      IF mAct=0 THEN
                         * ici
                         W_IndReqAcc=W_IndReqAcc+1
                         W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,1;W_CleAcc)
                         rHisto=1
                         LOOP
                         WHILE ENR_ACCORD<14,rHisto> # W_CboAnneeMois AND ENR_ACCORD<14,rHisto> # "" DO
                            rHisto=rHisto+1
                         REPEAT
                         IF ENR_ACCORD<14,rHisto> # "" THEN
                            W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<16,rHisto>)
                         END ELSE
                            IF ENR_ORGPRISECHARGE<19>=1 THEN
                               IF ENR_ACCORD<17,1>="" THEN
                                  W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<9>)
                               END ELSE
                                  W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<17,1>+ENR_ACCORD<9>)
                               END
                            END ELSE
                              IF ENR_ORGPRISECHARGE<19>=2 THEN
                                 W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<9>)
                              END ELSE
                                 IF ENR_ACCORD<17,1>="" THEN
                                    W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<9>)
                                 END ELSE
                                    W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<17,1>)
                                 END
                              END
                            END
                         END
                      END
                      mAct=mAct+1
                      W_ReqAcc<W_IndReqAcc,2,mAct>=W_ActOrg
                   END
                NEXT kAct
                jOrg=jOrg+1
             REPEAT
         END
      END
   REPEAT
 END

RETURN

********************************************************************
420
  READ ENR_DEMANDACC FROM F.DEMANDACC,W_CleInv[1,5] THEN

    * Preparation des demandes d'accord
    iDem=1
    LOOP
    WHILE ENR_DEMANDACC<1,iDem>#"" DO
      W_DemAccInactif="FAUX"
      IF ENR_DEMANDACC<3,iDem> <= W_DateFinPeriode THEN
         IF ENR_DEMANDACC<4,iDem> >= W_DateDebPeriode THEN
            * Compris dans la periode
            READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_DEMANDACC<1,iDem> ELSE STOP
            IF ENR_ORGPRISECHARGE<18>="P" AND ENR_ORGPRISECHARGE<24>="H" THEN
               jOrg=1
               lActSel=0
               LOOP
                  W_ActOrg=ENR_ORGPRISECHARGE<47,jOrg>
               WHILE W_ActOrg#"" DO
                  FOR kAct=1 TO W_NbActivites
                     IF W_Activites<kAct,1>=W_ActOrg THEN
                        lActSel=lActSel+1
                        ENR_DEMANDACC<7,iDem,lActSel>=W_ActOrg
                        W_DemAccInactif="VRAI"
                     END
                  NEXT kAct
                  jOrg=jOrg+1
               REPEAT
            END
         END
      END
      IF W_DemAccInactif="FAUX" THEN
         ENR_DEMANDACC<7,iDem,1>=0
      END
      iDem=iDem+1
    REPEAT
  END

RETURN

********************************************************************
430
   W_ExistAct="FAUX"
   HeuresPrisAcc=0
   W_Count=DCOUNT(W_ReqAcc,CHAR(254))

   * parcours les accords
   FOR kAcc=1 TO W_Count
    IF NbrHeuresAtt > 0 THEN
      W_MontHistOrg=0
      lAcc=1
      W_Pass="FAUX"
      W_CleAcc=W_ReqAcc<kAcc,1>

      READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
      IF W_Mv#"VRAI" THEN
         IF ENR_ACCORD<5> <= W_DateJour AND ENR_ACCORD<6> >= W_DateJour THEN
            W_Pass="VRAI"
         END
      END ELSE
          W_Pass="VRAI"
      END           

      IF W_Pass="VRAI" THEN

         LOOP
         WHILE W_ReqAcc<kAcc,2,lAcc> # "" DO

              IF W_ActHres = W_ReqAcc<kAcc,2,lAcc> THEN      
                  W_ExistAct="VRAI"

                  NbrHeuresAcc=W_ReqAcc<kAcc,3>-NbrHeuresAtt

                  IF NbrHeuresAcc > 0 THEN
                     HeuresPrisAcc=NbrHeuresAtt
                     W_ReqAcc<kAcc,3>=NbrHeuresAcc
                     NbrHeuresAtt=0
                     NbrHeuresAcc=0
                     lAcc=999
                     kAcc=999
                  END ELSE
                     HeuresPrisAcc=W_ReqAcc<kAcc,3>
                     W_ReqAcc=DELETE(W_ReqAcc,kAcc)
                     kAcc=kAcc-1
                     W_Count=W_Count-1
                     NbrHeuresAtt=ABS(NbrHeuresAcc)
                     lAcc=999
                  END

                  W_ActAnal=W_ActHres
                  W_NbrHAnal=HeuresPrisAcc
                  GOSUB 305

                  * TEMPFACTURAIDE et FACTURORG      
                  GOSUB 340

                  * Mise a jour de l'historique
                  GOSUB 390
         
                  * Gestion du tableau tampon d'ActivitesAide
                  GOSUB 490

               END

               lAcc=lAcc+1
         REPEAT
      END ELSE
         W_ExistAct="FAUX"
      END
    END
   NEXT kAcc
RETURN

********************************************************************
* si pas d'accord  alors recherche de demande d'accord
440
   jDemAcc=1
   LOOP
   WHILE ENR_DEMANDACC<7,jDemAcc> # "" DO
      k=1 
      LOOP
      WHILE ENR_DEMANDACC<7,jDemAcc,k> # "" DO
         IF ENR_DEMANDACC<7,jDemAcc,k>=W_ActHres THEN
            jDemAcc=999
            * Basculement en heures attentes
            GOSUB 450
            NbrHeuresAtt=0 
         END
         k=k+1
      REPEAT
      jDemAcc=jDemAcc+1
   REPEAT

RETURN

********************************************************************
* Basculement en heures attentes
450
   W_AidantInv=ENR_DETAILPRESTINV<1,i>
   W_AidantInv=W_AidantInv[1,5]
   IF ENR_HRESATTENTE # "" THEN
*   READ ENR_HRESATTENTE FROM F.HRESATTENTE,W_CleInv:"P" THEN
      iHres=1
      IF W_Mv="VRAI" THEN
         LOOP
         WHILE ENR_HRESATTENTE<1,iHres> # "" DO
            IF ENR_HRESATTENTE<1,iHres>=W_AidantInv AND ENR_HRESATTENTE<2,iHres>=W_RubSaisie AND ENR_HRESATTENTE<4,iHres>=ENR_DETAILPRESTINV<4,i> THEN
               ENR_HRESATTENTE<3,iHres>=ENR_HRESATTENTE<3,iHres>+NbrHeuresAtt
               iHres=999
            END
		iHres=iHres+1
         REPEAT
         IF iHres # 1000 THEN
            ENR_HRESATTENTE<1,iHres>=W_AidantInv
            ENR_HRESATTENTE<2,iHres>=W_RubSaisie
            ENR_HRESATTENTE<3,iHres>=NbrHeuresAtt
            ENR_HRESATTENTE<4,iHres>=ENR_DETAILPRESTINV<4,i>
         END
      END ELSE
         LOOP
         WHILE ENR_HRESATTENTE<1,iHres> # "" DO
            IF ENR_HRESATTENTE<1,iHres>=W_AidantInv THEN
               jHres=1
               LOOP
               WHILE ENR_HRESATTENTE<2,iHres,jHres> # "" DO
                  IF ENR_HRESATTENTE<2,iHres,jHres>=W_RubSaisie AND ENR_HRESATTENTE<4,iHres,jHres>=ENR_DETAILPRESTINV<4,i> AND ENR_HRESATTENTE<5,iHres,jHres>=ENR_DETAILPRESTINV<5,i,j> THEN
                     ENR_HRESATTENTE<7,iHres,jHres>=ENR_HRESATTENTE<7,iHres,jHres>+NbrHeuresAtt
                     jHres=999
                  END
                  jHres=jHres+1
               REPEAT
               IF jHres # 1000 THEN
                  ENR_HRESATTENTE<5,iHres,jHres>=ENR_DETAILPRESTINV<5,i,j>
                  ENR_HRESATTENTE<6,iHres,jHres>=W_RubSaisie
                  ENR_HRESATTENTE<7,iHres,jHres>=NbrHeuresAtt
                  ENR_HRESATTENTE<8,iHres,jHres>=ENR_DETAILPRESTINV<8,i,j>                  
               END
               iHres=999
            END
            iHres=iHres+1
         REPEAT
         IF iHres # 1000 THEN
            ENR_HRESATTENTE<1,iHres>=W_AidantInv
            ENR_HRESATTENTE<5,iHres,jHres>=ENR_DETAILPRESTINV<5,i,j>
            ENR_HRESATTENTE<6,iHres,jHres>=W_RubSaisie
            ENR_HRESATTENTE<7,iHres,jHres>=NbrHeuresAtt
            ENR_HRESATTENTE<8,iHres,jHres>=ENR_DETAILPRESTINV<8,i,j>
         END
      END
   END ELSE
     
      IF W_Mv="VRAI" THEN
         ENR_HRESATTENTE<1,1>=W_AidantInv
         ENR_HRESATTENTE<2,1>=W_RubSaisie
         ENR_HRESATTENTE<3,1>=NbrHeuresAtt
         ENR_HRESATTENTE<4,1>=ENR_DETAILPRESTINV<4,i>
      END ELSE
         ENR_HRESATTENTE<1,1>=W_AidantInv
         ENR_HRESATTENTE<5,1,1>=ENR_DETAILPRESTINV<5,i,j>
         ENR_HRESATTENTE<6,1,1>=W_RubSaisie
         ENR_HRESATTENTE<7,1,1>=NbrHeuresAtt
         ENR_HRESATTENTE<8,1,1>=ENR_DETAILPRESTINV<8,i,j>
      END

   END

RETURN

***************************************************************************
* Requete Accord complementaire
460
   W_FiniAccComp="FAUX"
   W_ReqAccComp=""
   W_Vide="FAUX"
   * AND AVEC 5 <= "':W_DateFinPeriode:'" AND AVEC 6 >= "':W_DateDebPeriode:'" 
   W_Temp='SSELECT ACCORD AVEC @ID = "':W_Aide:']" AND AVEC 9 <> "0" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "C" AND AVEC ActivitesOrg = "':EXTRACT(W_Activites,1,1):'"'

   FOR kCompReq=2 TO W_NbActivites
      W_Temp=W_Temp:' OR = "':EXTRACT(W_Activites,kCompReq,1):'"'
   NEXT kCompReq
   W_Temp=W_Temp:' PAR 8 PAR 5 PAR 6'
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteAccordComp'
   EXECUTE "LISTE W_RequeteAccordComp" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_Vide="VRAI"
   END ELSE
      SELECT F.ACCORD TO W_RequeteAccordComp
   END
   IF W_Vide#"VRAI" THEN
      W_IndReqAccComp=0
      LOOP
         READNEXT W_CleAccComp FROM W_RequeteAccordComp ELSE W_FiniAccComp="VRAI"
      WHILE W_FiniAccComp="FAUX" DO
         READ ENR_ACCORD FROM F.ACCORD,W_CleAccComp ELSE STOP
*         IF ENR_ACCORD<5> <= W_DateFinPeriode THEN
*            IF ENR_ACCORD<6> >= W_DateDebPeriode THEN
               * Compris dans la periode
                READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
                k=1
                m=0
                LOOP
                   W_ActOrg=ENR_ORGPRISECHARGE<47,k>
                WHILE W_ActOrg#"" DO
                     FOR l=1 TO W_NbActivites
                        IF W_Activites<l,1>=W_ActOrg THEN
                           IF m=0 THEN
                              W_IndReqAccComp=W_IndReqAccComp+1
                              W_ReqAccComp=REPLACE(W_ReqAccComp,W_IndReqAccComp,1;W_CleAccComp)
                              IF ENR_ORGPRISECHARGE<19>=2 THEN
                                 W_ReqAccComp=REPLACE(W_ReqAccComp,W_IndReqAccComp,3;ENR_ACCORD<9>)
                              END ELSE
                                 W_ReqAccComp=REPLACE(W_ReqAccComp,W_IndReqAccComp,3;ENR_ACCORD<17,1>)
                              END
                           END
                           m=m+1
                           W_ReqAccComp<W_IndReqAccComp,2,m>=W_ActOrg
                        END
                     NEXT l
                     k=k+1
                REPEAT
           * END
        * END
      REPEAT
   END

RETURN

*******************************************************************
* Gestion des accords complementaires
470
      W_CountComp=DCOUNT(W_ReqAccComp,CHAR(254))
      IF ENR_ACCORD<14,1> # "" THEN
         W_DebAcc=W_Periode
         * Cumul les heures sur STATACTAIDE
         GOSUB 475

         * parcours les accords
         FOR kComp=1 TO W_CountComp
  
            IF W_NbHresH#0 THEN
               W_CleAccComp=W_ReqAccComp<kComp,1>
               READ ENR_ACCORD FROM F.ACCORD,W_CleAccComp ELSE STOP
               READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
 
               IF ENR_ACCORD<6> >= W_DateDebPeriode AND ENR_ACCORD<5> <= W_DateFinPeriode THEN                 
                  W_NbHresHAccComp=W_NbHresH-W_ReqAccComp<kComp,3>

                  IF W_NbHresHAccComp > 0 THEN
                     W_NbHresH=W_NbHresHAccComp
                     HeuresPrisAccComp=W_ReqAccComp<kComp,3>
                  END ELSE
                     HeuresPrisAccComp=W_NbHresH
                     W_NbHresH=0
                  END

                  * Rempli TEMPFACTURAIDE et Mise a jour de l'accord complementaire
                  GOSUB 480
               END
            END
                  
         NEXT kComp
      END ELSE
         * pas d'historique ENR_ACCORD<14,1> = ""
         W_DebAcc=OCONV(ENR_ACCORD<5>,"D4/")
         W_DebAcc=W_DebAcc[7,4]:W_DebAcc[4,2]
         W_FinAcc=OCONV(ENR_ACCORD<6>,"D4/")
         W_FinAcc=W_FinAcc[7,4]:W_FinAcc[4,2]
         IF W_CboAnneeMois < W_FinAcc THEN
            W_FinAcc=W_CboAnneeMois
         END

         LOOP
         WHILE W_DebAcc <= W_FinAcc DO
           * Cumul les heures sur STATACTAIDE
           GOSUB 475

            * parcours les accords
           FOR kComp=1 TO W_CountComp
   
               IF W_NbHresH#0 THEN
                  W_CleAccComp=W_ReqAccComp<kComp,1>
                  READ ENR_ACCORD FROM F.ACCORD,W_CleAccComp ELSE STOP
                  READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
  
                  IF ENR_ACCORD<6> >= W_DateDebPeriode AND ENR_ACCORD<5> <= W_DateFinPeriode THEN                 
                     W_NbHresHAccComp=W_NbHresH-W_ReqAccComp<kComp,3>

                     IF W_NbHresHAccComp > 0 THEN
                        W_NbHresH=W_NbHresHAccComp
                        HeuresPrisAccComp=W_ReqAccComp<kComp,3>
                     END ELSE
                        HeuresPrisAccComp=W_NbHresH
                        W_NbHresH=0
                     END

                     * Rempli TEMPFACTURAIDE et Mise a jour de l'accord complementaire
                     GOSUB 480
                  END
               END
                   
           NEXT kComp

            W_DebAcc=W_DebAcc+1
            IF W_DebAcc[5,2] = 13 THEN
               W_DebAcc=W_DebAcc[1,4]+1
               W_DebAcc=W_DebAcc:"01"
            END

         REPEAT
      END

RETURN

*******************************************************************
* Cumul les heures sur STATACTAIDE
475
   W_NbHresH=0
   READ ENR_STATACTAIDE FROM F.STATACTAIDE,W_Aide:W_CodAssoc:W_DebAcc THEN
      iHresH=1
      LOOP
      WHILE ENR_STATACTAIDE<1,iHresH> # "" DO
*         jHresH=1
*         LOOP
*         WHILE W_ReqAccComp<kComp,2,jHresH> # "" DO
*            IF ENR_STATACTAIDE<1,iHresH> = W_ReqAccComp<kComp,2,jHresH> THEN
*               W_NbHresH=W_NbHresH+ENR_STATACTAIDE<2,iHresH>
*            END
*            jHresH=jHresH+1
*         REPEAT

         W_NbHresH=W_NbHresH+ENR_STATACTAIDE<2,iHresH>
         iHresH=iHresH+1
      REPEAT
   END

RETURN

*******************************************************************
* Rempli TEMPFACTURAIDE et Mise a jour de l'accord complementaire
480
   iInsertComp=1
   LOOP
   WHILE ENR_TEMPFACTURAIDE<1,iInsertComp> # "" AND W_DebAcc >= ENR_TEMPFACTURAIDE<1,iInsertComp> DO
      iInsertComp=iInsertComp+1
   REPEAT
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,1,iInsertComp;W_DebAcc)
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,2,iInsertComp;"PARTICIPATION ":ENR_ORGPRISECHARGE<1>)
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,3,iInsertComp;HeuresPrisAccComp)

    W_DatePerTemp="01/":W_DebAcc[5,2]:"/":W_DebAcc[1,4]
    W_DatePerTemp=ICONV(W_DatePerTemp,"D4/")
    IF W_DatePerTemp >= ENR_ACCORD<11,1> THEN
       W_Taux=ENR_ACCORD<13,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePerTemp < ENR_ACCORD<11,iTaux> DO
          iTaux=iTaux+1
       REPEAT
       W_Taux=ENR_ACCORD<13,iTaux>
    END

   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,4,iInsertComp;-W_Taux)
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,5,iInsertComp;-INT(W_Taux*HeuresPrisAccComp/100+1/2))
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,6,iInsertComp;"0")
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,iInsertComp;W_CodeComptaPrest)
   ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,7,iInsertComp;ENR_ACTIVITES<2>)

   ENR_FACTURORG=""
   ENR_FACTURORG<1>=HeuresPrisAccComp
   ENR_FACTURORG<2>=0
   ENR_FACTURORG<3>=W_Taux
   ENR_FACTURORG<4>=INT(W_Taux*HeuresPrisAccComp/100+1/2)

   WRITE ENR_FACTURORG ON F.FACTURORG,ENR_ACCORD<1>:"P":W_CleAccComp:W_DebAcc:"01"
   WRITE ENR_TEMPFACTURAIDE ON F.TEMPFACTURAIDE,W_Aide

   * Mise a jour des accords complementaires
   GOSUB 485

RETURN

********************************************************************
* Mise a jour des accords complementaires
485
   iHistoAcc=1
   LOOP
   WHILE ENR_ACCORD<14,iHistoAcc> > W_DebAcc DO
      iHistoAcc=iHistoAcc+1
   REPEAT
   IF ENR_ACCORD<14,iHistoAcc> = W_DebAcc THEN
      W_Nb16Acc=ENR_ACCORD<16,iHistoAcc>+W_NbHresH
      IF W_Nb16Acc < ENR_ACCORD<9> THEN
         W_Nb16Acc=ENR_ACCORD<9>
      END
      ENR_ACCORD<16,iHistoAcc>=W_Nb16Acc
   END ELSE
       ENR_ACCORD=INSERT(ENR_ACCORD,14,iHistoAcc;W_DebAcc)
       ENR_ACCORD=INSERT(ENR_ACCORD,15,iHistoAcc;ENR_FACTURORG<4>)
       ENR_ACCORD=INSERT(ENR_ACCORD,16,iHistoAcc;HeuresPrisAccComp)
   END
   WRITE ENR_ACCORD ON F.ACCORD,W_CleAccComp
RETURN

********************************************************************
* Gestion du tableau tampon d'ActivitesAide
490
  W_Trouve="FAUX"
  iActAide=1
  LOOP
  WHILE W_ActivitesAide<iActAide># "" DO
     IF W_ActHres=W_ActivitesAide<iActAide> THEN
        W_Trouve="VRAI"
        iActAide=999
     END
      iActAide=iActAide+1
  REPEAT
  IF W_Trouve="FAUX" THEN
     W_ActivitesAide<iActAide>=W_ActHres
  END

RETURN

********************************************************************  
* Ecriture d'activitesaide
495
   IF W_ActivitesAide#"" THEN
      READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_Aide ELSE STOP
      iActAide=1
      W_CountAct=DCOUNT(W_ActivitesAide,CHAR(254))
      LOOP
      WHILE ENR_ACTIVITESAIDE<1,iActAide>#"" DO
         IF ENR_ACTIVITESAIDE<2,iActAide>="" THEN
            FOR jActAide=1 TO W_CountAct
               IF ENR_ACTIVITESAIDE<1,iActAide>=W_ActivitesAide<jActAide> THEN
                  ENR_ACTIVITESAIDE<2,iActAide>=ICONV("01/":W_CboAnneeMois[5,2]:"/":W_CboAnneeMois[1,4],"D4/")
                  W_ActivitesAide=DELETE(W_ActivitesAide,jActAide)
                  W_CountAct=W_CountAct-1
                  jActAide=999
               END
            NEXT jActAide
         END
         iActAide=iActAide+1
      REPEAT

      WRITE ENR_ACTIVITESAIDE ON F.ACTIVITESAIDE,W_Aide
      W_ActivitesAide=""
   END

   ENR_ACTIVITESAIDE="" 

RETURN

********************************************************************
500
   W_Fini="FAUX"
   W_NumeroFact=""

   * LECTURE NUMERO FACTURE
   READ ENR_NUMEROFACT FROM F.NUMEROFACT,W_CodAssoc ELSE STOP
   W_NumeroFact=ENR_NUMEROFACT<1>

   * RECHERCHE DES TEMPFACTURAIDE
   EXECUTE 'SSELECT TEMPFACTURAIDE PAR NomPrenomAide PAR @ID'
   EXECUTE "SAVELIST W_RequeteTempFact"
   EXECUTE "LISTE W_RequeteTempFact" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_Fini="VRAI"
   END ELSE
      SELECT F.TEMPFACTURAIDE TO W_RequeteTempFact
   END

   * PARCOURS DES VALEURS TROUVEES
   LOOP
      READNEXT W_CleAide FROM W_RequeteTempFact ELSE W_Fini="VRAI"
   WHILE W_Fini="FAUX" DO

     READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_CleAide ELSE STOP

     IF W_GestionFede="VRAI" THEN
        * Test si la facturation aide doit etre faite
        READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_CleAide ELSE STOP
        GOSUB 550
     END ELSE
        W_GereFactAide="VRAI"
     END

     IF W_GereFactAide="VRAI" THEN
        * MAJ INFOS
        rFacturAide=1

        LOOP
        WHILE ENR_TEMPFACTURAIDE<5,rFacturAide> = 0 AND ENR_TEMPFACTURAIDE<4,rFacturAide> # "" OR ENR_TEMPFACTURAIDE<5,rFacturAide> = 0 AND ENR_TEMPFACTURAIDE<4,rFacturAide> = 0 DO
           rFacturAide=rFacturAide+1
         REPEAT

        IF ENR_TEMPFACTURAIDE<4,rFacturAide> # "" THEN

           * INCREMENTE NUM FACTURE
           W_NumeroFact=W_NumeroFact+1
           W_NumeroFact=W_NumeroFact "R%10"

           * Ecrit le numero de facture sur la FedeAssoc
            W_NumFactFede=ENR_FEDEASSOC<42,5>+1
            ENR_FEDEASSOC<42,5>=W_NumFactFede "R%10"
            WRITE ENR_FEDEASSOC ON F.FEDEASSOC,W_CleFede

            ENR_FACTURAIDE=ENR_TEMPFACTURAIDE

            * Mise a jour de FACTURAIDE avec COMPLFACT
            GOSUB 540

            iMontTva=1
            W_MontTva=0
            LOOP
            WHILE ENR_FACTURAIDE<5,iMontTva> # "" DO
               W_MontTva=W_MontTva+ENR_FACTURAIDE<5,iMontTva>
               iMontTva=iMontTva+1
            REPEAT
            ENR_FACTURAIDE<9>=INT(W_MontTva*ENR_FACTURAIDE<8>/10000+1/2)
            WRITE ENR_FACTURAIDE ON F.FACTURAIDE,W_CleAide:W_CodAssoc:"P":W_CboAnneeMois:W_NumeroFact:"0"
            ENR_FACTURAIDE=""
        END
     END
      
     * LECTURE ET MAJ ELTSFACTAIDE
      READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_CleAide ELSE ENR_ELTSFACTAIDE=""
      ENR_ELTSFACTAIDE=REPLACE(ENR_ELTSFACTAIDE,24;W_CboAnneeMois)
      WRITE ENR_ELTSFACTAIDE ON F.ELTSFACTAIDE,W_CleAide
      ENR_ELTSFACTAIDE=""
      DELETE F.TEMPFACTURAIDE,W_CleAide
  
   REPEAT

   * SAUVEGARDE NUM FACT
   ENR_NUMEROFACT=REPLACE(ENR_NUMEROFACT,1;W_NumeroFact)
   WRITE ENR_NUMEROFACT ON F.NUMEROFACT,W_CodAssoc

   ENR_NUMEROFACT=""  

   * VIDE LES FICHIERS
   EXECUTE 'VIDER-FICHIER DETAILPRESTINV'

RETURN

*********************************************************************
* Mise a jour d'HRESHISTOR
510
*   iHistor=1
*   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CodeAidant ELSE STOP

*   W_NomPrenomAidant=ENR_CIVILAIDANT<2>:ENR_CIVILAIDANT<3>
*   LOOP
*   WHILE ENR_HRESHISTOR<3,iHistor> < W_NomPrenomAidant AND ENR_HRESHISTOR<1,iHistor># "" DO
*      iHistor=iHistor+1
*   REPEAT

*   IF ENR_HRESHISTOR<1,iHistor> = "" THEN
*      ENR_HRESHISTOR<1,iHistor>=W_CodeAidant
      ENR_HRESHISTOR<2,1>=NbrHeuresAtt
*      ENR_HRESHISTOR<2,iHistor>=NbrHeuresAtt
*      ENR_HRESHISTOR<3,iHistor>=W_NomPrenomAidant
*   END ELSE
*      IF ENR_HRESHISTOR<3,iHistor> > W_NomPrenomAidant THEN
*         ENR_HRESHISTOR=INSERT(ENR_HRESHISTOR,1,iHistor;W_CodeAidant)
*         ENR_HRESHISTOR=INSERT(ENR_HRESHISTOR,2,iHistor;NbrHeuresAtt)
*         ENR_HRESHISTOR=INSERT(ENR_HRESHISTOR,3,iHistor;W_NomPrenomAidant)
*      END ELSE
*         ENR_HRESHISTOR<2,iHistor>=ENR_HRESHISTOR<2,iHistor>+NbrHeuresAtt
*      END
*   END
       
RETURN

*********************************************************************
* Mise a jour de STATACTAIDE
520
   iStat=1
   LOOP
   WHILE ENR_STATACTAIDE<1,iStat># "" DO
      IF ENR_STATACTAIDE<1,iStat> = W_ActHres THEN
         ENR_STATACTAIDE<2,iStat>=ENR_STATACTAIDE<2,iStat>+NbrHeuresAtt
         iStat=999
      END ELSE
         iStat=iStat+1
      END
   REPEAT
   IF iStat # 999 THEN
       ENR_STATACTAIDE<1,iStat>=W_ActHres
       ENR_STATACTAIDE<2,iStat>=NbrHeuresAtt
   END

RETURN

*********************************************************************
* Mise a jour de COTISANAIDE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
530
  IF ENR_ASSOCIATION<31> # "" THEN
     W_DerniereCoti=""
     READ ENR_COTISANAIDE FROM F.COTISANAIDE,W_Aide:W_CodAssoc ELSE ENR_COTISANAIDE = ""  
     W_CountCoti=DCOUNT(ENR_COTISANAIDE<1>,CHAR(254))
     IF ENR_ASSOCIATION<32>="A" THEN
         W_DerniereCoti=ENR_COTISANAIDE<1,W_CountCoti>
         IF W_CboAnneeMois[5,2]="01" THEN
            IF W_DerniereCoti#W_CboAnneeMois THEN
               GOSUB 535
            END
        END ELSE
            IF W_CboAnneeMois[1,4] # W_DerniereCoti[1,4] THEN
               GOSUB 535
            END
        END           
     END ELSE
        READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_Aide ELSE ENR_ELTSFACTAIDE=""
        W_DerniereCoti=W_CboAnneeMois[1,4]-1:W_CboAnneeMois[5,2]
        IF ENR_ELTSFACTAIDE<24>="" OR ENR_ELTSFACTAIDE<24> <= W_DerniereCoti THEN
           GOSUB 535
        END     
     END
  END

RETURN

****************************************************************************
535
   ENR_COTISANAIDE=REPLACE(ENR_COTISANAIDE,1,-1;W_CboAnneeMois)
   ENR_COTISANAIDE=REPLACE(ENR_COTISANAIDE,2,-1;ENR_ASSOCIATION<31>)           
   WRITE ENR_COTISANAIDE ON F.COTISANAIDE,W_Aide:W_CodAssoc
   ENR_COTISANAIDE=""

   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1,-1;W_CboAnneeMois)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2,-1;"COTISATION ANNUELLE")
   W_Count6FacturAide=DCOUNT(ENR_TEMPFACTURAIDE<1>,CHAR(253))
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,W_Count6FacturAide;"")
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4,W_Count6FacturAide;"")
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,W_Count6FacturAide;ENR_ASSOCIATION<31>)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,W_Count6FacturAide;W_CodeComptaCoti)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7,-1;ENR_ACTIVITES<2>)

RETURN

*********************************************************************
* Mise a jour de FACTURAIDE avec COMPLFACT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
540
   READ ENR_COMPLFACT FROM F.COMPLFACT,W_CleAide:W_CodAssoc:W_TypeAct THEN
      W_CountComplFact=DCOUNT(ENR_COMPLFACT<1>,CHAR(253))
      FOR iComplFact=1 TO W_CountComplFact
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,1,-1;W_CboAnneeMois)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,2,-1;ENR_COMPLFACT<1,iComplFact>)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,3,-1;ENR_COMPLFACT<2,iComplFact>)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,4,-1;ENR_COMPLFACT<3,iComplFact>)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,5,-1;ENR_COMPLFACT<4,iComplFact>)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,6,-1;ENR_COMPLFACT<5,iComplFact>)
         ENR_FACTURAIDE=REPLACE(ENR_FACTURAIDE,7,-1;ENR_COMPLFACT<6,iComplFact>)
      NEXT iComplFact
      DELETE F.COMPLFACT,W_CleAide:W_CodAssoc:W_TypeAct
   END
RETURN

*********************************************************************
* Recherche si la FedeAsso gere les factures aux aids
550
   W_PasDeFedeAssoc="FAUX"
   W_GereFactAide="FAUX"
   W_CodeSectFede=ENR_CIVILAIDE<40>
   W_CodeSectFede=W_CodeSectFede[1,3]

   EXECUTE 'SSELECT FEDEASSOC AVEC 41 = "':W_CodeSectFede:'"'
   EXECUTE "SAVELIST W_ReqFedeAssoc"
   EXECUTE "LISTE W_ReqFedeAssoc" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_PasDeFedeAssoc="VRAI"
   END ELSE
      SELECT F.FEDEASSOC TO W_ReqFedeAssoc
   END

   IF W_PasDeFedeAssoc="FAUX" THEN
      READNEXT W_CleFede FROM W_ReqFedeAssoc THEN
         READ ENR_FEDEASSOC FROM F.FEDEASSOC,W_CleFede ELSE STOP
         IF ENR_FEDEASSOC<42,4> # 0 AND ENR_FEDEASSOC<42,4> # "" THEN
            W_GereFactAide="VRAI"
            IF ENR_FEDEASSOC<42,5>="" THEN
               ENR_FEDEASSOC<42,5>=0
            END
         END ELSE
            W_GereFactAide="FAUX"
         END
      END ELSE
         W_GereFactAide="FAUX"
      END
   END
RETURN
