Ajoutez des directives de liens de barre latérale datés à Fava standard, puis enregistrez une requête qui trouve les soldes finaux négatifs après avoir additionné toutes les écritures. Les exemples ont été exécutés avec Beancount 3.2.3, beanquery 0.2.0 et Fava 1.30.16. Utilisez la configuration locale épinglée.
Ces URL ciblent un serveur Fava local standard. Le tableau de bord hébergé par Beancount.io a des chemins de rapport différents et est traité séparément ci-dessous.
Pourquoi personnaliser Fava ?
Les raccourcis de barre latérale préservent une vue filtrée utile. Une requête enregistrée peut ensuite répondre à une question comptable spécifique sans saisir à plusieurs reprises du BQL.
Points douloureux résolus par ceci :
- Sélectionner à plusieurs reprises le mois en cours ou le mois précédent.
- Rouvrir un rapport enregistré.
- Distinguer une sortie de fonds d'un compte qui se termine en réalité en dessous de zéro.
✨ Liens de barre latérale personnalisés
Ajoutez ces directives au grand livre complet sidebar-demo.beancount de la section suivante. Démarrez-le avec fava sidebar-demo.beancount et ouvrez son rapport Journal avant de cliquer sur un raccourci.
2021-01-01 custom "fava-sidebar-link" "Current Month" "/jump?time=month"
2021-01-01 custom "fava-sidebar-link" "Last Month" "/jump?time=month-1"
2021-01-01 custom "fava-sidebar-link" "Clear All" "/jump?account=&time=&filter="Ce qu'ils font :
/jump revient à la page dans l'en-tête Referer du navigateur et remplace les paramètres de requête fournis. Il n'ouvre pas toujours le rapport Journal. Sur le bilan, il reste sur le bilan. Ce comportement est implémenté par le gestionnaire de redirection Fava standard.
- Mois en cours : définit
time=monthsur le rapport actuel. - Mois dernier : définit
time=month-1sur le rapport actuel. - Tout effacer : supprime
account,timeetfilter. D'autres paramètres, tels que la conversion et l'intervalle, restent.
Le jeu de données 2021 n'aura aucune transaction dans le mois d'aujourd'hui ; utilisez Tout effacer avant de reproduire ses résultats de requête. Une URL /jump nécessite un référent. Pour un signet ouvert directement, copiez plutôt une URL de rapport de travail complète.
À la racine de l'hôte, /jump?time=month a été testé depuis /sidebar-demo/journal/?time=2021&account=Assets : il a renvoyé HTTP 302 au même journal avec account=Assets&time=month. Le rapport de destination a renvoyé 200.
Si un administrateur monte l'application Fava entière sur /books, chaque raccourci relatif à la racine doit inclure ce préfixe. C'est une configuration alternative, pas une autre directive à ajouter en plus de "Mois en cours" ci-dessus :
2021-01-01 custom "fava-sidebar-link" "Current Month" "/books/jump?time=month"Un test de montage WSGI local a vérifié que /books/jump redirige vers /books/sidebar-demo/journal/ avec le nouveau filtre. /jump simple est en dehors de ce montage et a renvoyé 404. Les liens personnalisés de Fava préservent l'URL fournie ; un / en tête signifie la racine de l'hôte, pas la racine du grand livre.
Portée hébergée, vérifiée le 07/09/2026 : la source du tableau de bord Beancount.io utilise des chemins tels que /ledger/OWNER/LEDGER/income-statement et /ledger/OWNER/LEDGER/query. Sa barre latérale construit son propre menu de rapports. La source inspectée n'a pas de route /jump ni de consommateur fava-sidebar-link. Cette recette standard n'est donc pas établie pour ce tableau de bord. Sur le produit hébergé, ouvrez le rapport souhaité et mettez son adresse de travail en signet. L'instantané de la source ne prouve pas quelle révision un déploiement en direct exécute.
🔍 Requêtes SQL personnalisées
Enregistrez ce jeu de données complet sous sidebar-demo.beancount. Il inclut délibérément des écritures à la fois positives et négatives dans chaque compte d'actif :
option "title" "Sidebar Demo"
option "operating_currency" "USD"
2021-01-01 open Assets:BCM:Positive USD
2021-01-01 open Assets:BCM:Negative USD
2021-01-01 open Equity:Opening-Balances USD
2021-12-01 * "Opening balances"
Assets:BCM:Positive 100.00 USD
Assets:BCM:Negative 20.00 USD
Equity:Opening-Balances -120.00 USD
2021-12-10 * "Outflows"
Assets:BCM:Positive -30.00 USD
Assets:BCM:Negative -50.00 USD
Equity:Opening-Balances 80.00 USD
2022-01-05 * "Refund"
Assets:BCM:Negative 10.00 USD
Equity:Opening-Balances -10.00 USD
2022-01-09 balance Assets:BCM:Positive 70.00 USD
2022-01-09 balance Assets:BCM:Negative -20.00 USDbea --file sidebar-demo.beancount check passe. Au début du 9 janvier, Positif détient 100 - 30 = 70 USD ; Négatif détient 20 - 50 + 10 = -20 USD.
Exécutez cette requête dans la page Requête de Fava standard avec les filtres globaux effacés :
SELECT account, currency, SUM(number) AS ending_balance
FROM postings
WHERE account ~ ':BCM:'
AND date < 2022-01-09
GROUP BY account, currency
HAVING SUM(number) < 0
ORDER BY account, currency;| Compte | Devise | Solde final |
|---|---|---|
| Assets:BCM:Négatif | USD | -20.00 |
Analyse :
WHERE sélectionne les écritures à agréger. Il n'y a pas de limite de date inférieure : un solde final a besoin de tout l'historique antérieur, y compris les soldes d'ouverture du 1er décembre. La limite supérieure exclusive inclut le 8 janvier et exclut les transactions du 9 janvier.
GROUP BY account, currency maintient les devises distinctes séparées. HAVING SUM(number) < 0 filtre après avoir additionné les quantités positives et négatives de chaque groupe. C'est un solde d'unités final par devise, pas une valeur marchande convertie dans une seule devise. Il rapporte chaque compte exact, pas les comptes parents consolidés.
Pour comparaison, cette requête exécutable répond à une question différente : combien a été inscrit négativement pendant la fenêtre d'examen ?
SELECT account, currency, SUM(number) AS negative_postings
FROM postings
WHERE account ~ ':BCM:'
AND number < 0
AND date >= 2021-12-09 AND date < 2022-01-09
GROUP BY account, currency
ORDER BY account, currency;| Compte | Devise | Écritures négatives |
|---|---|---|
| Assets:BCM:Négatif | USD | -50.00 |
| Assets:BCM:Positif | USD | -30.00 |
La deuxième requête omet le remboursement et les soldes d'ouverture. Sa ligne -30.00 USD ne signifie pas que Positif est à découvert. Ajouter une limite de date inférieure à la première requête produirait à la place un mouvement net sur une période, pas un solde final. Voir la référence BQL pour plus de syntaxe de requête.
Cas d'utilisation :
- Vérifiez les comptes d'actif pour des quantités négatives inattendues.
- Examinez les écritures négatives séparément lors de l'investigation de sorties de fonds ou de reversements.
- Conciliez le solde rapporté avec l'historique d'ouverture et l'activité ultérieure avant de le traiter comme une anomalie. Un solde négatif de passif ou de revenu peut être normal.
🛠 Astuce de pro : combinez liens + requêtes
Fava prend en charge les liens vers des requêtes. Ajoutez cette requête et ce raccourci enregistrés à sidebar-demo.beancount :
2021-01-01 query "negative-balances" "SELECT account, currency, SUM(number) AS ending_balance FROM postings WHERE account ~ ':BCM:' AND date < 2022-01-09 GROUP BY account, currency HAVING SUM(number) < 0 ORDER BY account, currency"
2021-01-01 custom "fava-sidebar-link" "Negative Balances" "/sidebar-demo/query/?query_string=.run+%22negative-balances%22"La directive de requête apparaît également dans la barre latérale des requêtes enregistrées de Fava, soumise à sidebar-show-queries (valeur par défaut 5). Le raccourci explicite cible le slug sidebar-demo du jeu de données et exécute la requête nommée. La page de requête standard lit query_string depuis l'URL ; son API de requête a renvoyé la même ligne unique -20.00 USD dans le test local. Voir le composant Query versionné.
Utilisez le slug réel de votre grand livre dans un autre livre. Sous le montage /books, le raccourci devient /books/sidebar-demo/query/?query_string=.run+%22negative-balances%22. Gardez les filtres globaux effacés pour un solde final sur tout l'historique ; un filtre de date peut supprimer l'historique d'ouverture avant que la requête enregistrée ne s'exécute.
Réflexions finales
Utilisez les raccourcis de mois pour naviguer dans les rapports et utilisez la requête enregistrée pour vérifier un solde final reproductible. Lors de l'examen de votre budget, distinguez les sorties de fonds, le mouvement de période et les soldes de clôture avant d'interpréter un nombre négatif. Pour des rapports supplémentaires, voir la documentation des extensions de Fava et le guide UI.