概述

内容

Ledger 是一个命令行会计工具,提供基于文本日记的复式记账。它没有花哨的功能,带用户回到用户界面还未在他们父亲的 CRT 显示器中闪现的时代。

Ledger 是一个具有生存能力的会计工具。它没有任何花哨的功能,带用户回到用户界面还未在他们父亲的 CRT 中闪现的日子。

它所提供的是一个双重记账的会计日记,具有现代同类工具的所有灵活性和强大功能,而没有任何多余的部分。可以把它看作是会计工具中的全麦松饼。

要使用它,您需要开始记账。这是所有会计的基础,如果您还没有开始,现在是学习的时机。随您的支票簿附带的小册子就是一本日记,因此我们将以此来描述复式记账。

支票簿日记记录借方(减少或取款)和贷方(增加或存款),并参考单一账户:支票账户。资金的来源和去向在收款人字段中描述,您可以在此写下个人或公司的名称。保持支票簿日记的最终目的是了解可支配的资金有多少。这实际上是所有日记的目的。

计算机所增加的是浏览这些帖子并告诉你关于消费习惯的信息的能力;让你制定预算并控制开支;将钱存入虚拟储蓄账户而无需实际移动资金;等等。当你保持日记时,你正在记录关于你的生活和习惯的信息,有时这些信息会开始告诉你一些你未曾意识到的事情。这就是所有优秀会计工具的目标。

从支票簿日记本向上迈出的下一步是一个记录所有账户的日记本,而不仅仅是支票账户。在这样的日记本中,您不仅记录谁收到了付款——在借记的情况下——还记录钱的来源。在支票簿日记本中,假设所有的钱都来自您的支票账户。但在一般日记本中,您在两行中写入记录:源账户和目标账户。每次对另一个账户进行贷记时,必须至少从一个账户进行借记。这就是所谓的“双重记账”会计:日记本必须始终平衡为零,借记和贷记的数量相等。

例如,假设您有一个支票账户和一个经纪账户,并且您可以从这两个账户中开支票。与其保留两个支票簿,不如决定使用一个日记本来记录两者。在这个普通日记中,您需要记录向太平洋电话公司支付的每月电话费,以及从您的经纪账户转账(通过支票)到您的支票账户。假设太平洋电话公司的账单是23.00美元,您想从支票账户支付。在普通日记中,您需要说明资金的来源,以及资金的去向。这些交易可能看起来像这样:

9/29 太平洋贝尔 $23.00 $23.00 支票 $-23.00 0 9/30 支票 $100.00 $100.00 (123) 经纪公司 $-100.00 0

该记录必须平衡为 $0:$23 转入太平洋贝尔,$23 来自支票账户。下一条记录显示支票号码 123 是从您的经纪账户开出的,转移资金到您的支票账户。由于资金在这两种情况下只是从一个账户转移到另一个账户,因此没有多余的资金需要核算。这就是复式记账的基础:资金从未凭空产生或消失;它始终是从一个账户到另一个账户的记录。

保持一个普通日记本就像保持两个独立的日记本:一个用于太平洋贝尔,一个用于支票。在这种情况下,每次在一个日记本中写入付款时,你都要在另一个日记本中写入相应的取款。这使得写入“动态余额”变得更容易,因为你不必回头查看上次引用账户的时间——但这也意味着如果你处理多个账户,就需要很多日记本。

这里是一个关于“账户”一词使用的旁注的好地方。大多数私人认为账户是指在某个机构为他们存放资金的东西。Ledger 对这个词的定义更为广泛。账户是指资金可以去的任何地方。其他财务程序使用“类别”,而 Ledger 使用账户。因此,例如,如果你在 Trader Joe’s 买了一些杂货,然后在 Whole Food Market 买了更多杂货,你可能会像这样分配这些交易。

2011/03/15 Trader Joe's 费用:杂货 $100.00 资产:支票 2011/03/15 Whole Food Market 费用:杂货 $75.00 资产:支票

在这两种情况下,钱都进入了“杂货”账户,即使收款人不同。您可以根据自己的选择设置账户。

进入计算机化会计的美丽。Ledger程序的目的是通过为您跟踪余额,使总账会计变得简单。您唯一的工作是输入记账。如果单个记账不平衡,Ledger会显示错误并指示不正确的记账。1

总之,Ledger 使用有两个方面:更新日记数据文件,以及使用 Ledger 工具查看您交易的汇总结果。

为了举例说明——作为那些想要全心投入的人的起点——以下是上面的日记交易,按照Ledger程序希望看到的格式呈现:

2004/09/29 太平洋贝尔 费用:太平洋贝尔 $23.00 资产:支票

如果将此文件中的账户余额和登记保存为 ledger.dat,可以使用以下方式报告:

$ ledger -f ledger.dat 余额

         $-23.00  资产:支票账户
          $23.00  费用:太平洋贝尔

               0

