上一篇文章《基础认识》为大家简单地介绍了 Beancount 的安装过程和示例演示,本篇文章将开始介绍 Beancount 的初级使用,如果各位读者对 Beancount 还不了解,请先阅读上一篇文章。
目录结构
首先,我们先规划好记账系统的目录结构,下面这个是我自己的目录
├── accounts.bean
├── documents
│ ├── Assets
│ ├── Expenses
│ ├── Income
│ └── Liabilities
└── main.bean
accounts.bean 是账户文件,比如我要开一个工商银行卡的账户,便在这个文件中进行操作。
documents 目录下有四个目录,分别是 Assets(资产)、Expenses(消费)、Income(收入)、Liabilities(负债),用来放置对应的账单文件
而 main.bean 是主入口文件,里面通常是一些初始化命令,比如设定系统的名字,引入账单文件等。
以上仅仅是我自己的目录规划,大家可以根据自己的喜好进行规划,Beancount 对目录没有特别的要求,甚至对文件的命名、后缀也没有要求,比如你可以把 main.bean 设置为 index.xxx 也是可以的
入口文件
我们先从入口文件 main.bean 开始
设置记账系统的名字(标题),我给自己的系统取名为 金山银山
; 系统标题(这里前面加分号代表注释)
option "title" "金山银山"
然后我们在 main.bean 所在目录运行一下
⇒ fava main.bean
Running Fava on http://localhost:5000
在浏览器打开 http://localhost:5000 你就能看到我们设定的标题

设定货币类型(至少添加一种,否则会报错)
option "operating_currency" "CNY"
option "operating_currency" "USD"
option "operating_currency" "CAD"
需要注意的是,这里并非是要添加所有的货币,仅需要把你日常使用的货币类型添加就行,这个设置在报表中会体现出来,如下图。

引入账户文件
include "accounts.bean"
什么是账户?
比如你有尾号为 0001 的工商卡和尾号为 0002 的招行卡,银行卡属于资产,因此我们把它归类到 Assets 下,并且可以为他们开设一个账户,操作如下
; 开户日期 开户命令 账户名称 货币类型
2019-04-01 open Assets:Bank:ICBC:0001 CNY
2019-04-01 open Assets:Bank:CMB:0002 CNY
其中,前面的日期代表开户日期,oepn 即开户的命令,但 Assets:Bank:ICBC:0001 这一段是什么意思呢?
简单解释一下,因为银行卡属于资产,所以银行卡分配到 Assets 层级下,因为这是属于在银行的资产,所以再添加一个层级,就变为 Assets:Bank,这是属于工商银行(ICBC)的银行卡,所以再添加一个层级变为 Assets:Bank:ICBC,这是尾号为 0001 的工行卡,所以最终的层级就变为 Assets:Bank:ICBC:0001,这就算是一个账户,层级之间用冒号进行分隔即可。
需要注意的是,除了Assets 是固定的名字之外(事实上也可以自定义,这里暂不展开),后面的层级名称可以自定义,并且层级的数量也可以根据自己的习惯设定,比如你完全可以将这个账户设定为 Assets:ICBC:001,省略了 Bank 也是可以的,但这样可能就不那么清晰了。
并且,你还可以继续细分,比如,我在尾号为 0001 的工行卡上既有现金储蓄又有股票投资,那么可以开设两个账户
2019-04-01 open Assets:Bank:ICBC:0001:Cash CNY
2019-04-01 open Assets:Bank:ICBC:0001:Stock CNY
了解了什么是账户,可能有小伙伴有一个疑问,我该如何记录自己现有的资产呢,即如何初始化?
首先,我们要了解几个基本概念,即
- Assets(资产)
- Expenses(消费)
- Income(收入)
- Liabilities(负债)
- Equity(权益)
如果把它们视为 5 个桶的话,那我们的 money 就是在这几个桶之间流过来流过去,比如 Income(收入) 流向 Assets(资产),Assets(资产)流向 Expenses(消费)
对这几个概念有了基本认识之后,我们便可以开始记账了
第一步
我们刚开始的时候,肯定要先初始化我们已有的资产,这一部分资产我们先把它放在 Equity(权益)这个桶上,我们为它开设一个账户
; opening balances 的意思是 期初余额 的意思,你也可以按照自己的喜好命名
2019-05-05 open Equity:Opening-Balances
把上面这些命令写在你的账户文件上,比如 accounts.bean,保存之后刷新一下 http://localhost:5000,你便能看到你的 Equity(权益)数据

然后,再开设一个资产(Assets)账户,将 Equity:Opening-Balances 上的资产转移到该账户下
; checking 的意思是核对账目,同上,你可以自己起一个自己喜欢的名字
2019-05-05 open Assets:Checking
这个也是保存在 accounts.bean 文件上
接下来,我们将 Equity(权益)的资产转移到 Assets:Checking 账户下,比如我现有的资产(现金、存款、股票等)总共是 1万 块,那么可以这样记录
2019-05-05 * “initial assets”
Assets:Checking 10000.00 CNY
Equity:Opening-Banlances -10000.00 CNY
你还可以省略这样写
2019-05-05 * “initial assets”
Assets:Checking 10000.00 CNY
Equity:Opening-Banlances
或者这样写
2019-05-05 * “initial assets”
Assets:Checking
Equity:Opening-Banlances -10000.00 CNY
beancount 可以只知道流出(流入)的方向和数量情况,即可推倒出对立的情况
这样,我们就初始化好了自己已有的资产,然后,我们将这个总资产分配到具体的账户下,比如我有现金 2千,银行卡里有 6千,股票有 2千,那么我们需要先新开3个账户,分别是
2019-05-05 open Assets:Cash CNY
2019-05-05 open Assets:BankCard CNY
2019-05-05 open Assets:Stock CNY
开好账户后,然后分配资产
2019-05-05 * “distribute asset for cash”
Assets:Cash 2000.00 CNY
Assets:Checking
2019-05-05 * “distribute asset for card”
Assets:BankCard 6000.00 CNY
Assets:Checking
2019-05-05 * “distribute asset for stock”
Assets:Stock 2000.00 CNY
Assets:Checking
期待后续文章
最近比较忙,后续我会补充