Aide pour code WINDEV

Bonjour,

Je débute dans Windev et j'essaie d'écrire une "règle" qui automatiserait l'acquisition de CP (congés payés), sauf que j'ai trois entités différentes (du même Groupe) avec un nombre de jours mensuels de CP acquis différents, selon des cas spécifiques.

J'ai écrit une règle Windev mais je pense que la syntaxe n'est pas bonne.

Sachant que ::ArgReg_N(1)=2.0833 ; ::ArgReg_N(2)=2,5 et ::ArgReg_N(1)=3 (ceux sont les CP acquis/mois pour 3 différentes sociétés du même Groupe/3 cas particuliers).

Mais ma règle ne foncitonne pas, dans tous les cas, cela me génère 2,0833 de CP/mois, mes conditions ne sont pas prises en compte. Je suis quasi sûr que ma syntaxe n'est pas bonne !!!

Merci d'avance pour votre aide; si vous pouviez m'aider à corriger ce qui ne va pas ! MERCI :)

Voici ma règle:


iNbJourOuvrMois, iNbJourOuvreDuSalarie est un entier
//Stockage nbre jours ouvrés du mois
iNbJourOuvrMois=::NombreJoursEntre2Dates(::InfoDate(4),::InfoDate(5),1,"1")
//Calcul acquisition mensuelle fin de mois ou date sortie (::Date() filtrée dans la condition générique de la règle)
//Formule=Acq. mens.*[nbre jrs ouvrés contrat sur mois/(nbre jrs ouvrés mois-absences ouvrées)/nbre jrs ouvrés mois]
//L'acquisition de base mensuelle est renseignée dans ::ArgReg_N([1]
iNbJourOuvreDuSalarie = ::NombreJoursEntre2Dates(Max(::InfoDate(4),::DateEntrée()),::Date(),1,"1")
//Deduction des jours d'absences de la période
iNbJourOuvreDuSalarie -= ::Compteur("ABS_N_CP","C")
//Permet la prise en compte un prorata de date entrée/date sortie sur mois et abences sur mois, tout en base jrs ouvrés

SI iNbJourOuvrMois>0 ET ::InfoContrat (18)=102 OU ::InfoContrat (18)=103 ou ::InfoSalarie(20)="SOP"... ALORS 
    ou ::InfoSalarie(20)="SOD"
    ::VarExec=::ArgReg_N(1) * (iNbJourOuvreDuSalarie / iNbJourOuvrMois)
    RENVOYER(::VarExec>0)
FIN

SI iNbJourOuvrMois > 0 et ::InfoSalarie(20)="AIR" ou ::InfoSalarie(20)="AIW" ALORS 
    ::VarExec=::ArgReg_N(2)*(iNbJourOuvreDuSalarie/iNbJourOuvrMois)
    RENVOYER(::VarExec>0)
FIN

SI iNbJourOuvrMois > 0 et ::InfoContrat (18)=102 ou ::InfoContrat (18)=103 ALORS 
    ::VarExec=::ArgReg_N(3)*(iNbJourOuvreDuSalarie/iNbJourOuvrMois)
FIN
RENVOYER(::VarExec>0)

vérifie la priorité des opérateurs logiques (a priori ils ont la même), donc mets des parenthèses pour grouper les conditions qui vont ensembles pour être sûr de celles-ci