Rapports PDF

Avec Studio, vous pouvez modifier les rapports PDF existants (par exemple, factures, devis, etc.) ou créer de nouveaux rapports.

Présentation par défaut

La mise en page par défaut des rapports est gérée en dehors de Studio. Aller à Paramètres, puis, dans la section Sociétés de la page principale, cliquer sur Configurer la mise en page du document. Les paramètres de mise en page sont spécifiques à la société mais s’appliquent à tous les rapports.

Astuce

Voir comment les différents paramètres affectent la mise en page du rapport dans l’aperçu du rapport sur le côté droit de la fenêtre Configurer la mise en page de votre document. Lors de la création ou de la modification d’un rapport, voir un aperçu du rapport en cliquant sur Aperçu avant impression sur le côté gauche de l’écran.

Utiliser les paramètres suivants :

  • Mise en page : sept mises en page sont disponibles :

    Exemple d'une mise en page légère du rapport
  • Arrière-plan : les arrière-plans suivants sont disponibles :

    • Vierge : rien n’est affiché.

    • Logo de démonstration : un logo de démonstration est affiché en arrière-plan.

    • Personnalisé : télécharger une image d’arrière-plan personnalisée.

  • Texte : huit polices sont disponibles : Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal (qui prend en charge les scripts arabe et latin) et Fira Mono. Aller sur le site Web Google Fonts pour les prévisualiser.

  • Couleurs : modifier les couleurs primaire et secondaire utilisées pour structurer les rapports. Les couleurs par défaut sont automatiquement générées en fonction des couleurs du logo.

  • Adresse : le nom et l’adresse de la société sont affichés dans l’en-tête des rapports externes. Ajouter plusieurs lignes de texte.

  • Slogan : affiché dans l’en-tête des rapports externes utilisant les mises en page Léger, Rayé, Bulle, Vague et Dossier, et dans le pied de page des rapports externes utilisant les mises en page Encadré et Gras. Ajouter plusieurs lignes de texte.

  • Format du papier : définit la taille de papier par défaut des rapports. Sélectionner A4 (21 cm x 29,7 cm) et Lettre US (21,59 cm x 27,54 cm). Cela peut également être défini pour des rapports individuels dans le champ Format du papier dans Studio.

    Note

    D’autres formats de papier peuvent être disponibles selon les applications ou modules installés, par exemple, des feuilles d’étiquettes pour l’application Inventaire ou des badges d’événement pour l’application Événements.

Créer de nouveaux rapports PDF

Pour créer un nouveau rapport pour un modèle, (par ex., bons de commande) accédez au modèle, cliquez sur le bouton (Basculer vers Studio), puis cliquez sur Rapports. Cliquez sur Nouveau et, dans la fenêtre contextuelle qui s’ouvre, sélectionnez le type de rapport. Ceci sert uniquement à déterminer ce qui est affiché dans l’en-tête et le pied de page :

Une fois le rapport créé, vous pouvez commencer à le modifier.

Modifier des rapports PDF

Pour accéder aux rapports disponibles pour un modèle, accédez au modèle, cliquez sur le bouton (Basculer vers Studio), puis cliquez sur Rapports. Sélectionnez un rapport existant pour l’ouvrir.

Vous pouvez également ouvrir Studio, cliquer sur Rapports et rechercher un rapport ou un modèle spécifique.

Important

Il est fortement recommandé de dupliquer le rapport standard et d’apporter des modifications dans la version dupliquée. Pour dupliquer un rapport, passez le pointeur de la souris sur le coin supérieur droit du rapport, cliquez sur l’icône (points de suspension verticaux), puis sélectionnez Dupliquer.

Dupliquer un rapport PDF

Options

