|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() ![]() |
Salut
J'ai prix une petite appli de gestion de factures. La facture est créer avec ses détails (lignefacture) et le client est livré (ou nous recevons les produits) et cette facture est ses détails ne sont plus modifiés. A chaque fois que le client se présente pour payer (ou que nous payons chez le fournisseur) une partie de (ou toute) la facture alors la table règlement est mouvementée. L'idée est de faire en sorte que le client ne paye pas plus que ce qu’il nous doit (ou que nous ne payons pas plus que ce qu'on doit au fournisseur). On peut l’assimiler aussi à un prêt bancaire. Il ne faut pas que les remboursements dépassent le capital + l’interêt. Exemple Facture idfacture ! datefacture ! typefacture(vente ou achat) 1! 02/01/2012!vente lignefacture (ou détail facture) idfacture ! produit ! quantite ! prixunitaire 1!CPUI4! 4!30 1!EHP1755!2!45 reglement idfacture ! idreglement ! datereglement ! montantreglement 1!1! 02/01/2012!90 1!2!10/01/2012!70 Nous voyons que la facture N° 1 fait un total de (4*30)+(2*45)=210. Il ne faut pas alors que le total des différents règlements sur cette facture dépasse 210. Cela est il faisable avec un trigger de PL/pgsql?
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 668 ![]() |
Bonjour,
Je mettrai plutôt une contrainte de type CHECK : http://www.postgresql.org/docs/9.1/s...nstraints.html Cette contrainte peut appeler une fonction pl/sql qui elle vérifira ceci. (ceci étant dit un trigger before insert / update pourra aussi le faire) |
|
|
00
|
|
|
#3 | ||
|
Membre chevronné
![]() ![]() |
salut
J'ai déjà fait avec CHECK... Code :
Merci d'avance
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
||
|
00
|
|
|
#4 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 668 ![]() |
Bein avec un trigger, c'est presque pareil sauf qu'il faudra en faire un pour l'insert un autre pour l'update.
Et ils devront être before insert / update. Il faudra par contre gérer manuellement l'exception en appelant un raise exception. Un exemple à adapter : Code :
Code :
|
||||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() ![]() |
Salut
La solution donnée n'est pas adaptable car elle ne prend pas en compte les données en insertion ou en update. De plus avec BEFORE les données OLD et NEW sont vides. Par ailleurs les tables de PostegreSQL n'acceptent pas INSTEAD OF. J'avais poser ma question sur un autre forum sans succès. Je pense que la solution avec les triggers n'est pas encore possible.
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#6 | |||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 668 ![]() |
Bonjour,
Citation:
Citation:
Citation:
Avez-vous au moins testé ? |
|||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() ![]() |
J'ai vraiment essayé. Un lien en mp.
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#8 | ||||||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 668 ![]() |
Oui étrange pourtant Gleu est une personne qui s'y connais plus que moi ...
Ceci étant dit en 9.1 : Code :
Maintenant la fonction trigger + binding : Code :
Code :
Code :
|
||||||||
|
|
10
|
|
|
#9 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 668 ![]() |
Ok, dans le trigger il faut mettre return new et non return null.
Sinon en rajoutant, dans le trigger ce genre de code : Code :
|
||
|
|
10
|
|
|
#10 |
|
Membre chevronné
![]() ![]() |
Merci de cette réponse. Je vais voir tout ça.
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
|
00
|
|
|
#11 | ||||
|
Membre chevronné
![]() ![]() |
Salut et très grand merci pour la solution
.Sur insert: Code :
Code :
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard… |
||||
|
00
|
Copyright © 2000-2012 - www.developpez.com