Додайте датовані посилання на бічній панелі до стандартних директив Fava, а потім збережіть запит, який знаходить від’ємні кінцеві залишки після підсумовування всіх проводок. Приклади виконано з Beancount 3.2.3, beanquery 0.2.0 та Fava 1.30.16. Використовуйте зафіксовану локальну конфігурацію.
Ці URL-адреси призначені для локального сервера Fava. Хмарна панель керування Beancount.io має інші шляхи до звітів, які розглядаються окремо нижче.
Чому варто налаштовувати Fava?
Посилання на бічній панелі зберігають корисний відфільтрований вигляд. Збережений запит дозволяє відповісти на конкретне бухгалтерське питання без повторного введення BQL-коду.
Які проблеми це вирішує:
- Повторний вибір поточного або попереднього місяця.
- Повторне відкриття збереженого звіту.
- Відображення від’ємного залишку, коли рахунок фактично нижче нуля.
✨ Спеціальні посилання на бічній панелі
Додайте ці директиви до повного файлу sidebar-demo.beancount у наступному розділі. Запустіть його за допомогою fava sidebar-demo.beancount і відкрийте звіт «Journal», перш ніж натискати ярлики.
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="Що вони роблять:
/jump повертає до сторінки, з якої надійшов перехід (заголовок Referer), і замінює вказані параметри запиту. Він не завжди відкриває звіт «Journal». На сторінці балансу він залишається на сторінці балансу. Цю поведінку реалізовано у стандартному обробнику перенаправлень Fava.
- Поточний місяць: встановлює
time=monthу поточному звіті. - Попередній місяць: встановлює
time=month-1у поточному звіті. - Очистити все: видаляє
account,timeтаfilter. Інші параметри, як-от конвертація та інтервал, залишаються без змін.
У фіксованому наборі даних за 2021 рік не буде транзакцій у поточному місяці; скористайтеся Очистити все, перш ніж відтворювати результати запиту. URL-адреса /jump потребує джерела переходу (referrer). Якщо відкривати закладку безпосередньо, скопіюйте повну робочу URL-адресу звіту.
У корені хоста /jump?time=month тестувався з /sidebar-demo/journal/?time=2021&account=Assets: він повернув HTTP 302 на той самий журнал з параметрами account=Assets&time=month. Цільовий звіт повернув HTTP 200.
Якщо адміністратор монтує повну програму Fava у /books, кожен відносний шлях від кореня повинен містити цей префікс. Це альтернативна конфігурація, а не додаткова директива до «Поточного місяця» вище:
2021-01-01 custom "fava-sidebar-link" "Current Month" "/books/jump?time=month"Локальний тест WSGI підтвердив, що /books/jump перенаправляє на /books/sidebar-demo/journal/ з новим фільтром. Звичайний /jump знаходиться поза межами монтування та повертає 404. Спеціальні посилання Fava зберігають надану URL-адресу; провідний / означає корінь хоста, а не корінь книги обліку.
Хмарне середовище, перевірено 2026-09-07: вихідний код панелі керування Beancount.io використовує такі шляхи, як /ledger/OWNER/LEDGER/income-statement та /ledger/OWNER/LEDGER/query. Його бічна панель будує власне меню звітів. У перевіреному коді немає маршруту /jump або споживача fava-sidebar-link. Тому цей стандартний рецепт не підтверджений для цієї хмарної панелі. У хмарному продукті відкрийте потрібний звіт і додайте його робочу адресу в закладки. Знімок коду не доводить, яку версію виконує робочий сервер.
🔍 Спеціальні SQL-запити
Збережіть цей повний файл як sidebar-demo.beancount. Він навмисно містить як додатні, так і від’ємні проводки на кожному рахунку активів:
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 проходить без помилок. На початок січня 9-го: Positive має 100 - 30 = 70 USD; Negative має 20 - 50 + 10 = -20 USD.
Виконайте цей запит на сторінці «Query» у стандартній Fava з очищеними глобальними фільтрами:
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;| Рахунок | Валюта | Кінцевий залишок |
|---|---|---|
| Assets:BCM:Negative | USD | -20.00 |
Пояснення:
WHERE вибирає проводки для агрегування. Нижньої межі дати немає: кінцевий залишок потребує всієї попередньої історії, включно зі вступними залишками від 1 грудня. Верхня межа є виключною: включає проводки до 8 січня включно, а 9 січня вже не включає.
GROUP BY account, currency групує дані за рахунком і валютою. HAVING SUM(number) < 0 фільтрує після підсумовування додатних і від’ємних величин у кожній групі. Це кінцевий залишок у одиницях валюти, а не ринкова вартість, перерахована в одну валюту. Він показує кожен конкретний рахунок, а не згорнуті батьківські рахунки.
Для порівняння, цей виконуваний запит відповідає на інше питання: скільки було від’ємних проводок протягом періоду огляду?
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;| Рахунок | Валюта | Від’ємні проводки |
|---|---|---|
| Assets:BCM:Negative | USD | -50.00 |
| Assets:BCM:Positive | USD | -30.00 |
Другий запит пропускає повернення та вступні залишки. Його рядок -30.00 USD не означає, що Positive «перевитрачено». Якщо додати нижню межу дати до першого запиту, ви отримаєте чистий рух за період, а не кінцевий залишок. Додатковий синтаксис запитів дивіться у довіднику BQL.
Приклади використання:
- Перевірте рахунки активів на неочікувані від’ємні величини.
- Перегляньте від’ємні проводки окремо під час аналізу відтоків або сторнувань.
- Звірте звітний залишок із вступною історією та подальшою активністю, перш ніж вважати його аномалією. Від’ємний залишок на рахунку зобов’язань або доходів може бути нормальним.
🛠 Порада: комбінуйте посилання та запити
Fava підтримує посилання на збережені запити. Додайте цей збережений запит і ярлик до 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"Директива query також з’являється в бічній панелі збережених запитів Fava залежно від параметра sidebar-show-queries (за замовчуванням 5). Явний ярлик націлений на слаг sidebar-demo файлу та виконує іменований запит. Стандартна сторінка запитів читає query_string з URL-адреси; її API запитів повернув той самий єдиний рядок -20.00 USD у локальному тесті. Дивіться версіонований компонент Query.
Використовуйте фактичний слаг вашої книги обліку в іншому файлі. У разі монтування /books ярлик стає /books/sidebar-demo/query/?query_string=.run+%22negative-balances%22. Тримайте глобальні фільтри очищеними для повного кінцевого залишку; фільтр дати може прибрати вступну історію до виконання збереженого запиту.
Підсумки
Використовуйте ярлики місяців для навігації звітами та збережений запит для перевірки відтворюваного кінцевого залишку. Під час аналізу вашого бюджету розрізняйте відтоки, рух за період і кінцеві залишки, перш ніж інтерпретувати від’ємне число. Додаткові звіти дивіться в документації розширень Fava та посібнику з інтерфейсу.