Une fois le rapport sélectionné ou créé, vous pouvez utiliser les options dans la partie gauche de l’écran pour :

  • Modifier le Nom du rapport : Le nouveau nom est appliqué partout (dans Studio, dans le menu Imprimer sous l’icône (roue dentée) dans la vue formulaire, et dans le nom du fichier PDF).

  • Modifier le Format du papier : Si aucune valeur n’est sélectionnée, le format défini dans la mise en page par défaut est utilisé.

  • Afficher dans le menu d’impression : pour ajouter le rapport au menu Imprimer dans la vue formulaire.

  • Recharger depuis la pièce jointe : pour enregistrer le rapport en tant que pièce jointe sur l’enregistrement la première fois qu’il est généré et recharger la version originale du rapport lors des fois suivantes. Ceci est légalement requis pour les factures et est principalement utilisé dans ce cas.

  • Limiter la visibilité aux groupes : pour limiter la disponibilité du rapport PDF à des groupes d’utilisateurs spécifiques.

  • Modifier les sources : pour modifier le rapport directement dans le fichier XML.

  • Réinitialiser le rapport : pour annuler toutes les modifications apportées au rapport et le réinitialiser à sa version standard.

  • Aperçu avant impression : pour générer et télécharger un aperçu du rapport.

Éditeur de rapport

L’éditeur de rapport permet de modifier le contenu et la mise en forme du rapport.

Astuce

  • Vous pouvez Annuler ou Rétablir des modifications en utilisant les boutons correspondants ou les raccourcis CTRL + Z et CTRL + Y.

  • Les modifications sont enregistrées automatiquement lorsque vous quittez le rapport ou manuellement en utilisant le bouton Enregistrer.

  • Vous pouvez réinitialiser le rapport à sa version standard en cliquant sur le bouton Réinitialiser le rapport dans la partie gauche de l’écran.

Important

Modifier l’en-tête et le pied de page d’un rapport impacte tous les rapports standard et personnalisés.

Blocs conditionnels

Les rectangles en pointillés représentent des blocs conditionnels (instructions if/else). Ils servent à afficher/masquer du contenu selon des conditions spécifiques. Cliquer sur le bloc pour voir les conditions.

Afficher les conditions appliquées à un bloc.

Sélectionner une valeur pour prévisualiser le résultat correspondant et le modifier si nécessaire.

Prévisualiser le résultat d'une autre condition.

Note

Les conditions peuvent uniquement être modifiées dans le XML.

Autre contenu

Il existe deux types de contenu textuel dans les rapports :

  • Le texte statique, c’est-à-dire le texte qui n’est pas surligné en bleu, qui peut être modifié directement dans l’éditeur.

  • Le texte dynamique, c’est-à-dire le texte qui est surligné en bleu, qui est remplacé par les valeurs de champ lorsque le rapport est généré, par exemple le numéro de commande client ou la date de devis.

Vous pouvez ajouter du contenu (par exemple des champs, listes, tableaux, images, bannières, etc.) au rapport en utilisant des commandes. Saisir / pour ouvrir la powerbox, puis saisir le nom de la commande ou la sélectionner dans la liste.

Pour ajouter du texte statique au rapport, saisir le texte à l’emplacement souhaité.

Pour des modifications plus avancées, vous pouvez modifier le rapport directement dans le XML.

Ajouter un champ

Pour ajouter un champ, saisissez / et sélectionnez la commande Champ. Dans la liste qui s’ouvre, sélectionnez ou recherchez le champ ; cliquez sur la flèche droite à côté du nom du champ pour accéder à la liste des champs liés si nécessaire. Indiquez ensuite la valeur par défaut qui sera affichée si le champ n’est pas renseigné dans l’enregistrement et appuyez sur Entrée.

Choisissez un champ associé.
Ajouter ou modifier un tableau

Il existe deux types de tableaux dans les rapports :

  • Tableaux statiques, qui sont utilisés pour afficher du texte statique ou des champs. Pour ce type de tableau, vous définissez le nombre de colonnes et de lignes lors de l’ajout du tableau.

  • Tableaux dynamiques, qui sont utilisés pour afficher des données provenant de champs relationnels. Pour ce type de tableau, vous définissez uniquement le nombre de colonnes lors de l’ajout du tableau. Le nombre de lignes dans le rapport généré sera déterminé par le nombre d’enregistrements du modèle lié qui sont associés au modèle actuel.

    Example

    Dans un rapport de commande client, un tableau dynamique est utilisé pour afficher les lignes de commande liées à la commande client. Si la commande client contient 10 lignes de commande, le tableau du rapport généré comporte 10 lignes ; si elle contient deux lignes de commande, le tableau comporte deux lignes.

