J'ai bien reçu ton code, je dois encore essayer de le tester et de voir si c'est ça que je cherche.
Ca m'a l'air un peu compliqué, mais je vais m'y ateler. En VBAccess, c'est si simple. Y-aurait-il une faiblesse
dans DOTNET ?
Par rapport à mon problème expliqué de manière plus réelle peut-être peux-tu me dire si ta solution va être applicable ?
Voici encore en simplifié ce que je faisais en access et que je voudrais faire en dot.net.
Il s’agit en fait de calculer quels montants sont dus chaque mois par des clients qui louent un matériel déterminé à partir de la "dateDeb" pour "NbrPer" mois.
Si j’ai une commande qui va entraîner 36 paiements j’aurai dans ma table commande :
ComId=1 ; DateDeb=1/10/2005 ; NbrPer=36 ; Loyer=1000
Je veux en fait me construire un ensemble de donnée (une requête access) qui me dit pour chaque commande la somme due par mois et je décide de me limiter à un tableau de 12 mois :
.............Janvier_06 .........février_06........mars_06.....décembre_06
Com1........1000...............1000................1000...........1000
Com2..............................1000...............1000............1000
Com3........333...................386................333..............333
il affiche également de avril à novembre...
Je dois donc pour la commande1 et janvier 2006, voir si un loyer est du ou pas.
J’obtiens l’info en faisant un test sur les données de ma commande pour janvier 2006.
Je crée donc une mini fonction avec comme paramètres des champs de ma table sauf MyColumnMois qui indique pour quelle période
je désire voir si un loyer est du.
1 2 3 4 5 6 7 8
|
Function Loyer(myComId as long, myDateDeb as date, myNbrPer as integer, myLoyer as double, MyColumnMois as date) as double
If myColumnMois >= myDateDeb and myColumnMois <= dateadd( "month" , myNbrPer,myDateDeb) then
Loyer= myLoyer
else
Loyer=0
end if
end function |
et je crée ma requête SQL access :
Select ComID, Loyer([ComId],[DateDeb],[NbrPer],[Loyer],#1/1/2006#),Loyer([ComId],[DateDeb],[NbrPer],[Loyer],#2/1/2006#)... from CommandeTBL
J'utilise donc 12 fois ma fonction "Loyer" pour les 12 mois de l'année. Il est clair que dans la pratique les dates du 1/1/2006 et suivantes sont variables...
Cette requête me retourne les bonnes valeurs pour mes 3 commandes ci-dessus.
La commande 3 a une valeur différente pour le mois de février car il y a une taxe "spéciale" qui se rajoute tous les mois de février pour ce contrat.
J'ai donc une table taxeTbl qui comprend:
TaxeId= 1 ; TaxeComId=3; moisDeLaTaxe; février; montantTaxe=53
il me suffit de modifier ma fonction Loyer comme suit
'faire un select de ma table TaxeTbl pour la commande en cours (ComId)
'si j'ai un enregistrement, c'est que j'ai une taxe, dès lors je valide que le mois en cours (MyColumnMois) est bien égal au mois pour lequel la taxe doit être appliquée. Si oui: Loyer=loyer + taxe
Ma requête elle reste parfaitement identique et me retourne 12 colonnes et toutes mes commandes.
Je peux "compliquer" ma fonction à souhait car en fait, j'ai trois sortes de taxes, des montants qui sont parfois majorés
pour le premier loyer, des valeurs résiduelles ou pas à la fin des contrats, ...
ce qui explique que je t'avais dit ne pas pouvoir régler ce problème par requête.
Partager