6.8 Fonctions personnalisées

Chapitre parent Chapitre précédent Chapitre suivant

Une fonction personnalisée est un morceau de code écrit en langage Windev. Ce morceau de code doit retourner dans tous les cas une valeur numérique (entière, réelle ou monétaire). Il peut pour cela référencer un certain nombre d’éléments LDPaye référencés ci-après, et les combiner entre eux à volonté, en faisant appel aux différents opérateurs arithmétiques du langage Windev.

La valeur retournée par la fonction peut être utilisée :

Le principal intérêt des fonctions personnalisées est de pouvoir mettre en place rapidement un nouveau mode de calcul non géré en standard par LDPaye (pas de code calcul approprié), et sans avoir à multiplier le nombre de rubriques pour cela.

L’écriture d’une fonction personnalisée nécessite bien entendu une connaissance minimale du langage Windev. Mais la syntaxe de ce langage est très souple et intuitive. Et c'est le même langage que celui utilisé pour l’écriture de Macro-Code Utilisateur.

Vous trouverez en annexe du document accessible ici une présentation très succincte de ce langage, qui devrait vous suffire pour l’écriture de fonctions élémentaires. Faites-vous aider au besoin par votre prestataire habituel de services.

En tout état de cause, dans la grande majorité des cas, les fonctions personnalisées sont livrées directement par l'éditeur de LDPaye.

Mise en œuvre

Les fonctions personnalisées sont accessibles par le menu Plan de paye/Fonctions personnalisées. A partir de là, vous pouvez créer, modifier ou supprimer une fonction.

Vous pouvez également, via le bouton Modèles proposé au bas de la fenêtre, importer une fonction depuis une « bibliothèque » d'exemples prêts à l’emploi.

Enfin, il est possible d'exporter une fonction personnalisée dans un fichier « texte » externe dédié. Et aussi d'importer une fonction personnalisée depuis un tel fichier issu d'un export. Cela permet notamment de dupliquer une fonction d'un plan de paye à un autre.

La saisie du code « source » d’une fonction personnalisée peut être fait :

Exemple :

Arrondi(CAELVA.NBRE * CAELVA.TAUX * 10 / 100, 2)

Exemple (qui fait la même chose que l’exemple précédent) :        

// Ceci est une ligne de commentaire décrivant ma fonction

// Elle retourne une valeur arrondie à 2 décimales

Renvoyer Arrondi(CAELVA.NBRE * CAELVA.TAUX * 10 / 100, 2)

Remarque : on peut à tout moment basculer du mode Classique au mode Avancé. En revanche, si votre fonction comporte plusieurs lignes de codes en mode Avancé, il n’est plus possible de revenir en mode Classique, sauf à perdre une partie du code source.

Lors de l’enregistrement de la fonction, un contrôle de syntaxe de ce que vous avez écrit est effectué. Certaines erreurs peuvent donc être signalées dès l’enregistrement de la fonction ; il s’agit des erreurs de ponctuation (virgule mal placée, parenthésage incorrect…). D’autres erreurs ne seront signalées qu’à l’exécution de la fonction, c’est à dire au moment de l’utilisation de la fonction dans le calcul d’un bulletin de paye. C’est le cas notamment si vous vous êtes trompé dans le nom d’une variable, d’une constante ou d’un cumul, ou encore le nom d’une fonction intégrée Windev (utilisation de la fonction Arondi au lieu de Arrondi).

Dans le code source d’une fonction personnalisée, vous pouvez référencer directement :

Exemple :

Renvoyer PEPACT.TTTP        // Renvoie le taux temps partiel

Exemple :

// Renvoyer le plafond mensuel SS proratisé en fonction du taux temps partiel du salarié

Si PEPACT.TTTP = 0 alors

       Renvoyer CG.BASESS

Sinon

       Renvoyer Arrondi(CG.BASESS * PEPACT.TTTP / 100, 2)

Fin        

Exemple :

// Renvoyer la valeur d’une journée CP en fonction du taux temps partiel du salarié

Si CU.CPJAN1 = 0 alors

       Renvoyer 0

Sinon

       Renvoyer Arrondi(CU.CPMTN1 / CU.CPJPN1 / 10, 2)

Fin        

Exemple :

// Ajouter en fin du libellé de la ligne courante la valeur existant dans le nombre

CAELVA.LIEV = Complete(CAELVA.LIEV,20) + " "+NumériqueVersChaine(CAELVA.NBRE,"9,2f")

Renvoyer 0        // Toute fonction doit renvoyer une valeur numérique


