[grisbi-bugs] [Grisbi 0002272]: Etat - impression - calcul de la largeur des colonnes erroné
Grisbi Bug Tracker
bugtracker at grisbi.org
Dim 11 Mai 22:04:15 CEST 2025
The following issue has been RESOLVED.
======================================================================
https://www.grisbi.org/bugsreports/view.php?id=2272
======================================================================
Reported By: pmeig
Assigned To: LudovicRousseau
======================================================================
Project: Grisbi
Issue ID: 2272
Category: Main
Reproducibility: always
Severity: major
Priority: normal
Status: resolved
OS: Tous(All)
Unstable Impact: No
Version OS:
Version GTK:
Resolution: fixed
Fixed in Version: development (git)
======================================================================
Date Submitted: 2023-11-25 13:49 CET
Last Modified: 2025-05-11 22:04 CEST
======================================================================
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...
======================================================================
----------------------------------------------------------------------
(0007217) LudovicRousseau (administrator) - 2025-05-11 22:02
https://www.grisbi.org/bugsreports/view.php?id=2272#c7217
----------------------------------------------------------------------
J'arrive à reproduire le problème avec le code actuel.
Mais j'avoue que je ne comprends pas le code. Pourquoi juste le cas x_dim == 1 ?
Je pense avoir corrigé dans
https://github.com/grisbi/grisbi/commit/7b5175ce19f4780186ac774ff7f510d9f7a31b93
Issue History
Date Modified Username Field Change
======================================================================
2023-11-25 13:49 pmeig New Issue
2023-11-25 13:49 pmeig File Added: ReportBug.gsb
2023-11-25 13:49 pmeig File Added: 2023.11.25-11:47:37
Account_report.pdf
2025-05-11 22:02 LudovicRousseauNote Added: 0007217
2025-05-11 22:04 LudovicRousseauAssigned To => LudovicRousseau
2025-05-11 22:04 LudovicRousseauStatus new => resolved
2025-05-11 22:04 LudovicRousseauResolution open => fixed
2025-05-11 22:04 LudovicRousseauFixed in Version => development (git)
======================================================================
Plus d'informations sur la liste de diffusion bugsreports