Les modèles de détail de facture sont un type particulier de modèle de facture. Ils servent à ajouter un aperçu détaillé des enregistrements à une facture. Vous pouvez joindre cet aperçu en tant que page séparée ou annexe à la facture.
Un détail de facture est ajouté si les trois conditions suivantes sont toutes remplies :
- Les détails de facture sont activés
- Des enregistrements sont liés à la facture
- Un modèle de type 'Détail de facture' est disponible
💡 Lisez aussi l’article sur l’activation des détails de facture : Configurer les détails de facture au niveau de l'entreprise, de la relation ou de la mission
Ne partez pas de zéro – utilisez un modèle d’exemple de détail de facture
Les modèles de détail de facture peuvent être assez complexes, car ils permettent d’afficher plusieurs niveaux de détails. C’est pourquoi AdminPulse propose déjà de nombreux modèles d’exemple dans l'interface et cet article: Exemples de modèles pour factures et détails de facture. Avant d’en créer un vous-même, prenez le temps de parcourir ces exemples. Vous pouvez :
- les utiliser tels quels (en adaptant à votre charte graphique)
- ou vous en servir comme base pour construire votre propre modèle
💡 Astuce : vous allez travailler pour la première fois avec des tableaux dans un modèle de facture ? Lisez d’abord les articles sur le fonctionnement général de tableaux dans les modèles de facture :
- Article de base : Modèles de facture : personnalisez vos factures - substituants, tableaux et identité visuelle
- Tableaux dans les modèles de facture (hors détails de facture) : Modèles de facture : substituants pour les tableaux
Que sont les types des articles de la liste de prix, les articles de la liste de prix et les sous-classes ?
Pour bien comprendre la construction des détails de facture, il est utile de revoir brièvement la structure de la liste de prix. En effet, l’enregistrement sur les articles de la liste de prix et l’utilisation de l’un des tableaux décrits ci-dessous déterminent exactement quelles informations apparaissent dans les détails de facture.
Dans AdminPulse, une liste de prix se compose d’articles de la liste de prix et de sous-classes. Chaque article de la liste de prix a également un type.
👉 La structure de votre liste de prix détermine donc la manière dont les enregistrements sont regroupés dans les détails de facture - par article de la liste de prix, par sous-classe… ou une combinaison des deux.
Type d’article de la liste de prix
Le type d’un article de la liste de prix détermine comment l’article est enregistré et facturé - par exemple à l’heure ou à l’unité.
- Temps : facturé à l’heure (p. ex. travaux de conseil)
- Produit/coût : à l’unité (p. ex. frais de dépôt au greffe)
- Distance : par déplacement (p. ex. taxi ou véhicule de société)
Article de la liste de prix
Un article de la liste de prix permet de regrouper des services apparentés. Pensez à des catégories telles que :
- Conseil – tous les services de conseil
- Honoraires – travaux administratifs
Sous-classe d’article de la liste de prix
Une sous-classe est un service spécifique au sein d’un article de la liste de prix. Pour créer des sous-classes, l’article de la liste de prix doit d’abord exister.
Dans l’exemple de liste de prix ci-dessous, on voit trois articles : Activités internes, Conseil et Honoraires. Les trois sont de type 'Temps'. 'Conseil' contient 3 sous-classes et 'Honoraires' en contient 2.
Début et fin obligatoires d’un modèle de détail de facture
👉 Attention : contrairement aux modèles de facture classiques, chaque modèle de détail de facture doit obligatoirement commencer par {BeginGroup:InvoiceDetail} et se terminer par {EndGroup:InvoiceDetail}.
Placez {BeginGroup:InvoiceDetail} en haut du tableau des détails de facture. Mettez {EndGroup:InvoiceDetail} en dessous de ce même tableau.
Si vous oubliez ces champs, vous verrez un message d’erreur dès que vous essayez d’afficher un aperçu du modèle ou lors de la création d’une facture provisoire.
Exemple :
Aperçu des tableaux disponibles dans les modèles de détail de facture
Dans un modèle de détail de facture, vous pouvez utiliser différents tableaux pour afficher des données. Vous trouverez ci-dessous d’abord un aperçu des tableaux principaux, suivi des sous-tableaux que vous pouvez utiliser à l’intérieur de ces tableaux principaux.
Hiérarchie des tableaux disponibles pour les détails de facture
-
Niveau 0 – Tableaux conteneurs (optionnel) :
Relations,Assignments -
Niveau 1 – Tableaux principaux : p. ex.
PriceListItemDetails,TaskDetails, … -
Niveau 2 – Sous-tableaux : p. ex.
RegistrationDays,Registrations, … -
Niveau 3 – Sous-sous-tableaux : p. ex.
RegistrationsdansResources,SubtasksdansTaskDetails
👉 Seuls les tableaux qui contiennent effectivement des données sont affichés dans un détail de facture.
Tableaux principaux pour les modèles de détail de facture
Le tableau ci-dessous reprend tous les tableaux principaux (niveau 1) que vous pouvez utiliser dans votre modèle de détail de facture. Les tableaux conteneurs (niveau 0 ; Relations, Assignments) se trouvent dans une section séparée ci-après.
Pour chaque tableau principal, vous voyez :
- Ce qui est affiché
- Les champs disponibles
- Si le tableau accepte des sous-tableaux
| Tableau principal | Que montre ce tableau ? | Champs disponibles | Contient des sous-tableaux ? |
| {TableStart:PriceListItemDetails} ... {TableEnd:PriceListItemDetails} | Enregistrements regroupés par sous-classe | {Name} {FullName} {Total} {TotalPrice} {Code} |
Oui — contient 'RegistrationDays' et 'Registrations' |
| {TableStart:PriceListItemCategoryDetails} ... {TableEnd:PriceListItemCategoryDetails} | Enregistrements regroupés par article de la liste de prix | {Name} {FullName} {Total} {TotalPrice} {Code} |
Oui — contient 'RegistrationDays', 'Registrations' et 'Resources' |
| {TableStart:RegistrationDateDetails} ... {TableEnd:RegistrationDateDetails} | Enregistrements regroupés par date | {Date} {Name} {Amount} {TotalPrice} {Remark} |
Non |
| {TableStart:TaskDetails} ... {TableEnd:TaskDetails} | Enregistrements regroupés par tâche | {TaskName} {TaskTotal} {TotalPrice} |
Oui — contient 'Registrations' et 'Subtasks' |
| {TableStart:RegistrationTotals} ... {TableEnd:RegistrationTotals} | Vue d’ensemble des totaux par article de la liste de prix | {Name} {Amount} {TotalPrice} |
Non |
| {TableStart:RegistrationDetails} ... {TableEnd:RegistrationDetails} | Tous les enregistrements sans regroupement | {Code} {Date} {Name} {Amount} {Remark} {Time} {Employee} {UnitPrice} {TotalPrice} {Billable} {InForfait} {InSubscription} {ReferenceYear} |
Non |
Sous-tableaux pour les modèles de détail de facture
En plus des tableaux principaux, vous pouvez aussi utiliser des sous-tableaux dans les modèles de détail de facture. Ils affichent par exemple des informations supplémentaires par jour, par enregistrement ou par collaborateur. Chaque sous-tableau est rattaché à un ou plusieurs tableaux principaux.
L’aperçu ci-dessous indique quels sous-tableaux vous pouvez utiliser, dans quels tableaux principaux ils sont disponibles, quels champs vous pouvez employer et si le sous-tableau peut lui-même contenir d’autres tableaux.
💡 Seuls les sous-tableaux qui contiennent des données sont affichés. Des blocs ou sections vides n’apparaissent pas dans le résultat final.
👉 Important : les sous-tableaux doivent toujours être utilisés à l’intérieur d’un tableau principal dans les modèles de détail de facture. Ils ne peuvent pas être utilisés seuls.
Sous-tableau |
Que montre ce sous-tableau ? |
Disponible dans ces tableaux principaux |
Champs disponibles dans le |
Contient des sous-sous-tableaux |
| {TableStart:RegistrationDays} ... {TableEnd:RegistrationDays} | Enregistrements regroupés par jour avec totaux journaliers | PriceListItemDetails, PriceListItemCategoryDetails |
{Name} {Date} {Amount} {Remark} {Time} {Employee} {UnitPrice} {TotalPrice} |
Non |
| {TableStart:Registrations} ... {TableEnd:Registrations} |
Enregistrements individuels avec détails | PriceListItemDetails, PriceListItemCategoryDetails, TaskDetails, Resources Subtasks |
{Code} {Date} {Name} {Amount} {Remark} {Time} {Employee} {UnitPrice} {TotalPrice} {Billable} {InForfait} {InSubscription} {ReferenceYear} |
Non |
| {TableStart:Resources} ... {TableEnd:Resources} |
Sous-classes au sein d’un article de la liste de prix (uniquement si la table principale regroupe par article) |
PriceListItemCategoryDetails | {Name} {FullName} {Total} {TotalPrice} {Code} |
Oui — contient 'RegistrationDays' et 'Registrations' |
| {TableStart:Subtasks} ... {TableEnd:Subtasks} | Sous-tâches d’une tâche principale (uniquement si la table principale regroupe par tâche) | TaskDetails | {SubtaskName} {SubtaskTotal} |
Oui — contient 'Registrations' |
Sous-sous-tableaux pour les modèles de détail de facture
Sous-sous-tableau |
Que montre ce sous-sous-tableau ? |
Disponible dans ces sous-tableaux |
Champs disponibles dans le |
Contient des sous-tableaux |
| {TableStart:Registrations} ... {TableEnd:Registrations} |
Enregistrements individuels avec détails | Resources (dans PriceListItemCategoryDetails), Subtasks (dans TaskDetails) |
{Code}, {Date}, {Name}, {Amount}, {Remark}, {Time}, {Employee}, {UnitPrice}, {TotalPrice}, {Billable}, {InForfait}, {InSubscription}, {ReferenceYear} |
Non |
| {TableStart:RegistrationDays} ... {TableEnd:RegistrationDays} |
Enregistrements groupés par jour avec totaux journaliers | Resources (dans PriceListItemCategoryDetails) | {Name}, {Date}, {Amount}, {Remark}, {Time}, {Employee}, {UnitPrice}, {TotalPrice} |
Non |
Tableaux conteneurs dans les modèles de détail de facture (optionnel)
Parfois, vous souhaitez regrouper les détails de facture par client ou par mission. C’est possible via des tableaux conteneurs. Ils agissent comme une couche extérieure autour des autres tableaux pour afficher proprement le contenu par relation ou par mission.
Les tableaux conteneurs sont optionnels, mais très utiles si vous créez une seule facture avec des enregistrements provenant de plusieurs missions ou relations.
| Tableau conteneur | Rôle du conteneur | Champs disponibles dans le conteneur | Contient des sous-tableaux |
| {TableStart:Relations} ... {TableEnd:Relations} |
Regroupement par relation (pour plusieurs relations) |
{Relation} {Total} {TotalAmount} |
Oui — contient tous les autres tableaux |
| {TableStart:Assignments} ... {TableEnd:Assignments} |
Regroupement par mission (pour plusieurs missions) |
{AssignmentName} {AssignmentOrDefault} {Total} {TotalAmount} |
Oui — contient tous les autres tableaux |
Tableaux principaux disponibles et champs pour les détails de facture
Tableau principal : 'PriceListItemDetails' – regroupement par sous-classe
Le tableau principal PriceListItemDetails affiche tous les enregistrements regroupés par sous-classe, avec un aperçu de la quantité totale et du montant total par sous-classe.
💡 Si vous avez enregistré au niveau de l’article de la liste de prix et que vous utilisez {TableStart:PriceListItemDetails}, le nom de l’article de la liste de prix est affiché à la place du nom de la sous-classe.
| Champ | Description |
| {TableStart:PriceListItemDetails} | Début du tableau |
| {Name} | Nom de la sous-classe |
| {FullName} | Nom complet (article de la liste de prix + sous-classe) |
| {Code} | Code de la sous-classe |
| {Total} | Nombre/heures total(aux) |
| {TotalPrice} | Montant total |
| {TableEnd:PriceListItemDetails} | Fin du tableau |
Exemple du tableau principal PriceListItemDetails avec le sous-tableau Registrations :
Tableau principal : 'PriceListItemCategoryDetails' – regroupement par article de la liste de prix
Le tableau principal PriceListItemCategoryDetails affiche tous les enregistrements regroupés par article de la liste de prix, en fusionnant toutes les sous-classes au sein du même article.
| Champ | Description |
| {TableStart:PriceListItemCategoryDetails} | Début du tableau |
| {Name} | Nom de l’article de la liste de prix |
| {FullName} | Nom complet |
| {Code} | Code de l’article de la liste de prix |
| {Total} | Nombre/heures total(aux) |
| {TotalPrice} | Montant total |
| {TableEnd:PriceListItemCategoryDetails} | Fin du tableau |
Exemple du tableau principal PriceListItemCategoryDetails avec le sous-tableau RegistrationDays :
Tableau principal : 'RegistrationDateDetails' – regroupement par date
Le tableau principal RegistrationDateDetails affiche tous les enregistrements regroupés par date, afin de voir quelles activités ont été effectuées quels jours.
| Champ | Description |
| {TableStart:RegistrationDateDetails} | Début du tableau |
| {Date} | Date de l’enregistrement |
| {Name} | Nom de l’article de la liste de prix |
| {Amount} | Nombre d’unités/temps enregistré pour cet article |
| {TotalPrice} | Montant total enregistré pour cet article |
| {Remark} | Remarque des enregistrements |
| {TableEnd:RegistrationDateDetails} | Fin du tableau |
Exemple du tableau principal RegistrationDateDetails :
Tableau principal : 'TaskDetails' – regroupement par tâche
Le tableau principal TaskDetails affiche tous les enregistrements regroupés par tâche, y compris les sous-tâches, pour un aperçu détaillé des travaux effectués.
| Champ | Description |
| {TableStart:TaskDetails} | Début du tableau |
| {TaskName} | Nom de la tâche |
| {TaskTotal} | Nombre/heures total(aux) enregistrés pour la tâche |
| {TotalPrice} | Montant total enregistré pour la tâche |
| {TableEnd:TaskDetails} | Fin du tableau |
Exemple du tableau principal TaskDetails avec le sous-tableau Registrations :
Tableau principal : 'RegistrationTotals' – total des enregistrements par article de la liste de prix
Le tableau principal RegistrationTotals présente un aperçu de la quantité totale et du montant total par article de la liste de prix, sans les enregistrements détaillés.
| Champ | Description |
| {TableStart:RegistrationTotals} | Début du tableau |
| {Name} | Nom de l’article de la liste de prix |
| {Amount} | Nombre d’unités/temps enregistré pour cet article |
| {TotalPrice} | Montant total des enregistrements pour cet article de la liste de prix |
| {TableEnd:RegistrationTotals} | Fin du tableau |
Exemple du tableau principal RegistrationTotals :
💡 Dans ce cas, des enregistrements existaient aux niveaux 'article de la liste de prix' et 'sous-classe' ; ils sont donc tous deux affichés.
Tableau principal : 'RegistrationDetails' – enregistrements non regroupés
Le tableau principal RegistrationDetails affiche tous les enregistrements individuels sans regroupement, y compris tous les détails tels que le collaborateur, la période et la facturabilité.
| Champ | Description |
| {TableStart:RegistrationDetails} | Début du tableau |
| {Code} | Code de l’article |
| {Date} | Date de l’enregistrement |
| {Name} | Nom de l’article |
| {Amount} | Nombre/heures enregistré(e)s pour cet article |
| {Remark} | Remarque de l’enregistrement |
| {Time} | Heure de début et de fin (pour les enregistrements de temps) |
| {Employee} | Nom du collaborateur |
| {UnitPrice} | Prix unitaire de l’article |
| {TotalPrice} | Montant total |
| {Billable} | Facturable (Oui/Non) |
| {InForfait} | Inclus dans le forfait (Oui/Non) |
| {InSubscription} | Inclus dans l’abonnement (Oui/Non) |
| {ReferenceYear} | Année de référence de l’enregistrement |
| {TableEnd:RegistrationDetails} | Fin du tableau |
Exemple du tableau principal RegistrationDetails :
Sous-tableaux disponibles et champs pour les détails de facture
Sous-tableau : 'RegistrationDays' – regroupement par jour d’enregistrement
Le sous-tableau RegistrationDays affiche les enregistrements regroupés par jour.
- Disponible dans : 'PriceListItemCategoryDetails'
| Champ | Description |
| {TableStart:RegistrationDays} | Début du sous-tableau |
| {Name} | Nom de l’article |
| {Date} | Date de l’enregistrement |
| {Amount} | Nombre/heures enregistré(e)s pour cet article |
| {Remark} | Remarque de l’enregistrement |
| {Time} | Plage horaire |
| {Employee} | Collaborateur |
| {UnitPrice} | Prix unitaire |
| {TotalPrice} | Montant total |
| {TableEnd:RegistrationDays} | Fin du sous-tableau |
Exemple avec le sous-tableau RegistrationDays à l’intérieur du tableau principal PriceListItemCategoryDetails :
Sous-tableau : 'Registrations' – pas de regroupement des enregistrements
Le sous-tableau Registrations affiche tous les enregistrements individuels, y compris tous les détails tels que collaborateur, plage horaire et facturabilité.
- Disponible dans : 'PriceListItemCategoryDetails', 'TaskDetails' et 'Subtasks'
| Champ | Description |
| {TableStart:Registrations} | Début du sous-tableau |
| {Code} | Code de l’article de la liste de prix |
| {Date} | Date de l’enregistrement |
| {Name} | Nom de l’article |
| {Amount} | Nombre/heures |
| {Remark} | Remarque |
| {Time} | Plage horaire |
| {Employee} | Collaborateur |
| {UnitPrice} | Prix unitaire |
| {TotalPrice} | Montant total |
| {Billable} | Facturable (Oui/Non) |
| {InForfait} | Inclus dans le forfait (Oui/Non) |
| {InSubscription} | Inclus dans l’abonnement (Oui/Non) |
| {ReferenceYear} | Année de référence |
| {TableEnd:Registrations} | Fin du sous-tableau |
Exemple du sous-tableau Registrations dans le tableau principal TaskDetails :
Sous-tableau : 'Resources' – regroupement par sous-classe
Le sous-tableau Resources indique, pour chaque article de la liste de prix, combien a été enregistré par sous-classe, avec la quantité totale et le montant total.
- Disponible dans : 'PriceListItemCategoryDetails'
- Contient aussi : 'RegistrationDays' et 'Registrations'
| Champ | Description |
| {TableStart:Resources} | Début du sous-tableau |
| {Name} | Nom de l’article de la liste de prix |
| {FullName} | Nom complet (article + sous-classe) |
| {Total} | Nombre/heures total(aux) enregistrés pour cet article |
| {TotalPrice} | Montant total |
| {Code} | Code de l’article de la liste de prix |
| {TableEnd:Resources} | Fin du sous-tableau |
Exemple avec PriceListItemCategoryDetails comme tableau principal et Resources comme sous-tableau :
Sous-tableau : 'Subtasks' – regroupement par sous-tâche
Le sous-tableau Subtasks affiche toutes les sous-tâches d’une tâche principale, avec leur quantité totale et leur montant total.
- Disponible dans : 'TaskDetails'
- Contient aussi : 'Registrations'
| Champ | Description |
| {TableStart:Subtasks} | Début du sous-tableau |
| {SubtaskName} | Nom de la sous-tâche |
| {SubtaskTotal} | Nombre/heures total(aux) enregistrés pour cette sous-tâche |
| {TableEnd:Subtasks} | Fin du sous-tableau |
Exemple avec TaskDetails comme tableau principal et Subtasks comme sous-tableau :
Autres champs pour les modèles de détail de facture
Tous les champs généraux des modèles de facture classiques sont aussi disponibles dans les modèles de détail de facture. Par exemple :
- Données de l’entreprise ({CompanyName}, {CompanyStreetAndNr}, etc.)
- Données de la relation ({RelationName}, {RelationStreetAndNr}, etc.)
- Données de la facture ({InvoiceNumber}, {InvoiceDate}, etc.)
- Totaux ({InvoiceAmount}, {InvoiceVatAmount}, etc.)
L’aperçu de tous les champs généraux est disponible dans l’article suivant : Modèles de facture : substituants pour les tableaux
Champs supplémentaires spécifiques aux modèles de détail de facture :
| Champ | Description |
| {TotalTimeAmount} | Nombre total d’heures |
| {TotalCostAmount} | Montant total des coûts |
| {TotalAmount} | Montant total (heures + coûts) |
Ces champs peuvent être utilisés dans un modèle de détail de facture sans être placés à l’intérieur d’un tableau, pour accompagner un tableau. Ils doivent donc se trouver à l'intérieur de {BeginGroup:InvoiceDetail} ... {EndGroup:InvoiceDetail} .
Exemple :
💡 Bon à lire
- Vous débutez avec les modèles de facture ? Consultez d’abord notre série d’articles de base sur les modèles. Commencez ici : Modèles de facture : vue d’ensemble de l’écran, les types et leur usage
- Cet article fait partie d’une série.
- ⏪ Dans le premier article, vous trouverez un aperçu des champs généraux que vous pouvez utiliser dans les modèles : Modèles de facture : substituants pour les informations générales de facture
- ⏪ Vous utilisez un tableau sur votre facture ? Les bons champs et la bonne structure se trouvent dans le deuxième article : Modèles de facture : substituants pour les tableaux
- Vous cherchez des modèles d’exemple ? Consultez alors l’article suivant : Exemples de modèles pour factures et détails de facture
- Vous n’arrivez pas à téléverser votre modèle ? Consultez cette FAQ : FAQ - Pourquoi est-ce que je reçois un message d’erreur lors du chargement de mon modèle de facture ?
- Vous voyez un message au lieu des données dans l’aperçu ou sur la facture ? Voyez ici : FAQ - Pourquoi ma facture affiche-t-elle « System.Collections.Generic… » au lieu de données?