跳转到主要内容

自定义链接与查询

学习如何通过实现自定义侧边栏链接和SQL查询来增强你的Beancount体验,从而简化财务跟踪和报告。

向标准的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启动它,并在点击快捷方式之前打开其日记报告。

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头中的页面,并替换提供的查询参数。它并不总是打开日记报告。在资产负债表中,它保持在资产负债表上。此行为由标准Fava重定向处理器实现。

  • 当前月份: 在当前报告上设置time=month
  • 上个月: 在当前报告上设置time=month-1
  • 清除全部: 移除accounttimefilter。其他参数(如转换和区间)保持不变。

2021年的固定数据在今天所在的月份将没有交易;在重现其查询结果之前,请使用清除全部/jumpURL需要引用来源。对于直接打开的书签,请复制一个完整的可用报告URL。

在主机根目录,从/sidebar-demo/journal/?time=2021&account=Assets测试了/jump?time=month:它返回HTTP 302到相同的日记,并带有account=Assets&time=month。目标报告返回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通过。在1月9日开始时,Positive持有100 - 30 = 70 USD;Negative持有20 - 50 + 10 = -20 USD

在标准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选择要汇总的分录。没有较低日期界限:期末余额需要所有更早的历史记录,包括12月1日的期初余额。排他性上限包括1月8日,排除1月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"

查询指令也出现在Fava的已保存查询侧边栏中,受sidebar-show-queries(默认5)约束。显式快捷方式针对固定数据的sidebar-demoslug并运行命名查询。标准查询页面从URL读取query_string;其查询API在本地测试中返回了相同的单行-20.00 USD。请参阅版本化的查询组件

在不同的账簿中使用你账本的实际slug。在/books挂载下,快捷方式变为/books/sidebar-demo/query/?query_string=.run+%22negative-balances%22。保持全局过滤器清除以获得完整历史的期末余额;日期过滤器可以在保存的查询运行之前移除期初历史。

最终想法

使用月份快捷方式导航报告,并使用保存的查询检查可重现的期末余额。在审查你的预算时,在解释负数之前区分流出、期间变动和期末余额。有关其他报告,请参阅Fava的扩展文档UI指南

来源:https://beancount.io/zh/docs/Tips/side-bar-link