ERPNext 自定义中国财务报表:科目、账户类别、报表模板到底怎么取数?

ERPNext 自定义中国财务报表:为什么自定义模版不显示数据?

很多企业在做 ERPNext 中国化财务时,最容易遇到一个问题:

为什么标准资产负债表有数据, 但自己新建的 Financial Report Template(自定义财务报表模版)却全部是 0?

为什么有些利润被重复计算? 为什么一定要设置 Account Category(账户类别)?

今天用最通俗的方式,把 ERPNext 自定义财务报表的底层取数逻辑讲透。


一、先说结论:只有“自定义报表模版”强依赖 Account Category

这是最关键的一句话:

标准报表很多时候可以直接通过:

  • root_type
  • account_type
  • report_type

自动取数。

所以即使没有设置 Account Category, 标准资产负债表、利润表也可能正常显示。

但是:

只要你自己新建了 Financial Report Template(自定义财务报表模版), 数据是否显示,核心就取决于:

Account Category(账户类别)

也就是说:

自定义模版不显示数据,90% 都是因为末级科目没有设置正确的 Account Category。

这是 ERPNext 中国化最容易踩坑的地方。


二、为什么自定义模版必须设置 Account Category?

ERPNext 自定义财务报表模板,本质逻辑是:

Financial Report Template → Report Line Item → Formula or Account Filter → 找符合条件的末级科目 → 汇总余额或发生额

其中最核心的过滤字段就是:

Account Category

所以模板里如果某一行写的是:

Trade Payables

系统就会去找所有:

Account Category = Trade Payables

的末级科目。

如果一个都没找到, 这一行就是 0。

所以你会看到:

标准报表正常, 自定义模版全部不显示。

根本原因不是模板坏了, 而是:

模板能找到的标签为空。


三、三层结构:为什么报表不是直接从科目取数?

ERPNext 财务报表不是“看到科目就直接显示”,而是通过三层映射结构完成。

凭证/业务单据 ↓ Account(会计科目) ↓ Account Category(账户类别) ↓ Financial Report Template(财务报表模版) ↓ 资产负债表 / 利润表 / 现金流量表

可以理解成:

  • 科目 = 原始财务数据
  • 账户类别 = 给科目贴标签
  • 自定义报表模板 = 根据标签抓数据

所以:

自定义模板不是找科目名称,而是找 Account Category 标签。


四、核心规则:只有末级科目才需要设置

必须满足:

Is Group = 0(不是分组科目)

因为报表引擎只汇总:

实际发生业务的末级科目

例如:

应付账款(组) ├─ A供应商 ├─ B供应商 └─ C供应商

只需要给:

  • A供应商
  • B供应商
  • C供应商

设置:

Trade Payables

父级“应付账款”不用设置。


五、类别名称必须和模板完全一致

例如自定义资产负债表模板某一行写的是:

Trade Payables

那么科目的 Account Category 也必须写:

Trade Payables

必须一字不差。

否则模板这一行一定是 0。


六、为什么“本年利润”不要设置 Category?

这是中国企业最容易踩坑的地方。

很多客户习惯把“本年利润”设置成:

Reserves and Surplus

这是错误的。

原因是:

自定义资产负债表模板通常会有一行:

Current Profit / Loss

这一行很多时候直接按:

root_type in [“Income”, “Expense”]

自动汇总所有收入类和费用类末级科目的本期净额。

也就是说:

ERPNext 已经自动算了一遍当期利润。

如果再给“本年利润”设置权益类别, 就会导致:

  • 收入费用自动算一次
  • 权益类科目再算一次

最终出现:

  • 利润重复
  • 资产负债表不平

正确做法:

本年利润科目不要设置 Account Category。


七、中国财务最常用 Account Category 映射

资产类

中国科目 Account Category
库存现金、银行存款 Cash and Cash Equivalents
应收账款 Trade Receivables
其他应收款 Other Receivables
预付账款 Other Current Assets
存货 Stock Assets
固定资产 Tangible Assets
无形资产 Intangible Assets

负债类

中国科目 Account Category
应付账款 Trade Payables
短期借款 Short-term Borrowings
应交税费 Current Tax Liabilities
其他应付款 Other Payables
长期借款 Long-term Borrowings
租赁负债 Other Non-current Liabilities

所有者权益

中国科目 Account Category
实收资本 Share Capital
盈余公积、未分配利润 Reserves and Surplus

八、最通俗理解:为什么标准报表有,自定义模版没有?

因为:

标准报表很多内置了:

  • Root Type
  • Account Type
  • 内部逻辑规则

即使不贴标签也可能出数。

但自定义报表模版是你自己定义的:

“按什么标签取什么数据”

所以:

模板写得越灵活,越依赖科目标签完整性。

这也是为什么很多客户说:

标准报表正常, 复制一个中国资产负债表模板后全部是 0。

根本原因就是:

末级科目的 Account Category 没有完成中国化映射。


九、中国企业做 ERPNext 财务中国化最重要的实施经验

ERPNext 标准报表可以靠系统默认规则出数, 但自定义中国财务报表模版一定依赖:

科目标签(Account Category) + 模板规则

所以中国化报表的核心不是改代码, 而是先把:

末级科目 → Account Category 映射关系

设计正确。

最关键三条规则:

规则1:只给末级科目贴标签

组科目不要贴。

规则2:本年利润不要贴权益标签

避免利润重复。

规则3:标准报表正常,自定义模版没数据,先查标签

90% 问题都在这里。