$ ledger -f ledger.dat 注册 支票

04-九月-29 太平洋贝尔 资产:支票账户 $-23.00 $-23.00

甚至:

$ ledger -f ledger.dat 注册 Bell

04-九月-29 太平洋贝尔 费用:太平洋贝尔 $23.00 $23.00

Ledger与其他财务软件之间一个重要的区别是,Ledger永远不会更改您的输入文件。您可以以任何您喜欢的方式创建和编辑该文件,但Ledger仅用于分析数据,而不是用于更改数据。

Ledger 是用 ANSI C++ 编写的,应该可以在任何 Unix 平台上编译。构建和安装 ledger 的最简单方法是使用准备好的 acprep 脚本,它完成了很多基础工作:

# 安装缺失的依赖
./acprep dependencies
# 构建账本
./acprep update
# 运行实际安装
make install

请参阅‘acprep‘的‘help‘子命令,它解释了许多选项。您可以运行‘make check‘来确认结果,并运行‘make install‘进行安装。如果这些说明对您无效,您可以查看源目录中的‘INSTALL.md‘以获取最新的构建说明。

Ledger 拥有一个基于 GNU Info 的完整在线帮助系统。可以通过命令行直接搜索本手册,使用 info ledger,这将在您的 TTY 中显示整个手册。或者,可以通过命令行访问较短的手册页,使用 man ledgerledger --help

如果您需要有关如何使用 Ledger 的帮助,或遇到问题,您可以加入 Ledger 邮件列表,访问 http://groups.google.com/group/ledger-cli

您还可以在IRC服务器irc.libera.chat#ledger频道中找到帮助。

有很多人使用 Ledger 进行会计应用。一些人记录了他们如何利用 Ledger 的功能来解决他们的会计问题。

一个专门为寻求使用 Ledger 的非营利慈善机构设计的教程可以在 https://k.sfconservancy.org/NPO-Accounting/npo-ledger-cli 找到(在 GitHub 上也有副本,地址为 https://github.com/conservancy/npo-ledger-cli/)。如果您正在寻找有关如何使用 Ledger 的标签系统来处理发票、按项目目标跟踪费用以及其他类似概念的信息,您可能会发现这个教程很有用。(与上述 Ledger 设置相关的一些审计报告脚本可以在 Ledger 自己的源代码库中的 contrib/non-profit-audit-reports/ 找到。)

日记是您财务交易的记录,将是使用 Ledger 的核心。现在我们只想体验一下 Ledger 能做什么。示例日记文件随源代码分发一起提供,名为 drewr3.dat(见 示例日记文件)。将其复制到一个方便的地方,并在该目录中打开一个终端窗口。

如果您更愿意立即开始自己的日记,请参见 保持日记

请注意,作为一个命令行程序,Ledger 是通过你的 shell 控制的。有几种不同的命令 shell,它们在某些特殊字符的处理上略有不同。特别是,“bash” shell 会以不同于 ledger 的方式解释‘$’符号,因此必须进行转义以达到实际程序。另一个例子是“zsh”,它会以不同于 ledger 预期的方式解释‘^’。在接下来的所有情况下,你在输入给定的命令行参数时应考虑到这一点。不同 shell 之间的变体太多,无法为每种情况提供具体示例。

显示所有交易和累计总额:

$ ledger -f drewr3.dat 注册

分类账将生成:

10-Dec-01 检查余额 资产:检查 $ 1,000.00 $ 1,000.00 权益:期初余额 $ -1,000.00 0 10-Dec-20 有机合作社 费用:食品:杂货 $ 37.50 $ 37.50 费用:食品:杂货 $ 37.50 $ 75.00 费用:食品:杂货 $ 37.50 $ 112.50 费用:食品:杂货 $ 37.50 $ 150.00 费用:食品:杂货 $ 37.50 $ 187.50 费用:食品:杂货 $ 37.50 $ 225.00 资产:检查 $ -225.00 0 10-Dec-28 Acme 贷款 负债:贷款:本金 $ 200.00 $ 200.00 费用:利息:贷款 $ 500.00 $ 700.00 费用:托管 $ 300.00 $ 1,000.00 资产:检查 $ -1,000.00 0 11-Jan-02 杂货店 费用:食品:杂货 $ 65.00 $ 65.00 资产:检查 $ -65.00 0 11-Jan-05 雇主 资产:检查 $ 2,000.00 $ 2,000.00 收入:工资 $ -2,000.00 0 (负债:十分之一) $ -240.00 $ -240.00 11-Jan-14 银行 资产:储蓄 $ 300.00 $ 60.00 资产:检查 $ -300.00 $ -240.00 11-Jan-19 杂货店 费用:食品:杂货 $ 44.00 $ -196.00 资产:检查 $ -44.00 $ -240.00 11-Jan-25 银行 资产:检查 $ 5,500.00 $ 5,260.00 资产:储蓄 $ -5,500.00 $ -240.00 11-Jan-25 Tom's 二手车 费用:汽车 $ 5,500.00 $ 5,260.00 资产:检查 $ -5,500.00 $ -240.00 11-Jan-27 书店 费用:书籍 $ 20.00 $ -220.00 负债:万事达卡 $ -20.00 $ -240.00 11-Dec-01 销售 资产:检查:业务 $ 30.00 $ -210.00 收入:销售 $ -30.00 $ -240.00 (负债:十分之一) $ -3.60 $ -243.60