Ajouter ou modifier un tableau statique

Pour ajouter un tableau statique, saisissez / et sélectionnez la commande Tableau. Déterminez le nombre de colonnes et de lignes pour le tableau. Une fois le tableau ajouté, vous pouvez commencer à le modifier.

Insérez, déplacez et supprimez des colonnes et des lignes à l’aide des outils de tableau. Positionnez le curseur en haut de la colonne ou à gauche de la ligne, puis cliquez sur le rectangle violet et sélectionnez une option.

Liste des options disponibles pour modifier la structure du tableau.

Pour redimensionner une colonne, faites glisser la bordure de la colonne vers la position souhaitée ; réinitialisez toutes les colonnes à leur taille standard en sélectionnant Réinitialiser la taille depuis les outils de tableau.

Ajoutez le champ de votre choix dans une cellule ou ajoutez du texte statique en saisissant.

Astuce

Pour ajouter du texte de manière structurée sans utiliser de tableau, vous pouvez utiliser des colonnes. Ajoutez des colonnes en saisissant / et en sélectionnant la commande appropriée : 2 colonnes, 3 colonnes ou 4 colonnes.

Ajouter ou modifier un tableau dynamique

Note

  • Seules les relations de type one2many ou many2many peuvent être affichées sous forme de tableaux dynamiques.

  • Un tableau dynamique existant dans un rapport standard a une structure plus complexe qu’un tableau dynamique que vous ajoutez vous-même. Pour ces tableaux, il est possible d’insérer ou de supprimer des colonnes ; il n’est pas possible de déplacer des colonnes ou d’insérer, déplacer ou supprimer des lignes.

Pour ajouter un tableau dynamique, saisissez / et sélectionnez la commande Tableau dynamique. Dans la liste qui s’ouvre, sélectionnez ou recherchez la relation sur laquelle le tableau sera basé et appuyez sur Entrée. Une fois le tableau ajouté, vous pouvez commencer à le modifier.

Insérez, déplacez et supprimez des colonnes à l’aide des outils de tableau, comme pour un tableau statique. Il est également possible d’insérer des lignes statiques qui apparaîtront au-dessus ou en dessous des lignes générées.

Pour ajouter un champ à une cellule, supprimez tout texte générique puis ajoutez le champ de votre choix. La boîte de dialogue qui s’ouvre affiche l’objet source du champ (par exemple, le modèle Lignes de commande) et la liste des champs disponibles.

Liste des champs disponibles pour le modèle des lignes de commande client.

Remplacer l’étiquette Nom de colonne par l’étiquette de votre choix.

Note

La ligne par défaut itère automatiquement sur le contenu du champ, générant une ligne dans le rapport pour chaque valeur de champ (par exemple, une ligne par ligne de commande).

Formatage

Pour formater le texte du rapport, sélectionnez-le, puis formatez-le à l’aide des options de l”éditeur de texte.

Formater le texte à l'aide de l'éditeur de texte.

Modifier le XML du rapport

Avertissement

Modifier directement le XML peut entraîner des problèmes de rapport lors des mises à niveau. Si cela se produit, copiez simplement vos modifications de l’ancienne base de données vers votre base de données mise à niveau.

Pour modifier le XML du rapport, cliquer sur Modifier les sources dans le volet de gauche.

Exemples

Pour modifier la présentation des données dans votre rapport, vous pouvez modifier manuellement le widget par défaut d’un champ. Dans l’exemple ci-dessous, la date de commande affiche la date et l’heure par défaut, tandis que le prix unitaire utilise par défaut une précision de deux décimales.

<div class="oe_structure">
 <span t-field="doc.date_order"/>
 <span t-field="doc.price_unit"/>
</div>

En utilisant t-options, dans ce cas l’option widget, ces champs peuvent être modifiés pour afficher uniquement la date et une précision de quatre décimales, respectivement :

<div class="oe_structure">
 <span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
 <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/>
</div>

Pour afficher/masquer du contenu en fonction de conditions spécifiques, vous pouvez ajouter manuellement des instructions de contrôle if/else dans le XML du rapport.

