在过去的六个月里,我一直在开发 GoDBLedger,这是一个开源会计系统,我认为它解决了当前会计软件解决方案中的一些问题。即使在我作为应届会计师的第一年,这款软件也让我感到沮丧,因为我见过优秀的软件是什么样的,以及它能多大程度地提高你的工作效率。
“优秀软件”的一个很好的例子是软件开发人员的 编辑器/IDE。开发人员热爱他们的编辑器,并且有各种各样高度可定制的编辑器,可以实现无缝的编码体验。该领域存在优秀软件的主要影响因素之一是,开发人员本身就是最终用户——他们解决自己的痛点,并对其设计有直接的反馈。
开发人员和他们的编辑器之间的关系非常有趣,因为编辑器的工作是促进开发人员的想法有效地转化为代码库。
作为一名业余时间喜欢编程的会计师,我可以看到会计行业和软件开发之间的相似之处。你可以把总账(财务交易的巨大列表)想象成会计师工作的“代码库”,而会计师的工作是导航和编辑总账,然后将其编译成最终用户使用的各种报告——例如财务报表和纳税申报表。这类似于例如 Red Hat Enterprise Linux 代码库由开发人员维护,然后正式作为 RHEL 和 CentOS 发布到世界的方式。
不幸的是,在比较这两个行业的软件时,我发现导航和编辑总账并不顺畅,至少与我编程时的体验相比是这样。此外,编译速度很慢,需要大量的人工劳动才能完成;最终可能和编辑总账本身一样困难。
那么,鉴于会计师和程序员的流程之间存在相似之处,为什么会计行业没有开发软件来使编辑总账像 IDE 编辑代码库一样高效呢?为什么从总账编译一套财务报表不像将代码推送到生产环境那样自动化呢?
我注意到有两个影响因素。
第一个是驱动会计师和会计软件开发商的逐利动机。货币化可能会导致软件效率低下,因为最有效率的最终用户并不总是利润最高的。一个利润最大化的实体可以通过采取行动来控制用户的数据、创建围墙花园以及使用户难以更换软件,从而从用户那里榨取更多价值。
会计软件一直存在于付费软件领域。因为它在企业中扮演着如此重要的角色,所以一直很容易实现货币化。这对希望盈利的软件开发人员来说是好事,但不幸的是,这意味着开源原则对软件的形态和设计几乎没有影响。
第二个影响因素是对总账作为数据结构的理解不足。简单来说,总账只是一种格式化财务交易数据库的方式。这种数据结构是在 17 世纪设计的,在实体账簿中运行良好。在那个时候,使用总账意味着根据需要更改书面文本,会计师是维护这个数据库的专业人士。然而,当关系数据库被创建时,该结构从未真正标准化和数字化。软件包在他们自己的专有数据库结构中实现了总账,会计师失去了直接编辑数据库的能力。软件只允许会计师有限制地访问,而不是直接管理总账。
结果
在 TCP/IP 标准化之前,像 AOL 这样的公司正在创建他们自己的专有环境,并将用户锁定在他们的围墙花园中。幸运的是,对于互联网来说,它们沦为了免费的标准通信协议。不幸的是,会计行业没有这样做,我们被困在了“美国在线”中。
想象一下,软件行业由几家大型 IDE 软件企业集团统治,它们决定最大化利润而不是最大化开发人员的效率。你的编辑器不再将代码保存为文本;相反,它被保存为专有数据格式。你不能轻易地将代码库复制到另一个 IDE 中,如果你更换编辑器,可以肯定的是,保存在以前系统中的代码库将会丢失。
这就是当今可用的会计软件的状态。
那么会计软件开发人员可以从开源社区学到什么呢?
开源意味着你可以站在巨人的肩膀上,并使用其他项目的代码库来影响和直接协助你自己的项目的发展。如果你专注于提高会计师编辑总账的效率,你可以审查其他软件,复制有效的部分,忽略无效的部分。就我而言,我很幸运能够利用其他会计软件(如 GNU Cash 和 Ledger-CLI)的优秀代码库,但另一个有趣的领域也贡献了很多——管理加密货币节点的开源服务器。
会计学一直在努力从实体账簿过渡到计算机,但值得庆幸的是,加密货币社区已经开发了大量用于维护交易数据库的开源软件。
总账是一种记录财务交易的数据结构——就像区块链一样。
这意味着什么
我的会计系统深受 Geth (Go Ethereum) 和 Prysmatic Labs——Prysm 的影响,因为有很多才华横溢的开发人员在这些项目上工作。他们为管理财务交易的服务器提供了基础。将其与受 GNU Cash 深度影响的数据库模式相结合,意味着设计会计系统背后的大量工作已经完成。
结果是 GoDBLedger,源代码可在 github.com/darcys22/godbledger 上找到。
它也是用 Golang 编写的,以利用该领域已有的良好代码,并且因为 Golang 往往适合这种性质的服务器。
我已经谈了很多关于会计师应该如何像程序员处理他们的代码库一样无缝地处理总账。我真诚地期待着有一天我能像使用我选择的文本编辑器导航和编辑代码一样高效地创建和编辑日记账分录。GoDBLedger 是我朝着这个目标迈出的第一步。下一步将是开发这个与 GoDBLedger 及其底层数据库通信的“IDE”。幸运的是,对于我来说,已经有很多优秀的开源数据库项目可以供我利用。
如何使用 GoDBLedger
GoDBLedger 今天就可以使用!你可以启动一个服务器,维护你的财务交易数据库,对于任何运行过加密货币节点的人来说,它都会看起来和感觉很熟悉。
最终目标是让它充当接收财务交易并将它们存储在数据库中的中心服务器。它在后台运行,始终运行,以便其他系统可以根据需要将财务数据传递给它。