要将其限制为更有用的子集,只需添加您感兴趣的交易账户:

$ ledger -f drewr3.dat 登记 食品杂货

10-Dec-20 有机合作社 费用:食品:杂货 $ 37.50 $ 37.50 费用:食品:杂货 $ 37.50 $ 75.00 费用:食品:杂货 $ 37.50 $ 112.50 费用:食品:杂货 $ 37.50 $ 150.00 费用:食品:杂货 $ 37.50 $ 187.50 费用:食品:杂货 $ 37.50 $ 225.00 11-Jan-02 杂货店 费用:食品:杂货 $ 65.00 $ 290.00 11-Jan-19 杂货店 费用:食品:杂货 $ 44.00 $ 334.00

这与‘杂货’账户报告的余额相符:

$ ledger -f drewr3.dat 余额 食品杂货

        $ 334.00  费用:食品:杂货

如果您想仅查找特定收款人的交易,请使用‘payee’或‘@’:

$ ledger -f drewr3.dat register payee "有机"

10-Dec-20 有机合作社 费用:食品:杂货 $ 37.50 $ 37.50 费用:食品:杂货 $ 37.50 $ 75.00 费用:食品:杂货 $ 37.50 $ 112.50 费用:食品:杂货 $ 37.50 $ 150.00 费用:食品:杂货 $ 37.50 $ 187.50 费用:食品:杂货 $ 37.50 $ 225.00 资产:支票 $ -225.00 0

会计只是追踪你的资金。它可以从什么都不做,仅仅等待自动透支保护启动,或者不启动,到一个完整的复式记账系统。Ledger 实现了后者。使用 Ledger,你可以处理个人财务或企业财务。复式记账具有可扩展性。

会计师会谈论“贷方”和“借方”,但其含义往往与外行的理解不同。为了避免混淆,Ledger 仅使用减法和加法,尽管其基本意图与标准会计原则相同。

请记住,每个记录将涉及两个或多个账户。资金从一个或多个账户转移到一个或多个其他账户。为了记录该记录,从源账户中 减去 一定金额,并 添加 到目标账户。

为了正确地写入账本交易,您必须确定资金的来源和去向。例如,当您收到工资时,您必须将钱添加到您的银行账户,并从收入账户中扣除它。

9/29 我的雇主 资产:支票账户 $500.00 收入:工资 $-500.00

为什么收入是一个负数?当你查看账本的余额总额时,你可能会惊讶地发现支出是一个正数,而收入是一个负数。这可能需要一些时间来适应,但要正确使用总账,你必须从资金流动的角度来思考。与其让总账“修正”负号,不如理解它们存在的原因。

当你赚到钱时,这笔钱必须来自某个地方。我们称这个地方为“社会”。为了让社会给你收入,你必须从社会中提取钱(取款),然后将其存入你的银行。当你花费这笔钱时,它会从你的银行账户中流出(取款),并返回社会(支付)。这就是为什么收入会显得为负——它反映了你从社会中提取的钱——以及为什么支出会为正——这是你返还的金额。这些加法和减法最终总会相互抵消,因为你没有创造新钱的能力:它必须总是来自某个地方,并且最终必须总是流出。这是经济学的开始,之后的解释会变得非常困难。

根据这个解释,这里有另一种看待您的余额报告的方法:每个负数意味着该账户、个人或地点现在的钱比您开始记账时少;而每个正数意味着该账户、个人或地点现在的钱比您开始记账时多。明白了吗?

资产是你拥有的钱,而负债是你欠的钱。“负债”只是债务的一个更广泛的名称。

资产通常通过从收入账户转移资金来增加,例如当你获得薪水时。以下是一个典型的交易:

2004/09/29 我的雇主 资产:支票账户 $500.00 收入:工资

钱,来自于属于‘我的雇主’的收入账户,并转入你的支票账户。现在这笔钱是你的,这使它成为一种资产。

负债跟踪欠他人的钱。这可能发生在你借钱购买某物时,或者如果你欠某人钱时。以下是通过使用万事达卡消费来增加负债的一个例子:

2004/09/30 餐厅 费用:餐饮 $25.00 负债:万事达卡

