ERPNext 中国企业使用工作流(Workflow )实用指南

一、什么是 Workflow(工作流)?

可以把 Workflow(工作流)理解成一张“审批路线图”。

一张单据从创建到完成,通常不会一步到位,而是会经过几个阶段:

  • State(状态):单据当前停在哪一步
    例如:Draft(草稿)Pending Manager Approval(待经理审批)Pending Finance Approval(待财务审批)Approved(已批准)Rejected(已驳回)

  • Transition(流转):让单据从一个 State(状态)走到另一个 State(状态)的动作
    例如:Submit(提交)Approve(批准)Reject(驳回)Withdraw(撤回)

以采购订单为例:

Draft(草稿)
   -- Submit(提交) -->
Pending Manager Approval(待经理审批)
   -- Approve(批准) -->
Pending Finance Approval(待财务审批)
   -- Approve(批准) -->
Approved(已批准)

Pending Manager Approval(待经理审批)
   -- Reject(驳回) -->
Draft(草稿)

一句话理解:

State(状态)是单据停在哪一步,Transition(流转)是单据怎么走到下一步。


二、ERPNext Workflow(工作流)的一个关键限制

ERPNext 的 Workflow(工作流)是按 Document Type(单据类型) 生效的。

也就是说:

同一个 Document Type(单据类型),同一时间通常只能启用一套 Workflow(工作流)。

例如:

如果你给 Purchase Order(采购订单) 设置了一套审批流程,那么所有公司使用 Purchase Order(采购订单)时,默认都会走这一套流程。

ERPNext 标准 Workflow(工作流)本身不是按 Company(公司)分别隔离的。

这意味着:

  • 公司 A 的 Purchase Order(采购订单)要走这套流程
  • 公司 B 的 Purchase Order(采购订单)也要走这套流程
  • 不能简单地给公司 A 和公司 B 各自启用一套完全独立的 Workflow(工作流)

对于单公司来说,这通常不是问题。

但如果是多公司,而且每个公司的审批规则不同,就需要额外设计。


三、国内企业实际怎么用?

模式一:OA 审批 + ERPNext 补录

这是国内企业比较常见的做法。

审批在企业微信、钉钉、飞书等 OA 系统里完成,ERPNext 主要负责后续的财务、库存、采购、销售等数据落地。

例如:

  • 请购审批在 OA 完成
  • 付款审批在 OA 完成
  • ERPNext 里只录入 Purchase Order(采购订单)、Purchase Invoice(采购发票)、Payment Entry(付款记录)等单据

适合场景:

  • 中小企业
  • 老板习惯在手机上审批
  • 公司已经有成熟 OA 系统
  • ERPNext 主要用于财务、库存、采购、销售存档

优点:

  • 员工接受度高
  • 老板审批方便
  • ERPNext 配置压力小

缺点:

  • 审批记录和 ERPNext 单据不完全在一个系统里
  • 后期如果要做审计追溯,需要打通 OA 和 ERPNext 数据

模式二:ERPNext 内全流程审批

所有审批都在 ERPNext 里完成。

例如:

Purchase Order(采购订单)创建后,经过:

Draft(草稿)
→ Pending Manager Approval(待经理审批)
→ Pending Finance Approval(待财务审批)
→ Approved(已批准)

适合场景:

  • 外资企业
  • 财务主导 ERP 实施的企业
  • 对审计合规要求较高的企业
  • 希望审批记录全部留在 ERPNext 里的企业

优点:

  • 数据完整
  • 审批记录清晰
  • 权限、流程、单据状态统一

缺点:

  • 前期设计要求更高
  • 员工需要适应 ERPNext 的操作方式
  • 流程如果设计太复杂,容易影响使用体验

模式三:混合模式

这是我更推荐的一种方式。

业务审批可以放在 OA 系统里完成,ERPNext 只在关键节点做控制。

例如:

  • OA 负责日常审批
  • ERPNext 负责金额上限校验
  • ERPNext 负责预算余额校验
  • ERPNext 负责供应商、付款、库存等关键数据校验
  • ERPNext 只在重要单据上启用简单 Workflow(工作流)

这种方式比较适合国内企业。

因为很多公司已经习惯用企业微信、钉钉、飞书审批,如果强行把所有审批都搬到 ERPNext 里,用户接受度不一定高。

更现实的做法是:

OA 负责“人找人审批”,ERPNext 负责“系统规则校验”。


四、多公司场景怎么处理?

如果是多公司,而且每个公司的审批规则不同,可以考虑下面几种方案。


方案 A:使用 Condition(条件)

在 Workflow Transition(工作流流转)里,有一个字段叫:

Condition(条件)

可以在里面写 Python 表达式,用来判断当前这个 Transition(流转)是否可用。

例如:

doc.company == "Company A"

意思是:

只有当当前单据的 Company(公司)等于 "Company A" 时,这个 Transition(流转)才会显示或生效。

实际例子:

doc.company == "Shenzhen Yuan Technology Co., Ltd."

这种方式适合:

  • 公司数量少
  • 审批规则差异不大
  • 只是某些按钮、某些步骤不同

优点:

  • 不需要开发
  • 直接在 ERPNext 界面里配置
  • 上手快

缺点:

  • 公司一多,Condition(条件)会越来越复杂
  • 所有公司的 State(状态)和 Transition(流转)都混在一套 Workflow(工作流)里
  • 后期维护容易出错

简单理解:

小差异可以用 Condition(条件),大差异不要硬塞在一套 Workflow(工作流)里。


方案 B:使用 Server Script(服务器脚本)

ERPNext / Frappe 提供 Server Script(服务器脚本)功能。

可以通过 Document Event(文档事件) 类型的 Server Script(服务器脚本),在单据保存、提交、取消等动作发生时,按 Company(公司)做额外校验。

例如:

  • 公司 A 的采购订单超过 10 万必须经理审批
  • 公司 B 的采购订单超过 5 万必须财务审批
  • 某些公司不允许直接提交
  • 某些公司必须填写指定字段后才能提交

这种方式适合:

  • 不想改代码文件
  • 规则比 Condition(条件)复杂
  • 需要在保存或提交时做强制校验

优点:

  • 不需要开发自定义 App
  • 可以在系统界面中维护
  • 比 Condition(条件)更灵活

缺点:

  • 脚本多了以后也需要管理
  • 不适合特别复杂的审批体系
  • 对实施人员的技术能力有一定要求

