Dans les scénarios de chaîne d'approvisionnement ou de commerce, il est souvent nécessaire de générer rapidement un « Contrat de fourniture et d'achat » standardisé et de remplir dynamiquement son contenu à partir d'informations provenant de sources de données, telles que les acheteurs, les vendeurs et les détails des produits. Ci-dessous, nous allons prendre l'exemple d'un cas d'utilisation simplifié de « Contrat » pour vous montrer comment configurer et utiliser la fonctionnalité « Impression de modèle » afin de mapper les informations de données aux espaces réservés dans les modèles de contrat, générant ainsi automatiquement le document contractuel final.
Dans notre exemple, nous avons principalement les collections suivantes (les autres champs non pertinents sont omis) :

Étant donné que le système actuel ne prend en charge que l'impression d'un seul enregistrement à la fois, nous cliquerons sur « Imprimer » sur la page « Détails du contrat ». Le système récupérera alors automatiquement l'enregistrement de contrat correspondant, ainsi que les informations associées des parties, et les remplira dans des documents Word ou PDF.
Cette documentation a été traduite automatiquement par IA.
Veuillez noter que notre plugin « Impression de modèle » est un plugin commercial. Vous devrez l'acheter et l'activer avant de pouvoir effectuer des opérations d'impression.

Confirmer l'activation du plugin :
Sur n'importe quelle page, créez un bloc de détails (par exemple, pour les utilisateurs) et vérifiez si une option de configuration de modèle correspondante est disponible dans la configuration des actions :


Créez les collections principales (entité, contrat et articles de produit) que nous avons conçues ci-dessus (sélectionnez uniquement les champs essentiels).
| Catégorie de champ | Nom d'affichage du champ | Nom du champ | Interface du champ |
|---|---|---|---|
| Champs PK & FK | |||
| ID | id | Entier | |
| ID Acheteur | buyer_id | Entier | |
| ID Vendeur | seller_id | Entier | |
| Champs d'association | |||
| Articles du contrat | contract_items | Un à plusieurs | |
| Acheteur (Partie A) | buyer | Plusieurs à un | |
| Vendeur (Partie B) | seller | Plusieurs à un | |
| Champs généraux | |||
| Numéro de contrat | contract_no | Texte sur une seule ligne | |
| Date de début de livraison | start_date | Date/heure (avec fuseau horaire) | |
| Date de fin de livraison | end_date | Date/heure (avec fuseau horaire) | |
| Ratio d'acompte (%) | deposit_ratio | Pourcentage | |
| Jours de paiement après livraison | payment_days_after | Entier | |
| Nom du compte bancaire (Bénéficiaire) | bank_account_name | Texte sur une seule ligne | |
| Nom de la banque | bank_name | Texte sur une seule ligne | |
| Numéro de compte bancaire (Bénéficiaire) | bank_account_number | Texte sur une seule ligne | |
| Montant total | total_amount | Nombre | |
| Codes de devise | currency_codes | Sélection unique | |
| Ratio du solde (%) | balance_ratio | Pourcentage | |
| Jours de solde après livraison | balance_days_after | Entier | |
| Lieu de livraison | delivery_place | Texte long | |
| Nom du signataire Partie A | party_a_signatory_name | Texte sur une seule ligne | |
| Titre du signataire Partie A | party_a_signatory_title | Texte sur une seule ligne | |
| Nom du signataire Partie B | party_b_signatory_name | Texte sur une seule ligne | |
| Titre du signataire Partie B | party_b_signatory_title | Texte sur une seule ligne | |
| Champs système | |||
| Créé le | createdAt | Date de création | |
| Créé par | createdBy | Créé par | |
| Dernière mise à jour le | updatedAt | Date de dernière mise à jour | |
| Dernière mise à jour par | updatedBy | Dernière mise à jour par |
| Catégorie de champ | Nom d'affichage du champ | Nom du champ | Interface du champ |
|---|---|---|---|
| Champs PK & FK | |||
| ID | id | Entier | |
| Champs généraux | |||
| Nom de la partie | party_name | Texte sur une seule ligne | |
| Adresse | address | Texte sur une seule ligne | |
| Personne de contact | contact_person | Texte sur une seule ligne | |
| Téléphone de contact | contact_phone | Téléphone | |
| Poste | position | Texte sur une seule ligne | |
| Site web | website | URL | |
| Champs système | |||
| Créé le | createdAt | Date de création | |
| Créé par | createdBy | Créé par | |
| Dernière mise à jour le | updatedAt | Date de dernière mise à jour | |
| Dernière mise à jour par | updatedBy | Dernière mise à jour par |
| Catégorie de champ | Nom d'affichage du champ | Nom du champ | Interface du champ |
|---|---|---|---|
| Champs PK & FK | |||
| ID | id | Entier | |
| ID Contrat | contract_id | Entier | |
| Champs d'association | |||
| Contrat | contract | Plusieurs à un | |
| Champs généraux | |||
| Nom du produit | product_name | Texte sur une seule ligne | |
| Spécification / Modèle | spec | Texte sur une seule ligne | |
| Quantité | quantity | Entier | |
| Prix unitaire | unit_price | Nombre | |
| Montant total | total_amount | Nombre | |
| Date de livraison | delivery_date | Date/heure (avec fuseau horaire) | |
| Remarque | remark | Texte long | |
| Champs système | |||
| Créé le | createdAt | Date de création | |
| Créé par | createdBy | Créé par | |
| Dernière mise à jour le | updatedAt | Date de dernière mise à jour | |
| Dernière mise à jour par | updatedBy | Dernière mise à jour par |
Saisir des exemples de données :


