如今使用 Beancount 记账了三年多,基本形成了记账的习惯,尤其是工作后可以非常方便地统计收入开支情况、查询历史消费记录,越来越觉得当初为了记账而折腾都是值得的。

下面从 Beancount 的记账工作流简单复盘一下:

为什么选择 Beancount

Beancount 属于复式记账法的一种文本记账工具,其一:复式记账中每一笔交易都是平账的,不容易出错,同时也会带我们去了解什么才是资产,了解会计在日常中的应用;其二:文本记账具有数据可读,存储隐私上的有点,毕竟现在变化这么快,各种记账软件层出不穷,停止维护后历史账单如何处理都是问题。最后,这是一款开源软件,免费!颜值高!

怎样使用 Beancount

安装配置

Beancount 是一个需要编译安装的 Python软件,除了需要 Python 环境,还需要 C++ 编译工具,在 Windows 上安装略微棘手,需要先行安装 Python 环境和 Visual Studio 并安装 C++ 编译工具(当然也可以使用WSL,配置会稍方便些),详见官方文档[1]。安装好后,只需要 pip install beancount fava 即可开箱使用。

除了 PC 端,termux 使得手机上也可以运行 Python,所以也可以在手机端上使用 Beancount 记账[2],为了编译安装需要先行使用pkg install libxml2-utils libxslt ,之后 cd /sdcard/file 使用 fava main.bean 就可以在浏览器中查看账本了,操作同PC端无异。另外可以搭配 OneSync 同步桌面端和手机端的账本数据,使用 Beancount APP 进行手机记账。

文件结构

目前我使用的文件结构是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
.
├─data
│ ├─2020 #年份
│ │ ├─2020-01.bean
│ │ ├─2020-02.bean
│ │ ├─2020-12.bean
│ │ ├─income.bean #收入明细
│ │ └─invest.bean #投资明细
│ ├─2021
│ ├─2022
│ └─2023
├─accounts.bean #账户设置
└─main.bean #主文件

main.bean 文件中加入 2020-01-01 custom "fava-option" "collapse-pattern" ".*:.*" 即可索引所有账单文件,我按月分账,收入和投资单独记账。

BQL

Fava 中提供了 BQL (a SQL-like query client for beancount) 可以方便的查询交易记录并进行统计,在2020年刚开始记账时并不会用 SQL,这个功能一直没用起来,不过好在现在有了 ChatGPT 这样的工具可以直接生成需要的命令进行查询。

以此为例:

1
2
SELECT date, payee, narration, position, balance
WHERE account ~ 'Expenses:Traffic:Bike' AND NOT '单车' IN narration;
fava 中使用 BQL 查询维修二手自行车花费

#TO-DO: 细节待补充

# 其他相关项目

andreasgerstmayr/fava-dashboards: Custom Dashboards for Beancount in Fava (github.com)

blaulan/beancount-pbi: A Power BI Desktop dashboard for beancount data (github.com)

deb-sig/double-entry-generator: Rule-based double-entry bookkeeping importer (from Alipay/WeChat/Huobi etc. to Beancount/Ledger). (github.com)

e7h4n/beancount-financial-statement (github.com)

Reference