方案 C:自定义 App

如果多公司审批规则非常复杂,推荐使用自定义 App 来处理。

思路是:

  1. 给 Workflow(工作流)增加一个自定义字段
    例如:For Company(适用公司)

  2. 根据单据上的 Company(公司),匹配对应公司的 Workflow(工作流)

  3. 控制哪些 Transition(流转)按钮可以显示

  4. 控制用户实际点击审批按钮时,是否允许执行

这种方式通常需要在自定义 App 的代码里处理。

常见会涉及:

  • hooks.py
  • get_transitions
  • apply_workflow
  • 权限判断
  • 公司匹配逻辑

适合场景:

  • 多公司数量较多
  • 各公司审批规则差异很大
  • 需要每个公司维护独立 Workflow(工作流)
  • 对长期维护有要求

优点:

  • 结构清晰
  • 各公司流程互不干扰
  • 适合长期维护

缺点:

  • 需要开发
  • 需要测试
  • 后续升级 ERPNext 时要注意兼容性

简单理解:

规则简单,用 Condition(条件);规则复杂,用自定义 App。


五、Condition(条件)里公司名称怎么填?

在 Condition(条件)里写:

doc.company == "某个公司名称"

这里的 doc.company 取的是 Company(公司)这个 DocType(单据类型)里的 Name(名称 / 主键) 字段。

不是你随便写的显示名称,也不是简称。

确认方法:

  1. 打开 ERPNext
  2. 进入 Company(公司)列表
  3. 打开对应公司
  4. 看页面 URL 最后一段
  5. 或者看列表里的 Name(名称) 字段

例如,Company(公司)的 Name(名称)是:

Shenzhen Yuan Technology Co., Ltd.

那么 Condition(条件)就应该写:

doc.company == "Shenzhen Yuan Technology Co., Ltd."

如果写错了,Condition(条件)就不会生效。


六、Workflow(工作流)设计不要太复杂

ERPNext 的 Workflow(工作流)更适合按 Role(角色)来设计,而不是按某一个具体的人来设计。

例如,不建议这样设计:

张三审批 → 李四审批 → 王五审批 → 赵六审批

更建议这样设计:

Department Manager(部门经理)
→ Finance Manager(财务经理)
→ General Manager(总经理)

这样做的好处是:

  • 人员变动时,不需要频繁修改 Workflow(工作流)
  • 只需要调整用户的 Role(角色)
  • 流程更稳定
  • 权限更清晰

七、实用分级原则

风险级别 推荐方式
低风险单据 1 级审批,甚至免审批,重点是留痕
中风险单据 2 级审批,按 Role(角色)分工
高风险单据 加强关键节点控制,例如金额阈值、预算校验、付款校验

例如:

低风险

办公用品采购、小额费用报销。

可以只做简单审批,甚至只做记录。

中风险

常规采购订单、普通付款申请。

可以设置部门经理和财务经理两级审批。

高风险

大额采购、大额付款、固定资产采购、合同付款。

可以增加:

  • 金额阈值
  • 预算余额校验
  • 指定 Role(角色)审批
  • 必填附件
  • 付款前校验

八、常见错误做法

错误一:流程设计太复杂

有些企业一开始就想把所有特殊情况都放进 Workflow(工作流)里。

结果流程变成:

员工提交
→ 主管审批
→ 部门经理审批
→ 财务专员审批
→ 财务经理审批
→ 副总审批
→ 总经理审批
→ 董事长审批

看起来很严谨,实际很难用。

最后用户不愿意录单,审批人也不愿意点。


错误二:按人设计,而不是按 Role(角色)设计

不要把 Workflow(工作流)设计成某个人专属审批。

应该尽量用 Role(角色)。

例如:

推荐:

Purchase Manager(采购经理)
Finance Manager(财务经理)

不推荐:

张三
李四

因为人会变,Role(角色)相对稳定。


错误三:把 OA 的复杂流程原样搬进 ERPNext

很多国内企业的 OA 流程非常复杂。

如果原样搬到 ERPNext,往往会导致:

  • 配置复杂
  • 用户难用
  • 维护困难
  • 出问题不好排查

更好的方式是:

OA 继续做复杂审批,ERPNext 只做关键控制和数据落地。


九、总结建议

场景 建议方案
单公司 直接配置 Workflow(工作流)
多公司,但规则一致 使用同一套 Workflow(工作流),统一 Role(角色)
多公司,规则有少量差异 使用 Condition(条件)控制 Transition(流转)
多公司,规则差异复杂 使用自定义 App 按 Company(公司)匹配 Workflow(工作流)
企业已有 OA 审批 OA 做审批,ERPNext 做录入、存档和关键校验
审计要求高 尽量在 ERPNext 内完成完整 Workflow(工作流)

十、一句话建议

ERPNext Workflow(工作流)不要一开始就设计得太复杂。

更实用的思路是:

小企业重在简单可用,中型企业重在角色清晰,大型或多公司企业重在规则分层。

对于国内企业来说,比较稳妥的做法是:

OA 负责日常审批,ERPNext 负责财务、库存、采购、销售等核心数据落地,并在关键节点做规则校验。

这样既符合国内企业的使用习惯,也能发挥 ERPNext 在业务数据和财务管理上的价值。

ERPNext 在中国企业里的审批流程使用指南

ERPNext里面,审批大体上可以分成 两套机制


一、通用工作流:按角色审批

这一套就是系统里的:

  • Workflow(工作流)
  • Role(角色)
  • User(用户)

它的基本逻辑是:

不是先指定“某一个人”审批,
而是先指定“某一个角色”审批。
只要某个用户拥有这个 Role(角色),他就可以执行这个审批动作。

你可以这样理解

比如你做一个付款审批流程:

  • 第一步:员工提交
  • 第二步:财务审核
  • 第三步:总经理批准

这时候你在 Workflow(工作流) 里面配置的,通常不是“张三”“李四”这种具体名字,
而是:

  • Accounts User(财务用户)
  • Accounts Manager(财务经理)
  • HR Manager(人事经理)
  • System Manager(系统管理员)
  • 或者你自己新建的审批角色

也就是说:

谁能审批,取决于他有没有这个角色

如果一个用户被分配了某个 Role(角色)
那他就能对对应状态的单据执行:

  • Approve(批准)
  • Reject(驳回)
  • Verify(确认)
  • Submit(提交)
  • Cancel(取消)

