[ANN] 关于复式记账语言 Beancount 过分难用这件事 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
gaocegege
V2EX    分享创造

[ANN] 关于复式记账语言 Beancount 过分难用这件事

  •  2
     
  •   gaocegege
    gaocegege 2022-04-16 10:54:17 +08:00 6926 次点击
    这是一个创建于 1273 天前的主题,其中的信息可能已经有所发展或是发生改变。
    作为一个工程师,很长时间以来不知道如何管理自己的财务,直到看到了 BYVoid 的这篇文章 https://byvoid.com/zhs/blog/beancount-bookkeeping-1/ ,于是开始尝试使用 Beancount 来记账。它不仅可以用非常简单的语法来记账,并且提供了类似于 SQL 的查询语言,可以构建自己感兴趣的查询结果,更清晰地了解自己的财务状况。当然,最最最重要的是,它是开源的,不会像各种记账 App 一样,做不下去就跑路,可能记得账都没法导出保存下来。

    但是,在使用的时候,也遇到了一个比较大的问题,主要是没有各类记账 App 那么易用,尤其是在导入账单方面。Beancount 要求你的每一笔账都是要对齐的,而我的支出通常分散在各个不同的 App 或者银行卡里,有时用支付宝付款,有时用微信,或者直接用银行卡。这就使得每天记账对账特别苦恼。

    为了解决这个问题,https://github.com/deb-sig/double-entry-generator 应运而生。它提供了便捷的方法能够把支付宝或者微信的账单直接导入到 Beancount 中,并且利用 Beancount 的生态工具如 Fava 等进行可视化的展现。

    想时刻跟踪自己的财务情况,不想依赖第三方的独立记账 App 的同时又不想手动记账的朋友们,可以了解一下!

    不过,也可能有一个副作用,记账记得太清楚,可能会让自己感到不适(怎么花了这么多!)
    39 条回复    2022-04-25 14:17:57 +08:00
    TripleZ
        1
    TripleZ  
       2022-04-16 11:05:25 +08:00
    这个导入器超级好用,昨天刚用这个把过去三个月的帐单补齐了。
    yibie
        2
    yibie  
       2022-04-16 14:52:36 +08:00
    感谢!非常有趣,收藏
    musi
        3
    musi  
       2022-04-16 15:03:25 +08:00
    刚好在看 Beancount
    maleclub
        4
    maleclub  
       2022-04-16 15:14:13 +08:00 via Android
    过分难用这件事?标题能不能不要那么吓人? beancount 是我用过最方便的记账工具,对零基础的用户也友好。
    gaocegege
        5
    gaocegege  
    OP
       2022-04-16 19:21:08 +08:00
    @maleclub 对不起,标题党了,下次注意
    TrembleBeforeMe
        6
    TrembleBeforeMe  
       2022-04-17 11:29:29 +08:00
    自动导入器的一大问题就是账户设置吧,我习惯开很多子账户,只能手动分类,根本无法自动。
    gaocegege
        7
    gaocegege  
    OP
       2022-04-17 12:14:42 +08:00
    @TrembleBeforeMe 支持基于规则的分类,理论上你可以自己写分类的规则来自动化
    palexu
        8
    palexu  
       2022-04-18 13:19:04 +08:00
    传说每一个用过 beancout 的程序员, 都造了一套轮子
    gaocegege
        9
    gaocegege  
    OP
       2022-04-18 17:05:44 +08:00
    @palexu 确实,这个项目也是基于某个网友的轮子二次开发的 hhh
    gaocegege
        10
    gaocegege  
    OP
       2022-04-18 17:06:31 +08:00
    @TripleZ 居功至伟(
    gaocegege
        11
    gaocegege  
    OP
       2022-04-18 17:06:46 +08:00
    @yibie 感谢,有任何问题可以随时回复
    N032138
        12
    N032138  
       2022-04-18 17:24:44 +08:00
    @maleclub 零基础用户表示看的一头雾水
    curoky
        13
    curoky  
       2022-04-19 01:11:26 +08:00 via Android   4
    关于记账这事,最早从手机端就开始折腾,换了一个又一个,最后阶段性的稳定在了 spendee 上,主要原因是它能导出数据,也只有国外的 app 才有这个能力了。后来发现这样手动记老是忘,所以想写脚本录入账单,后面偶然发现 beancount ,以为这个会是最终归宿,结果又是一个不归路。。。
    一开始自己写了一堆导入类,查了好多文档跟教程,最后直接看源码了,好几个周末时间。类写好后,就开始折腾数据,不是所有的 app 都可以像微信直接可以导出账单的,虽然一次也只能导出 3 个月。。。很多不要脸的 app 都需要我 Android/浏览器抓包拿数据,典型的像美团,京东,滴滴(不要脸的公司)。。。。
    复式记账的特点要求我们录入每一条交易,即便这个是中间周转,也要准确录入,另外就是一旦导入数据,就得理清每一条数据的元信息,这个太难了,微信 /支付宝 /银行没有一个 unique id 让我把交易链路关联起来,自己写了很多 joiner 逻辑,然后就是慢慢洗数据的道路,以至于后面代码越来越复杂,逻辑越来越混乱。
    说道 beancount 项目本身写的也是一团糟,后面觉得想整体重构一波,但也不想重写 beancount ,就抽了一个中间层,把 beancount 做 backend ,就这么折腾又好久。。。
    最后真的倦了,记账这事零零散散花了两年的个人周末时间,我开始认真反思记账的目的到底是什么,到底到了什么,结论是
    记账没有任何屁用,你没看错,就是没有屁用,纯粹是人为的给自己制造焦虑,还浪费时间,你以为记账就不会乱花钱了吗?你以为记账钱就会多了吗?你以为你能记清楚每笔花销吗?

    我们真正需要的可能仅仅只是偶尔在某个时间对某路收入或者开销做个报表,仅此而已,
    我已经把记账的 git 仓库都删干净了,数据都归档了,从此跟记账这事无缘!!!

    不过也不是完全没收获的,这个事情告诉我们,不要把时间花在伪需求上,也不要着急动手,理清楚真正想要的是什么。
    curoky
        14
    curoky  
       2022-04-19 01:19:49 +08:00 via Android
    上面是发自内心的忠告,建议把时间花在真正有价值的事情上,记账这事完全可以丢进历史的垃圾桶。不喜勿喷,不接受任何反驳,已经浪费了零零散散长达两年业余时间,再多钱也买不回这些时间。
    maleclub
        15
    maleclub  
       2022-04-19 10:56:29 +08:00 via Android
    @N032138 建议看 BYVoid 的博文,我最开始连编程都不会,部署好就开始记账。
    maleclub
        16
    maleclub  
       2022-04-19 11:06:23 +08:00 via Android
    @curoky 工具而已,合则来不合弃之。零基础零编程基础入手 6 年,用了 3 年零散时间整理近 7 年的老账本; beancount 这个工具,对我来说,不是带
    并未记账焦虑反而给我两个很好的机会,其一,切入复数记账的原理及应用(零散时间一年掌握中级会计,边记边想)其二,切入宏观经济学(现阶段只是修炼阶段,边分析公司财报边思考,作为兴趣不强迫自己的学习进度)...最后,我每一笔账都是手工记账的,不平衡的调账也是手工的,花里胡哨的脚本我不会写反而没有那么多烦恼,慢一点无所谓,主要是能解决我的问题。
    N032138
        17
    N032138  
       2022-04-19 11:21:44 +08:00
    @maleclub 看完了,部署上了 然后 3 分钟后连 python3 一起删掉了
    钱太少 记的没有意义
    gaocegege
        18
    gaocegege  
    OP
       2022-04-19 14:31:26 +08:00
    @N032138 我觉得,钱越少越值得记,会让自己更加有动力 XD
    gaocegege
        19
    gaocegege  
    OP
       2022-04-19 14:32:34 +08:00
    @curoky Beancount 我觉得它最主要的问题是缺少一个维护良好的 tuorial ,然后很多抽象都太古老了,理解起来很费劲。再加上它是经济领域的项目,有些概念本就不熟悉,所以我自己觉得学习起来确实太累了
    gaocegege
        20
    gaocegege  
    OP
       2022-04-19 14:34:21 +08:00
    @maleclub 你可能真的算是天赋异禀,我写代码写了 10 年后通过 BYVoid 的文章接触了 Beancount ,也摸索了大半个礼拜才初步了解应该如何利用它记账

    失败.jpg
    N032138
        21
    N032138  
       2022-04-19 14:46:49 +08:00
    @gaocegege 说的我又想装回来了,每天数数自己兜里的仨瓜俩枣的
    gaocegege
        22
    gaocegege  
    OP
       2022-04-19 14:58:11 +08:00
    @N032138 每个月记账的那几天,总是最有动力工作的时候 (误
    Xhack
        23
    Xhack  
       2022-04-19 16:36:47 +08:00
    用 cli 记账总觉得太麻烦,现在重写了一个,还行
    gaocegege
        24
    gaocegege  
    OP
       2022-04-19 18:24:21 +08:00
    @Xhack 重写了一个什么东西呢?
    curoky
        25
    curoky  
       2022-04-19 19:41:23 +08:00 via Android
    @gaocegege 如果真的只是 beancount 设计不好,代码烂,但是产品形态没有问题的话,肯定会是百花齐放的一个局面,说白了复式记账这玩意又不是有多难实现,这么多牛逼财务公司,也不见贡献一个一个开源个人使用的版本。另外跟国内的生态壁垒也有很大的关系,各个 app 数据打不通,各种恶心人。复式记账讲究的是精确+全量,做不到这两个前提,就是扯蛋…
    curoky
        26
    curoky  
       2022-04-19 19:43:33 +08:00 via Android
    @gaocegege 这话有道理,最近工资涨了之后,感觉之前花那么多时间去记那些小钱,纯粹是浪费生命…
    maleclub
        27
    maleclub  
       2022-04-19 21:16:36 +08:00 via Android
    @gaocegege 一点天赋都没有,入手就麻烦的是创建 account ,忘了就可以开始记账,边记边问电报群的老司机,慢慢地( 2-3 周)就基本上手了
    Xhack
        28
    Xhack  
       2022-04-20 08:28:22 +08:00
    @gaocegege Beancount
    rv54ntjwfm3ug8
        29
    rv54ntjwfm3ug8  
       2022-04-20 13:13:23 +08:00
    最后发现还是 GNUcash 好用
    gaocegege
        30
    gaocegege  
    OP
       2022-04-21 08:54:03 +08:00
    @rv54ntjwfm3ug8 这个我倒是没看过,回头去学习一个
    zhzy0077
        31
    zhzy0077  
       2022-04-21 13:04:44 +08:00
    beancount 不支持中文大家都是怎么解决的?我用 hledger/GnuCash 的最大原因就是这俩支持中文
    TripleZ
        32
    TripleZ  
       2022-04-21 19:24:27 +08:00
    @rv54ntjwfm3ug8 GnuCash 貌似只能 GUI 上操作?不像 beancount, ledger 这种是 plain-text 的吧。
    gaocegege
        33
    gaocegege  
    OP
       2022-04-22 17:51:26 +08:00
    @zhzy0077 支持中文呀,你是说哪方面不支持,账户名称么
    zhzy0077
        34
    zhzy0077  
       2022-04-23 00:59:09 +08:00
    @gaocegege 对的 各种中文账户翻译成不管是英语还是拼音都很难理解 点名住房公积金和基本养老保险
    TripleZ
        35
    TripleZ  
       2022-04-23 11:18:48 +08:00
    @zhzy0077 账户只有第一层不支持中文,其它层级都是支持的呀。比如 “Assets:微信支付” 这样是合法的。
    zhzy0077
        36
    zhzy0077  
       2022-04-23 14:29:56 +08:00
    @TripleZ 我刚刚试了是有报错的 Beancount 2.3.5

    1.beancount:1: Invalid account name: Assets:工资

    我重新确认了下当时的正则现在还在:
    https://github.com/beancount/beancount/blob/master/beancount/core/account.py#L33
    gaocegege
        37
    gaocegege  
    OP
       2022-04-24 09:19:34 +08:00
    @zhzy0077 我现在是用英文,不过我没思考过用中文名字的账户,担心出 bug hh
    TripleZ
        38
    TripleZ  
       2022-04-24 19:10:39 +08:00 via iPhone
    @zhzy0077 不好意思,是我记错了。是前两级不能用中文。
    wdssmq
        39
    wdssmq  
       2022-04-25 14:17:57 +08:00
    Beancount 复式记账:接地气的 Why and How - zsx's Blog
    https://blog.zsxsoft.com/post/41

    很早就见过介绍,一直没尝试。。然后刚安装的时候提示缺 c++ Orz 。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     898 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:47 PVG 04:47 LAX 13:47 JFK 16:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86