prog de comptabilite (francais)
Marc SCHAEFER
schaefer at alphanet.ch
Thu May 2 19:48:23 CEST 2002
On Wed, 1 May 2002, Frederic Schutz wrote:
> No Compte Lot Libellé Montant
> 1 1000 1 Paiement Marc pour cours SQl (250.-)
> 2 3000 1 Marc, cours SQL 200.-
> 3 3010 1 Marc, frais déplacement pour cours 50.-
donc, non seulement tu veux que le numéro soit séquentiel sans trou, mais
en plus que tu puisses en allouer N atomiquement (sauf si je mélange deux
numéros: la remarque d'Alex me semble importante). Personnellement,
j'aimais bien l'idée de la table lot qui évitait ce genre de contraintes,
au prix peut-être d'une non adéquation 1-1 avec le modèle papier.
Si tes numéros sont externes (reliés à des numéros papier vérifiables), et
non générés par la base, c'est encore faisable, sinon cela me semble d'une
complexité très importante si l'on veut cacher tout cela.
La seule chose qui me vient à l'idée serait alors le comportement suivant:
le programme utilisateur remplit une table temporaire avec (compte,
libellé, montant) puis une fois terminé appelle une fonction PL/SQL qui:
BEGIN WORK;
- atomiquement alloue les numéros en un seul bloc (adaptation
de la fonction f_ecriture_generate_numero())
- insère toutes ces nouvelles écritures avec leurs numéros et leur
numéro de lot (1er numéro du bloc)
- vérifie la contrainte (ou fait par une règle/trigger, dans ce cas
la transaction doit tourner en mode DEFERRED CONSTRAINTS ou qqch
de ce genre si je me souviens bien).
La contrainte: pour chaque lot, la somme des montants doit
être nul.
COMMIT WORK;
Avantage: le programme utilisateur ne doit pas trop jouer avec tout cela.
Qu'en pensent ceux qui ont de l'expérience pratiques de ce genre de choses ?
Y-a-t-il des idées alternatives ?
More information about the compta
mailing list