所以你说的这句话,对“标准 Workflow”来说基本是对的

必须先把人员定义一个角色,属于那个角色的人员,才能做对应审批。


二、HRMS 里的指定审批人:按具体人审批

但 ERPNext 里还有另一种情况,尤其是在 HRMS(人力资源模块) 里面。

像这些场景,系统往往不只是按角色来做:

  • Leave Application(请假申请)
  • Expense Claim(费用报销)
  • Shift Request(班次调整申请)
  • 某些考勤、人事类审批

这类场景经常支持:

直接指定“具体某个人”作为审批人,
而不只是指定一个角色。


三、什么意思?举个最简单的例子

比如员工 A 提交请假单:

  • 如果走标准 Workflow(工作流),你可能配置的是:
    • HR Manager(人事经理) 审批
  • 但在 HRMS 场景下,也可以设置成:
    • 员工 A 的请假审批人就是 某一个具体用户

这时候就不是“谁有人事经理角色,谁都能批”,
而是“系统指定的那个人来批”。


四、ERPNext 里为什么会有这两套机制?

因为两类业务的需求不同。

1)通用单据审批,更适合按角色

比如这些业务:

  • 采购申请
  • 付款申请
  • 合同审批
  • 自定义表单审批

这些流程更强调“岗位职责”,
所以适合用 Role(角色) 来控制。

比如:

  • 财务经理这个岗位谁在做,谁就审批
  • HR 经理这个岗位谁在做,谁就审批

这样人员变动时,不需要每次去改工作流,
只要改用户的 Role(角色) 分配就行。


2)人事类审批,更适合按具体人

比如:

  • 员工请假
  • 员工报销
  • 员工调班

这些往往是“谁的直属上级批”“谁的部门负责人批”,
所以更适合直接指定到 User(用户) 级别。

这样会更贴近真实管理场景。


五、你最关心的问题:是不是一定要先定义角色?

答案是:

不是所有审批都必须先靠角色。

要分情况看:

情况 1:标准 Workflow(工作流)

一般是要先定义 Role(角色) 的。

也就是:

  • 先建好 Role(角色)
  • 再把 User(用户) 分配到这个角色
  • 然后在 Workflow(工作流) 中配置这个角色可以执行什么动作

这时,审批权限主要是靠 Role(角色) 来控制。


情况 2:HRMS 指定审批人

可以直接指定具体 User(用户) 作为审批人。

这时不一定非要靠角色来决定“谁审批”,
系统也可能通过:

  • 员工档案中的审批人设置
  • 部门层级中的审批人设置
  • 文档共享机制

把某张单据的审批权,直接给某一个具体用户。

也就是说:

在 HRMS 场景下,
审批人可以是“具体某个人”,
不一定非得是“某个角色下面的人”。


六、你可以把它理解成下面这个区别

机制 系统字段/概念 控制方式 粒度 适合场景
通用工作流 Workflow(工作流) + Role(角色) 谁拥有这个角色,谁能审批 角色级 采购、付款、自定义审批
指定审批人 User(用户) / 员工审批人 直接指定某个人审批 人员级 请假、报销、调班、人事流程

七、总结

标准 Workflow(工作流)

是:

先定义角色,再让有这个角色的人去审批。

HRMS 指定审批人

是:

直接指定某一个人来审批。


八、最实用的落地判断方法

你以后看 ERPNext 审批时,可以直接用这个方法判断:

如果你看到的是:

  • Workflow(工作流)
  • Workflow State(工作流状态)
  • Transition(流转动作)
  • Role(角色)

那基本就是:

按角色审批


如果你看到的是:

  • 员工档案里维护审批人
  • 部门里维护审批人
  • 某张单据自动共享给某个人
  • 某类 HR 单据只能某个具体人处理

那基本就是:

按具体用户审批


九、结论

ERPNext 不是只有一种审批方式。

  • Workflow(工作流):主要按 Role(角色) 审批
  • HRMS 人事类流程:可以按 User(用户) 指定具体审批人

ERPNext 的通用审批偏“角色驱动”,而 HRMS 的部分审批支持“具体人驱动”。

ERPNext 里,中国集团多公司是共用一套物料,还是各自一套?

在 ERPNext 里面,Item(物料) 本身是全局共享的,不是每个 Company(公司) 各自一套。

也就是说,系统通常是:

一套 Item(物料)主数据,多个 Company(公司)共同使用。


1. 什么是“共用”?

共用的意思是:

同一个站点里,不管有几个 Company(公司),大家看到的都是同一个 Item(物料) 主数据库。

例如这些基础资料,都是共用的:

  • Item Code(物料编码)
  • Item Name(物料名称)
  • Item Group(物料组)
  • Stock UOM(库存单位)
  • Description(描述)
  • Brand(品牌)
  • Item Attributes(物料属性)

这些都属于 Item(物料主档) 本身,不是按公司拆开保存 的。

所以不是:

  • A 公司一套物料
  • B 公司再单独一套物料

而是:

  • A 公司、B 公司、C 公司,共用同一个 Item(物料) 主档库

2. 但每个公司可以有自己的默认设置

虽然 Item(物料) 是共用的,但 ERPNext 允许每个 Company(公司) 对同一个物料设置不同的默认值。

这个位置叫:

  • Item Defaults(物料默认值)

也就是:
物料是同一个,但不同公司可以有不同的默认仓库、默认科目、默认成本中心。

常见字段有:

字段 Label 中文说明
Company 公司
Default Warehouse 默认仓库
Default Price List 默认价格表
Income Account 收入科目
Expense Account 费用科目
Default Supplier 默认供应商
Buying Cost Center 采购成本中心
Selling Cost Center 销售成本中心

你可以把它理解成:

  • Item(物料) 是大家共用的“主档”
  • Item Defaults(物料默认值) 是每个公司各自的“使用参数”

3. 库存为什么不会混在一起?

因为 ERPNext 里库存不是直接按 Company(公司) 存,而是通过:

  • Warehouse(仓库)

来区分的。

Warehouse(仓库) 本身是属于某个 Company(公司) 的。

所以逻辑是:

  • 同一个 Item(物料) 可以被多个公司使用
  • 但每个公司有自己的 Warehouse(仓库)
  • 库存数量发生在仓库里
  • 所以各公司的库存自然是分开的

通俗讲:

