Перейти до основного вмісту

Посилання бічної панелі та збережені запити у Fava

Додайте ярлики fava-sidebar-link для фільтрів часу в один клік, а потім збережіть запит BQL, який знаходить від'ємні кінцеві баланси. Перевірено на Fava 1.30.16.

Додайте датовані посилання на бічній панелі до стандартних директив 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 USD

bea --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:NegativeUSD-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:NegativeUSD-50.00
Assets:BCM:PositiveUSD-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 та посібнику з інтерфейсу.

Джерело: https://beancount.io/uk/docs/Tips/side-bar-link