在介绍 Beancount 之前,我想先说说自己以往是如何记账的。

作为自由职业者,记帐是一门必修课,但大多数人,即使是在职场中的朋友,都很少有记账的习惯,而我也是最近才正式开始重视起记账这件小事。

最初的时候,我主要是利用 Excel 表格进行记账,但主要是记录收入为主,比如外包项目收入,个人产品收入等等,而自己的日常开销基本就抛诸脑后了,每到月底的时候就会回想,这个月怎么花了这么多钱?都花在哪了?

可能有人会说,你就挣这几个钱,值得为此劳心费力吗?嗯,说到心坎上了。

但是,综合我以往记录收入的习惯来看,我认为我是能够从中获益的,通过数据,我能看到上个月赚了多少钱,为什么只赚这么一点,以后可以通过哪些渠道创收,这些都是记账的好处呀,能够通过量化数据清晰的反映自己的表现是好是坏。

反过来说,如果把日常开销、个人投资等任何涉及金钱的事件都记录下来,我想也会有这样的效果,比如哪些钱是不值得花的,哪些投资是值得继续或者终止的。

之所以不再继续采用 Excel 表格这种形式记账,是因为自己最近在阅读他人的博客的时候,博主提到了自己用 Beancount 记账的事,好奇心促使之下我搜索了一番,简直打开了新世界!而我用 Excel 记账无非就是流水账,体现的价值不大。

Beancount 是什么?

根据官网的描述

A double-entry bookkeeping computer language that lets you define financial transaction records in a text file, read them in memory, generate a variety of reports from them, and provides a web interface.

翻译成人话就是

一种允许用户在文本文件中定义金融交易记录,通过在内存中读取数据,可以生成各种报告以及提供网页界面的复式记账计算机语言

里面有两个重要的关键词,复式记账 和 计算机语言,后者你把它简单理解为一种编写规则,而前者则是会计学科的专业术语,也是 Beancount 所遵循的规范。

什么是 复式记账?

复式记账法是以资产与权益平衡关系作为记账基础,对于每一笔经济业务,都要以相等的金额在两个或两个以上相互联系的账户中进行登记,系统地反映资金运动变化结果的一种记账方法。
复式记账是对每一项经济业务通过两个或两个以上有关账户相互联系起来进行登记的一种专门方法。任何一项经济活动都会引起资金的增减变动或财务收支的变动

百度百科

我知道,很多人看了之后还是理解不了什么是复式记账,这里简单的举个例子相信就能够对复式记账有一个基本的认识了。

场景:小明 在淘宝买了一台手机,花了 5000 元

通常情况下,小明可能就会简单的把这笔帐记为

2019年04月06日
淘宝花了5000千元购买手机

而,如果是复式记账的话,则会有两条记录

2019年04月06日
花费:5000元 淘宝购买手机
资产:-5000元

也就是说,每一笔资金流动,都会有流出端和流入端,这也是为什么叫 复式 的原因(其实英文 Double-Entry 就很好理解了),这个场景下就是 资产 => 花费

好了,有了简单的认识之后,我们正式开始介绍 Beancount

一:安装(macOS)

需要准备的环境 python(Beancount 是基于 python 开发的),如果没有安装的话,可以用brew 安装

brew install python
hg clone https://bitbucket.org/blais/beancount

从 bitbucket 仓库中克隆 beancount 到本地(你喜欢在哪个目录就在哪个目录),为什么不是 GitHub,因为 bitbucket 中的更新更加及时,为保证你获取的是最新的代码,建议从 Bitbucket 中克隆

克隆之后,进入到 beancount 目录

cd beancount

然后执行安装命令

pip3 install .

稍等片刻即可完成安装,可以顺带把 fava 也安装了,fava 是 beancount 的 UI 实现,比自带的要好看的多,安装很方便,以下命令:

pip3 install fava

至此,我们已经将项目安装完毕。

二:基本认识

beancount 安装完后,会提供几个命令行工具,分别是

  • bean-bake
  • bean-check
  • bean-doctor
  • bean-example
  • bean-extract
  • bean-file
  • bean-format
  • bean-identify
  • bean-price
  • bean-query
  • bean-report
  • bean-sql
  • bean-web

关于这些命令的具体使用,可以查看官方文档,初次见面,这里仅介绍其中的几个命令

首先,beancount 对账本的存放位置没有什么要求,我们可以以任意目录作为我们账本文件存储的位置,因为我用的是 macOS 系统,而我又希望这个账本数据同步到 iCloud,所以选择了 ~/Documents 目录作为存放位置

选定存放位置之后,我们创建一个专门存放账本的目录,如 bookkeeping,在 ~/Documents/bookkeeping 目录下,作为演示,我们新建一个账本文件叫 example.bean,需要注意的是,文件的后缀名你可以自己取,比如你命名为 example.txt 也是可以的。

然后,我们在前面知道有一个命令叫 bean-example,这个命令会输出一堆的演示数据,我们将这个数据导入到 example.bean 中

bean-example > example.bean

我们先不管输入进去的演示数据长什么样,我们用之前安装的 fava 命令行工具来直观的看一下这个数据的效果

fava example.bean
fava 运行演示数据

我们在浏览器上打开 http://localhost:5000,基本界面如下

UI-1
UI-2

怎么样,是不是很强大,损益表、资产负债表、试算表、日记账等所有数据都帮你归纳的整整齐齐,层级分的非常清晰。

而我们也留意到beancount 也自带一个叫 bean-web 命令,但界面看起来非常原始,而且操作也不太友好。

bean-web example.bean --port 5000
bean-web UI 界面

以上,是关于 Beancount 的基本认识,受限于篇幅,将会拆分为几部分为大家进行由浅入深的介绍。

Categorized in:

Tagged in:

,