物料可以共用,但库存不会混。


4. 价格是不是按公司分开的?

ERPNext 里价格通常不是直接按 Company(公司) 绑定,而是通过:

  • Price List(价格表)
  • Item Price(物料价格)

来管理。

所以常见做法是:

不同公司配置不同的 Price List(价格表),这样就能实现不同公司使用不同价格。

例如:

  • A 公司用:Standard Selling(标准销售价)
  • B 公司用:Export Selling(出口销售价)

所以价格不是“天然按公司隔离”,而是“通过价格表间接区分”。


5. 最容易理解的一句话

ERPNext 是“物料主数据共用,业务默认值按公司区分”的设计。

也就是:

  • Item(物料主数据):共用
  • Item Defaults(物料默认值):按公司分别设置
  • Warehouse(仓库):按公司分开
  • Stock(库存):按仓库分开,也就是按公司分开
  • Price List(价格表):可以按不同公司分别使用

6. 总结表

层面 是否共用 说明
Item(物料主数据) 共用 所有公司共用同一个物料库
Item Defaults(物料默认值) 不共用 每个公司可以单独配置
Warehouse(仓库) 不共用 仓库归属于具体公司
Stock Qty(库存数量) 不共用 库存按仓库统计,实际按公司隔离
Item Price(物料价格) 可区分 一般通过 Price List(价格表) 区分
Income / Expense Account(收入/费用科目) 不共用 可按公司分别设置

ERPNext 不是每个公司各自维护一套独立物料库,
而是整个系统共用一套 Item(物料) 主数据。

但是每个 Company(公司) 又可以针对同一个物料,设置自己的:

  • Default Warehouse(默认仓库)
  • Income Account(收入科目)
  • Expense Account(费用科目)
  • Cost Center(成本中心)
  • Price List(价格表)

所以它的设计思路是:

基础资料统一,业务使用分公司管理。

老板最容易忽视的成本黑洞:BOM这3个坑

很多工厂老板都有这样的疑问:

为什么仓库明明有库存,车间还是天天喊缺料? 为什么同一款产品,这个月赚钱,下个月却开始亏? 为什么ERP系统上线后,生产数据还是对不上?

这些问题,很多时候根源都不是采购,也不是车间执行,而是最基础的一份资料出了问题:BOM物料清单。

很多企业把BOM理解成“材料表”,其实它更像是工厂生产的施工图纸。 图纸一旦错了,后面的采购、领料、生产、入库、成本核算都会跟着出问题。

今天结合几个真实制造企业场景,聊聊90%工厂都踩过的3个典型错误。

错误一:BOM长期不更新,靠经验生产

这是最常见的一类问题。

很多工厂在新品打样时,技术部建立了一版BOM,后面量产过程中工艺不断优化:

  • 材料规格变了
  • 辅料品牌换了
  • 包材厚度调整了
  • 实际损耗增加了

但BOM一直没更新。

结果采购还是按老版本买料,车间却按照新工艺生产。

最后就会出现这些问题:

  • 某些辅料长期不够用
  • 某些包材越积越多
  • 成本和实际消耗始终对不上

有一家做标签印刷的工厂就遇到过类似问题。

原本一卷材料理论可以生产10000张标签,后来设备和工艺优化后,实际产出只能稳定在9200张左右,但BOM中的损耗率一直没调整。

结果业务报价持续偏低,订单越多亏损越明显。 最后复盘发现,不是生产浪费,而是BOM里的理论数据早就落后于实际。

很多工厂不是不会生产,而是一直在用过期BOM做决策。

错误二:半成品BOM层级混乱

第二个非常典型的问题,就是BOM层级结构混乱。

比如一个包装盒产品,正常生产流程可能是:

  • 原纸
  • 印刷半成品
  • 覆膜半成品
  • 模切半成品
  • 成品包装

但很多工厂为了省事,直接把所有材料都挂在成品下面。

这样短期看似方便,长期问题很大。

最直接的影响有三个:

第一,车间无法按工序精准领料
第二,半成品库存无法统计
第三,各工序损耗无法单独分析

我见过一家彩盒印刷企业,覆膜车间长期反馈材料不够,仓库系统却显示库存充足。

后来排查发现,BOM里根本没有“印刷半成品”和“覆膜半成品”层级,所有材料都直接挂在最终成品上。

系统只能看到总消耗,却看不到具体是哪道工序出了问题。

老板看到的是库存数字没问题,但利润越来越薄。 本质上不是执行问题,而是BOM结构设计有问题。

错误三:一个BOM覆盖所有客户订单

这个问题在定制化行业尤其普遍。

比如:

  • 包装印刷
  • 标签印刷
  • 外贸OEM
  • 文创定制
  • 数码快印

同一个产品型号,不同客户往往有不同要求。

例如:

  • 有的客户需要出口包装
  • 有的客户需要加说明书
  • 有的客户需要二维码标签
  • 有的客户需要特殊防潮材料

如果企业只维护一个标准BOM,就很容易出错。

常见结果就是:

  • 该加的材料漏掉
  • 不该加的材料多领
  • 客户专属附件遗漏
  • 成本核算偏差很大

有一家做礼盒出口的企业,同一款礼盒分国内版和出口版。

出口版需要额外增加英文说明书和防潮袋,但系统里只有一个标准BOM。

结果仓库按国内版发料,临近出货时才发现漏装,整批返工,损失非常大。

很多时候问题不在员工,而在BOM版本管理没有做好。

为什么很多工厂上了ERP还是乱?

很多老板有一个误区:

以为ERP上线后,生产管理自然就规范了。

其实ERP只是把原有问题更快速地放大。

如果BOM本身有问题,系统会把错误快速传递到:

  • 采购计划
  • 生产工单
  • 仓库领料
  • 成本核算
  • 财务利润分析

最后就会出现一种很常见的现象:

系统很先进,数据却越来越乱。

所以真正的顺序应该是:

先治理BOM,再推动数字化。

工厂该怎么避免这3类问题?

给制造企业三个非常实用的建议。

第一,建立BOM变更机制
凡是材料、工艺、损耗变化,都必须同步更新。

第二,建立多级BOM
尤其是印刷、包装、组装类企业,一定要按工序拆分半成品层级。

第三,建立客户版本BOM
针对不同客户、不同出口标准、不同附件要求,必须独立维护版本。

很多工厂后面复盘才发现:

生产混乱、库存不准、成本失真,根源都不是员工执行,而是BOM从一开始就错了。

所以BOM不是一张基础资料表,而是整个工厂利润管理的起点。

ERPNext 中国企业新公司上线前关键设置清单(非必填但必须确认)

ERPNext 创建公司时,系统强制只要求填写几个基础字段,但真正影响后续财务、库存、资产、报表是否能正常使用的,反而是下面这些 非必填但必须尽早确认的关键设置

如果前期没规划好,后面可能会出现:

  • 财务报表错乱
  • 库存成本错误
  • 发票无法提交
  • 多币种无法结转
  • 固定资产无法折旧
  • 有交易后无法修改

所以这些字段一定要在上线前确认好。


一、系统强制必填(Mandatory Fields 必填字段)

创建 Company(公司) 时系统只强制要求 4 项:

  • Company Name(公司名称)
  • Abbr(公司简称)
  • Default Currency(默认货币)
  • Country(国家)

其中最要注意的是:

1)Abbr(公司简称)

这个字段 保存后永久不能修改

例如你填:

TY

后续系统自动生成的会计科目都会带这个后缀,例如:

Bank - TY

如果以后公司简称想改,历史科目会非常麻烦。


2)Default Currency(默认货币)

这是公司的本位币。

例如:

  • CNY(人民币)
  • USD(美元)

一旦开始有业务交易后,不允许修改。

否则所有历史凭证金额逻辑都会错。


二、财务默认科目(Default Accounts 默认科目)

这些字段虽然不是创建时强制填,但对后续财务影响最大。


1)Default Receivable Account(默认应收科目)

客户销售发票默认挂到哪个应收科目。

例如:

1122 应收账款

影响

如果设置错误:

  • 客户余额错
  • 应收账龄错
  • 资产负债表错
  • 客户对账单错

这是最关键字段之一。


2)Default Payable Account(默认应付科目)

供应商采购发票默认挂账科目。

例如:

2202 应付账款

影响

影响:

  • 供应商余额
  • 应付账龄
  • 供应商对账
  • 现金流预测

3)Default Income Account(默认收入科目)

销售发票默认收入科目。

例如:

6001 主营业务收入

影响

直接影响:

  • 利润表(Profit and Loss)
  • 产品收入分析
  • 客户收入分析

4)Default Cost of Goods Sold Account(默认主营业务成本科目)

库存商品销售出库时,成本自动进入该科目。

例如:

6401 主营业务成本

影响

如果设置错误:

  • 毛利率失真
  • 产品利润分析错误
  • 利润表错误

5)Round Off Account(舍入差异科目)

处理发票尾差。

例如:

财务费用-尾差

影响

如果没设置:

  • 发票金额有几分钱差异时无法提交
  • 税额四舍五入时可能报错

6)Exchange Gain/Loss Account(汇兑损益科目)

多币种业务必须设置。

例如:

  • 汇兑收益
  • 汇兑损失

影响

涉及:

  • 美元收款
  • 欧元采购
  • 汇率重估
  • 月末汇兑调整

不设置,多币种凭证可能无法生成。


7)Default Cost Center(默认成本中心)

所有收入、费用、库存成本默认归集部门。

例如:

  • 销售部
  • 生产部
  • 总部

影响

如果不设置:

  • 很多凭证无法提交
  • 部门利润分析无法使用
  • 成本核算会缺失

三、库存设置(Inventory Settings 库存设置)

这一部分最危险,有库存交易后很多不能改。


1)Enable Perpetual Inventory(启用永续盘存)

建议制造业、贸易企业必须开启。

作用

库存收发货时自动生成财务凭证。

例如:

入库自动:

库存商品
贷:暂估应付

风险

一旦有库存凭证后,基本不能再关闭。


2)Default Valuation Method(默认库存计价方法)

库存成本算法。

可选:

  • FIFO(先进先出)
  • Moving Average(移动平均)
  • LIFO(后进先出,较少使用)

风险

这是最关键库存参数之一。

有库存交易后不可修改。

否则历史库存成本会全部错乱。


3)Default Inventory Account(默认库存科目)

库存商品默认资产科目。

例如:

1405 库存商品

影响

永续盘存必须配置,否则库存凭证会 warning 或报错。


4)Stock Received But Not Billed(已收货未开票科目)

采购收货后,发票未到前的暂估负债科目。

例如:

暂估应付账款


5)Stock Adjustment Account(库存调整科目)

盘点差异、报损报溢默认科目。

例如:

存货盘盈盘亏


四、付款与合规(Payment & Compliance 付款与合规)

1)Tax ID(税号)

公司税务登记号。

影响

用于:

  • 销售发票打印
  • 税务申报
  • 客户开票资料
  • 合同单据抬头

中国企业建议创建公司后立即补全。


2)Default Payment Terms Template(默认付款条件模板)

例如:

  • 月结30天
  • 预付100%
  • 收货后60天付款

影响

直接影响:

  • 应收到期日
  • 应付到期日
  • 账龄分析
  • 催款提醒

3)Default Finance Book(默认账簿)

适合:

  • 中国账 / 国际账双账簿
  • 税务账 / 管理账
  • 母公司 / 子公司准则差异

如果未来有多账簿需求,必须提前规划。


五、固定资产(Asset Settings 固定资产设置)

如果要用固定资产模块,上线前必须配置。


1)Accumulated Depreciation Account(累计折旧科目)

例如:

1602 累计折旧


2)Depreciation Expense Account(折旧费用科目)

例如:

管理费用-折旧费


3)Gain/Loss Account on Asset Disposal(资产处置损益科目)

资产报废、出售时使用。


4)Capital Work In Progress Account(在建工程科目)

适用于:

  • 厂房建设
  • 设备安装
  • 软件开发资本化

六、最推荐实施顺序(Best Practice 最佳实践)

第一步:创建公司前

先确认:

  • Abbr(公司简称)
  • Default Currency(默认货币)
  • 会计准则
  • 财年起止日期

第二步:创建公司后立刻检查

立即核对:

  • Chart of Accounts(会计科目表)
  • 默认应收
  • 默认应付
  • 默认收入
  • 默认成本
  • 默认成本中心

第三步:录库存前必须确认

必须先确认:

  • Enable Perpetual Inventory(启用永续盘存)
  • Default Valuation Method(默认库存计价方法)

这两个最怕后改。