餐饮账户余额现在显示已在餐饮上花费了25美元,并且在万事达卡上相应欠款25美元——因此显示为$-25.00。万事达卡负债显示为负数,因为它抵消了您资产的价值。

您资产和负债的总和就是您的净资产。因此,要查看您当前的净资产,请使用此命令:

$ 账本余额 ^资产 ^负债

         $500.00  资产:支票账户
         $-25.00  负债:信用卡

         $475.00

类似地,您的收入账户显示为负数,因为它们是从一个账户转移资金以增加您的资产。您的支出显示为正数,因为那是资金流向的地方。收入和支出的总和就是您的现金流。正现金流意味着您花费的超过您所赚取的,因为收入始终是一个负数。要查看您当前的现金流,请使用此命令:

$ 账本余额 ^收入 ^支出

          $25.00  费用:餐饮
        $-500.00  收入:工资

        $-475.00

另一个常见的问题是:我每个月在X上花费多少?Ledger提供了一种简单的方法来显示任何账户的月总额。以下是一个总结您每月汽车开支的示例:

$ ledger -M register -f drewr3.dat 费用:自动

11-Jan-01 - 11-Jan-31 费用:汽车 $ 5,500.00 $ 5,500.00

这当然假设你使用像‘Expenses:Auto:Gas’和‘Expenses:Auto:Repair’这样的账户名称。

有时你会想要代表别人花钱,这最终会得到偿还。由于这笔钱仍然是 你的,它实际上是一项资产。由于支出是为了别人,你不希望它污染你的费用报告。你需要保持一个账户来跟踪报销。

在账本中,这相对容易做到。当花费资金时,将其花费到你的资产:报销,使用不同的账户为每个你花钱的人或企业。例如:

2004/09/29 Circuit City 资产:报销:公司 XYZ $100.00 负债:万事达卡

这显示了在Circuit City用MasterCard消费的$100.00,该费用是代表公司XYZ支付的。后来,当公司XYZ偿还该金额时,资金将从该报销账户转回到常规资产账户:

2004/09/29 公司 XYZ 资产:支票 $100.00 资产:报销:公司 XYZ

这将公司XYZ所欠的款项存入一个支票账户,推测是因为他们用支票偿还了该金额。

但是如果你经营自己的生意,并且想要跟踪自己名下的支出,同时又想在一个单一的账本文件中记录所有内容,该怎么办呢?这就更复杂了,因为你需要跟踪两个独立的事项:1)这笔钱应该报销给你,2)支出账户是什么,以便你可以稍后确定你的公司在哪里花费了钱。

这种记录最好在两个不同的文件中进行镜像记录,一个用于个人账户,一个用于公司账户。但将它们保存在一个文件中涉及相同类型的记录,因此这里展示的就是这些。首先是个人交易,显示了报销的需求:

2004/09/29 Circuit City 资产:报销:公司 XYZ $100.00 负债:万事达卡

这与上面相同,除了你拥有公司 XYZ,并且在同一个账本文件中跟踪其费用。此交易后应立即跟随一笔等值交易,显示费用的种类,并且还注明现在应支付给你的金额为 $100.00:

2004/09/29 Circuit City 公司 XYZ:费用:计算机:软件 $100.00 公司 XYZ:应付账款:您的名字

这第二笔交易显示公司 XYZ 刚刚花费了 $100.00 购买软件,而这 $100.00 来自您的名字,必须偿还。

这两笔交易也可以合并,以使事情更清晰。请注意,现在必须指定所有金额:

2004/09/29 Circuit City 资产:报销:公司 XYZ $100.00 负债:万事达卡 $-100.00 公司 XYZ:费用:计算机:软件 $100.00 公司 XYZ:应付账款:您的名字 $-100.00

要“偿还”报销,只需将所有内容的顺序反转,除了这次从公司资产中提取资金,支付给应付账款,然后再从报销账户中提取资金,支付到你的个人资产账户。说起来容易,做起来难:

2004/10/15 公司 XYZ 资产:支票账户 $100.00 资产:报销:公司 XYZ $-100.00 公司 XYZ:应付账款:您的名字 $100.00 公司 XYZ:资产:支票账户 $-100.00

现在,报销账户已结清,应付账款已结清,$100.00 已有效地从公司的支票账户转入您的个人支票账户。这笔钱只是“等待”——在‘资产:报销:公司 XYZ’和‘公司 XYZ:应付账款:您的名字’中——直到可以结清为止。

从两方面跟踪开支的价值在于,您不会将代表他人所产生的开支污染您的个人开支报告,同时也使得生成公司支出准确报告成为可能。这比仅仅用个人资产支付东西更冗长,但它为您提供了非常准确的信息记录。

将这些双重交易保持在一起的好处是它们始终保持同步。将它们分开的好处是它澄清了转移的观点。要将记录保存在单独的文件中,只需分开上面连接的两个交易。例如,对于上面显示的费用和偿还,将创建以下四个交易。两个在您的个人账本文件中:

2004/09/29 Circuit City 资产:报销:公司 XYZ $100.00 负债:万事达卡 $-100.00

2004/10/15 公司 XYZ 资产:支票 $100.00 资产:报销:公司 XYZ $-100.00

并且在您的公司账本文件中有两个:

申请账户 公司 XYZ

2004/09/29 Circuit City 费用:计算机:软件 $100.00 应付账款:您的名字 $-100.00

2004/10/15 公司 XYZ 应付账款:您的名字 $100.00 资产:支票 $-100.00

结束申请账户

(注意:上面的 apply account 意味着文件中提到的所有账户都是该账户的子账户。在这种情况下,这意味着文件中的所有活动都与公司 XYZ 相关。)

在创建这些交易后,您将始终知道 $100.00 是通过您的 MasterCard 代表公司 XYZ 支出的,并且公司 XYZ 将这笔钱用于计算机软件,并在大约两周后偿还。

$ 账本余额 --no-total

         $100.00  资产:支票账户
               0  公司 XYZ
        $-100.00    资产:支票账户
         $100.00    费用:计算机:软件
        $-100.00  负债:万事达卡

Ledger 不对您使用的商品做出任何假设;它只要求您指定一个商品。商品可以是任何不包含句点、逗号、斜杠或 @ 符号的非数字字符串。它可以出现在金额之前或之后,尽管假设出现在金额之前的符号指的是货币,而出现在金额之后的非连接符号指的是商品。以下是一些有效的货币和商品说明符:

$20.00 ; 货币: 二十美元 40 AAPL ; 商品: 40 股苹果股票 60 DM ; 货币: 60 德国马克 £50 ; 货币: 50 英镑 50 EUR ; 货币: 50 欧元(或使用适当符号)

Ledger 将检查任何商品的首次使用,以确定该商品在报告上的打印方式。它关注商品名称是否与金额分开,商品名称是在金额之前还是之后,指定金额时使用的精度,是否使用了千位分隔符等。这是为了确保商品的打印方式与使用方式一致。

一个账户可能包含多种商品,在这种情况下,它将为每种商品有单独的总额。例如,如果您的经纪账户同时包含现金、黄金和几种股票数量,则余额可能如下所示:

$200.00 100.00 澳元 AAPL 40 BORL 100 FEQTX 50 资产:经纪

此余额报告显示您在经纪账户中每种商品的数量。

有时,您会想知道您余额的当前街头价值,而不是商品总额。为了实现这一点,您必须指定每种商品的当前价格。价格可以是任何商品,在这种情况下,余额将以该商品为单位进行计算。指定价格的通常方法是使用价格历史文件,可能看起来像这样:

P 2004/06/21 02:18:01 FEQTX $22.49 P 2004/06/21 02:18:01 BORL $6.20 P 2004/06/21 02:18:02 AAPL $32.91 P 2004/06/21 02:18:02 AU $400.00

指定要与 --price-db FILE 选项一起使用的价格历史,使用 --market (-V) 选项以当前市场价值报告:

$ ledger --price-db prices.db -V 余额 经纪公司

您的经纪账户余额将以美元报告,因为价格数据库使用该货币。

$40880.00 资产:经纪公司

您可以将任何商品转换为任何其他商品。假设您在支票账户中有5000美元,无论出于什么原因,您想知道这可以购买多少盎司黄金,按照当前黄金价格计算:

$ ledger -X AU 余额检查

此命令的结果可能是:

有时,一种商品有几种形式,这些形式都是等价的。一个例子就是时间。无论是以分钟、小时还是天来计算,都应该能够在各种形式之间进行转换。做到这一点需要使用商品等价性。

例如,您可能有以下两个记录,一个将一个小时的时间转入“可计费”账户,另一个将同一账户减少十分钟。生成的报告将显示剩余五十分钟:

2005/10/01 为公司完成的工作 可计费:客户 1小时 项目:XYZ

2005/10/02 返回项目十分钟 项目:XYZ 10m 可计费:客户

报告此账本文件的余额产生:

$ ledger --no-total balance 可计费项目

           50.0m  可计费:客户
          -50.0m  项目:XYZ

这个例子之所以有效,是因为账本已经知道如何处理秒、分钟和小时,作为其时间跟踪支持的一部分。定义其他等价关系很简单。以下是一个创建数据等价关系的例子,有助于跟踪字节、千字节、兆字节等:

C 1.00 Kb = 1024 b C 1.00 Mb = 1024 Kb C 1.00 Gb = 1024 Mb C 1.00 Tb = 1024 Gb

这些定义将一种商品(例如‘Kb’)和默认精度与另一种商品的某个数量相关联。在上述示例中,千字节以两位小数的精度报告,每千字节等于1024字节。

等价链可以根据需要延长。每当商品以小数金额(少于‘1.00’)报告时,将使用下一个最小的商品。如果某个商品可以用更高的商品来报告而不导致部分分数,则使用更大的商品。

由于Ledger的账户和商品系统非常灵活,您可以拥有实际上并不存在的账户,并使用其他人不承认的商品。例如,假设您在EverQuest中买卖各种物品,并希望使用账本来跟踪它们。只需将您希望的任意数量的物品添加到您的EverQuest账户中:

9/29 在旅馆获取一些物品 地点:黑氏酒馆 -3 个苹果 地点:黑氏酒馆 -5 块牛排 无尽的任务:库存

现在你的 EverQuest:Inventory 中有 3 个苹果和 5 块牛排。数量为负,因为你是从 Black’s Tavern 中取出以添加到你的 Inventory 账户。请注意,你不必使用 ‘Places:Black's Tavern’ 作为源账户。你可以使用 ‘EverQuest:System’ 来表示你是在线获取它们的。选择某种源账户而不是另一种的唯一目的,是为了在后面生成更有信息量的报告。你知道的越多,你能进行的分析就越好。

如果你后来将这些物品中的一些出售给其他玩家,交易将看起来像:

10/2 风暴亮刃 无尽的任务:库存 -2 块牛排 无尽的任务:库存 15 金币

现在你把2块牛排变成了15金币,感谢你的顾客,斯图姆·布莱特布雷德。

$ 账本余额 EverQuest

        3 苹果
         15 黄金
        3 牛排  EverQuest:Inventory

在任何账本中,最令人困惑的交易将是你的股权账户——因为期初余额不可能凭空而来。

当你第一次开始使用你的账本时,你可能已经在某些账户中有钱。假设你的支票账户中有100美元;然后在你的账本中添加一笔交易以反映这个金额。这笔钱来自哪里?答案是:你的权益。

10/2 开始余额 资产:支票账户 $100.00 权益:开始余额

但什么是股权?你可能在谈论房屋抵押贷款时听说过股权,指的是“你拥有的房屋部分”。基本上,股权就像某物的价值。如果你拥有一辆价值5000美元的汽车,那么你在那辆车上就有5000美元的股权。为了将那辆车(商品)转变为现金流,或是银行账户的信用,你需要通过出售它来借记股权。

当你开始一个账本时,你可能已经有了净资产。你的净资产就是你当前的权益。通过将账本中的资金从你的权益转移到你的银行账户,你是在根据你之前的权益对账本账户进行记账。这就是为什么,当你查看余额报告时,你会看到权益的一个大负数,这个数字从未改变:因为那是你在资金开始流动之前的价值(你为了开始账本而从自己那里借出的金额)。如果你资产的总正值大于你起始权益的绝对值,这意味着你正在赚钱。

清晰如泥?继续思考。直到你弄明白为止,在你的余额命令末尾加上 not Equity,以从总数中去除令人困惑的数字。

许多人不愿意记账的原因之一是跟踪小额现金支出带来的麻烦。它们很少产生收据,而且通常有很多小额记录,而不是像支票那样只有少数几笔大额记录。

一个解决方案是:别费心。把你的消费转到借记卡上,但一般来说忽略现金。一旦你从ATM取出现金,就将其标记为已花费到‘费用:现金’类别:

2004/03/15 ATM 费用:现金 $100.00 资产:支票

如果在某个时刻你产生了一笔想要追踪的大额现金支出,只需将支出的金额从‘Expenses:Cash’转入目标账户:

2004/03/20 某人 费用: 食物 $65.00 费用: 现金

通过这种方式,您仍然可以跟踪大额现金支出,同时忽略所有较小的支出。

有些情况下,您所跟踪的账户在您的客户和资金存放的金融机构之间是不同的。一个例子是作为宗教机构的财务主管。从世俗的角度来看,您可能正在处理三个不同的账户:

  • 支票账户
  • 储蓄账户
  • 信用卡

从宗教的角度来看,社区期望将其资源分成多个“基金”,从中进行购买或为以后保留资源:

  • 学校基金
  • 建筑基金
  • 社区基金

这种设置的问题在于,当你花钱时,它同时来自两个或多个地方:账户和基金。然而,基金和账户之间的金额相关性很少是一对一的。如果学校基金有‘$500.00’,但其中‘$400.00’来自支票账户,而‘$100.00’来自储蓄账户,那该怎么办?

传统金融套餐要求资金只能存在一个地方。但实际上数据有两种“视角”:从账户的角度和从资金的角度——然而这两组数据应该反映相同的整体费用和现金流。只是资金存在的地方不同。

这种情况可以通过两种方式处理。第一种是使用虚拟记录来表示资金同时在两种账户之间流动的事实:

2004/03/20 贡献 资产:支票账户 $500.00 收入:捐款

2004/03/25 捐款分配 [资金:学校] $300.00 [资金:建筑] $200.00 [资产:支票] $-500.00

在第二笔交易中使用方括号确保虚拟记录的余额为零。现在可以在从一个实体账户提取资金的同时,直接从一个基金中支出资金:

2004/03/25 书籍付款(从支票账户支付) 费用:书籍 $100.00 资产:支票账户 $-100.00 (资金:学校) $-100.00

使用圆括号创建了一个虚拟的过账,而没有确保余额为零。当生成报告时,默认情况下它们将以资金的形式出现。在这种情况下,您可能希望隐藏您的“资产”账户,因为否则余额将没有太大意义:

$ ledger --no-total bal not ^资产

         $100.00  费用:书籍
         $400.00  资金
         $200.00    建筑
         $200.00    学校
        $-500.00  收入:捐款

如果使用 "--real" 选项,报告将以实际账户为准:

$ ledger --real --no-total bal

         $400.00  资产:检查
         $100.00  费用:书籍
        $-500.00  收入:捐赠

如果需要更多的资产账户作为过账的来源,只需像往常一样列出它们,例如:

2004/03/25 书籍付款(从支票账户支付) 费用:书籍 $100.00 资产:支票账户 $-50.00 负债:信用卡 $-50.00 (资金:学校) $-100.00

跟踪资金的第二种方法是使用交易代码。在这方面,代码就像虚拟账户,涵盖了整个记账集。基本上,我们通过设置代码将交易与资金关联起来。以下是两笔交易,分别向‘Funds:School’基金存入资金和从中支出资金:

2004/03/25 (资金:学校) 捐款 资产:支票 $100.00 收入:捐款

2004/03/25 (资金:建筑) 捐款 资产:支票 $20.00 收入:捐款

2004/04/25 (资金:学校) 书籍付款 费用:书籍 $50.00 资产:支票

请注意,账户现在仅与实际账户相关,任何余额或登记报告将反映这一点。与特定基金相关的交易仅保留在代码中。

这如何变成一份基金报告?通过使用 --payee=code 选项,您可以生成一份登记报告,其中每个记账的收款人显示代码。单独来看,这并不是特别有趣;但当与 --by-payee (-P) 选项结合使用时,您将看到与特定基金相关的任何记账的账户小计。因此,要查看所有基金的当前货币余额,命令将是:

$ ledger --payee=code -P reg ^资产

04-Mar-25 资金:建筑 资产:支票 $20.00 $20.00 04-Mar-25 资金:学校 资产:支票 $50.00 $70.00

或者查看特定基金的费用,在这种情况下是‘学校’基金:

$ ledger --payee=code -P reg ^费用 和 code 学校

04-Apr-25 资金:学校 支出:书籍 $50.00 $50.00

这两种方法提供了不同类型的灵活性,具体取决于您更喜欢如何看待您的资金:作为虚拟账户,还是作为与特定交易相关的标签。您的个人喜好将决定哪种方法最适合您的情况。

会计中最重要的部分是保持良好的日记。如果你有一个好的日记,可以编写工具来处理你需要的任何数学技巧,以更好地理解你的消费模式。没有一个好的日记,任何工具,无论多么智能,都无法帮助你。

Ledger 程序旨在使日记交易尽可能简单。由于它是一个命令行工具,因此不提供用于保持日记的用户界面。如果您需要一个用户界面来维护日记交易,GnuCash 是一个不错的替代方案。

如果您不是在使用 GnuCash,而是使用文本编辑器来维护您的日记,请继续阅读。Ledger 的设计旨在使数据交易尽可能简单,通过保持日记格式的简易性,并且通过自动确定尽可能多的信息,基于您交易的性质。

例如,您不需要告诉 Ledger 您使用的账户。每当 Ledger 看到涉及一个它不知道的账户的记录时,它会创建该账户2。如果您使用了 Ledger 新的商品,它会创建该商品,并根据您在记录中使用该商品的方式来确定其显示特性(符号在金额前或后,显示精度等)。

这里是上面提到的太平洋贝尔的例子,作为一个分类账条目,附加了支票号码:

9/29 (1023) 太平洋贝尔 费用:公用事业:电话 $23.00 资产:支票 $-23.00

正如你所看到的,它与纸上写的内容非常相似,减去了计算的余额总额,并添加了更符合Ledger方案的账户名称。事实上,由于Ledger在许多方面都很智能,如果余额与第一行相同,你不需要指定余额金额:

9/29 (1023) 太平洋贝尔 费用:公用事业:电话 $23.00 资产:支票

对于这笔交易,Ledger 将会计算出 $-23.00 必须来自 ‘资产:支票’ 以平衡交易。

还要注意账户条目的结构。通过用冒号分隔建立了一个隐含的层次结构(见 结构化您的账户)。

格式非常灵活,不必完全按照示例中的缩进和空格来排版。唯一的要求是交易的开始(通常是日期)位于交易的第一行开头,账户至少要缩进一个空格。如果您省略了账户行前面的空格,Ledger 将会生成错误。金额和账户之间必须至少有两个空格或一个制表符。如果金额和账户之间的分隔不够,Ledger 将会报错并停止计算。

除非你最近从另一个星球到达,否则你已经有了一个财务状况。你需要记录下这个财务状况,以便账本有一个起点。

在某个方便的时间点,你知道你所有财务账户的余额和未偿还义务。这些金额构成了账本的期初分录基础。例如,如果你选择2011年初作为开始使用账本跟踪财务的日期,你的期初余额分录可能看起来像这样:

2011/01/01

  • 期初余额 资产:联名支票 $800.14 资产:其他支票 $63.44 资产:储蓄 $2805.54 资产:投资:401K:递延 100.0000 VIFSX @ $80.5227 资产:投资:401K:匹配 50.0000 VIFSX @ $83.7015 资产:投资:IRA 250.0000 VTHRX @ $20.5324 负债:抵押贷款 $-175634.88 负债:汽车贷款 $-3494.26 负债:信用卡 -$1762.44 权益:期初余额

“期初余额”这个名称并没有什么特别之处,作为账户名称的收款人,任何你理解的方便名称都可以使用。

实际上,您在这方面没有任何要求,但为了保持您的理智,我们建议您为会计系统提供一些非常基本的结构。

在最高层次上,你有五种账户:

  1. 费用:钱去哪里,
  2. 资产:钱在哪里,
  3. 收入:钱来自哪里,
  4. 负债:你欠的钱,
  5. 股权:你财产的真实价值。

以这种方式开始结构将使您更容易获得关于您财务的真正需要询问的问题的答案。

在这些顶级账户下,您可以拥有任何您想要的详细程度。例如,如果您想具体跟踪您在汉堡和薯条上的消费,您可以拥有以下内容:

费用: 食物: 汉堡和薯条

Ledger 对于如何评估您的账户是中立的。美元、欧元、英镑、法郎、股票等都只是“商品”。股票、债券、共同基金和其他金融工具的持有可以使用对您方便的任何标签(建议使用股票代码符号来标记公开交易的资产)。3

在本手册的其余部分,我们将仅在提及交易价值的单位时使用“商品”一词。

这在根本上与许多常见的会计软件不同,这些软件假设您所有账户中使用相同的货币。这意味着如果您通常使用欧元,但前往美国并产生一些费用,您必须在将条目录入财务系统之前进行货币转换。使用 ledger 这并不是必需的。在同一日记账中,您可以有任何或所有您实际持有的商品的条目。您可以使用报告功能将所有商品转换为单一商品以便于报告,而无需更改基础条目。

例如,以下条目反映了从美国前往欧洲的商务旅行所进行的交易:

2011/09/23 在慕尼黑的现金 资产:现金 €50.00 资产:支票账户 $-66.00

2011/09/24 慕尼黑晚餐 费用:商务:旅行 €35.00 资产:现金

这表示 $66.00 从支票账户中取出,变成了 50 欧元。隐含的汇率是 $1.32。然后在慕尼黑花费了 35.00 欧元用于晚餐。

运行账本余额报告显示:

$ ledger -f example.dat bal

         $-66.00
          €15.00  资产
          €15.00    现金
         $-66.00    支票
          €35.00  费用:业务:旅行

         $-66.00
          €50.00

前两行显示我的当前资产为支票账户 $-66.00(在这个非常简短的例子中,我没有为支票账户建立一个初始余额)和 €15.00。晚餐消费后,我的钱包里有 €15.00。底线平衡为零,但显示为两行,因为我们还没有告诉账本转换商品。

购买股票是一个典型的例子,许多人会用到,它涉及在同一交易中多种商品。股票的类型(AAPL代表苹果公司)和您购买时所用货币单位的股票购买价格(AAPL的$)。是的,典型的约定如下:

2004/05/01 股票购买 资产:经纪人 50 AAPL @ $30.00 费用:经纪人:佣金 $19.95 资产:经纪人 $-1,519.95

总结
Ledger 是一款基于文本日记的命令行会计工具,提供双重记账功能。它没有复杂的用户界面,回归了早期计算机的简单风格。用户需要维护一个日记,记录所有账户的交易,包括借方和贷方,确保每笔交易的借贷平衡。Ledger 允许用户记录多种账户的交易,简化了会计过程。通过计算机化的方式,Ledger 可以自动跟踪账户余额,用户只需输入交易记录。与其他财务软件不同,Ledger 不会修改用户的输入文件,只用于数据分析。它支持在 Unix 平台上编译,并提供在线帮助和社区支持,适合各种会计应用,包括非营利组织的财务管理。用户可以通过命令行生成报告,查看交易记录和账户余额,帮助用户更好地管理财务。