Bonjour
Je suis face à un problème que je viens de résoudre via l'utilisation d'un curseur. J'ai d'abord préféré l'éviter mais j'avoue ne pas savoir si cela est possible (via une CTE?).
Voici une situation : j'ai un centre de coût sur lequel je dois fournir l'évolution des dépenses, mois après mois. A priori, c'est simple. Il suffit de prendre le mois de la dépense et de sommer le montant.
Mois N° Dépense Montant
01 11111 10€
02 12121 10€
02 22222 85€
05 22222 60€
Soit 10€ pour Janvier, 95€ pour Février et 60€ pour Mai.
Maintenant, ça se complique : certaines dépenses sont faites dans une devise comme p.e. le dollar. Donc, au moment de prévoir la dépense, il est tenu compte du cours du change à ce moment-là. Et, lors du paiement, p.e. deux mois après, le montant de la dépense est réajusté.
L'exemple devient
Mois N° Dépense Montant Code
01 11111 10€ 01 (<-- dépense en EUR)
02 12121 10€ 01
02 22222 85€ 75 (<-- dépense en USD)
05 22222 60€ 76 (<-- régularisation code 75)
Le record pour le mois de Mai vient donc régulariser le montant de 85€ du mois de Février et l'adapte pour une dépense de 60€.
Ce qui fait que, lors de mon rapport évolutif mensuel, lorsque j'établis mon rapport au mois de Mars, la dépense pour Février est bien de 95€ (étant donné que la régularisation de Mai n'est pas encore introduite dans la DB). En Avril, toujours 95€ pour Février.
En Mai, le montant de 60€ vient régulariser la dépense prévue de 85€. A ce moment, le montant de la dépense pour Février tombe à 10€ tandis que la dépense (réellement payée) pour Mai est de 60€.
Ma solution : j'ai fais un curseur avec un Group By sur le numéro de la dépense et un MAX sur le Mois. Je traite les lignes une à une et si je trouve un code 76, cela signifie obligatoirement que j'ai un code 75 pour un mois précédent celui trouvé. A ce moment, je fais un UPDATE pour montre le montant à 0 pour le record 75.
Voilà, ma solution fonctionne et vu que je n'ai, au plus que quelques centaines de records par CostCenter, la vitesse est tout à fait acceptable.
Comment auriez-vous fait ?









Répondre avec citation
Partager