Beancount|打造你的个人记账系统

avatar 2019年5月16日11:06:34 评论浏览:366

其实,就我这点收入,这帐又有什么好记的呢。。。嗯,在没有开始正式记账之前,我一直是这么想的。

自从辞职单干之后,自己的收入来源不固定,各种收入都有,外包收入、卖软件、打赏、群红包(蚊子肉也是钱)等,开销的话就是日常生活支出占大比例。可是,当自己回想的时候,都不知道自己的钱怎么就无端端没了。?

当然,我自己也不是完全没有记账的习惯,外包这一块的收入我还是会用Excel 表格随便记一下,毕竟有时候怕自己忘掉,到时候和客户核对的时候记不住就尴尬了。但我的记账非常乱不规范,比如我想知道上个月外包的收入是比较费时间的,有好几个 Excel 文件,且每个文件记账的标准可能又不一样,处理起来非常麻烦,所以干脆也懒得去整理了。

但偶然有一次机会,我接触到一个叫 Beancount 的开源工具,“wow,原来还有这么 Cool 的记账工具!”,这是我当时的感受。

因为这工具主要是用命令行操作的,而作为一枚程序员,还有什么能比这还 Cool 呢??

所以,接下来的内容,如果不懂代码的话,可以右滑退出本文了,嗯~

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 官网

翻译成人话就是

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

但 复式记账 又是什么玩意?

如果对会计知识不了解的话,我们一定会对什么是 复式记账 充满疑惑,但如果看英文单词 double-entry 就很好理解了,double 不用过多解释,entry 在金融语境里面具有登记、入账的意思,所以翻译成中文 复式记账。

嗯,我知道大家还不明白,我举个 ?

阿 Bee 今天(2019.05.15)花了两块钱现金在 7-11 便利店买了 1 瓶水。

对于大部分人来说,如果采用普通记账的话就是

日期|物品|费用

2019.05.15 | 水|2元

而采用复式记账的话则是

2019.05.15

买水|+2元

现金|-2元

可以留意到,这里有两条记录,买水属于消费,而现金属于资产,资金的流向是 资产 → 消费,通过正负号可以很清晰地看到资金的流向,并且他们的数额相加必为 0,一进一出,这就是复式记账。

关于 复式记账 更为正式的定义

复式记账法是以资产与权益平衡关系作为记账基础,对于每一笔经济业务,都要以相等的金额在两个或两个以上相互联系的账户中进行登记,系统地反映资金运动变化结果的一种记账方法
百度百科

通过大量的 一进一出 这种复式记账的记录方式,持续记录一段时间后,我们就能很清晰地看到我们的各种资金流向。

如何安装 Beancount?

首先,Beancount 是基于 Python 开发的,所以要确保你已经有了 Python 环境,macOS 用户可以在命令行中敲入如下命令进行安装

brew install python

确保正确安装 Python 之后,我们可以从 Beancount 的官方仓库中克隆该项目到本地(至于为什么不是 GitHub,这里解释一下,因为 Beancount 的作者在 GitHub 上的版本更新比 BitBucket 慢)

hg clone https://bitbucket.org/blais/beancount

克隆下来之后,进入到 beancount 目录

cd beancount

然后执行安装命令(我的是 Python3 版本,所以用的是 pip3,读者按照自己的环境操作即可)

pip3 install .

稍等片刻,即可完成安装,安装完毕之后,Beancount 提供了一堆强大的命令

bean-bake bean-check bean-count bean-examplebean-sqlbean-web.....

但初来乍到,我们还不知道这工具最终的效果如何,但我们留意到这里有一个叫 bean-example 的命令,这个命令是用来生成一个示例的,我们执行来看看

