[grisbi-bugs] [Grisbi 0002272]: Etat - impression - calcul de la largeur des colonnes erroné

Grisbi Bug Tracker bugtracker at grisbi.org
Sam 25 Nov 13:49:55 CET 2023


The following issue has been SUBMITTED. 
====================================================================== 
https://www.grisbi.org/bugsreports/view.php?id=2272 
====================================================================== 
Reported By:                pmeig
Assigned To:                
====================================================================== 
Project:                    Grisbi
Issue ID:                   2272
Category:                   Main
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     new
OS:                         Tous(All) 
Unstable Impact:            No 
Version OS:                  
Version GTK:                 
====================================================================== 
Date Submitted:             2023-11-25 12:49 UTC
Last Modified:              2023-11-25 12:49 UTC
====================================================================== 
Summary:                    Etat - impression - calcul de la largeur des
colonnes erroné
Description: 
Lorsque je veux faire un état des plus simples donnant l'état actuel des
comptes, la première colonne qui devrait donner le nom du compte est remplacée
par '...' comme le montre le fichier '2023.11.25-11:47:37 Account_report.pdf'
généré par le fichier 'ReportBug.gsb' contenant un simple example avec deux
comptes et un état.
Définition de l'état:
- Total jusqu'à maintenant
- Tous les comptes, tous les tiers, toutes les catégories, etc.
- Groupement par compte uniquement
- Pas de séparation revenus / dépenses
- Affichage des nom de compte avec un sous-total par compte
- Pas d'affichage des transactions.

Le comportement est le même pour les versions 2.0.5 et 3.0.0


Steps to Reproduce: 
Imprimer (ou créer un fichier pdf) le rapport "Accout report" du fichier Grisbi
'ReportBug.gsb' annexé.

Additional Information: 
Une séance de debug m'a montré que dans ce cas, le calcul de la largeur des
colonnes (fonction print_report_init_columns_width du fichier print_report.c) ne
se faisait pas correctement parce que la variable d'état x_dim associée au
widget label contenant le nom du compte ne vaut jamais 1.
Plus précisément Mes recherches m'ont conduit à déduire le fonctionnement
suivant (les numéros de ligne correspondent à la version 3.0.0):
1. Dans la très très (trop ?) longue fonction etape_finale_affichage_etat du
fichier etats_calculs.c, le nombre de colonne de l'état est initialisé à la
valeur 3 (ligne 1414), l'état n'affichant pas les transactions.
2. Un peu plus loin dans la même fonction etape_finale_affichage_etat du
fichier etats_calculs.c (ligne 1577), la fonction
etat_affiche_affiche_compte_etat est appelée pour créer le widget label qui
contiendra le nom du compte. Dans cette fonction
etat_affiche_affiche_compte_etat du fichier etats_affiche.c, on appelle (ligne
2806) la fonction etat_affiche_attach_label avec les paramètres x = 0 et x2 =
nb_colonnes-1, donc x2 vaut 2 dans notre cas.
3. Ces paramètres arrivent finalement à la fonction gtktable_attach_label du
fichier etats_gtktable.c qui va créer le widget label et lui associé la
variable d'état x_dim avec la valeur 2 (x2 -x).

Puisqu'aucune ligne de l'état ne contient d'autres colonnes ou d'autres
informations, aucune colonne dans ce cas n'a une valeur x_dim à 1 et donc, la
largeur des colonne n'est jamais correctement initialisée dans la fonction
print_report_init_columns_width du fichier print_report.c.

Après quelques tâtonnements, j'ai modifié la condition d'initialisation de la
la largeur des colonnes dans la fonction print_report_init_columns_width du
fichier print_report.c de la façon suivant:
À la place de :
					if (x_dim == 1)
j'ai mis:
					const gchar *label_text = gtk_label_get_text(GTK_LABEL(child));
					if (*label_text && (x_dim == 1 || (i == 0 && x_dim == 2 && nb_colonnes ==
3)))

Cette modification convient pour tout les états qui m'intéressent, mais comme
elle est le résultat d'un tâtonnement et non d'une réflexion conceptuelle, je
ne suis pas persuadée qu'elle soit pertinente dans tous les cas... bien que la
condition (i == 0 && x_dim == 2 && nb_colonnes == 3) correspond bien à l'idée
: seule colonne de la ligne (i=0) et pas de transaction affichée (nb_colonnes =
3). J'ai dû ajouter la condition la condition sur le contenu du texte pour un
autre état dans lequel une chaîne vide ('') était ajoutée par Grisbi et qui
faussait le calcul dans ce cas...

====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2023-11-25 12:49 pmeig          New Issue                                    
2023-11-25 12:49 pmeig          File Added: ReportBug.gsb                    
2023-11-25 12:49 pmeig          File Added: 2023.11.25-11:47:37
Account_report.pdf                    
======================================================================



Plus d'informations sur la liste de diffusion bugsreports