mth_Regroupement
Concatène les valeurs d'un membre de classe sur tous les tuples chargés en mémoire, en une chaîne unique séparée par un caractère configurable (virgule par défaut). Équivalent WLangage du GROUP_CONCAT() SQL. Le quoting des chaînes et dates est appliqué automatiquement — la sortie est directement injectable dans une requête SQL.
📋 Description
mth_Regroupement parcourt l'ensemble des tuples chargés dans la classe et concatène les valeurs d'un membre désigné en une chaîne unique, séparées par un caractère configurable (virgule par défaut). C'est l'équivalent WLangage de la fonction d'agrégation SQL GROUP_CONCAT(), appliqué au jeu d'objets déjà en mémoire dans la classe.
Le quoting est appliqué automatiquement selon le type du membre : les valeurs de type texte ou date sont entourées de quotes simples (utilisable directement dans du SQL), les valeurs numériques restent brutes. Le résultat est donc directement injectable dans une requête SQL sans transformation supplémentaire.
1. Construire un fragment SQL IN (...) pour une requête suivante. Après chargement d'un premier jeu d'objets, on récupère les valeurs distinctes ou la liste complète d'un attribut pour cibler une table liée — par exemple SELECT * FROM lignes WHERE ID_COMMANDE IN (1,5,12,42). Le quoting automatique pour les chaînes et dates rend la sortie directement utilisable.
2. Produire une chaîne d'affichage IHM à partir des objets en mémoire — codes, libellés ou références listés dans un libellé, un tableau de bord ou un export CSV.
3. Sérialiser en CSV les valeurs d'un membre sur tout le jeu chargé, en choisissant un séparateur adapté (point-virgule, tabulation…).
mth_ValeursDistinctesLes deux méthodes produisent une chaîne concaténée à partir des tuples en mémoire, mais avec des objectifs différents :
• mth_Regroupement : conserve les doublons. Une valeur présente 5 fois dans les tuples apparaîtra 5 fois dans la sortie. Quoting automatique selon le type. Cas d'usage : exports CSV, GROUP_CONCAT, listes brutes.
• mth_ValeursDistinctes : supprime les doublons. Une valeur présente N fois n'apparaît qu'une seule fois dans la sortie. Quoting configurable via le paramètre bChainesQuotées. Cas d'usage : clauses IN (...), audit de cardinalité.
La méthode opère uniquement sur les tuples déjà chargés en mémoire dans la classe. Aucune requête SQL n'est émise, aucun aller-retour réseau, pas d'impact sur la base. C'est une opération en O(n) sur le nombre de tuples chargés.
🔑 Signature
LOCAL sMembreClasse est une chaîne,
LOCAL sSéparateur est une chaîne = ","
) : chaîne
| Élément | Valeur |
|---|---|
| Visibilité | PUBLIQUE |
Paramètres
| Paramètre | Type | Défaut | Rôle |
|---|---|---|---|
sMembreClasse | chaîne | — | Nom du membre WLangage à concaténer, sous la forme du nom du membre dans la classe (ex : "m_ID_CLIENT", "m_CODE_ARTICLE", "m_DATE_COMMANDE"). |
sSéparateur | chaîne | "," | Chaîne insérée entre chaque valeur. Le séparateur par défaut "," convient à la construction d'un fragment SQL IN (...) ou d'un export CSV. Au besoin, utiliser "; ", " — ", " | " ou tout autre séparateur selon l'usage prévu. |
Valeur de retour
Une chaîne contenant les valeurs concaténées, séparées par sSéparateur. Les chaînes et dates sont automatiquement quotées (voir §03). En cas de problème (membre inconnu, exception interne), la méthode retourne une chaîne vide.
🧭 Comportement par type de membre
Le quoting des valeurs est automatique et dépend du type WLangage du membre désigné. Cette automatisation rend la sortie directement injectable dans une requête SQL sans transformation supplémentaire.
| Type du membre | Quoting appliqué | Exemple de sortie |
|---|---|---|
| Texte / chaîne (texte, mémo, caractère, Unicode) | ✅ Quotes simples automatiques | 'Dupont','Martin','Durand' |
| Date / DateHeure / Heure | ✅ Quotes simples automatiques + format SQL | '2026-01-01','2026-02-15' |
| Numérique (entier, réel, monétaire, durée, ID auto) | ❌ Valeur brute, sans quotes | 1,5,12,42 |
| Booléen | ❌ Valeur brute (0/1 ou Vrai/Faux selon contexte) | 1,0,1,1 |
Contrairement à mth_ValeursDistinctes où le quoting est configurable, ici il est imposé par le type du membre. Cela signifie que la sortie de mth_Regroupement peut être concaténée telle quelle dans une clause IN (...) sans avoir à se soucier du type sous-jacent. Le framework garantit la cohérence d'échappement quel que soit le provider de la connexion ORM.
Choix du séparateur
Le séparateur par défaut "," convient à la construction d'un fragment SQL IN (...) ou d'un export CSV. D'autres séparateurs sont utiles selon le contexte d'affichage :
| Séparateur | Cas d'usage |
|---|---|
"," (défaut) | Clause IN (...) SQL, export CSV simple |
"; " | Énumération lisible en libellé IHM, export CSV européen |
" — " ou " | " | Affichage compact dans un bandeau ou un titre |
RC (retour chariot) | Liste verticale dans un libellé multiligne |
TAB (tabulation) | Export TSV ou collage dans un tableur |
⚠️ Cas particuliers et garanties
Comportement selon les cas
| Cas | Retour |
|---|---|
| Tuples chargés, membre valide | Valeurs concaténées avec le séparateur (ex : "1,5,12,42" ou "'ART01','ART02','ART03'") |
| Aucun tuple chargé en mémoire | "" (chaîne vide) |
| Membre désigné inconnu de la classe | "" (chaîne vide, sans erreur levée) |
| Exception interne (accès indirect échoué) | "" (chaîne vide, exception silencieuse en production) |
Garanties et non-garanties
| Aspect | Comportement |
|---|---|
| Doublons | ❌ Conservés. Pour dédoublonner, utiliser mth_ValeursDistinctes. |
| Ordre des valeurs | Suit l'ordre des tuples en mémoire (ordre de chargement). Pas de tri appliqué par la méthode. |
Valeurs NULL | Concaténées telles quelles avec le quoting du type — aucun filtrage particulier. |
| Tuples marqués supprimés logiquement | Exclus du calcul — les tuples dont la propriété p_bRecordDeleted vaut Vrai sont ignorés par la méthode. Voir l'encadré dédié dans cette section. |
| Quoting | Automatique selon le type (cf. §03) — non configurable. |
Les tuples dont la propriété p_bRecordDeleted (alias français : p_bEnregistrementSupprimé) vaut Vrai sont automatiquement exclus du calcul. Cela couvre deux scénarios usuels :
1. Suppression en lot via mth_EnregistrerTableau : un élément du tableau interne dont la PK est passée à une valeur négative est supprimé en base, et le drapeau p_bRecordDeleted est posé à Vrai. L'élément reste dans le tableau en mémoire mais n'est plus pris en compte par les méthodes d'agrégat.
2. Marquage logique applicatif : le code applicatif peut poser p_bRecordDeleted = Vrai sur certains tuples pour les exclure des calculs sans les supprimer en base. Pratique pour des calculs conditionnels sur un sous-ensemble.
La même logique s'applique à mth_SommeValeurs, mth_ValeurMoyenne, mth_ValeurMaximale, mth_ValeurMinimale et mth_ValeursDistinctes.
SansEspace() <> ""Le retour "" couvre plusieurs cas (aucun tuple, membre inconnu, exception). Tester SI SansEspace(sRésultat) <> "" ALORS avant d'utiliser la chaîne dans une clause IN (...) évite de générer du SQL invalide — une clause IN () vide est rejetée par tous les providers.
💡 Exemples
Mode 1 — fragment IN (...) SQL avec IDs numériques
Cas d'usage le plus courant : on a chargé un premier jeu d'objets et on veut interroger une table liée via une clause IN (...). Les IDs sont numériques, donc concaténés bruts.
Mode 2 — fragment IN (...) SQL avec codes article (chaînes)
Pour les attributs de type chaîne, le quoting est appliqué automatiquement — la sortie est directement utilisable.
Mode 3 — export CSV avec séparateur personnalisé
Cas d'usage : produire une ligne CSV à partir de la liste des libellés présents dans le jeu chargé.
Mode 4 — affichage IHM lisible
Cas d'usage : afficher les villes distinctes des clients chargés dans un libellé de tableau de bord.