Exemple de règles avancées XML : Récapituler les données des postes budgétaires sous forme de remarque dans des factures récapitulatives

Les factures de synthèse peuvent contenir de nombreux articles de ligne que vous souhaitez synthétiser dans une note à la fin de la facture pour faciliter le traitement. Cet exemple montre comment cela peut être réalisé.

  1. Sélectionnez le champ InvoiceNote dans la section Champs sur l'onglet Champs du Mappeur XML (sur la partie droite de la fenêtre).
  2. Cliquez sur le bouton à droite de la valeur pour afficher le Champ règles de mappage pour le champ sur la gauche.
  3. Sélectionnez Utiliser XSL dans l'angle inférieur gauche de l'écran et ajoutez cet exemple de code dans la zone de texte en dessous des paramètres.

    Cet exemple de code fait un boucle dans le XML pour trouver combien d'instances sont détectées pour chaque valeur unique de l'élément <Description>, puis il en fait une synthèse dans une remarque à la fin de la facture. Le texte vert fournit des informations sur ce que chaque section du code fait. Il peut être supprimé.

     
    <xsl:template match="/">
    <!-- Get all unique values for ‘Description‘ -->
    <xsl:for-each select="//cac:InvoiceLine[not(cac:Item/cbc:Description = preceding::cac:Item/cbc:Description)]">
     
    <xsl:sort select="cac:Item/cbc:Description"/> <!-- Sort by Description  -->
     
    <!-- For each Description -->
    <xsl:variable name='CurrentPerson' select="cac:Item/cbc:Description" /> <!-- Get value of Description -->
    <xsl:variable name='NodeForCurrentPerson' select="//cac:InvoiceLine[cac:Item/cbc:Description=$CurrentPerson]" /> <!-- Get node set of Description -->
    <xsl:variable name='NumOfRows' select="count($NodeForCurrentPerson)" /> <!-- Count number of nodes for Description -->
    <xsl:variable name='SumOfCost' select="sum($NodeForCurrentPerson/cac:Item/cac:BasePrice/cbc:PriceAmount)" /> <!-- Sum of value of all PriceAmount nodes for Description -->
    Person: <xsl:value-of select="$CurrentPerson"/> #Rows: <xsl:value-of select="$NumOfRows"/> Totalt:<xsl:value-of select="$SumOfCost"/> <!-- Compose the value of the Note field -->
     
    </xsl:for-each>
     
    </xsl:template>
  4. Déterminez si les modifications doivent s'appliquer à tous les documents ou uniquement à ceux de la définition de facture XML actuelle. Cliquez sur Enregistrer la définition XML pour n'enregistrer les modifications que pour la Définition de facture XML actuelle (c'est-à-dire le fournisseur actuel). Cliquez sur Enregistrer le profil XML si vous souhaitez que la règle s'applique à toutes les factures XML qui correspondent au profil de facture XML quelle que soit la définition de facture XML.

Tester la règle

Testez cette règle en utilisant le fichier exemple fourni dans l'installation : ...\ReadSoft\INVOICES\Samples\XML\SummaryInvoice-Example.xml

  1. Interprétez le fichier en utilisant une tâche dans laquelle un dossier est défini comme la source d'entrée. Voir « Configuration d'un dossier de fichier comme source d'entrée pour les fichiers XML » dans l'aide de Collector pour plus d'informations.
  2. Dans Optimize, définissez la règle avancée comme présenté dans les étapes 1-3 ci-dessus.
  3. Cliquez sur Extraire, puis sur Enregistrer la définition XML.
  4. Cliquez sur Fermer, puis sur Oui lorsque l'on vous demande si vous avez fini d'optimiser la définition de facture XML.
  5. Exécutez à nouveau la tâche Interpret.
  6. Ouvrez la facture dans Verify, et cette remarque apparaîtra sur la dernière page du PDF :