跳转到主要内容

从 QuickBooks 迁移到 Beancount:切换指南

把账本从 QuickBooks 搬到 Beancount:导出报表、映射会计科目表、用试算平衡表开立总账,并核对到分毫不差。

选定一个切换日期,导出切换日前一天的 QuickBooks 试算平衡表,然后为每个资产负债表科目各写一条 pad 和一条 balance 来开立你的 Beancount 总账。当 bea check 通过、且权益余额与 QuickBooks 一致时,你的账本就完成了迁移。切换日之后的一切都记录在 Beancount 里。

本指南同时适用于 QuickBooks Online 和 QuickBooks Desktop。它不依赖任何 QuickBooks 导入器,因为 Beancount 并不自带。你先迁移余额,再决定要带多少历史数据。

如果你还在犹豫是否该换,请先读Beancount 与 QuickBooks 对比。

1. 决定切换日期以及要保留什么​

选一个财年的第一天,比如 2026-01-01。以年度为界可以让一个纳税年度只留在一个系统里。这也意味着你在 Beancount 里的第一份利润表从零开始。

现在就决定 Beancount 里要放多少历史数据:

  • 只放余额。 在切换日开账,把 QuickBooks 报表作为更早年份的存档。这是最快的路径,本指南余下部分都基于这一假设。
  • 年度汇总。 根据每一年的试算平衡表,为过去的每一年各加一条汇总分录。这样你的跨年报表在 Beancount 里也能用。
  • 完整交易历史。 用脚本转换总账(General Ledger)导出文件。这是工作量最大的一种,第 5 节会说明它涉及什么。

在 QuickBooks 里把每个银行和信用卡账户都核对到切换日的前一天。一个未核对的余额会把它的差错带进你的新总账。

2. 从 QuickBooks 导出​

你需要三份报表,全部截止到切换日的前一天(本指南中为 2025-12-31):

报表它能给你什么
Account List(科目列表)每个账户的名称和类型,用于第 3 步的映射
Trial Balance(试算平衡表)每个账户的期末余额,将成为你的期初余额
General Ledger(总账)每一笔交易,用于历史数据和存档

QuickBooks Online。 进入 Reports,然后 Standard reports,按名称打开每份报表。选择 Export/Print,然后 Export to Excel。Account List 就是会计科目表报表。Settings 里 Tools 栏下的 Export data 工具会把一组报表和列表作为 Excel 文件导出到一个 zip 包中。Intuit 在 Export your QuickBooks Online data 中记录了两条路径。

这些 QuickBooks Online 导出文件都是 Excel 文件。如果要用脚本读取,用电子表格打开每一个,另存一份 CSV 副本。

附件(Attachments) 需要单独导出。在 QuickBooks Online 中,进入 Settings,然后 Attachments,选中这些文件,选择 Batch actions 再选 Export。把这个 zip 和你的存档放在一起。

QuickBooks Desktop。 在 Windows 上,从 Reports 然后 Reports Center 打开每份报表。选择 Excel,然后 Create New Worksheet。下一个窗口可以直接保存为 Excel 工作簿或 CSV 文件,详见 Export reports as Excel workbooks。Desktop 还可以把列表(包括会计科目表)导出为 IIF 文件:File,然后 Utilities,然后 Export,再选 Lists to IIF Files。IIF 导出只覆盖列表。Intuit 表示你可以导入交易但无法导出交易,详见 Export, import, and edit IIF files。

保持原始导出文件不变。如果日后有数字受到质疑,它们就是你的证据。

3. 把账户映射到 Beancount 层级​

Beancount 有五个根账户。每一种 QuickBooks 账户类型都归入其中之一下:

QuickBooks 账户类型Beancount 账户
BankAssets:Bank:Checking、Assets:Bank:Savings
Accounts receivable (A/R)Assets:AccountsReceivable
Other Current Assets、Fixed AssetsAssets:Prepaid:…、Assets:Equipment:…
Credit CardLiabilities:CreditCard:Visa
Accounts payable (A/P)、Other Current LiabilitiesLiabilities:AccountsPayable、Liabilities:SalesTax
Long Term LiabilitiesLiabilities:Loans:…
Equity、Retained Earnings、Opening Balance EquityEquity:Opening-Balances
Income、Other IncomeIncome:Sales、Income:Interest
Cost of Goods SoldExpenses:COGS:…
Expenses、Other ExpenseExpenses:Rent、Expenses:Software

账户名以大写字母开头且不含空格,所以 "Office Supplies" 变成 Expenses:Office-Supplies。QuickBooks 的子账户变成更深的层级,比如 Expenses:Vehicle:Fuel。

Retained Earnings 和 Opening Balance Equity 合并为一个 Equity:Opening-Balances 账户。Beancount 会根据你的收入和费用账户计算当年损益,所以不需要结转单独的留存收益账户。

4. 在切换日开立总账​

这家示例公司在 2025-12-31 有一份四行的试算平衡表。收入和费用行已经并入 Retained Earnings。QuickBooks Online 在新财年开始时也会自己这么做,详见 View retained earnings account details。

账户借方贷方
Checking12,450.00
Accounts Receivable (A/R)3,200.00
Visa credit card1,875.40
Retained Earnings13,774.60
合计15,650.0015,650.00

把它保存为 main.bean:

option "operating_currency" "USD"
 
2025-12-31 open Assets:Bank:Checking USD
2025-12-31 open Assets:AccountsReceivable USD
2025-12-31 open Liabilities:CreditCard:Visa USD
2025-12-31 open Equity:Opening-Balances USD
 
; Opening balances from the QuickBooks Trial Balance as of 2025-12-31
2025-12-31 pad Assets:Bank:Checking Equity:Opening-Balances
2025-12-31 pad Assets:AccountsReceivable Equity:Opening-Balances
2025-12-31 pad Liabilities:CreditCard:Visa Equity:Opening-Balances
 
2026-01-01 balance Assets:Bank:Checking 12450.00 USD
2026-01-01 balance Assets:AccountsReceivable 3200.00 USD
2026-01-01 balance Liabilities:CreditCard:Visa -1875.40 USD
2026-01-01 balance Equity:Opening-Balances -13774.60 USD

每一条 pad 要求 Beancount 插入使下一条 balance 断言成立的分录。每条 pad 的平衡方都进 Equity:Opening-Balances。balance 断言在其日期的开始时校验,所以 pad 的日期是切换日的前一天。

借方变成正数,贷方变成负数。这就是 Visa 的余额是 -1875.40 USD 的原因。

最后一行是对账。权益必须等于 -13774.60 USD,即 Retained Earnings 的贷方金额。如果某个资产或负债数字打错,被 pad 出来的权益就会改变,那条断言就会失败。

对于一家真实公司,为试算平衡表上的每一个资产负债表科目各加一条 open、一条 pad 和一条 balance。如果你按名称跟踪未结发票,把 A/R 和 A/P 按每个客户或供应商拆成一个子账户。

5. 引入历史数据​

切换之后,新活动记录在 Beancount 里。银行和信用卡对账单是主要来源。在浏览器里用 CSV 转 Beancount 转换器转换银行 CSV 导出,或用银行导入指南走命令行。

过去的年份是可选的。QuickBooks 总账导出没有一键导入。迁移那段历史需要脚本或手动映射:

  1. 把 General Ledger 导出保存为 CSV。
  2. 按日期和交易编号把它的行分组为交易。
  3. 用第 3 步的映射重命名每个账户。
  4. 把每一组写成一笔 Beancount 交易,其各分录之和为零。

如果你引入历史数据,就在那段历史的起点开立账户,而不是在切换日。然后保留 2026-01-01 的余额断言。它们证明转换后的历史数据到达的余额与 QuickBooks 报告的相同。

6. 对照 QuickBooks 校验​

检查总账,然后列出所有余额:

bea --file main.bean check
bea --file main.bean query "SELECT account, sum(position) GROUP BY account ORDER BY account"

bea check 应报告没有错误。查询返回四行:Assets:AccountsReceivable 为 3200.00 USD,Assets:Bank:Checking 为 12450.00 USD,Equity:Opening-Balances 为 -13774.60 USD,Liabilities:CreditCard:Visa 为 -1875.40 USD。逐行与 QuickBooks 试算平衡表对比,贷方记为负数。

对命令行不熟?用 CLI 快速上手安装 bea。

7. 哪些东西不会迁移过来​

账本迁移搬的是会计余额和历史数据。它不会搬 QuickBooks 围绕这些运作的业务功能:

  • 发票和收款链接。 未结发票保留为 A/R 余额。今后使用单独的开票服务。
  • 工资(Payroll)。 工资发放、税务表单和员工记录留在你的工资服务商那里。
  • 销售税申报。 Beancount 记录负债。申报仍是一项单独的任务。
  • 附件。 收据和单据来自它们自己的 zip 导出,而不在报表里。
  • 银行数据源规则和核对历史。 把分类重建为导入规则。

对比页面说得很直白:不要抱着几个插件就能重建整个 QuickBooks 运营套件的假设去选 Beancount。当总账本身就是你长期的记录系统时,才选它。

在小企业里用 Beancount?请看面向小企业的 Beancount.io,了解托管账本、银行同步和会计师协作。

来源:https://beancount.io/zh/docs/Solutions/migrate-from-quickbooks