本文档旨在记录开发类似【浪潮云代账】https://vip.eyun.cn/eyun3/html/#/ 的企业理账系统时,涉及的编程之外的会计相关知识。

会计做账数据示例

一切系统的设计都源于数据。假设一个新成立的小微企业如下:

## 1. 账套启用与期初数据
202404
## 期初数据
借:1001 库存现金                   10000.00
    1002 银行存款                   30000.00
    1405 库存商品                   10000.00
    贷:3001 实收资本               50000.00

## 2. 交易明细 (凭证) 
## 1月交易明细
## 2.1. 购买打印机
借:5602002 管理费用-办公费          1000.00
    贷:1002 银行存款                1000.00

## 2.2. 发员工工资
借:5602001 管理费用-管理人员职工薪酬 5000.00
    贷:1002 银行存款                5000.00

## 2.3. 微信销售收款
借:1001 库存现金                    8000.00
    贷:5001 主营业务收入             8000.00

## 2月交易明细
## 2.4. 购买办公电脑
借:1601 固定资产                    3000.00
    贷:1002 银行存款                3000.00

## 2.5. 支付宝销售收款
借:1012 其他货币资金                 7000.00
    贷:5001 主营业务收入             7000.00

上述交易在数据库中凭证分录表的存储:

transaction_id subject_id debit_amount credit_amount summary
1 5602002 1000 0 购买打印机
1 1002 0 1000 购买打印机
2 5602001 5000 0 发员工工资
2 1002 0 5000 发员工工资
3 1001 8000 0 微信销售收款
3 5001 0 8000 微信销售收款
4 1601 3000 0 购买办公电脑
4 1002 0 3000 购买办公电脑
5 1012 7000 0 支付宝销售收款
5 5001 0 7000 支付宝销售收款

注:借 (Debit / Dr.), 贷 (Credit / Cr.), 减少,信用卡/贷记卡

会计科目

会计科目是记账的“标签”。系统设计中,最核心的就是五大账户分类,它们是构成财务报表的基础。

  1. 资产类 (Assets): 公司拥有的资源。
    • 1001 库存现金
    • 1002 银行存款
    • 1601 固定资产
  2. 负债类 (Liabilities): 公司欠别人的。
    • 2001 短期借款
    • 2202 应付账款
  3. 所有者权益类 (Equity): 真正属于股东的净资产。
    • 3001 实收资本
    • 3103 本年利润 (系统自动结转)
  4. 收入类 (Revenue): 公司经营所得。
    • 5001 主营业务收入
    • 5051 其他业务收入
  5. 支出/费用类 (Expense): 公司为经营发生的耗费。
    • 5602 管理费用 (父科目)
      • 5602001 管理人员职工薪酬
      • 5602002 办公费

记账规则

  1. 核心恒等式

资产 (Assets) = 负债 (Liabilities) + 所有者权益 (Equity)

  1. 五大科目记账规则

公司要运营,就要有收入 (Revenue)支出 (Expense)。它们是临时的“权益”变动账户

  • 收入 会导致 权益增加
  • 支出 会导致 权益减少

基于此,我们得到了开发记账引擎的黄金规则表

账户大类 增加时记在哪边? ➕ 减少时记在哪边? ➖ 正常余额在哪边?
资产 (Assets) 借 (Debit) 贷 (Credit) 借方
支出 (Expense) 借 (Debit) 贷 (Credit) 借方
负债 (Liabilities) 贷 (Credit) 借 (Debit) 贷方
所有者权益 (Equity) 贷 (Credit) 借 (Debit) 贷方
收入 (Revenue) 贷 (Credit) 借 (Debit) 贷方

记忆法:

  • 公式左边的【资产】,在左边 (借方) 增加。
  • 公式右边的【负债】和【权益】,在右边 (贷方) 增加。
  • 【收入】使权益增加,所以跟【权益】走,在右边 (贷方) 增加。
  • 【支出】使权益减少,所以跟【权益】反着走,在左边 (借方) 增加。

“资产和支出是一伙的,剩下的(负债、权益、收入)是另一伙的。”

只要记住【资产】是借方增加,那么【支出】也是借方增加。 而【负债】和【权益】作为【资产】在等式(资产 = 负债 + 权益)的另一边,规则自然就是相反的(贷方增加)。【收入】又是【权益】的增加项,所以它也跟【权益】走(贷方增加)。

报表生成

  • 利润表 (Income Statement) 就是在某个时间段内,对所有“收入”、“支出”类账户的发生额进行 SUM() 统计。

  • 资产负债表 (Balance Sheet) 就是在某个时间点,对所有“资产”、“负债”、“权益”类账户的余额进行 SUM() 统计。

