FM Pro Advanced : Comment agréger une liste de valeurs

Version 3

    Bonjour à tous,

     

    Hier, pour la énième fois, j'avais impérativement besoin de pouvoir générer une liste de valeurs qui énumère les différentes valeurs des enregistrements liés à l'enregistrement actif.

     

    Dans mon cas, il s'agissait de pouvoir compter le nombre de taux de TVA différents que comporte une facture en parcourant ses lignes.

     

    Il y a plusieurs façon de faire cela, mais je cherchais une façon "simple", sans occurrences de tables multiples ni requêtes SQL.

     

    Par ailleurs, je savais bien que c'était possible en définissant une fonction de calcul avec récursion, mais pour être honnête, je n'étais pas à l'aise avec l'écriture de telles fonctions.

     

    Alors, j'ai lu l'article à ce propos du FileMaker Training Series en page 59 ( Chapitre 5 ) et j'ai plongé...

     

    Je suis très heureux du résultat et voulais vous en faire profiter... ( Mais que cela ne vous dispense pas de lire cet excellent chapitre du FTS !!! )

     

    Ainsi, je peux maintenant énumérer depuis ma facture, les différents taux TVA indiqué dans les lignes ( et du coup les compter facilement ) en utilsant cette formule :

     

    AgregerListe ( Liste ( LignesFactures::TauxTVA ) )

     

    Vous aimeriez ajouter cette fonction à votre fichier FileMaker Pro ? Facile :

    1. Ouvrir FileMaker Pro Advanced allez choisir la commande de menu Fichier > Gérer > Fonctions personnalisées...
    2. Bouton [Créer]
    3. Définir le nom de la fonction (attention à l'orthographe) : AgregerListe
    4. Ajouter un paramètre initulé (attention à l'orthographe) : ListeDeValeurs
    5. Puis coller la formule ci après :

     

    // AGREGER_LISTE

    // But de la fonction : créer un liste de valeurs uniques sur la base d'une liste de valeur

    // Paramètre de la fonction : ListeDeValeurs

    // Variables globales : $$AgrList__iter, $$AgrList__result

    // FileMaker 8 minimum

    // Fred, 20 janvier 2014

    // ===================================================

     

     

    Definir ( [ L = ListeDeValeurs

    ] ;

    Si ( $$AgrList__iter < DecompteValeurs ( L )

    ;

     

     

    // 1. PASSAGES AVEC ITERATION

    // On appelle cette fonction en boucle pour contruire au fil des appels, une variable globale comportant une liste unique.

    // ========================================================================

     

     

    Definir ( [ $$AgrList__iter = $$AgrList__iter + 1

    ;

    V = ObtenirValeur ( L ; $$AgrList__iter )

    ;

    $$AgrList__result = Si ( DecompteValeurs ( ValeursFiltre ( $$AgrList__result ; V ) )

    ;

    // La valeur existe déjà dans la variable, on ne modifie pas cette dernière :

     

     

    $$AgrList__result

    ;

    // Au contraire elle n'existe pas encore, on l'ajoute :

     

     

    Liste ( $$AgrList__result ; V )

    )

    ] ;

    AgregerListe ( L )

    )

    ;

     

     

    // 2. DERNIER PASSAGE / SORTIE

    // On transfère le résultat de la variable globale puis on efface toutes les variables globales.

    // =======================================================

     

     

    Definir ( [ A = $$AgrList__result

    ;

    $$AgrList__result = ""

    ;

    $$AgrList__iter = ""

    ] ;

     

     

    // >>>>RESULTAT FINAL<<<<

    // ==================

     

     

    A

    )

    )

    )