
简介本资源是一份面向Odoo初学者与实施人员的系统性入门指南聚焦Odoo 16生态下的中国本土化实践——GoodERP平台。内容覆盖从环境部署、基础配置到采购销售、仓库管理、生产制造组装/委外/工序、MRP分析及高级运维优化等全业务流程同时包含权限设计、多币种外贸、PostgreSQL调优、Nginx反向代理、多核性能提升等实战要点兼顾功能应用与技术布署双重需求。资源为单文件PDF文档共1个大小9.01MB结构清晰、章节完整含19章详实操作指引与大量配置截图提示如用户权限设置、计量单位录入、销售退货处理、凭证号重排等便于边学边练。目前已有276人学习下载适合零基础转型ERP实施顾问、中小企业IT运维人员及希望深入理解Odoo中国版落地逻辑的技术爱好者。1. Odoo 16 实施不是装完就能用一份踩过37个坑、重配过5次数据库的实战指南你刚下载完 Odoo 16双击启动脚本浏览器打开http://localhost:8069看到那个熟悉的登录页——恭喜你只完成了实施旅程的 8%。真正的门槛不在安装而在「基础资料配置」那一章里埋着的 23 个隐性依赖比如没提前设好“公司开户行”后续采购付款单根本无法生成凭证比如漏勾“根据发票确认应收应付”销售发货后财务模块直接失联再比如计量单位没建父子关系BOM 层级一展开就报KeyError: uom_id。这份《Odoo16 实施应用入门必备》不是理论手册而是某开发者在保定一间出租屋里用三台不同配置的服务器、四套真实中小制造企业账套反复验证后把 GoodERPOdoo 16 中国化分支从“能跑”推到“能管”的血泪笔记。它不讲 Python 类继承不画 UML 图只解决你明天上午 9 点就要给客户演示时卡住的问题怎么让销售订单自动带出客户期初应收款怎么让采购入库单过账后秒出应付凭证怎么把 Excel 里那 2876 行商品一次性塞进系统还不崩如果你正站在 Odoo 实施的第一道墙前——不是缺概念是缺参数、缺顺序、缺那个“少点一下就全错”的关键动作——这篇就是为你写的。2. 基础资料配置所有流程崩溃的起点也是唯一可控的修复锚点GoodERP 的实施逻辑是“数据驱动流程”而非“流程驱动数据”。这意味着采购单能否生成入库单取决于供应商是否绑定了正确的“应付科目”销售发货能否触发库存扣减取决于商品是否设置了“库存类型”和“计价方法”甚至连“客户名称”字段能不能输入中文都受制于 PostgreSQL 数据库初始化时的LC_COLLATE编码设置。本章不罗列菜单路径只聚焦三个必须前置完成、且顺序不可逆的核心配置块公司主体、资金账户、业务伙伴分类。每一步都附带验证方式和失败回滚指令——因为你在第 2.3 节设错一个税率第 5.5 节销售退货时就会发现凭证借贷不平而那时再回头改已生成的 142 张凭证全得手动冲销。2.1 公司主体配置会计属性决定整个账套的血液流向公司配置不是填个名字地址就完事。在配置 → 高级配置 → 公司页面必须严格校验以下四个字段缺一不可进项税税率必须为数值型如13.0不能带%符号否则采购发票验证时报float() argument must be a string or a number销项税税率同上且需与税务登记证一致后期开票模块强校验开户行必须从资金 → 设置 → 账户中已存在的银行账户里选择不能手输手输会导致后续付款单找不到结算路径根据发票确认应收应付勾选此项后销售发货不再自动生成应收账款必须经资金 → 结算单手动确认不勾选则发货即生凭证但无法做账龄分析提示修改公司配置后必须重启 Odoo 服务才能生效。执行sudo systemctl restart odoo后检查日志末尾是否出现INFO ? odoo.service: Database updated.字样否则配置未载入。2.2 资金账户与期初余额出纳权限用户的第一个生死线资金账户是 GoodERP 的“心脏起搏器”。使用出纳权限账号非 Administrator登录进入资金 → 设置 → 账户创建主账户时注意三点账户类型必须选“银行”即使你用的是微信/支付宝也必须选“银行”否则付款单无法关联结算方式期初余额录入方式点击“期初余额”按钮在弹窗中输入金额后系统会自动生成一张其他收入单和对应会计凭证科目银行存款 / 其他应付款。此操作不可逆若输错需用管理员账号进入会计 → 过账 → 凭证手动作废并删除开户行字段绑定必须与 2.1 节中公司配置的“开户行”完全一致字符、空格、标点均需匹配否则采购付款时提示No bank account found for company XXX验证是否成功用出纳账号新建一笔资金 → 收款 → 客户收款选择该账户金额填100保存后查看会计 → 过账 → 凭证应存在一条银行存款 ↑100 / 应收账款 ↓100的凭证。2.3 业务伙伴分类客户/供应商不是“人”而是“会计规则容器”在 Odoo 体系里“客户”和“供应商”本质是两套独立的会计规则集合。必须通过配置 → 基本配置 → 类别创建分类并为每个分类指定会计科目分类名称适用对象必须指定的科目错误后果一般纳税人客户开具专票的客户应收账款1122、应交税费-应交增值税销项税额22210101销售发票无法保存报Account not set for partner category小规模纳税人供应商接收普票的供应商应付账款2202、应交税费-应交增值税减免税额22210105采购入库单过账失败提示No account defined for supplier category注意科目编码必须与会计 → 科目 → 科目表中完全一致。GoodERP 默认科目表基于《小企业会计准则》编码如1122应收账款、2202应付账款等不可擅自修改位数。2.4 用户权限隔离销售员看不到别人客户的底层实现很多实施者卡在“权限设置”环节以为勾选销售 → 客户就够了。实际需三步闭环创建用户组配置 → 用户 → 组新建组销售员-仅看本人客户设置记录规则Record Rule在该组的“记录规则”标签页添加规则[|, (user_id, , user.id), (create_uid, , user.id)]此规则限制该组用户只能看到自己创建或分配给自己的客户分配用户到组编辑销售员账号在“群组”标签页勾选刚建的组并取消勾选所有含销售 → 所有客户权限的默认组验证用销售员账号登录进入销售 → 客户列表应为空新建一个客户并保存该客户才可见。若仍能看到全部客户说明未取消默认组权限——这是新手最高频翻车点。2.5 避坑基础资料配置的五个致命陷阱现象 → 原因 → 解决按真实发生频率排序现象采购订单保存时报KeyError: currency_id原因未在配置 → 高级配置 → 公司中设置“本位币”或公司页面未保存就跳转解决返回公司配置页下拉到底部点击“保存”重启 Odoo 服务现象商品设置里勾选“管理批号”后销售发货单无法选择该商品原因“批号管理”需配合“库存类型”“可存储”且“计价方法”“先进先出”或“平均成本”三者缺一不可解决编辑商品 → “库存”选项卡 → 检查三项设置全部启用后保存现象导入 Excel 客户数据时1000 行只成功 327 行无报错日志原因Excel 中“国家”字段值为China但 GoodERP 内置国家代码是CN字段映射失败导致整行跳过解决导入前用 Excel 替换China→CN或在导入向导中将“国家”字段映射为country_id/id使用外部 ID现象设置好“月结30天”付款方式后销售订单的“到期日”仍是创建日期原因付款方式未绑定到客户分类或客户档案中未选择该分类解决进入客户分类 → “付款方式”字段选择“月结30天”编辑客户 → “客户分类”选择该分类现象多币种客户下单时金额自动按 1:1 换算未走汇率表原因未在会计 → 多币种 → 汇率中为该币种设置当日汇率或汇率状态为“草稿”解决进入汇率表 → 筛选币种 → 点击“发布”确保状态为“已发布”3. 采购与销售流程从单据流转到凭证生成的完整链路拆解Odoo 的魅力在于单据自动驱动财务但前提是每张单据的“基因”必须正确。采购订单PO不是孤立文档它是采购入库单IN、应付凭证AP、付款单Payment的父体销售订单SO同理是发货单DO、应收凭证AR、收款单Receipt的源头。本章不教你怎么点按钮而是告诉你当 PO 状态从确认变为收货时系统后台究竟执行了哪 7 个原子操作为什么你的 PO 卡在等待收货却始终不生成入库单答案藏在采购 → 配置 → 设置的三个开关里——它们默认关闭但却是中国财税合规的刚需。3.1 采购流程三单联动的触发条件与断点排查标准采购流程PO → IN → AP。但 GoodERP 要求显式开启联动开关开启“收货自动生成入库单”采购 → 配置 → 设置→ 勾选收货时自动生成入库单若未勾选PO 确认后需手动进入库存 → 入库单创建且必须关联 PO 编号若已勾选但未生效检查 PO 的“供应商”是否属于2.3 节设置的“一般纳税人供应商”分类且该分类绑定了应付科目入库单过账生成应付凭证的条件入库单状态必须为已收货非草稿或等待收货商品必须设置了“存货科目”在商品档案 → “会计”选项卡 →存货科目字段供应商必须设置了“应付科目”在供应商档案 → “会计”选项卡 →应付科目字段验证链路创建 PO → 确认 → 查看库存 → 入库单是否自动生成 → 点击“过账” → 查看会计 → 过账 → 凭证是否出现原材料 ↑ / 应付账款 ↑凭证。3.2 销售流程发货即生凭证的税务合规开关国内销售场景要求“发货即确认收入”这与 Odoo 默认的“开票确认收入”冲突。必须调整关闭“按发票确认应收”配置 → 高级配置 → 公司→ 取消勾选根据发票确认应收应付勾选时发货单过账 → 生成库存商品 ↓ / 发出商品 ↑开票后才生成应收账款 ↑ / 主营业务收入 ↑不勾选时推荐发货单过账 → 直接生成应收账款 ↑ / 主营业务收入 ↑ / 应交税费-销项税额 ↑强制发货单带出税率编辑商品 → “会计”选项卡 →税金字段选择“13%销售税”否则发货单税率为空凭证无法过账销售退货的凭证反向逻辑正常退货销售 → 退货单→ 选择原发货单 → 过账 → 自动生成红字凭证应收账款 ↓ / 主营业务收入 ↓ / 应交税费 ↓关键避坑退货单必须与原发货单在同一会计期间否则系统拒绝过账报Period mismatch for reversal entry3.3 采购付款与销售收款银行流水与凭证的终极对账付款/收款单不是简单记账而是连接银行账户与总账的桥梁采购付款单资金 → 付款 → 供应商付款必须选择“付款账户”2.2 节创建的银行账户“付款方式”必须与供应商分类绑定的付款方式一致如“电汇”过账后生成凭证应付账款 ↓ / 银行存款 ↓销售收款单资金 → 收款 → 客户收款“收款账户”必须与公司开户行一致“结算方式”必须与客户分类绑定的结算方式一致如“支票”过账后生成凭证银行存款 ↑ / 应收账款 ↓提示所有付款/收款单过账后可在资金 → 对账 → 银行对账单中导入银行 CSV 流水系统自动匹配凭证。匹配失败的单据会标红需人工核对金额、日期、摘要。3.4 避坑流程卡顿的六个高频断点现象PO 确认后库存 → 入库单列表为空原因采购 → 配置 → 设置中未勾选收货时自动生成入库单或 PO 的“仓库”字段为空解决编辑 PO → “仓库”选择默认仓库如WH/Stock→ 重新确认现象销售发货单过账时报No account defined for product原因商品档案中“会计”选项卡的收入科目为空解决编辑商品 → “会计”选项卡 →收入科目选择6001 主营业务收入现象付款单过账后会计 → 过账 → 凭证中无记录原因付款单的“付款账户”未设置“银行”类型或该账户未启用解决进入资金 → 设置 → 账户→ 编辑该账户 → 勾选启用现象客户收款单过账后应收账款余额未减少原因收款单的“客户”未选择或选择了错误客户ID 不匹配解决收款单页面 → 点击“客户”字段右侧放大镜 → 从列表选择勿手输现象销售退货单过账时报You cannot create journal items on an archived account原因退货涉及的“主营业务收入”科目被禁用状态为“已归档”解决会计 → 科目 → 科目表→ 搜索6001→ 取消勾选已归档现象同一笔采购入库单过账生成凭证付款单过账又生成凭证但银行对账不平原因付款单的“付款日期”早于入库单过账日期导致凭证期间错乱解决付款单日期必须 ≥ 入库单过账日期否则需调整会计期间或手工调整凭证日期4. 仓库与库存管理批次、序列号、多仓调拨的硬核配置仓库不是“放货的地方”而是 Odoo 的物理空间引擎。GoodERP 支持多仓库、多库位、批次追溯、序列号管控但所有高级功能都依赖一个前提库存类型Inventory Type必须正确设置。很多实施者把商品设成“可存储”却忘了在“库存”选项卡勾选“管理批号”结果上线后客户投诉“这批货过期了查不到来源”——问题不在功能缺失而在初始配置漏掉一个勾选项。本章直击仓库模块最易被忽略的三个底层参数库存类型、计价方法、库位策略并给出批量修正脚本。4.1 库存类型与计价方法决定成本计算的生死组合商品档案中的两个字段控制着整个成本核算链字段可选值适用场景错误后果库存类型可存储/消耗品/服务/虚拟产品可存储需库存管理如原材料消耗品不计库存如办公用品虚拟产品电子交付如软件授权设为消耗品的商品销售发货不扣库存财务无法做成本结转计价方法先进先出/平均成本/标准价格先进先出制造业常用平均成本贸易公司常用标准价格需手动维护标准价计价方法为标准价格时入库单不更新成本所有出库按固定价计算导致毛利失真提示修改计价方法后必须运行库存 → 配置 → 重新计算库存价值否则历史单据成本不变。4.2 批次与序列号从“能管”到“可溯”的必经之路启用批次/序列号不是勾个框就完事需四步闭环商品启用编辑商品 → “库存”选项卡 → 勾选管理批号或管理序列号入库单强制录入创建入库单时“批次/序列号”字段变为必填需手动输入或扫描发货单自动带出销售发货时系统按 FIFO 规则推荐批次可手动切换追溯查询库存 → 报告 → 批次追溯输入批次号查看该批次的入库、出库、库存分布验证入库单过账后进入库存 → 库存 → 批次应存在该批次记录且“当前数量”入库数量。4.3 多仓库调拨跨仓移动的凭证生成逻辑GoodERP 的调拨单Internal Transfer本质是两张单据出库单 入库单。其凭证生成规则如下调出仓库生成库存商品 ↓ / 内部往来 ↑科目1405 库存商品/2241 其他应付款-内部往来调入仓库生成内部往来 ↓ / 库存商品 ↑科目2241 其他应付款-内部往来/1405 库存商品注意内部往来科目需在会计 → 科目 → 科目表中预先创建编码建议224101类型为“负债类”。4.4 避坑仓库模块的四个隐形雷区现象启用“管理批号”后入库单无法保存报Batch number must be unique原因同一商品存在重复批次号或该批次号已在其他仓库使用解决库存 → 批次中搜索该批次号删除重复项或改用商品名日期序号格式如MATERIAL-20240520-001现象调拨单过账后会计 → 过账 → 凭证中只有出库凭证无入库凭证原因调入仓库未设置“库存账户”或该账户未启用解决配置 → 高级配置 → 仓库→ 编辑调入仓库 → “会计”选项卡 →库存账户选择有效科目现象销售发货时系统提示No stock available for this product但库存查询显示有货原因商品设置了“库位策略”如按库位管理但未在具体库位分配库存解决库存 → 库存 → 库存调整→ 创建调整单将库存分配到目标库位现象启用“平均成本”后新入库商品成本为 0导致出库成本异常原因首次入库时未填写“单价”系统默认 0或历史库存为 0新入库成本未加权平均解决入库单必须填写“单价”若历史为 0首单入库后立即运行重新计算库存价值5. MRP 生产与委外从 BOM 到工序质检的全流程落地MRP物料需求计划是 Odoo 的高阶模块GoodERP 在 Odoo 16 基础上强化了中国制造业场景支持简单组装、工序委外、工序质检。但所有生产单MO的诞生都始于一个被 90% 新手忽略的配置——物料清单BOM的“类型”字段。设成制造MO 生成后自动扣减原材料设成拆卸MO 生成后反而增加原材料。本章不讲理论只给你生产单从创建到完工的 12 个必检节点以及当 MO 卡在确认状态时如何 30 秒定位是 BOM、路由还是库存问题。5.1 物料清单BOM生产单的 DNA错一个字段全盘失效BOM 不是“原料清单”而是“生产指令集”。创建 BOM 时以下字段必须精确类型制造标准生产、拆卸返工、替代替代料来源位置必须为原材料所在仓库如WH/Stock否则 MO 无法获取原料目标位置必须为成品仓库如WH/Stock否则完工入库失败Routing若启用工序必须选择已配置的工艺路线见 5.2 节验证BOM 保存后点击“测试”按钮应显示“测试通过所有组件均可获取”。5.2 工艺路线Routing工序流转的交通管制图工艺路线定义“一件产品要经过哪几道工序、在哪台设备、由谁操作”。创建步骤制造 → 配置 → 工艺路线→ 创建新路线如手机组装-主线添加工序工序名称如SMT贴片、工作中心如SMT-01、预计时间小时为每道工序设置工作中心制造 → 配置 → 工作中心→ 创建SMT-01设置产能如100件/班提示工作中心的“产能”直接影响 MRP 计划排程。若设为0MRP 分析时该工序被跳过。5.3 生产单MO从确认到完工的七状态解析MO 状态流转是诊断问题的黄金路径状态触发动作常见卡点快速诊断草稿创建MO无—已确认点击“确认”BOM无效、原料不足、路由不存在查看MO页面右上角“错误”标签已预留系统自动原料库位无库存、库位策略冲突库存 → 库存 → 预留查看详情进行中手动点击“开始”工序未开始、质检未通过制造 → 工序查看工序单质量检查工序完成后质检模板未配置、质检员未分配制造 → 质检查看待检单已完成手动点击“完工”成品库位满、库位策略拒绝库存 → 库存 → 库位查看容量已取消手动取消——5.4 工序质检让“合格”可验证、可追溯GoodERP 的质检不是盖章而是结构化数据采集创建质检模板制造 → 配置 → 质检模板→ 新建手机外观质检添加质检点质检点名称如屏幕划痕、类型布尔/数值/选择、合格标准如数值 0.1mm绑定到工序编辑工艺路线 → 工序整机测试→质检模板选择刚建模板执行质检制造 → 工序→ 打开工序单 → “质检”按钮 → 填写结果 → “通过”或“拒绝”。拒绝时可选“返工”或“报废”。5.5 避坑MRP 模块的五个硬核故障现象MO 点击“确认”后卡在已确认不生成预留原因BOM 中某原料的“来源位置”仓库无库存或该仓库未启用解决库存 → 库存 → 库存查询→ 检查原料在目标仓库的可用数量现象工序单“开始”按钮灰色不可点原因该工序的“工作中心”未设置“员工”或“产能”为 0解决制造 → 配置 → 工作中心→ 编辑工作中心 →员工字段选择人员产能 0现象质检单提交后工序单状态不变原因质检模板中“通过后状态”未设为进行中或已完成解决编辑质检模板 →通过后状态选择进行中现象MO 完工后成品库存增加但原材料库存未扣减原因BOM 的“类型”设为替代而非制造解决编辑 BOM →类型改为制造→ 重新创建 MO现象MRP 分析后计划单显示“无需求”但销售订单已存在原因销售订单未确认状态为报价或未设置“承诺日期”解决确认销售订单 → 设置“承诺日期” → 重新运行 MRP 分析6. 性能优化与部署实战让 Odoo 16 在 4G 内存服务器上稳定扛住 50 并发很多实施者栽在最后一步系统在测试环境丝滑一上生产就卡成 PPT。根源不在代码而在部署层。GoodERP 基于 Odoo 16其性能瓶颈 70% 在 PostgreSQL20% 在 Nginx 反向代理10% 在 Odoo 自身配置。本章不讲虚的“调优原则”只给你三招立竿见影的实操第一用pg_stat_statements插件揪出慢 SQL第二用 Nginx Upstream 实现 80 端口无缝访问第三用odoo.conf的limit_memory_hard参数防内存溢出。每招都附带命令、参数解释、效果对比——因为你在客户现场没时间猜。6.1 PostgreSQL 深度优化从“能连上”到“查得快”的四步法Odoo 的慢90% 是数据库慢。四步精准打击启用慢查询日志编辑/etc/postgresql/*/main/postgresql.conflog_min_duration_statement 1000 # 记录耗时1秒的SQL log_directory pg_log logging_collector on重启sudo systemctl restart postgresql安装 pg_stat_statements 插件实时监控-- 连接postgres数据库 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;查询最慢的 10 条 SQLSELECT query, calls, total_time, rows, ROUND(total_time/calls, 2) AS avg_time FROM pg_stat_statements WHERE calls 10 ORDER BY total_time DESC LIMIT 10;关键索引加固针对 Odoo 高频表-- 为account_move_line加索引解决凭证查询慢 CREATE INDEX idx_account_move_line_account_date ON account_move_line (account_id, date); -- 为stock_move加索引解决库存查询慢 CREATE INDEX idx_stock_move_product_state ON stock_move (product_id, state);内存参数调优/etc/postgresql/*/main/postgresql.confshared_buffers 1GB # 物理内存的25% effective_cache_size 3GB # 物理内存的75% work_mem 16MB # 避免临时文件写磁盘 maintenance_work_mem 512MB # VACUUM 加速提示4G 内存服务器shared_buffers最大设 1GB超设反而降低性能。6.2 Nginx 反向代理让http://erp.yourcompany.com直通 Odoo绕过:8069端口用域名访问是专业实施的底线。Nginx 配置核心三行upstream odoo { server 127.0.0.1:8069; } server { listen 80; server_name erp.yourcompany.com; location / { proxy_pass http://odoo; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }保存后sudo nginx -t sudo systemctl reload nginx。验证浏览器访问http://erp.yourcompany.com应看到 Odoo 登录页。6.3 Odoo 服务端调优防崩、提速、省资源编辑/etc/odoo/conf/odoo.conf关键参数# 内存保护4G服务器必设 limit_memory_hard 1073741824 # 1GB超限进程被杀 limit_memory_soft 805306368 # 768MB超限降速 # 并发与性能 workers 3 # CPU核数14G内存最多3个 max_cron_threads 1 # 防止定时任务抢资源 limit_request 8192 # 单请求最大内存 limit_time_real 120 # 单请求最长120秒 # 静态文件缓存提升前端速度 proxy_mode True提示修改后必须重启 Odoosudo systemctl restart odoo。检查日志sudo journalctl -u odoo -f确认无Memory limit exceeded报错。6.4 避坑部署上线的五个血泪教训现象Nginx 配置后登录页样式丢失全是文字原因proxy_mode True未在odoo.conf中启用Odoo 无法识别反向代理解决odoo.conf中添加proxy_mode True→ 重启 Odoo现象PostgreSQL 重启后Odoo 报Connection refused原因PostgreSQL 未监听 localhostpostgresql.conf中listen_addresses为空解决设为listen_addresses 127.0.0.1→ 重启 PostgreSQL现象启用 workers 后Odoo 启动失败日志报Address already in use原因多个 worker 争抢同一端口需用--http-port指定主端口解决odoo.conf中添加http_port 8069确保唯一现象MRP 分析运行超时页面白屏原因limit_time_real过小如设为 30复杂 BOM 分析被强制中断解决调大至120或分批运行 MRP按产品分类现象用户上传附件时提示Request Entity Too Large原因Nginx 默认限制 1MB而 Odoo 附件常超本文还有配套的精品资源点击获取