现在,如果你对命令行和使用 RPC 与系统通信的脚本感到满意,那么你可以玩 GoDBLedger,体验比所有其他软件更低级别(并且仅略高于直接操作 SQL 数据库)的复式记账。
例如,在 GoDBLedger 运行时,你可以在 ledger-cli 的交互模式下添加条目
$ ~/godbledger/ledger_cli journal
Journal Entry Wizard
--------------------
Enter the date (yyyy-mm-dd): 2019-06-30
Enter the Journal Descripion: Get Money Get Paid!
Line item #1
Enter the line Descripion: Income is good yo
Enter the Account: Revenue:Sales
Enter the Amount: -1000
Would you like to enter more line items? (n to stop):
Line item #2
Enter the line Descripion: Cash is better
Enter the Account: Asset:Cash
Enter the Amount: 1000
Would you like to enter more line items? (n to stop): n
&{Get Money Get Paid!
2019-06-30 00:00:00 +0000 UTC [{Revenue:Sales
Income is good yo
-1000/1} {Asset:Cash
Cash is better
1000/1}] stuff}
但是,可以使用 JSON 进行相同的条目
$ ~/godbledger/ledger_cli jsonjournal '{"Payee":"Darcy Financial","Date":"2019-06-30T00:00:00Z","AccountChanges":[{"Name":"Asset:Cash","Description":"Cash is better","Currency":"USD","Balance":"100"},{"Name":"Revenue:Sales","Description":"Income is good yo","Currency":"USD","Balance":"-100"}],"Signature":"anythingHereCurrently"}'
你可以使用 reporter
命令查看报告
$ ~/godbledger/reporter trialbalance
ACCOUNT | BALANCE AT 20 FEBRUARY 2020
--------------+----------------------------
Asset:Cash | 1000
|
Revenue:Sales | -1000
|
阅读 Github Wiki 上的快速入门 以获取更多信息。我还开发了一些 使用 Python 的示例脚本,以展示如何从你自己的软件发送交易。此外,我还制作了一个 示例“交易机器人”,它将每次交易都保存到 GoDBLedger。
如果你对保持跟踪你的账户的程序化系统感兴趣,请尝试 GoDBLedger。
5 条评论