⇒ bean-example > example.beanINFO : Generating Salary Employment IncomeINFO : Generating Expenses from Banking AccountsINFO : Generating Regular Expenses via Credit CardINFO : Generating Credit Card Expenses for TripsINFO : Generating Credit Card Payment EntriesINFO : Generating Tax Filings and PaymentsINFO : Generating Opening of Banking AccountsINFO : Generating Transfers to Investment AccountINFO : Generating PricesINFO : Generating Employer Match ContributionINFO : Generating Retirement InvestmentsINFO : Generating Taxes InvestmentsINFO : Generating Expense AccountsINFO : Generating Equity AccountsINFO : Generating Balance ChecksINFO : Outputting and Formatting EntriesINFO : Contextualizing to Realistic NamesINFO : Writing contentsINFO : Validating Results

bean-example 命令会输出一堆的文本,我们将这些文本保存到 example.bean 这个文件中(也可以命名为 example.txt 等任意你喜欢的文件名,没有要求),执行之后,我们打开 example.bean 看一下这些文本长啥样。

;; -*- mode: org; mode: beancount; -*-;; Birth: 1980-05-12;; Dates: 2017-01-01 - 2019-05-15;; THIS FILE HAS BEEN AUTO-GENERATED.* Options
option "title" "Example Beancount file"option "operating_currency" "USD"
* Commodities
1792-01-01 commodity USD export: "CASH" name: "US Dollar"
1900-01-01 commodity VMMXX export: "MUTF:VMMXX (MONEY:USD)"
1980-05-12 commodity VACHR export: "IGNORE" name: "Employer Vacation Hours"
1980-05-12 commodity IRAUSD export: "IGNORE" name: "US 401k and IRA Contributions"
1995-09-18 commodity VBMPX export: "MUTF:VBMPX" name: "Vanguard Total Bond Market Index Fund Institutional Plus Shares" price: "USD:google/MUTF:VBMPX"
2004-01-20 commodity ITOT export: "NYSEARCA:ITOT" name: "iShares Core S&P Total U.S. Stock Market ETF" price: "USD:google/NYSEARCA:ITOT"....此处省略  

大概就是一堆这样文本记录,可是这仍然不够直观,幸运的是,还有一个 bean-web 命令,执行之后就能够拥有一个图形界面

bean-web example.bean --port 5000Bottle v0.12.16 server starting up (using WSGIRefServer())...Listening on http://localhost:5000/Hit Ctrl-C to quit.

然后,我们在浏览器打开 http://localhost:5000 这个地址

Beancount|打造你的个人记账系统

可以按年份、标签、账户成分来查看账单

Beancount|打造你的个人记账系统

但是,这个太简陋了,可不可以给一个看好一点的界面?当然,是有的,不得不说,开源的世界太丰富了,这里有一个叫 fava 的 Beancount 第三方图形界面工具,安装也非常简单。

pip3 install fava

 然后,退出刚刚的 bean-web 程序(Ctrl + c),执行

fava example.beanRunning Fava on http://localhost:5000

同样,我们在浏览器中打开 http://localhost:5000 这个地址,欢迎来到新世界!!!???

Beancount|打造你的个人记账系统

哈哈,是不是比自带的界面好上不少,直观的图表,丰富的功能,应有尽有。

那么,接下来如何开始记账呢?这里并不介绍太多,仅仅是给大家介绍一下 Beancount 这个工具,因为我也刚开始用这个工具一个来月,网上关于 Beancount 的介绍虽然不多,但还是能找到的,尤其是 Beancount 官网本身就提供了非常非常丰富的文档,所以不用害怕使用问题。

当然,我也在自己的博客中根据自己的使用情况写了更为详细的教程,感兴趣的读者可以点击原文进行查看。

如果本文对你有帮助,欢迎分享给更多可能有需要的人,感谢阅读~

本文源自微信公众号:哔Studio

历史上的今天
五月
16
  • 如有帮到您,可适当赞助
  • 支付宝
  • weinxin
  • 不关心金额,只在乎鼓励
  • 微信
  • weinxin
avatar
防晒霜一件代发,美国Coppertone水宝宝 水嫩防晒乳
懒人床上笔记本电脑桌台式家用双人电脑桌床上书桌可移动跨床桌
全自动撸飞机杯男用自慰自卫慰器工具成人情趣性用品四维空间抽插
日本Biore/碧柔 防晒霜50g

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: