Prélèvement automatique des prêts sur salaires
Résoluyg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
J'ai une base de donnée qui gère la paie et je souhaiterais que le prélèvement des échéances de remboursement des prêts octroyés au travailleurs se fassent automatiquement chaque mois jusqu'à l’apurement de la dette .
est il possible de le faire ?
Si oui jai vraiment besoin d'aide
merci d'avance
6 réponses
La problématique porte sur la mise en place d'un prélèvement automatique mensuel des échéances de remboursement des prêts directement sur les paies, jusqu'à l'apurement total, via une base de données paie. Des ajustements préconisés incluent la correction de la requête de paie et prêt, l'ajout des dates de début et fin de remboursement, et des jointures plus précises pour éviter les doublons. En cas de prêt multiple ou de plusieurs paies, la logique nécessite le regroupement correct des champs et l'explication du modèle pour vérifier que les mensualités ne sont pas imputées deux fois. D'autre part, le concept de DATEREMBOURSEMENT et son rôle, ainsi que la précision sur le décompte mensuel, doivent être clarifiés pour éviter des interprétations erronées.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
le point de départ, c'est de structurer correctement les tables. -
ok ; je suis partant pour cette date et on fera la paie au mois le mois enfin de prévoir les changements
je m'excuse ; je reviens sur nombre_jour; c'est le nombre de jour effectué par le travailleur dans le mois ; il permet de calculer le salaire de base du travailleur -
voici le code de la requete qui affiche les salaires:
SELECT PAIE.NUMERO_BULLETIN, PAIE.Date, PAIE.CODE_EMPLOYE, EMPLOYE.NOM_EMPLOYE, EMPLOYE.TAUX_TRANSPORT, EMPLOYE.NUMERO_CNPS, EMPLOYE.PRENOM_EMPLOYE, EMPLOYE.TAUX_TRANSPORT, EMPLOYE.TITRE, EMPLOYE.ADRESSE, EMPLOYE.EMPLOI_OCCUPE, EMPLOYE.ID_SERVICE, SERVICE.DESIGNATION_SRVICE, EMPLOYE.ETABLISSEMENT_BANCAIRE, EMPLOYE.NUMERO_COMPTE_BANCAIRE, EMPLOYE.ID_CATEGORIE, CATEGORIE.LIBELLE_CATEGORIE, CATEGORIE.TAUX_CATEGORIEL, PAIE.NOMBRE_JOUR, PAIE.SURSALAIRE, [NOMBRE_JOUR]*[TAUX_TRANSPORT] AS TRANSPORT, PAIE.AUTRES_INDEMNITES, PAIE.CONGES, PAIE.[PRIME_D'ANCIENNETE], [NOMBRE_JOUR]*[TAUX_CATEGORIEL] AS [SALAIRE CATEGORIEL], [SALAIRE CATEGORIEL]*0.012 AS ITS, PRET.MONTANT_PRET, PAIE.GRATIFICATION, PRET.NOMBRE_ECHEANCE, [MONTANT_PRET]/[NOMBRE_ECHEANCE] AS MENSUALITE, [SALAIRE CATEGORIEL]+[CONGES]+[PRIME_D'ANCIENNETE]+[SURSALAIRE]+[GRATIFICATION] AS [SALAIRE BRUT], [SALAIRE BRUT]-[ITS] AS [SALAIRE NET], [SALAIRE NET]+[TRANSPORT]-[MENSUALITE] AS [NET A PAYER], EMPLOYE.VILLE, [DATE_DEBUT_REMBOURSEMENT]+[NOMBRE_ECHEANCE]*30 AS [DATE FIN REMBOURSEMENT]
FROM SERVICE INNER JOIN (((CATEGORIE INNER JOIN EMPLOYE ON CATEGORIE.ID_CATEGORIE = EMPLOYE.ID_CATEGORIE) INNER JOIN PAIE ON EMPLOYE.CODE_EMPLOYE = PAIE.CODE_EMPLOYE) INNER JOIN PRET ON EMPLOYE.CODE_EMPLOYE = PRET.CODE_EMPLOYE) ON SERVICE.ID_SERVICE = EMPLOYE.ID_SERVICE;
elle ne permet aussi de saisir le bulletin ; elle n’affiche que des informations -
Je pense que j'ai trouvé la solution à ma requête, en fait j'avais mis dans ma requête les tables PAIE et PRÊT et EMPLOYE dans la même requête croyant pouvoir saisie en même temps la paie et les prêts, mais j'ai créé maintenant deux requêtes séparément et les deux fonctionnent très bien
Ce qui reste à présent, c'est de faire apparaître la ligne de la mensualité prélevée dans le bulletin de paie -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
Je n'ai pas été assez précis: c'est la déduction de la retenue pour l'emprunt qui doit se faire dans la quatrième requête plutôt que dans REQ_PAIE_PRET.
Tous les autres calculs peuvent rester dans REQ_PAIE_PRET. -
Je pense que les résultats sont bons maintenant; le seul problème c’est que quand il n'existe pas de prêt pour un employé la valeur du net a payer est null ; je souhaiterais avoir 0 dans le champ retenu pret pour que le net a payer ait une valeur sinon tout marche bien
SELECT REQ_PAIE_PRET.NUMERO_BULLETIN, REQ_PAIE_PRET.CODE_EMPLOYE, REQ_PAIE_PRET.NOM_EMPLOYE, REQ_PAIE_PRET.PRENOM_EMPLOYE, REQ_PAIE_PRET.GRATIFICATION, REQ_PAIE_PRET.CONGES, REQ_PAIE_PRET.NOMBRE_JOUR, REQ_PAIE_PRET.[SALAIRE BRUT], REQ_PAIE_PRET.ITS, REQ_PAIE_PRET.[SALAIRE NET], REQ_PAIE_PRET.[RETENUE PRET], REQ_PAIE_PRET.TRANSPORT, ([SALAIRE NET]+[TRANSPORT]-[RETENUE PRET]) AS [NET A PAYER]
FROM REQ_PAIE_PRET
GROUP BY REQ_PAIE_PRET.NUMERO_BULLETIN, REQ_PAIE_PRET.CODE_EMPLOYE, REQ_PAIE_PRET.NOM_EMPLOYE, REQ_PAIE_PRET.PRENOM_EMPLOYE, REQ_PAIE_PRET.GRATIFICATION, REQ_PAIE_PRET.CONGES, REQ_PAIE_PRET.NOMBRE_JOUR, REQ_PAIE_PRET.[SALAIRE BRUT], REQ_PAIE_PRET.ITS, REQ_PAIE_PRET.[SALAIRE NET], REQ_PAIE_PRET.[RETENUE PRET], REQ_PAIE_PRET.TRANSPORT, ([SALAIRE NET]+[TRANSPORT]-[RETENUE PRET]);-
Le plus propre est d'adapter la requête REQ_PAIE_PRET. Je suppose que tu as modifié la jointure, comme suggéré en #92 (LEFT JOIN au lieu de INNER JOIN), mais je n'ai pas vu la requête modifiée.
Dans cette requête, il faut utiliser nz() pour renvoyer 0 au lieu de null pour le champ correspondant à la retenue (quand il n'y a pas de prêt). -
voici la requete REQ_PAIE_PRET avec laquelle je n'arrive toujours pas a obtenir les regroupement:
SELECT REQ_PAIE.NUMERO_BULLETIN, REQ_PAIE.Date, REQ_PAIE.NOMBRE_JOUR, REQ_PAIE.CODE_EMPLOYE, REQ_PAIE.NOM_EMPLOYE, REQ_PAIE.GRATIFICATION, REQ_PAIE.PRENOM_EMPLOYE, REQ_PAIE.[SALAIRE BRUT], REQ_PAIE.TRANSPORT, REQ_PAIE.CONGES, REQ_PAIE.ITS, ([SALAIRE BRUT]-[ITS]) AS [SALAIRE NET], Sum(Nz([MENSUALITE RETENUE PRET],0)) AS [RETENUE PRET]
FROM REQ_PRET RIGHT JOIN REQ_PAIE ON REQ_PRET.CODE_EMPLOYE = REQ_PAIE.CODE_EMPLOYE
GROUP BY REQ_PAIE.NUMERO_BULLETIN, REQ_PAIE.Date, REQ_PAIE.NOMBRE_JOUR, REQ_PAIE.CODE_EMPLOYE, REQ_PAIE.NOM_EMPLOYE, REQ_PAIE.GRATIFICATION, REQ_PAIE.PRENOM_EMPLOYE, REQ_PAIE.[SALAIRE BRUT], REQ_PAIE.TRANSPORT, REQ_PAIE.CONGES, REQ_PAIE.ITS, ([SALAIRE BRUT]-[ITS]);
mais avec la requete SALAIRE obtenue avec la requete REQ_PAIE_PRET j'ai mes résultats
voic les instructions SQL
SELECT REQ_PAIE_PRET.NUMERO_BULLETIN, REQ_PAIE_PRET.CODE_EMPLOYE, REQ_PAIE_PRET.NOM_EMPLOYE, REQ_PAIE_PRET.PRENOM_EMPLOYE, REQ_PAIE_PRET.GRATIFICATION, REQ_PAIE_PRET.CONGES, REQ_PAIE_PRET.NOMBRE_JOUR, REQ_PAIE_PRET.[SALAIRE BRUT], REQ_PAIE_PRET.ITS, REQ_PAIE_PRET.[SALAIRE NET], Nz([RETENUE PRET],0) AS PRET, REQ_PAIE_PRET.TRANSPORT, Nz(([SALAIRE NET]+[TRANSPORT]-Nz([RETENUE PRET],0)),0) AS [NET A PAYER]
FROM REQ_PAIE_PRET
GROUP BY REQ_PAIE_PRET.NUMERO_BULLETIN, REQ_PAIE_PRET.CODE_EMPLOYE, REQ_PAIE_PRET.NOM_EMPLOYE, REQ_PAIE_PRET.PRENOM_EMPLOYE, REQ_PAIE_PRET.GRATIFICATION, REQ_PAIE_PRET.CONGES, REQ_PAIE_PRET.NOMBRE_JOUR, REQ_PAIE_PRET.[SALAIRE BRUT], REQ_PAIE_PRET.ITS, REQ_PAIE_PRET.[SALAIRE NET], Nz([RETENUE PRET],0), REQ_PAIE_PRET.TRANSPORT, Nz(([SALAIRE NET]+[TRANSPORT]-Nz([RETENUE PRET],0)),0); -
REQ_PAIE_PRET me semble correcte, elle donne plusieurs lignes quand il y a plusieurs prêts?
moi j'y feraisnz(Sum([MENSUALITE RETENUE PRET])) AS [RETENUE PRET]
, ce qui permettrait de retirer les nz') de la requête SALAIRE.
Je pense que tout le GROUP BY est inutile dans la requête SALAIRE, dan laquelle il n'y a aucune fonction d'agrégation (comme sum()). -
Effectivement la requete; REQ_PAIE_PRET donne ceci et me semble correcte ;elle ne donne plus plusieurs ligne quand il y a plusieurs prêts ; dans ce cas pourquoi avons nous fait la requete SALAIRE ; je ne vois pas son utilité ; essayez de m'expliquer
la voici
SELECT REQ_PAIE.NUMERO_BULLETIN, REQ_PAIE.Date, REQ_PAIE.NOMBRE_JOUR, REQ_PAIE.CODE_EMPLOYE, REQ_PAIE.NOM_EMPLOYE, REQ_PAIE.GRATIFICATION, REQ_PAIE.PRENOM_EMPLOYE, REQ_PAIE.[SALAIRE BRUT], REQ_PAIE.TRANSPORT, REQ_PAIE.CONGES, REQ_PAIE.ITS, ([SALAIRE BRUT]-[ITS]) AS [SALAIRE NET], Round(Nz(Sum([MENSUALITE RETENUE PRET]),0),0) AS [RETENUE PRET], Round([SALAIRE BRUT]-[ITS]+[TRANSPORT]-Nz(Sum([MENSUALITE RETENUE PRET]),0),0) AS [NET A PAYER]
FROM REQ_PRET RIGHT JOIN REQ_PAIE ON REQ_PRET.CODE_EMPLOYE = REQ_PAIE.CODE_EMPLOYE
GROUP BY REQ_PAIE.NUMERO_BULLETIN, REQ_PAIE.Date, REQ_PAIE.NOMBRE_JOUR, REQ_PAIE.CODE_EMPLOYE, REQ_PAIE.NOM_EMPLOYE, REQ_PAIE.GRATIFICATION, REQ_PAIE.PRENOM_EMPLOYE, REQ_PAIE.[SALAIRE BRUT], REQ_PAIE.TRANSPORT, REQ_PAIE.CONGES, REQ_PAIE.ITS, ([SALAIRE BRUT]-[ITS]); -
-