Pour mieux comprendre ces fonctions personnalisées, prenez quelques minutes pour découvrir les fonctions livrées à titre d’exemple, et notamment les fonctions AGE et ANC, qui retournent respectivement l’âge et l’ancienneté d’un salarié, et qui s’avèrent fort pratique pour conditionner des rubriques ou cotisations en fonction de ces deux critères.

La fonction SOMBRU, livrée elle aussi à but didactique, vous montre comment sommer un ensemble de lignes de bulletin, pour le salarié courant, un N° de rubrique et une période donnée. Cela peut s’avérer intéressant pour récupérer la base de calcul, lorsqu’on procéder à une régularisation sur une cotisation en cours d’année.

Trace du calcul des fonctions personnalisées

Pour faciliter le recours et la mise au point des fonctions personnalisées, il est désormais possible d’obtenir une trace du résultat retourné par ces fonctions lors du calcul d’un bulletin de paye. Il faut pour cela tenir enfoncé les touches Ctrl et Alt au moment du calcul.

Le résultat de calcul de chaque fonction personnalisée s’affiche dans une fenêtre distincte, ayant un fond jaune. Cette fenêtre peut être fermée à tout moment ; à défaut, elle le sera lorsqu’on quittera la fenêtre de calcul des bulletins. On peut aussi « vider » le contenu de la trace affichée, ou sauvegarder ce contenu, tout cela se faisant au travers d’un menu contextuel obtenu par un clic droit dans cette fenêtre de trace.

Sachez également que vous pouvez faire appel explicitement à la fonction Trace au sein d'une fonction personnalisée, pour tracer un résultat intermédiaire. Le résultat sera affiché dans la même fenêtre de trace. Et bien souvent, pour éviter d'avoir systématiquement cette trace, on conditionnera l'appel à la fonction Trace par le fait que les touches Ctrl et Alt sont enfoncées (ou à minima que la touche Majuscule est enfoncée).

Exemple :

SI ToucheEnfoncée(teControl) _ET_ ToucheEnfoncée(teAlt) ALORS Trace("Total intermédiaire de ma fonction : "+TotalIntermédiaire)

Appel d'une fonction depuis une autre fonction

Dans le code source d'une fonction personnalisée, il est possible d'appeler une autre fonction personnalisée. Cela est utilisé par exemple dans la fonction TAUHAP qui calcule le taux horaire d'un apprenti, en faisant appel à la fonction TSLAPP ou TSMAPP selon le cas.

Extrait de cette fonction :

// Récupérer le taux exprimé en pourcentage du SMIC en fonction de l'âge et l'ancienneté,

// soit le taux légal, soit le taux majoré dans le cas du BTP (constante générale APPBTP <>0)

SI xLireConstanteGenerale("APPBTP", PEPACT.COSO, PEPACT.CETB)=0 ALORS NomFonction="TSLAPP" SINON NomFonction="TSMAPP"

TauxApprenti = xExécuterFonctionPerso(NomFonction)

Ajout d'un élément variable depuis une fonction personnalisée

Pour une fonction personnalisée utilisée en calcul de bulletin (alimentation du nombre, taux, montant ou Avant le calcul, Après le calcul ou Sans autre calcul), il est possible d'ajouter un élément variable. Cet élément sera ajouté comme s'il s'agissait d'un élément automatique, découlant du profil rubrique. Il faut pour cela appeler la fonction xAjouterUnElementVariableAuto. On trouve un exemple d'appel de cette sorte dans la fonction TACTPI utilisée en cas d'activité partielle.

Extrait de cette fonction :

// 1) On génère l'élément variable pour l'allocation activité partielle prise en charge par l'état

//    Si la forme d'aménagement du temps de travail dans le cadre de l'activité partielle

//    n'est pas 02-Autre temps de travail hebdomadaire pour tous les salariés, il faut jouer ici en fonction

//    du code Unité d'expression du temps de travail contractuel (ou d'un autre code distinctif dans la situation du salarié).

NORUap est une chaîne = "4660AU"

SI PEPACT.CUXC = "20" ALORS NORUap="4660FJ" SINON NORUap="4660FH"

xAjouterUnElementVariableAuto(NORUap, ...

               "Alloc act partielle du "+DateVersChaîne(CAELVA.DTDB,"JJ/MM")+" au "+DateVersChaîne(CAELVA.DTFI,"JJ/MM"),...

               CAELVA.NBRE, 0, 0, CAELVA.DTDB, CAELVA.DTFI)

La fonction xAjouterUnElementVariableAuto attend 7 paramètres pour définir parfaitement l'élément variable à ajouter :


Chapitre précédent Chapitre précédent Chapitre parent Chapitre parent Chapitre suivant Chapitre suivant