利润表

两种标准的计算和显示格式

在会计准则下,有两种公认的标准格式:

单步式利润表 (Single-Step Income Statement):简单直接,适合小微企业。

多步式利润表 (Multi-Step Income Statement):更详细,提供了关键的利润指标,是所有上市公司和规范企业的标准。

关联的数据

  1. 会计科目 accounts
  2. 记账凭证 voucher_entries
利润表计算

单步式利润表

当您想查看“4月份利润表”:

  1. 设定时间范围:系统锁定时间为 2024-04-012024-04-30

  2. 抓取数据

    • 系统去 voucher_entries 表,把这个时间段内所有的记账分录全部抓出来。
    • 然后,系统会去accounts 表,查看这些分录对应的科目。
  3. 核心步骤:数据分类

    • 系统会丢掉所有“报表归属”是 资产负债权益 的分录。
    • 系统只保留“报表归属”是 收入 (Revenue)支出 (Expense) 的分录。
  4. 汇总计算

    • 系统把所有保留下来的“收入”类科目的金额加起来
    • 系统把所有保留下来的“支出”类科目的金额加起来
  5. 最终呈现

    • 总收入 - 总支出 = 净利润

假设要看“4月份利润表”:

  1. 系统抓出您4月份的所有凭证(交易1, 2, 3)。

  2. 系统开始分类:

    • 交易1 (买打印机):
      • 5602002 管理费用-办公费 -> 报表归属是【支出】,保留
      • 1002 银行存款 -> 报表归属是【资产】,丢弃
    • 交易2 (发工资):
      • 5602001 管理费用-职工薪酬 -> 报表归属是【支出】,保留
      • 1002 银行存款 -> 报表归属是【资产】,丢弃
    • 交易3 (微信收款):
      • 1001 库存现金 -> 报表归属是【资产】,丢弃
      • 5001 主营业务收入 -> 报表归属是【收入】,保留
  3. 系统开始汇总计算:

    • 总收入 = 5001 主营业务收入 (8,000) = 8,000.00
    • 总支出 = 5602002 办公费 (1,000) + 5602001 职工薪酬 (5,000) = 6,000.00
  4. 系统生成报表:

    ``` 营业收入: 8,000.00 (减: 支出): 管理费用: 6,000.00 净利润: 2,000.00 ```

多步式利润表

多步式需要做的是把我们之前那个“报表归属”标签分得更细致

第一步:准备一个“更聪明”的《会计科目表》

在“单步式”中,我们只有收入支出

一个完整的多步式利润表,还需要处理 营业成本营业外收入营业外支出所得税

补充示例缺失的科目(比如 4001 - 营业成本),斜体文字,以便完整地演示多步式利润表中的所有步骤(比如步骤2:计算营业成本)。

科目代码 (id) 科目名称 报表归属 (category) 报表子类 (sub_category)
资产 / 负债 / 权益 (不属于利润表)
5001 主营业务收入 收入 一、营业收入
4001 营业成本 支出 二、营业成本 (COGS)
5602001 管理费用-职工薪酬 支出 三、营业费用
5602002 管理费用-办公费 支出 三、营业费用
5801 营业外收入 收入 四、营业外收入
5802 营业外支出 支出 五、营业外支出
6001 所得税费用 支出 六、所得税费用

第二步:演示系统如何计算“4月份多步式利润表”

系统开始按顺序,一步一步地填满报表:

步骤 1:计算“一、营业收入”

  • 系统动作

    1. 锁定时间范围:2024-04-012024-04-30
    2. 搜索 voucher_entries 表。
    3. 查找所有 accounts.sub_category == “一、营业收入” 的分录。
  • 查找结果

    • 找到 交易 3 (微信收款) 中 5001 主营业务收入 的贷方金额 8,000.00
  • 计算总计 = 8,000.00

  • 报表填入: > 一、营业收入 ……………….. 8,000.00

步骤 2:计算“二、营业成本 (COGS)”

  • 系统动作:查找 sub_category == “二、营业成本 (COGS)” 的分录。

  • 查找结果:0 条。 (您的企业是服务业,没有卖商品,所以没有成本)

  • 报表填入: > (减:营业成本) ……………….. 0.00

步骤 3:计算“毛利润” (这是第一个小计)

  • 系统动作:执行计算 [步骤1] - [步骤2]

  • 计算8,000.00 - 0.00 = 8,000.00

  • 报表填入: > 二、毛利润 ……………….. 8,000.00

步骤 4:计算“三、营业费用”

  • 系统动作:查找 sub_category == “三、营业费用” 的所有分录。

  • 查找结果

    • 找到 交易 1 (买打印机) 中 5602002 管理费用-办公费 的借方金额 1,000.00

    • 找到 交易 2 (发工资) 中 5602001 管理费用-职工薪酬 的借方金额 5,000.00

  • 计算总计 = 1,000.00 + 5,000.00 = 6,000.00

  • 报表填入: > (减:营业费用) ……………….. 6,000.00

步骤 5:计算“营业利润” (这是第二个,也是最重要的小计)

  • 系统动作:执行计算 [步骤3] - [步骤4]

  • 计算8,000.00 - 6,000.00 = 2,000.00

  • 报表填入: > 三、营业利润 ……………….. 2,000.00

步骤 6 & 7:计算“营业外收支” 和 “所得税”

  • 系统动作

    • 查找 sub_category == “四、营业外收入” -> 找到 0.00
    • 查找 sub_category == “五、营业外支出” -> 找到 0.00
    • 查找 sub_category == “六、所得税费用” -> 找到 0.00
  • 报表填入

    (加:营业外收入) ……………….. 0.00 (减:营业外支出) ……………….. 0.00 四、税前利润 ……………….. 2,000.00 (减:所得税费用) ……………….. 0.00

最终步骤:计算“净利润” (The Bottom Line)

  • 系统动作:执行最后一步计算 [步骤5] + [营业外收入] - [营业外支出] - [所得税]

  • 计算2,000.00 + 0.00 - 0.00 - 0.00 = 2,000.00

  • 报表填入: > 五、净利润 ……………….. 2,000.00

资产负债表

核心区别:“一碗水” 和 “一条河”

  • 利润表 (一条河)

    • :“在4月1日到4月30日这一个时间段,总共流过了多少水(收入),又流走了多少水(支出)?”

    • 计算SUM(期间所有收入) - SUM(期间所有支出)

  • 资产负债表 (一碗水)

    • :“在4月30日晚上12点这一个时间点,碗里还剩多少水(资产),这水是谁的(负债 和 权益)?”

    • 计算期初余额 + (本期借方) - (本期贷方)

资产负债表的核心公式

它就是我们最早学的那个宇宙平衡公式,这个报表就是用来证明这个公式的:

资产 (Assets) = 负债 (Liabilities) + 所有者权益 (Equity)

最关键的“魔术环节”:报表如何连接?

您会发现,资产负债表不关心 收入支出 科目。那利润表算出来的利润去哪了?

答案: 利润表算出来的 净利润,会自动结转到资产负债表中的 所有者权益 类别下的一个特殊科目:3103 本年利润

这就是两个报表唯一的连接点!

第一步:准备“报表归属” (科目表)

和利润表一样,您在 accounts 表中必须为科目分类。这次我们只关心这三类:

科目代码 (id) 科目名称 报表归属 (category)
1001 库存现金 资产 (Asset)
1002 银行存款 资产 (Asset)
1405 库存商品 资产 (Asset)
1601 固定资产 资产 (Asset)
1012 其他货币资金 资产 (Asset)
2202 应付账款 负债 (Liability)
3001 实收资本 权益 (Equity)
3103 本年利润 权益 (Equity)
5xxx ... (收入)
5xxx ... (支出)

第二步:演示系统如何计算“4月30日资产负债表”

系统会锁定一个时间点2024-04-30

然后,系统会计算每一个 资产负债权益 科目在这一天的最终余额

计算公式 (以资产类为例): 期末余额 = 期初余额 + (4月1日至30日借方发生额) - (4月1日至30日贷方发生额)

计算【资产】部分

1. 1001 库存现金

  • 期初余额 (4/1): 10,000.00

  • 4月发生额

    • 交易 3 (微信收款):借方 +8,000.00
  • 期末余额 (4/30) = 10,000.00 + 8,000.00 = 18,000.00

2. 1002 银行存款

  • 期初余额 (4/1): 30,000.00

  • 4月发生额

    • 交易 1 (买打印机):贷方 -1,000.00
    • 交易 2 (发工资):贷方 -5,000.00
  • 期末余额 (4/30) = 30,000.00 - 1,000.00 - 5,000.00 = 24,000.00

3. 1405 库存商品

  • 期初余额 (4/1): 10,000.00

  • 4月发生额:无

  • 期末余额 (4/30) = 10,000.00

4. 1601 固定资产

  • 期初余额 (4/1): 0.00

  • 4月发生额:无 (交易 4 发生在5月)

  • 期末余额 (4/30) = 0.00

5. 1012 其他货币资金

  • 期初余额 (4/1): 0.00

  • 4月发生额:无 (交易 5 发生在5月)

  • 期末余额 (4/30) = 0.00