第四步:正式上线前

补齐:

  • 税号
  • 付款条件
  • 汇兑损益
  • 舍入科目
  • 固定资产默认科目

一句话总结

ERPNext 新公司最容易“前面随便填,后面全乱”的,不是必填项,而是这些默认财务和库存设置。

尤其是:

  • Abbr(公司简称)
  • Default Currency(默认货币)
  • Enable Perpetual Inventory(启用永续盘存)
  • Default Valuation Method(默认库存计价方法)
  • 默认应收/应付/收入/成本科目

这些一定要在第一天确认好,否则后面越用越难改。

ERPNext 中国企业完整业务流程贯穿教程(从一张订单走完整个生命周期)

一、总体思路:一张订单的生命周期

本教程不按模块拆开讲,而是按照企业真实业务流程,从头到尾跑通一次:

采购 → 入库 → 销售 → 出库 → 收款/付款 → 财务对账 → 期末结账

你只要完整跑通一遍,就能真正理解 ERPNext 的底层逻辑:

业务单据 → 库存台账(Stock Ledger,库存台账) → 总账分录(GL Entry,总账分录) → 财务报表(Financial Reports,财务报表)


第一阶段:基础设置(只做一次)


1.1 公司(Company,公司)与会计年度(Fiscal Year,会计年度)

路径:设置(Settings) → 公司(Company) → 新建(New)

必填字段

  • 公司名称(Company Name,公司名称)
  • 简称(Abbr,简称)
  • 默认货币(Default Currency,默认货币)
    例如:人民币 CNY
  • 财年开始月份(Fiscal Year Start Month,财年开始月)
    通常设置为 1 月
  • 默认银行账户(Default Bank Account,默认银行账户)

为什么这一步最重要

这是所有业务单据的“根”。

后续所有:

  • 销售发票(Sales Invoice,销售发票)
  • 采购发票(Purchase Invoice,采购发票)
  • 收付款凭证(Payment Entry,收付款凭证)
  • 财务报表

都必须归属于某个公司。


1.2 科目表(Chart of Accounts,科目表)

路径:会计(Accounting) → 科目表(Chart of Accounts)

建议导入中国标准模板,常见核心科目:

  • 1001 库存现金
  • 1002 银行存款
  • 1122 应收账款
  • 2202 应付账款
  • 1405 库存商品
  • 5001 主营业务收入
  • 5401 主营业务成本

核心理解

科目表就是整个财务系统的骨架。

所有业务动作最后都会变成:

  • 借哪个科目
  • 贷哪个科目

1.3 仓库(Warehouse,仓库)

路径:库存(Stock) → 仓库(Warehouse) → 新建(New)

建议至少创建:

  • 原材料仓(Raw Material Warehouse,原材料仓)
  • 成品仓(Finished Goods Warehouse,成品仓)
  • 销售出库仓(Dispatch Warehouse,销售仓)

1.4 商品(Item,商品)

路径:库存(Stock) → 商品(Item) → 新建(New)

关键字段

  • 商品类型(Item Group,商品分类)
  • 是否库存商品(Maintain Stock,是否管理库存)
  • 计量单位(UOM,计量单位)
  • 默认仓库(Default Warehouse,默认仓库)
  • 商品税模板(Item Tax Template,商品税模板)

为什么它是核心

Item(商品)是 ERPNext 的核心实体。

几乎所有流程都围绕它:

  • 采购
  • 销售
  • 库存
  • BOM
  • MRP
  • 成本核算

1.5 供应商(Supplier,供应商)和客户(Customer,客户)

分别在:

  • 采购(Buying) → 供应商(Supplier)
  • 销售(Selling) → 客户(Customer)

关键绑定

  • 付款条款(Payment Terms,付款条款)
  • 默认税模板(Tax Template,税模板)
  • 默认应收科目(Receivable Account,应收科目)
  • 默认应付科目(Payable Account,应付科目)

第二阶段:采购流程(Procure-to-Pay,采购到付款)


2.1 物料申请(Material Request,物料申请)

路径:库存(Stock) → 物料申请(Material Request)

例如申请采购:

  • 商品 A
  • 数量 100
  • 预计采购价 ¥50

提交后作用

系统记录采购需求,状态变为:

待采购(Pending Purchase,待采购)


2.2 采购订单(Purchase Order,采购订单)

从物料申请点击:

创建(Create) → 采购订单(Purchase Order)

提交后影响

  • 锁定采购需求
  • 进入供应商执行阶段
  • 库存不变
  • 财务不变

因为货还没到。


2.3 采购收货(Purchase Receipt,采购收货)

从采购订单点击:

创建收货单(Create Purchase Receipt)

假设实收 98 个

提交后自动发生

  • 库存 +98
  • 生成库存台账(Stock Ledger Entry,库存台账)
  • 库存资产增加:98 × 50 = ¥4,900

核心理解

这一刻开始:

库存系统已经有货了,但财务还没确认应付。


2.4 采购发票(Purchase Invoice,采购发票)

从采购收货单创建采购发票。

提交后自动生成总账分录

  • 借:库存商品(Inventory,库存商品) ¥4,900
  • 贷:应付账款(Accounts Payable,应付账款) ¥4,900

核心理解

这一步才真正影响财务。


2.5 付款(Payment Entry,付款凭证)

路径:会计(Accounting) → 付款凭证(Payment Entry)

提交后自动对账

  • 银行存款减少
  • 应付账款清零
  • 自动核销采购发票

完整采购闭环完成。


第三阶段:销售流程(Order-to-Cash,销售到收款)


3.1 报价单(Quotation,报价单)

路径:销售(Selling) → 报价单(Quotation)

特点

只用于商务报价:

  • 不影响库存
  • 不影响财务

3.2 销售订单(Sales Order,销售订单)

客户确认后,从报价单创建销售订单。

例如销售 80 个

提交后自动发生

系统锁定库存:

  • 在手(Actual Qty,在手):98
  • 预留(Reserved Qty,预留):80
  • 可用(Available Qty,可用):18

3.3 出库(Delivery Note,出库单)

从销售订单创建:

出库单(Delivery Note,出库单)

提交后自动发生

  • 库存 -80
  • 生成库存台账(Stock Ledger Entry,库存台账)
  • 自动结转成本

成本结转依据

系统根据:

  • 移动平均(Moving Average,移动平均)
  • FIFO(先进先出)