Par exemple, pour masquer une table de données personnalisée s’il n’y a pas d’étiquettes, vous pouvez utiliser l’attribut t-if pour définir la condition, qui est ensuite évaluée comme True ou False. La table ne sera pas affichée s’il n’y a pas d’étiquettes dans le devis.

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>

Pour afficher un autre bloc au cas où l’instruction t-if est évaluée comme False, vous pouvez le spécifier à l’aide de l’instruction t-else. Le bloc t-else doit directement suivre le bloc t-if dans la structure du document. Il n’est pas nécessaire de spécifier une condition dans l’attribut t-else. À titre d’exemple, affichons un bref message expliquant qu’il n’y a pas d’étiquettes sur le devis :

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>

En utilisant la notation t-if/t-else, l’éditeur de rapport reconnaît que ces sections sont mutuellement exclusives et doivent être affichées comme des blocs conditionnels :

Aperçu du résultat s'il y a des étiquettes.

Vous pouvez changer de condition à l’aide de l’éditeur pour prévisualiser leur résultat :

Aperçu du résultat s'il n'y a pas d'étiquettes.

Pour disposer de plusieurs options, vous pouvez également utiliser des directives t-elif pour ajouter des conditions intermédiaires. Par exemple, voici comment le titre des rapports de commande client change en fonction de la condition du document sous-jacent.

<h2 class="mt-4">
    <span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
    <span t-elif="doc.state in ['draft','sent']">Quotation # </span>
    <span t-else="">Order # </span>
    <span t-field="doc.name">SO0000</span>
</h2>

Le titre Facture pro forma est utilisé en fonction de certaines conditions contextuelles. Si ces conditions ne sont pas remplies et que l’état du document est soit draft soit sent, alors Devis est utilisé. Si aucune de ces conditions n’est remplie, le titre du rapport est Commande.

Travailler avec des images dans un rapport peut être difficile, car le contrôle précis de la taille et du comportement des images n’est pas toujours évident. Vous pouvez insérer des champs d’image à l’aide de l’éditeur de rapport (en utilisant la commande de champ), mais les insérer en XML à l’aide de la directive t-field et des attributs t-options d’accompagnement offre un meilleur contrôle du dimensionnement et du positionnement.

Par exemple, le code suivant affiche le champ image_128 du produit de la ligne sous forme d’image de 64 px de large (avec une hauteur automatique basée sur le rapport d’aspect de l’image).

<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>

Les options suivantes sont disponibles pour les widgets d’image :

  • width : largeur de l’image, généralement en pixels ou en unités de longueur CSS (par exemple, rem) (laisser vide pour une largeur automatique).

  • height : hauteur de l’image, généralement en pixels ou en unités de longueur CSS (par exemple, rem) (laisser vide pour une hauteur automatique).

  • class : classes CSS appliquées sur la balise img ; les classes Bootstrap sont disponibles.

  • alt : texte alternatif de l’image

  • style : attribut de style ; il permet de remplacer les styles plus librement qu’avec les classes Bootstrap.

Ces attributs doivent contenir des chaînes de caractères, c’est-à-dire du texte entre guillemets dans des guillemets, par exemple, t-options-width="'64px'" (ou, alternativement, une expression Python valide).

Note

Le widget image ne peut pas être utilisé sur une balise img. À la place, définir la directive t-field sur un nœud span (pour le contenu en ligne) ou div (pour le contenu en bloc).

Par exemple, ajoutons une colonne avec l’image du produit dans le tableau du devis :

<table class="table table-sm o_main_table table-borderless mt-4">
    <thead style="display: table-row-group">
        <tr>
            <th>Image</th>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
        <t t-foreach="lines_to_report" t-as="line">
            <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                   <td>
                       <span t-field="line.product_template_id.image_128"
                             t-options-widget="'image'"
                             t-options-width="'64px'"
                             t-options-class="'rounded-3 shadow img-thumbnail'"
                           />
                   </td>
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>

L’attribut t-options-width limite la largeur de l’image à 64 pixels, et les classes Bootstrap utilisées dans t-options-class créent une bordure semblable à une miniature avec des coins arrondis et une ombre.

Ajouter une colonne avec l'image du produit dans le tableau du devis.