Gestion des rapports - Excel
Le module complémentaire « Rapport Excel » offre la possibilité de créer et de générer des rapports au format XLSX. Il existe au téléchargement du module plus de 15 rapports XLSX déjà paramétrés. Il est possible d’en créer de nouveaux ou de les modifier si besoin.
Il y a donc 2 manières d’éditer des rapports après l’installation : soit par Jasper, soit par Excel.
Il n'y a pas de règle fixe et tout dépend des besoins/ressources des clients et du projet mais globalement une des bonnes pratiques est la suivante :
- Utiliser les rapports Jasper pour les documents standards (déjà paramétrés, juste à personnaliser). Cela permet d'avoir de "beaux" documents pour être envoyés à l'extérieur de l'entreprise.
- Utiliser les rapports Excel pour créer des rapports de toute pièce, pour des besoins spécifiques qui ne se rapprochent pas de ceux du standard. Ils sont plutôt destinés à un usage en interne ou alors à un usage externe si le besoin est d'obtenir un export au format modifiable (XLSX).
Prérequis
Les rapports fonctionnent avec des polices du pack freefont. Il faut donc impérativement installer le pack sur le serveur OpenProd avec la commande suivante : sudo apt install fonts-freefont-ttf
Il faut également installer la police "code128.ttf" qui permettra l'impression des codes barre (notamment pour les rapports étiquette).
Ajouts du module
Il y a deux modules à installer :
-
Le module "Rapport Excel" ajoute :
-
Un menu « Rapport Excel » dans Configuration > Rapport. Ce menu se compose de 2 sous menu :
-
« Rapport » qui renvoie vers la vue liste des rapports déjà créés dans le système
-
« Configuration » qui présente un ou plusieurs enregistrements de configuration : Un enregistrement est constitué à partir d’un utilisateur et d’un mot de passe. Il permet de faire des requêtes sur la bdd.
-
Le module "Excel report import" importe une liste de rapports déjà paramétrés : confirmation de vente, confirmation d'achat, facture, bon de livraison avec/sans prix, bon de réception, ordre de travail, sortie matière, fiche de non-conformité, fiche de contrôle, balance agée, grand livre et étiquette.
Utilisation du module
Afin de pouvoir utiliser les rapports, nous allons détailler ici les paramétrages. On se place dans la vue formulaire d’un rapport.
1) L'en-tête
-
Nom : Nom du rapport (qui est aussi le nom de l'action).
-
Nom du fichier : C'est le nom que portera le rapport quand il sera téléchargé.
On peut utiliser une expression Python afin d’adapter le nom du rapport. Exemple : « "BL "+object.name+"_"+time.strftime('%d-%m-%Y')» donnera BL OUT/00002_12-05-2021
-
Langue : Langue du rapport
On peut utiliser une expression Python : ‘object.partner_id.lang’
-
Le Mode de génération permet de choisir la manière dont on téléchargera les rapports si on sélectionne plusieurs enregistrements :
-
-
Un fichier par enregistrement : Un .zip contenant autant de fichiers que d'enregistrements est téléchargé.
-
Réexecuter le rapport dans la même feuille : Les rapports sont générés les uns après les autres, « collés » à la suite dans un seul fichier XLSX, un seul onglet (Pas optimisé et pas vraiment utilisable si on utilise des sous rapports).
-
Réexecuter le rapport dans une nouvelle feuille dans le même fichier : Tous les rapports sont contenus dans un unique fichier avec une feuille par enregistrement (Optimisé pour la gestion en masse des rapports).
-
Un fichier pour tous les enregistrements : Convient pour les rapport qui ne contiennent qu'une liste, par exemple : les sorties matière : Les listes des différents rapports sont mises à la suite mais les autres champs ne seront pas dupliqués, juste écrasés.
-
Le modèle correspond à l’objet auquel s’applique le rapports. C'est dans cet objet qu'on retrouvera la possibilité d'imprimer si un menu est créé.
-
L’extension permet de choisir le type de fichier de sortie (XLSX ou PDF).
-
L’ajustement automatique à la hauteur permet d'ajuster la hauteur des cellules à la fin de l’exécution du rapport. Cela revient à double cliquer, comme on peut faire manuellement (cf exemple à droite), entre deux lignes pour ajuster la hauteur au contenu des cellules de la ligne. Cocher cette case déclenche une fonction Python, ce qui peut, peut-être, être l'origine de temps de génération un peu long.
2) Onglet Section
Les sections du rapport contiennent les requêtes et le traitement des données.
-
Nom de la section
-
Nom de la feuille dans le fichier XLSX dans laquelle on insère la section.
-
Type d'insertion des données de la section :
-
Simple (Utilisé pour les requêtes à une ligne de sortie) : On va insérer les données en précisant pour chaque donnée la cellule ou l'insérer.
-
Liste (Utilisé pour les requêtes avec plusieurs lignes de sortie) : On va insérer les données en précisant une colonne du fichier dans laquelle insérer.
-
Ignorer la disposition : En cas de grosse volumétrie, il est important de cocher cette case pour améliorer les performances. Le mise en forme ne sera pas prise en compte sauf si elle est appliquée à la colonne entière (Exemple : dans le Template du rapport, si on a défini les cellules A2 et B2 comme texte centré alors cela ne sera pas pris en compte. En revanche, si toute la colonne A et B sont paramétrées avec texte centré alors ce sera appliqué).
Une fois l'entête remplie, il faut insérer la requête SQL dans l'onglet Requête pour récupérer les données. Une fois la requête remplie, l'action Générer les champs remonte automatiquement tous les champs trouvés dans la requête.
Si le bouton est grisé, il faut d'abord sauvegarder puis générer.
Tout est pré-rempli automatiquement. On peut alors indiquer champ par champ le type de la cible (cellule, entête, pied de page), l’alignement voulu (gauche, centré, droite), la colonne et le type (texte, image ou code barre).
3) Onglet Paramètres
On retrouve dans cet onglet les paramètres spécifiques du rapport, c'est à dire les informations que l'on peut demander à l'utilisateur à l’exécution du rapport. Ces paramètres sont facultatifs.
Il sont utilisés dans la requête SQL du rapport.
-
Le code du paramètre correspond au code utilisé dans la requête.
-
Le libellé correspond au libellé du code. Il sera affiché dans le wizard où l'on demande le renseignement des valeurs.
-
La séquence définit l'ordre d'affichage dans le wizard.
-
Le champ à cocher requis permet de bloquer le lancement du rapport si le paramètre n'est pas renseigné.
-
Le type de paramètre : il peut être entier, décimal, char, sélection, booléen, date, datetime, many2one ou many2many.
-
Si le type selection est choisi : un encadré pour renseigner les choix apparaît (cf illustration à droite).
-
La clé est la valeur que prend le paramètre dans la requête SQL
-
Le nom est celui qui sera affiché dans le wizard ou les valeurs seront proposées.
-
Si le type many2one ou many2many est choisi : Il faut renseigner le modèle par le nom technique ou par le libellé.
Quand au moins un paramètre est renseigné, une case à cocher Générer une vue automatiquement apparaît. Si elle est cochée, on utilise la vue par défaut. Sinon, l'action Réinitialiser avec la vue automatiquement génère le code XML de la vue par défaut dans l'encadré Vue et on peut directement l'éditer.
Exemple d’utilisation de paramètre dans une requête : SELECT name FROM res_partner WHERE id=%(client)s
Client est le nom du paramètre qui est de type many2one en relation avec la table des res_partner
4) Onglet Sous-rapports
On retrouve la vue liste des autres rapports utilisés dans ce rapport.
Pour les paramétrer il faut renseigner :
-
Le nom de la feuille du rapport dans laquelle le sous rapport est inséré.
-
Le type d'insertion :
-
Avant le parent : On insère le sous rapport en première ligne dans le rapport courant (Dans l'exemple ci-dessus : Informations et logo de notre société dans Header company). Le sous rapport pouvant lui même être composé de plusieurs lignes, cela décalera (vers le bas) l'emplacement du rapport courant.
-
Après le parent : On insère le sous rapport en dernière ligne du rapport courant (Dans l'exemple ci-dessus : Footer sale order).
Contrairement à Jasper, un sous rapport Excel prend forcément toute la largeur du rapport initial puisque cela correspond à ajouter des lignes.
-
Le sous-rapport à insérer : l'enfant.
-
Le nom de la feuille du sous rapport c'est à dire le nom de la feuille Excel dans le template du sous rapport dans laquelle se trouve le sous rapport que l'on veut insérer.
5) Onglet Rapports parents
On retrouve la liste des rapports qui utilisent ce rapport. Elles s’incrémentent automatiquement.
6) Onglet Document modèle
C'est dans cette liste qu'on ajoute les templates du rapport. Il peut y en avoir plusieurs car on peut associer au document une langue (optionnel), et donc venir chercher le bon template en fonction de la langue définie dans l'en tête.
Le template est forcément un document qui est stocké dans Open-Prod.
La réalisation du template est importante pour la mise en forme et le rendu du rapport. C'est dans ce template qu'il faut gérer la largeur des colonnes pour obtenir le bon format à l'impression (A4 dans l'exemple ici). Utilisez la fonctionnalité excel pour afficher la délimitation des pages en pointillé.
Même si il existe une fonction d'ajustement automatique à la hauteur (cf En tête), la définition de la hauteur des lignes et la fusion de cellules permet d'obtenir un rapport plus "joli" et lisible.
De nombreuses fonctionnalités d'excel sont disponibles et peuvent être paramétrées directement dans le document modèle. Ainsi il est possible de définir des formules, des formatages conditionnels, etc...
7) Onglet Images
Cet onglet référence toutes les images à insérer dans le rapport. Les images sont forcément stockées dans Open-Prod.
Cette manière d'insérer les images n'est pas la plus judicieuse : en effet elle était utilisée avant mais maintenant il est préférable de :
- Si c'est une image statique (Exemple : logo de la société), commune à toutes les impressions du rapport, placer l'image directement dans le template : cela permet de dimensionner et positionner facilement.
- Si l'image est propre à l'enregistrement (Exemple : Photo d'un colis avant envoi sur un BL) il faut appeler l'image dans la requête SQL (puisqu'elle est stockée dans Open-Prod). Au moment de la génération des champs, un champ de type Image sera importé et on pourra lui indiquer la cellule. L'image sera automatiquement redimensionnée au format de la cellule pour ne pas dépasser.
Néanmoins, via cet onglet, quand on ajoute une image il faut indiquer le nom de la feuille du template dans laquelle l'image doit d'insérer et la cellule. L'image va s'insérer telle quelle c'est à dire qu'elle ne sera pas redimensionnée. Il est fort probable que l'image déborde.
Paramétrées par cet onglet, les images ne sont pas prises en compte dans les sous rapports : Si une image est ajoutée pour ce rapport, et que celui ci est utilisé dans un autre rapport en tant que sous-rapport, alors l'image ne sera pas propagée.
8) Onglet Conditions
On peut définir des actions qui seront exécutées (selon les conditions associées) à la fin de la génération du rapport. Elles permettent d'améliorer la mise en forme du rapport.
Pour ajouter une condition il faut :
-
Le nom de la feuille dans laquelle exécuter l'action.
-
L'action à exécuter :
-
Supprimer une ligne
-
Supprimer une colonne
-
Supprimer une cellule : Supprimer son contenu s'il y en a et toute la mise en forme (couleur de fond, bordure, ...)
-
La condition pour exécuter l'action :
-
Si est vide : Si la cible est vide.
-
Si le paramètre est vrai : Si un paramètre booléen du rapport que l'on précise (dans la colonne qui apparaît à droite de la condition) est renseigné comme vrai.
-
Si la cellule est vide : Si la cellule que l'on précise (dans la colonne qui apparaît à droite de la condition) est vide.
9) Onglet Action
-
Si une action d'impression a été générée (via les boutons à gauche), elle est renseignée dans le champ Action du rapport. Générer une action est nécessaire si on veut ensuite appeler le mail dans un modèle de mail.
-
Si un menu a été généré (via les boutons à gauche), il est renseigné dans le champ Menu.
-
S'il y a au moins une action ou un menu de généré, et que le rapport nécessite le renseignement de paramètres (cf onglet Paramètres) alors le lien vers l'assistant d'action, c'est à dire le wizard, est dans le champ Assistant action.
10) Les boutons Actions
Une fois le rapport passé en Actif, plusieurs actions sont disponibles :
-
Exécuter : Lance une exécution du rapport sans paramètre, sans enregistrement d'entrée.
Certains rapports, typiquement pour du reporting, peuvent ne prendre aucun enregistrement d'entrée, les paramètres étant déjà indiqués dans la requête SQL.
-
Créer une action : Une action d'impression est alors disponible pour ce rapport dans l'objet précisé dans le champ Modèle dans l'en tête. Pour différencier des rapport Jasper, les actions d'impression de rapport Excel commencent par "Rapport XLSX".
-
Créer un menu : On choisit alors le nom du menu, le menu parent et la séquence.
L'action est utilisée lorsque le rapport porte sur un enregistrement et récupère les données de celui-ci. Le menu est utilisé pour les rapports où tout est déjà dans la requête.
Question fréquente : Comment importer des valeurs de la requête dans une phrase du modèle Excel (Exemple : Le prix total de la commande est de {Valeur de la requête}) ?
La solution est d'exporter la valeur de la requête dans une cellule cachée et ensuite d'appeler cette cellule par une formule dans le rapport Excel.