【资产总计 (4/30)】 = 18,000 + 24,000 + 10,000 + 0 + 0 = 52,000.00

计算【负债 + 权益】部分

6. (所有负债科目)

  • 期初余额 (4/1): 0.00

  • 4月发生额:无

  • 期末余额 (4/30) = 0.00

7. 3001 实收资本

  • 期初余额 (4/1): 50,000.00

  • 4月发生额:无

  • 期末余额 (4/30) = 50,000.00

8. 3103 本年利润 (魔术环节来了!)

  • 期初余额 (4/1): 0.00

  • 4月发生额

    • 这一项的数据从凭证里直接抓,而是直接去调用【利润表】的计算结果
    • 我们上一步算出4月份的净利润是: 2,000.00
  • 期末余额 (4/30) = 0.00 + 2,000.00 = 2,000.00

【负债和权益总计 (4/30)】 = 0 (负债) + 50,000 (实收资本) + 2,000 (本年利润) = 52,000.00

第三步:系统组装报表 (2024-04-30)

系统最后把这些算好的期末余额填入标准模板:

资产 (Assets) 金额 负债和所有者权益 (Liabilities & Equity) 金额
库存现金 18,000.00 负债 (Liabilities) 0.00
银行存款 24,000.00
库存商品 10,000.00 所有者权益 (Equity) 52,000.00
固定资产 0.00 实收资本 50,000.00
本年利润 2,000.00
资产总计 52,000.00 负债和权益总计 52,000.00

52,000.00 = 52,000.00,报表平衡!

(额外演示) 如果计算“5月31日资产负债表”?

系统会重复以上步骤,但关键区别在于:

  1. 期初余额:使用 4月30日 的期末余额。

  2. 发生额:使用 5月1日至31日 的凭证数据(交易 4 和 5)。

  3. 本年利润:使用 1月1日至5月31日 累计的净利润。

1002 银行存款 (5/31) 余额会是:

  • 期初 (5/1): 24,000.00 (来自4月30日的余额)

  • 5月发生额

    • 交易 4 (买电脑):贷方 -3,000.00
  • 期末余额 (5/31) = 24,000.00 - 3,000.00 = 21,000.00

3103 本年利润 (5/31) 余额会是:

  • 4月净利润: 2,000.00

  • 5月净利润7,000 (收入) - 3,000 (固定资产不算支出, 假设为0) = 7,000 (注:买电脑记入资产,不影响当期利润)

  • 累计本年利润 (5/31) = 2,000.00 + 7,000.00 = 9,000.00

Q&A

  1. 信用卡是 借 (Debit) 记卡,还是贷 (Credit)记卡?存折呢?

简短答案

信用卡 是 贷记卡 (Credit Card)。

存折 (及其关联的银行卡) 是 借记卡 (Debit Card) 的概念。

这个命名是相对银行来说的。

可以这样理解“贷记卡 (Credit Card)”这个名字的双重含义:

  • 从产品上说:它是银行 “贷”给你钱让你使用的卡(基于信贷)。

  • 从账本上说:当你还钱时,银行会 “贷记”(减少)它的资产,从而减少你欠它的债务。

这两个层面都指向同一个事实:命名和记账的视角,都是站在银行这一方的。 这就是为什么它对用户来说感觉是“反直觉”的,因为我们天然地会站在自己的角度看问题。

  1. 记账凭证,可以直接记在有子科目的科目上吗?

标准答案是:绝对不可以。

在规范的会计制度和所有成熟的财务软件中,记账凭证(Journal Entry)必须且只能记录在最末级的子科目(明细科目)上。

有子科目的上级科目(父科目)被称为 控制科目(Control Account) 或 “总账科目”。它的作用是汇总和控制其下所有子科目的数据,其本身不接收直接的记账。

一个控制科目(父科目)的余额,必须时刻等于其下所有明细科目(子科目)的余额之和。

  1. 会计科目在凭证记账后,再更新,需要增加子科目,正常的会计师会有这样的操作吗?

会,这不属于日常的记账行为,而是一种在企业发展过程中非常正常且必要的账套结构优化或核算精细化调整。

在已经有凭证记在父科目上之后,如何将这些账目“转移”到新的子科目下?规范的会计操作有两种方式:

方式一:最合规、最标准的方式 —— “调账凭证” (Reclassification Entry) 方式二:系统后台处理方式 —— “数据迁移”

参考资料

  • 浪潮云代账 https://vip.eyun.cn/eyun3/html/#/
  • 浪潮云-云代账用户手册.pdf
  • 2024年《初级会计实务》教材电子版.pdf
  • beancount 使用入门 https://blog.196000.xyz/2025/2025-08-02-develop-beancount-quick-start.html

其它待补充