自动计算主营业务成本。


3.4 销售发票(Sales Invoice,销售发票)

从出库单创建销售发票。

提交后自动生成总账分录

  • 借:应收账款(Accounts Receivable,应收账款)
  • 贷:主营业务收入(Revenue,主营收入)

同时自动确认:

  • 借:主营业务成本(COGS,主营成本)
  • 贷:库存商品(Inventory,库存商品)

这是 ERPNext 最核心的自动联动

业务出库和财务确认完全自动联动。


3.5 收款(Payment Entry,收款凭证)

路径同付款一致。

提交后自动发生

  • 银行存款增加
  • 应收账款清零
  • 自动核销销售发票

完整销售闭环完成。


第四阶段:关键关联逻辑图

采购订单 → 采购收货 → 库存增加 → 采购发票 → 应付账款 → 付款
销售订单 → 出库单 → 库存减少 → 销售发票 → 应收账款 → 收款

第五阶段:期末操作


5.1 库存盘点(Stock Reconciliation,库存盘点)

路径:库存(Stock) → 库存盘点(Stock Reconciliation)

作用:

对比:

  • 系统库存
  • 实际库存

自动生成盘盈盘亏凭证。


5.2 银行对账(Bank Reconciliation,银行对账)

路径:会计(Accounting) → 银行对账(Bank Reconciliation)

导入银行流水 CSV 后:

逐笔匹配:

  • 收款凭证
  • 付款凭证
  • 手续费
  • 未达账项

5.3 期末结账(Period Closing Voucher,期末结账凭证)

路径:会计(Accounting) → 期末结账凭证(Period Closing Voucher)

系统自动将:

收入 – 成本 – 费用 = 本期利润

结转到:

未分配利润(Retained Earnings,留存收益)

新期间损益类科目从零开始。


六、核心数据流总结

业务动作 系统自动记录
提交采购收货 Stock Ledger Entry(库存台账,库存+)
提交采购发票 GL Entry(总账分录,应付+)
提交销售出库 Stock Ledger Entry(库存台账,库存-)
提交销售发票 GL Entry(总账分录,应收+收入+成本)
提交付款/收款 GL Entry(总账分录,银行±,往来清零)

七、最核心设计哲学(一定要理解)

ERPNext 的核心原则:

只有提交(Submit,提交)才真正产生业务和财务影响。

Draft(草稿)

可以随时修改。

Submit(提交)

正式入账,进入库存和财务系统。

修改正确流程

取消(Cancel) → 修改 → 重新提交(Amend + Submit)

这样可以确保:

  • 全部可追溯
  • 审计链完整
  • 不允许偷偷改历史账

这也是 ERPNext 特别适合企业规范化管理的核心原因。

ERPNext里的中国会计日记账凭证

ERPNext里 Journal Entry(日记账凭证)怎么做应收应付?

很多人刚接触 ERPNext 时都会有个疑问:

明明已经有 Payment Entry(收付款凭证),为什么应收应付里还经常会用到 Journal Entry(日记账凭证)?

你可以把它简单理解成:

Payment Entry(收付款凭证) = 标准收付款流程
Journal Entry(日记账凭证) = 更灵活的特殊财务处理工具

正常业务里,系统更推荐优先走:

Sales Invoice(销售发票) / Purchase Invoice(采购发票)
Payment Entry(收付款凭证)
→ 自动核销

但遇到特殊财务场景时,Journal Entry(日记账凭证) 就非常好用。


一、标准应收应付流程(最常用)

最标准的流程是:

先开 Sales Invoice(销售发票) / Purchase Invoice(采购发票)
→ 系统自动生成应收 / 应付
→ 再用 Payment Entry(收付款凭证) 做收款付款
→ 系统自动核销对应发票

这个流程最适合日常业务,操作简单,业务和财务一致性最好。


二、Journal Entry(日记账凭证)在应收应付里的 4 种常见用途

1)直接做收款付款(替代 Payment Entry(收付款凭证))

有些企业财务习惯直接做凭证,不想单独走 Payment Entry(收付款凭证)

这时可以直接建 Journal Entry(日记账凭证)

在分录里:

  • 应收 / 应付科目那一行
  • Reference Type(参考类型)
  • 选择 Sales Invoice(销售发票)Purchase Invoice(采购发票)
  • 再填具体发票编号

提交后,系统一样会核销发票。

通俗理解

就是:

不用 Payment Entry(收付款凭证),直接做一张凭证完成收付款核销

效果一样,只是入口不同。


2)坏账核销、尾差处理(非常常用)

比如客户还有 0.03 元尾差
或者确认某笔款项收不回来了。

这时候通常直接用 Journal Entry(日记账凭证)

  • 借:坏账损失 / 财务费用
  • 贷:Receivable Account(应收账款科目)

这样就能把未核销金额清掉。

通俗理解

就是:

专门处理“差几分钱”或者“确认收不回来”的情况

这是财务里最常见的特殊调整场景。


3)Exchange Gain or Loss(汇兑损益)系统自动生成

如果是美元、港币等外币业务:

开票当天汇率和收款当天汇率不一致,
就会产生汇兑收益或损失。

例如:

  • 开票汇率:7.10
  • 收款汇率:7.25

中间差额 ERPNext 会自动生成一张:

Journal Entry(日记账凭证)
Voucher Type(凭证类型) = Exchange Gain or Loss(汇兑损益)

通俗理解

就是:

汇率变化带来的差额,系统自动补凭证

通常无需人工处理。


4)Opening Entry(期初凭证)录入(上线必用)

企业上线 ERPNext 时,
经常需要导入老系统的历史应收应付余额。

这种情况一般直接用:

Journal Entry(日记账凭证)
Voucher Type(凭证类型) = Opening Entry(期初凭证)

例如:

  • 借:Receivable Account(应收账款科目)
  • 贷:期初权益

或者反过来录入应付。

通俗理解

就是:

把老系统剩余未收款、未付款余额作为期初导进 ERPNext

这是 ERP 上线实施中非常高频的操作。


三、什么时候用 Journal Entry(日记账凭证)

记住这一句话:

正常收付款 → 用 Payment Entry(收付款凭证)
特殊财务调整 → 用 Journal Entry(日记账凭证)

尤其下面几类最常见:

  • 坏账处理
  • 尾差调整
  • Exchange Gain or Loss(汇兑损益)
  • Opening Entry(期初凭证)
  • 财务习惯直接做凭证核销