Configurez les règles de liaison comme suit pour calculer automatiquement le prix total et le paiement du solde :

Créez un bloc d'affichage, confirmez les données, puis activez l'action « Impression de modèle » :


Ajoutez une configuration de modèle, par exemple pour un « Contrat de fourniture et d'achat » :


Ensuite, accédez à l'onglet « Liste des champs » où vous pourrez voir tous les champs de l'objet actuel. Une fois que vous aurez cliqué sur « Copier », vous pourrez commencer à remplir le modèle.

Fichier de modèle de contrat Word
Préparez à l'avance le modèle de contrat (fichier .docx), par exemple : SUPPLY AND PURCHASE CONTRACT.docx
Dans cet exemple, nous fournissons une version simplifiée du « Contrat de fourniture et d'achat », qui contient des espaces réservés d'exemple :
{d.contract_no} : Numéro de contrat{d.buyer.party_name} , {d.seller.party_name} : Noms de l'acheteur et du vendeur{d.total_amount} : Montant total du contratVous pouvez ensuite copier et coller les champs de votre collection dans le document Word.
Remplissage des champs de base :
Par exemple, le numéro de contrat en haut, ou l'objet de l'entité signataire du contrat. Il vous suffit de cliquer sur « Copier » et de coller directement dans l'espace vide correspondant du contrat.


