Technique6 min de lecture

Dimensions financières en X++ : DimensionDefault et bons EDT

Dimensions financières en X++ dans D365 F&O : choisir le bon EDT (DimensionDefault, LedgerDimensionAccount…), stockage, immutabilité et erreurs.

La réponse courte

Pour stocker des dimensions financières sur une table personnalisée de Dynamics 365 Finance & Operations, ajoutez un champ dont le type est l'EDT adapté, avec sa relation de clé étrangère : DimensionDefault (vers DimensionAttributeValueSet) pour un ensemble de dimensions sans compte principal, comme sur un client ou un en-tête de document ; LedgerDimensionAccount (vers DimensionAttributeValueCombination) pour un compte général complet. Microsoft insiste : un mauvais EDT empêche les outils du framework de détecter l'usage des dimensions et peut corrompre les données lors des opérations de maintenance.

Deuxième règle : les données de dimensions sont immuables. On ne les met jamais à jour ni ne les supprime en SQL ; on crée un nouvel ensemble de valeurs par le framework et on fait pointer le document dessus.

Quel EDT choisir ?

D'après la matrice de décision de Microsoft Learn :

  • Dimensions seules, sans compte principal : DimensionDefault → DimensionAttributeValueSet.
  • Compte multisegment (compte principal + dimensions) : LedgerDimensionAccount → DimensionAttributeValueCombination.
  • Compte principal seul, pour un profil de comptabilisation ou des paramètres : LedgerDimensionDefaultAccount.
  • Lignes de journal dont le type de compte est donné par LedgerJournalACType (compte général, client, fournisseur…) : DimensionDynamicAccount.
  • Compte principal par défaut ou compte non général : DimensionDynamicDefaultAccount.

Ne stockez pas dans les tables de dimensions des scénarios propres à un module qui n'entrent dans aucune de ces catégories.

Comment les valeurs sont-elles stockées ?

Un champ DimensionDefault contient une clé vers un enregistrement DimensionAttributeValueSet ; chaque valeur de dimension est une ligne de DimensionAttributeValueSetItem rattachée à cet ensemble. On peut les lire via la vue DimensionAttributeValueSetItemView. Seules les dimensions renseignées sont stockées : une valeur vide n'est pas enregistrée.

Sur les formulaires, l'affichage et la saisie passent par le contrôleur DimensionDefaultingController, qui détermine les dimensions applicables à la société. Pour copier ou fusionner des dimensions (par exemple du fournisseur vers l'en-tête de commande), chaque processus définit sa propre priorité : le framework ne l'impose pas.

Pour rendre une table personnalisée utilisable comme source de valeurs de dimension, Microsoft décrit la création d'une vue DimAttribute[NomTable] (champs Key, Value, Name) et de son privilège de lecture.

Erreurs fréquentes

  • Typer le champ avec RefRecId ou un EDT générique au lieu de DimensionDefault : les scanners de références ne le voient pas.
  • Corriger une dimension erronée par un UPDATE SQL sur DimensionAttributeValueSet ou une table « Dimension… » : toutes les autres références partagées sont modifiées. Microsoft recommande de recréer le bon ensemble via un document temporaire, puis de recopier la clé.
  • Utiliser une dimension pour des valeurs très variables (numéro de commande, de série, de ticket) : les tables de dimensions grossissent sans fin ; utilisez plutôt les financial tags.
  • Oublier les dimensions « fixes » du compte principal, qui écrasent la valeur saisie lors de la validation.

Faire générer ce développement

Ajouter des dimensions à une table personnalisée, les afficher et les reporter dans la comptabilisation est un développement fréquent côté finance. Skalp AI rédige la spécification, génère le code X++ et les tests unitaires, compile en contrôlant les bonnes pratiques, puis livre par pull request dans votre Azure DevOps : rien n'est fusionné sans la validation de votre architecte technique. Voir rapports et finance D365 et extensions D365 F&O sur mesure, le cadre général dans développer en X++ sans consultant en 2026, et les offres Basic, Pro et Max (1 crédit, ≈ 400 € en Basic, 200 € en Pro, consommé seulement à la génération du code).

À lire aussi : requêtes Query et QueryBuildDataSource.

Sources

Questions fréquentes

Quel EDT pour des dimensions par défaut sur une table personnalisée ?

DimensionDefault, avec une relation vers DimensionAttributeValueSet.

Peut-on corriger une dimension directement en base ?

Non. Les tables de dimensions sont immuables et partagées. Créez le bon ensemble de valeurs par l'application, puis faites pointer le document dessus.

Dimension financière ou financial tag ?

Dimension pour des valeurs réutilisables (centre de coûts, département…). Financial tag pour des valeurs très variables comme un numéro de document.

Prêt à transformer votre D365 ?

Rejoignez les DSI qui développent leurs tickets D365 en 2 à 4 h pour 1 crédit (≈ 400 € en Basic, 200 € en Pro).