四、总结:

业务人员负责 Sales Invoice(销售发票) / Purchase Invoice(采购发票) 和 Payment Entry(收付款凭证)
财务特殊调整才使用 Journal Entry(日记账凭证)

这样最不容易乱账,也最符合 ERPNext 的:

Business Drives Finance(业务驱动财务)

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% 问题都在这里。

中国会计的辅助核算,ERPNext 会计维度如何落地?

在中国财务里,很多企业都会用到 辅助核算,比如:

  • 按部门看费用
  • 按业务员看收入
  • 按客户看应收
  • 按项目看利润
  • 按分公司看经营情况

传统做法,很多软件会把科目拆得很细,例如:

  • 销售费用-华南区
  • 销售费用-华东区
  • 销售费用-外贸部
  • 销售费用-Amazon事业部

时间一长,科目表会越来越复杂,维护成本很高。

ERPNext 的 会计维度(Accounting Dimensions),本质上就是中国财务里的:

辅助核算维度

它的核心思想非常简单:

科目保持简洁,分析交给维度

例如同样一笔“销售费用-差旅费”,不需要再拆很多明细科目,只需要增加几个维度标签:

  • 部门 = 外贸部
  • 业务员 = Jack
  • 区域 = 美国
  • 渠道 = Amazon
  • 项目 = 海外ERP实施项目

这样月底做利润分析时,就可以非常灵活地统计:

  • 哪个部门费用最高
  • 哪个业务员贡献利润最多
  • 哪个国家市场投入最大
  • 哪个渠道ROI最好

这和中国企业常说的:

部门辅助核算、项目辅助核算、客户辅助核算、业务员辅助核算

本质上是同一个概念。

一句话总结:

ERPNext 会计维度 = 中国财务辅助核算的灵活升级版

ERPNext 中国财务数据迁移标准方案

一、目标

将原财务系统(如金蝶、用友、自研系统)中的账务数据,规范、安全地迁移至 ERPNext,确保:

  • 新系统可正常启用
  • 财务数据准确
  • 风险可控
  • 实施成本可控

二、总体策略(推荐)

采用“期初余额 + 主数据 + 少量历史”的混合迁移方案:

  1. 主数据迁移(必须)
  2. 期初余额迁移(核心)
  3. 可选:近3个月凭证迁移

避免全量历史数据迁移


三、迁移范围定义

1. 必迁移数据(基础数据)

  • 科目表(Chart of Accounts)
  • 客户(Customer)
  • 供应商(Supplier)
  • 物料(Item)
  • 仓库(Warehouse)
  • 币种(Currency)

2. 期初数据(关键数据)

  • 总账余额(GL Balance)
  • 应收账款(Accounts Receivable)
  • 应付账款(Accounts Payable)
  • 库存数量及金额(Stock Balance)
  • 银行余额(Bank Balance)
  • 现金余额(Cash Balance)

3. 可选数据(增强数据)

  • 最近1-3个月凭证(Journal Entry)
  • 未结业务单据(如未收款发票)

四、迁移步骤(标准流程)

Step 1:旧系统数据准备

从旧系统导出以下数据:

  • 科目余额表(截止迁移日)
  • 客户应收明细
  • 供应商应付明细
  • 存货明细(数量+金额)
  • 银行账户余额
  • 现金余额

要求:

  • 借贷平衡
  • 数据完整
  • 命名统一

Step 2:ERPNext基础配置

在ERPNext中完成:

  • 公司创建
  • 会计期间设置
  • 币种设置
  • 科目表初始化
  • 会计科目结构确认

Step 3:主数据导入

使用 Data Import Tool 导入:

客户

字段示例:

  • Customer Name
  • Customer Group
  • Territory

供应商

字段示例:

  • Supplier Name
  • Supplier Group

物料

字段示例:

  • Item Code
  • Item Name
  • Stock UOM

Step 4:期初余额导入

方式一:Opening Balance(推荐)

  1. 在科目中设置期初余额
  2. 导入客户/供应商未清余额
  3. 导入库存期初数据

方式二:Journal Entry(通用)

创建期初凭证:

借贷规则:

  • 资产类:借方
  • 负债类:贷方
  • 所有差额进入“期初调整科目”

Step 5:应收应付明细处理

原则:

不要只导总额,必须导明细

方法:

  • 每个客户一条或多条未收款记录
  • 每个供应商一条或多条未付款记录

确保后续可核销


Step 6:库存数据导入

使用:

  • Stock Reconciliation

字段:

  • Item
  • Warehouse
  • Quantity
  • Valuation Rate

Step 7:数据校验

必须执行以下核对:

  1. 总账平衡检查
  2. 资产 = 负债 + 所有者权益
  3. 应收总额核对
  4. 应付总额核对
  5. 库存金额核对
  6. 银行余额核对

五、关键控制点

1. 科目映射

必须建立映射表:

旧系统科目 → ERPNext科目

避免:

  • 科目重复
  • 科目分类错误

2. 数据一致性

确保:

  • 借贷平衡
  • 客户名称一致
  • 币种一致

3. 时间点统一

所有数据必须基于同一个截止日期

例如: 2024-12-31


4. 业务与财务一致

ERPNext是业务驱动财务系统:

避免:

  • 只导凭证,不导业务数据

六、常见问题及解决方案

问题1:历史数据太多

解决:

  • 只导期初余额
  • 历史数据保留在旧系统

问题2:客户应收不清晰

解决:

  • 按客户汇总导入
  • 或导最近未清账款

问题3:库存金额不准确

解决:

  • 重新盘点库存
  • 使用盘点结果作为期初

问题4:科目体系不一致

解决:

  • 重建科目体系
  • 做映射转换

七、实施建议

推荐方案

  • 小企业:仅期初余额
  • 中型企业:期初 + 最近3个月
  • 大企业:分阶段迁移

时间估算

  • 小项目:3-5天
  • 中项目:1-2周
  • 大项目:1个月+

风险控制

  • 不做全量迁移
  • 保留旧系统查询
  • 多轮数据校验

八、交付物清单

实施完成后应提供:

  1. 数据迁移模板(Excel)
  2. 科目映射表
  3. 数据核对报告
  4. 操作说明文档
  5. 迁移日志记录

九、一句话原则

优先保证系统稳定上线,而不是追求历史数据完整迁移