Dans les modèles, nous devons souvent formater les champs, en particulier les champs de date. Le format de date copié directement est généralement long (par exemple, Mer Jan 01 2025 00:00:00 GMT) et doit être formaté pour afficher le style souhaité.
Pour les champs de date, vous pouvez utiliser la fonction formatD() pour spécifier le format de sortie :
Exemple :
Par exemple, si le champ original que nous avons copié est {d.created_at} et que nous devons formater la date au format 2025-01-01, alors modifiez ce champ comme suit :
Styles de formatage de date courants :
YYYY - Année (quatre chiffres)MM - Mois (deux chiffres)DD - Jour (deux chiffres)HH - Heure (format 24 heures)mm - Minutesss - SecondesExemple 2 :
Supposons qu'il existe un champ de montant, tel que {d.total_amount} dans le contrat. Nous pouvons utiliser la fonction formatN() pour formater les nombres, en spécifiant le nombre de décimales et le séparateur de milliers.
Syntaxe :
2 signifie deux décimales.true ou false.Exemple 1 : Formater un montant avec un séparateur de milliers et deux décimales
Ceci formatera d.amount avec deux décimales et ajoutera un séparateur de milliers.
Exemple 2 : Formater un montant en entier sans décimales
Ceci formatera d.amount en entier et ajoutera un séparateur de milliers.
Exemple 3 : Formater un montant avec deux décimales mais sans séparateur de milliers
Ici, le séparateur de milliers est désactivé et seules deux décimales sont conservées.
Autres besoins de formatage des montants :
Pour les champs de chaîne de caractères, vous pouvez utiliser :upperCase pour spécifier le format du texte, comme la conversion de casse.
Syntaxe :
Méthodes de conversion courantes :
upperCase - Convertir en majusculeslowerCase - Convertir en minusculesupperCase:ucFirst - Mettre la première lettre en majusculeExemple :
Lorsque nous devons imprimer un tableau contenant plusieurs sous-éléments (par exemple, les détails des produits), nous devons généralement utiliser l'impression en boucle. De cette façon, le système générera une ligne de contenu pour chaque élément de la liste jusqu'à ce que toutes les entrées aient été parcourues.
Supposons que nous ayons une liste de produits (par exemple, contract_items), qui contient plusieurs objets produit. Chaque objet produit possède plusieurs attributs, tels que le nom du produit, la spécification, la quantité, le prix unitaire, le montant total et les remarques.
Étape 1 : Remplir les champs dans la première ligne du tableau
Tout d'abord, dans la première ligne du tableau (pas l'en-tête), nous copions et remplissons directement les variables du modèle. Ces variables seront remplacées par les données correspondantes et affichées dans la sortie.
Par exemple, la première ligne du tableau se présente comme suit :
| Nom du produit | Spécification / Modèle | Quantité | Prix unitaire | Montant total | Remarque |
|---|---|---|---|---|---|
| {d.contract_items[i].product_name} | {d.contract_items[i].spec} | {d.contract_items[i].quantity} | {d.contract_items[i].unit_price} | {d.contract_items[i].total_amount} | {d.contract_items[i].remark} |
Ici, d.contract_items[i] représente le i-ème élément de la liste de produits, et i est un index qui représente l'ordre du produit actuel.
Étape 2 : Modifier l'index dans la deuxième ligne
Ensuite, dans la deuxième ligne du tableau, nous modifions l'index du champ en i+1 et remplissons uniquement le premier attribut. En effet, lors de l'impression en boucle, nous devons récupérer l'élément de données suivant de la liste et l'afficher sur la ligne suivante.
Par exemple, la deuxième ligne est remplie comme suit :
| Nom du produit | Spécification / Modèle | Quantité | Prix unitaire | Montant total | Remarque |
|---|---|---|---|---|---|
| {d.contract_items[i+1].product_name} |
Dans cet exemple, nous avons changé [i] en [i+1], ce qui nous permet d'obtenir les données du produit suivant dans la liste.
Étape 3 : Impression en boucle automatique lors du rendu du modèle
Lorsque le système traite ce modèle, il fonctionne selon la logique suivante :
d.contract_items, remplissant chaque ligne en boucle selon le format du tableau jusqu'à ce que tous les détails des produits soient imprimés.L'index i de chaque ligne sera incrémenté, garantissant que chaque ligne affiche des informations de produit différentes.


À ce stade, quittez la fenêtre contextuelle actuelle et cliquez sur « Télécharger le modèle » pour obtenir le modèle complet généré.
Conseils :
.doc ou d'autres formats, il pourrait être nécessaire de le convertir en .docx, selon la prise en charge du plugin.Nous vous souhaitons une utilisation réussie ! Grâce à la fonctionnalité « Impression de modèle », vous pouvez considérablement réduire le travail répétitif dans la gestion des contrats, éviter les erreurs de copier-coller manuel, et réaliser une production de contrats standardisée et automatisée.