Les états - partie 2

30/03/2013 09:25

Dans le premier article concernant les états j'ai exposé l'exemple simple d'une liste des factures avec une rupture par client.

 

Bien entendu l'utilisateur ne souhaite pas en rester là : il veut afficher en face de chaque ligne de facture le pourcentage de la facture par rapport au total.

 

J'ai souvent rencontré ce cas, c'est à dire qu'un état simple fonctionnant parfaitement a besoin d'être complètement revu suite à une demande d'amélioration, aussi infime soit elle. On peut en arriver à des dialogues du genre : "Comment ça, il te faut 6 heures pour ajouter ce petit machin ? On marche sur la tête !"

 

Dans cet exemple les difficultés sont les suivantes :

  • Au moment où on veut faire le ratio (Pourcentage = Montant fact / Total * 100) on n'a pas encore Total puisqu'il va se calculer en fin de rupture.
  • Quand bien même on aurait ce total il se peut que la somme des pourcentages ne fasse pas 100, le mode de calcul ligne à ligne avec arrondis ne permettant pas de garantir que la somme de ces pourcentages fasse 100.

 

Il y a donc tout un traitement à faire sur un jeu d'enregistrements ... ce que l'éditeur d'état Windev ne permet pas de faire.

 

On n'a pas le moyen de récupérer ce qui a déjà été édité, on n'a pas moyen de deviner ce qui va être édité et on a encore moins la possibilité d'aller modifier ce qui a déjà été édité ! D'où le besoin de faire des traitements "en parallèle" ... qui aboutissent souvent à des usines à gaz.

 

Solution en modifiant l'état existant :

 

Il faut donc faire un pré-taitement dans le haut de la rupture.

  • On va calculer le cumul pour les factures d'un client, ainsi on pourra déterminer le pourcentage de chaque facture dans le corps de l'état.
  • On va ensuite déterminer s'il existe une différence entre la somme des pourcentages arondis à 2 décimales et 100%. Dans cet exemple la différence sera affectée sur la première des factures. Bien entendu j'ai testé avec des données permettant de simuler cet écart.

 

 

Ensuite il faut calculer le pourcentage dans le corps de l'état. L'écart sera affecté sur la première ligne de facture. La variable bPremier permet de gérer cette affectation.

 

 

Et voici le résultat :

 

 

Ce cas n'est pas très compliqué mais imaginons que cette problématique se rencontre dans N cas sur un état.

On va alors se retrouver avec du code dispersé un peu partout : et je te mets un flag, et je te fais un cumul, et je te recalcule ci en sortie de tel bloc, etc...

 

Ayant travaillé sur des formulaires administratifs modèles 1963 révisés 1972 et prévus pour être remplis à la main je sais de quoi je parle :-)

 

A suivre ...