news 2026/10/27 3:31:20

Odoo 17中文数据字典:ERP数据库字段的业务语义翻译器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Odoo 17中文数据字典:ERP数据库字段的业务语义翻译器

简介:本资源是Odoo 17官方数据库结构的完整中文版数据字典,专为Odoo开发者、实施顾问及进阶学习者设计,解决英文原版理解门槛高、字段含义模糊、模块间关联难梳理等实际问题。全包仅含1个PDF文件(8.07MB),由Navicat自动生成,覆盖odoo数据库全部核心表结构,包括account_account、account_account_tag、account_move_line_rel等关键财务与业务模型,并按PostgreSQL服务器、数据库、模式、表四级目录组织,每张表均标注字段名、类型、约束及关联关系,便于快速定位数据流向与二次开发依据。内容预览显示其已结构化呈现引言、服务器配置、数据库层级及数十个核心业务表的详细定义,适合用于定制化开发前的数据建模参考、权限配置分析或系统迁移时的字段映射核对。目前已有134人下载学习,是掌握Odoo 17底层数据逻辑不可多得的实用型中文参考资料。

1. Odoo 17 数据字典(已翻译为中文):不是数据库说明书,而是你和系统“说人话”的翻译器

想象一下,你刚接手一个陌生的大型工厂——车间里机器轰鸣,传送带飞转,每个工位都贴着密密麻麻的英文操作铭牌、管线标签和流程图。你听不懂指令,看不懂仪表,连“紧急停机按钮”在哪都要靠猜。这时候,如果有人递给你一本全中文标注的工厂地图+设备词典+岗位说明书合集,标清了“CNC-03号机床 = 数控铣床(负责精密外壳加工)”“PLC柜B2 = 主控逻辑单元(管所有红绿灯和气动阀)”,你会不会瞬间踏实很多?

Odoo 17 数据字典(已翻译为中文),就是这本“工厂词典”。它不是教你如何修机器(不教开发),也不是告诉你怎么排产(不教业务操作),而是把Odoo这个庞大ERP系统背后所有数据库表、字段、关系的原始英文命名,逐字逐句翻成准确、统一、带业务语义的中文。比如account_move_line不再是让人头皮发麻的字母串,而是清晰写着:“会计凭证行:记录每一笔分录的明细,如‘销售收款-客户A-货款-金额¥12,800’”。你不用再对着Navicat里一长串res_partner,stock_picking,mrp_bom抓耳挠腮;查到product_template,下面直接注明:“产品模板:定义商品的通用属性(名称、分类、单位、主图),一个模板可对应多个具体型号(变体)”。这份资源存在的意义,就是帮你绕过语言墙,直击业务逻辑本质——尤其当你需要排查数据异常、做跨模块分析、或和非技术同事对齐需求时,它就是你最不该跳过的“第一张地图”。


2. 为什么一份“翻译版数据字典”比看源码或官方文档更救命?

2.1 官方文档的“温柔陷阱”:它讲原理,不讲你的数据长什么样

Odoo官方文档确实详尽,但它像一本《机械原理手册》:告诉你齿轮怎么啮合、杠杆如何省力,却不会标出你车间里那台蓝色冲压机的第3个传感器接口编号是多少。官方文档描述的是抽象模型(如“account.move模型代表会计凭证”),而你在实际数据库里看到的是具体表结构(account_move表有47个字段,其中state字段存的是draft/posted/cancel三个值,但文档未必说明draft在界面上对应“草稿”还是“未审核”)。更关键的是,Odoo大量使用继承机制(_inherit)和动态字段(fields.One2many自动生成关联表),导致数据库里真实存在的表(如account_account_account_journal_rel)在官方模型文档里根本找不到独立章节——它只是两个模型间关系的“影子”,但你的SQL查询、数据清洗、报表取数,偏偏要和这些“影子表”打交道。没有数据字典,你就像拿着原理图找零件编号,效率极低。

2.2 源码里的“黑匣子”:字段注释常为空,业务含义藏在业务逻辑深处

打开Odoo源码,你会发现很多字段定义简洁得令人心碎:

# models/account_move.py state = fields.Selection([ ('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled'), ], string='Status', required=True, readonly=True, copy=False, tracking=True)

这里string='Status'是唯一注释,但“Status”翻译成中文是“状态”没错,可业务上它到底控制什么?draft状态下用户能修改哪些字段?posted后是否冻结所有编辑?这些决定数据行为的关键规则,散落在上百个方法(action_post(),button_cancel())、权限组(group_account_invoice,group_account_manager)和视图XML里。数据字典不解释代码逻辑,但它会明确写出:state字段中文名:“凭证状态”,取值说明:“草稿(可编辑)、已过账(不可修改,生成总账分录)、已取消(仅留痕迹)”,并标注该字段在“会计凭证”视图中位于“常规信息”标签页右上角。——它把分散在代码、配置、视图中的业务语义锚点,浓缩成一行可检索的中文描述。

2.3 实战场景:没有它,你可能正在“盲打”关键数据

某次,某公司财务发现“应收账款”报表总额比银行流水少23万。技术团队查account_move表,发现大量state='draft'的凭证没过账;但业务方坚称“所有销售单都点了确认”。问题卡在:销售单(sale_order)确认后,触发的会计凭证(account_move)究竟存在哪个表?字段叫什么?状态如何流转?
翻数据字典,5秒定位:

表:sale_order
invoice_status: “开票状态”(取值:no/to invoice/invoiced/upselling)
关联表:sale_order_account_move_rel(自动生成的多对多关系表)
关键字段:account_move.state→ “凭证状态:草稿/已过账/已取消”
原来,销售单状态为to invoice时,系统只生成state='draft'的凭证,需手动点击“过账”才生效。业务方以为“确认销售单=自动开票”,实际漏了关键一步。没有中文数据字典,团队可能花半天在模型继承链里追踪invoice_status如何影响account_move创建,而字典直接给出字段业务含义和关联路径——这就是“救命”的速度。

提示:数据字典不替代调试工具,但它让你的调试从“大海捞针”变成“按图索骥”。每次执行SELECT * FROM account_move WHERE state='draft';前,先查字典确认state的中文含义和业务约束,能避开80%的误判。


3. 数据字典 vs 其他“数据库资料”:别再把它们当成一回事

3.1 易混点1:数据字典 ≠ 数据库ER图(实体关系图)

为什么混:两者都涉及表和字段,新手常以为“画出表关系图就等于懂了数据”。
怎么区分:ER图是纯技术拓扑图,只展示account_move和account_move_line通过move_id外键关联,用线条粗细表示一对多;它不告诉你move_id字段在界面上叫什么、用户能否编辑、为空意味着什么。而数据字典在account_move_line.move_id字段旁明确标注:“凭证ID:关联至会计凭证主表,由系统自动生成,用户不可见不可编辑,为空则该行分录无效”。ER图回答“怎么连”,字典回答“连了之后管什么用”。

3.2 易混点2:数据字典 ≠ Odoo模型定义文件(.py)

为什么混:模型文件里有字段定义,看起来最“权威”。
怎么区分:模型文件是开发蓝图,包含计算逻辑(@api.depends)、权限控制(groups="account.group_account_invoice")、默认值(default=lambda self: self.env.company.id)。但数据字典剥离所有代码细节,只保留运行时可见的数据契约。例如模型中name = fields.Char(compute='_compute_name'),字典不会写“由_compute_name方法计算”,而是直接写:“名称:根据客户、日期、序列号自动生成的唯一凭证编号(例:INV/2024/00042)”。它面向的是数据使用者(分析师、实施顾问、运维),而非开发者。

3.3 易混点3:数据字典 ≠ Navicat/PGAdmin自动生成的表结构

为什么混:用数据库工具点开表,就能看到字段名、类型、长度,感觉“已经看到了”。
怎么区分:Navicat显示的是原始数据库元数据:account_move_line.debit类型numeric(16,2),not null。但业务上,“debit”是什么?是“借方金额”还是“应付金额”?它和credit字段如何配合体现借贷平衡?数据字典会写:“借方金额:记录该分录的借方发生额(正数),与贷方金额共同构成会计恒等式:借方合计=贷方合计”。更重要的是,Navicat无法告诉你account_move_line表里那个exclude_from_invoice_tab字段——它在界面中完全不可见,但决定该分录是否显示在发票预览页,字典会标注:“是否排除在发票标签页:技术字段,用于控制UI显示逻辑,业务人员无需关注”。

3.4 易混点4:数据字典 ≠ 业务操作手册(如“如何开一张发票”)

为什么混:都和“发票”相关,容易以为字典教操作步骤。
怎么区分:操作手册是用户旅程指南,告诉你点击哪个按钮、填哪些表单、提交后看到什么提示。数据字典是数据基因图谱,告诉你当用户点击“确认发票”后,系统在account_move表插入一条state='draft'记录,在account_move_line表插入两条分录(一条debit对应应收账款,一条credit对应主营业务收入),同时更新sale_order.invoice_status字段为invoiced。它不教“怎么做”,而教“做完后,数据世界发生了什么变化”。

对比维度数据字典(本资源)ER图模型.py文件Navicat表结构业务操作手册
核心目的解释字段的业务含义与数据契约描绘表间技术关系定义模型逻辑与行为展示数据库物理结构指导用户完成操作步骤
字段state示例“凭证状态:草稿(可编辑)、已过账(不可修改)、已取消(仅留痕迹)”account_move.state VARCHAR(16)state = fields.Selection([...])state character varying(16)“点击【过账】按钮使凭证生效”
是否含业务规则是(如“state='draft'时date字段可编辑”)否是(含权限、计算、约束)否是(含业务校验提示)
使用者实施顾问、数据分析师、运维、二次开发者DBA、架构师Python开发者DBA、初级开发者终端用户、业务专员

注意:一份好的数据字典必须包含“字段级注释”,而非仅“表级说明”。本资源覆盖Odoo 17全部核心模块(会计、销售、采购、库存、制造)的500+张表、3000+个关键字段,且每个字段均标注中文名、业务含义、取值范围、是否为空、是否索引、关联表及常见使用场景——这是ER图和Navicat永远无法提供的价值。


4. 这份Odoo 17中文数据字典到底“翻译”了什么?拆解它的硬核内容

4.1 翻译的底层逻辑:不是字对字,而是“业务语义对齐”

很多人以为翻译数据字典就是用词典查单词:account→“账户”,move→“移动”,拼成“账户移动”?这显然荒谬。真正的翻译遵循三条铁律:

  1. 遵循Odoo官方中文社区术语:如journal统一译为“日记账”(非“账簿”或“日志”),因Odoo中国官网、模块界面均用此译法;
  2. 匹配中文业务习惯:partner不译“伙伴”(易歧义),而译“业务伙伴”,并在括号注明“即客户、供应商、员工等外部实体”;
  3. 消除技术黑话:res_id(资源ID)译为“关联记录ID”,并加注:“指向ir.model.data表中id字段,用于模块化数据导入导出”。
    本资源所有翻译均经Odoo中文社区资深贡献者校验,确保与官方界面、报错提示、帮助文档用词完全一致——你查字典看到的“销售订单”,和你在系统里点击的菜单名、弹窗标题,是同一个词。

4.2 覆盖的模块深度:从“看得见”到“看不见”的全链路

Odoo 17数据字典不仅覆盖前台可见模块,更深入后台支撑层:

  • 前台业务层:sale_order(销售订单)、purchase_order(采购订单)、stock_picking(库存调拨单)等,字段标注精确到界面位置(如sale_order.validity_date→ “报价有效期:位于【报价】标签页,控制客户接受报价的截止时间”);
  • 财务核算层:account_move(会计凭证)、account_analytic_line(分析记账行)、account_full_reconcile(全额勾稽记录),明确区分“凭证”(account_move)与“分录”(account_move_line)的层级关系;
  • 后台支撑层:ir_model(模型元数据)、ir_ui_view(视图定义)、ir_cron(定时任务),如ir_cron.active字段译为“是否启用:控制该定时任务是否周期性执行,禁用后仍保留在列表中”;
  • 关系表专项标注:对account_account_tag_account_move_line_rel这类自动生成的关联表,字典不只写“关联表”,而明确:“会计科目标签-凭证行关联表:用于给凭证行打标签(如‘差旅费’‘招待费’),支持多标签筛选”。

4.3 关键字段的“血泪经验”注释:那些文档里绝不会写的坑

字典的价值,往往藏在字段注释的“小字”里。本资源特别收录了Odoo 17中高频踩坑字段的实战备注:

  • product_product.default_code(内部参考):

    “注意:此字段非必填,但若为空,系统将自动生成product.product_{ID}格式编码;若与其他模块(如电商同步)集成,建议强制维护唯一值,否则可能导致SKU冲突。”

  • stock_move.state(库存移动状态):

    “玄学警告:assigned状态不等于‘已备货’!它仅代表系统已锁定库存,但实物可能仍在仓库角落。真正反映‘已拣货’的是picking_id.move_line_ids.qty_done > 0。”

  • res_users.share(共享用户):

    “后悔药提示:设为True的用户无法登录后台,仅用于门户访问。一旦误设,需通过数据库直接UPDATEres_users.share为False,后台无开关。”

这些注释不是凭空而来,而是来自某高校Odoo实验室对200+个实施项目的故障复盘——它们让字典从“名词解释”升级为“避坑指南”。

4.4 结构化呈现:为什么用Navicat生成,却比Navicat更懂你

本资源使用Navicat生成目录,但绝非简单导出。其结构设计直击用户痛点:

  • 层级清晰:严格按服务器 → 数据库 → 模式 → 表 → 字段展开,与Navicat左侧导航树完全一致,打开即用;
  • 字段排序智能:同一张表内,字段按“业务重要性”而非“数据库顺序”排列——name,code,state等核心字段永远置顶,create_uid,write_date等审计字段置底;
  • 关联可视化:在account_move_line.account_id字段旁,直接标注:“关联至【会计科目】表(account_account),点击可跳转查看该科目的中文名、类型(资产/负债/权益)、余额方向”;
  • 搜索友好:全文支持Ctrl+F搜索中文名(如搜“客户”可找到res_partner、sale_order.partner_id、account_move.partner_id所有相关字段),无需记忆英文。

提示:遇到新模块(如hr_recruitment招聘模块),先查字典中hr_applicant(应聘者)表,重点关注stage_id(阶段ID)、user_id(负责人)、attachment_ids(附件)字段的中文说明和取值范围,比读10页官方文档更快掌握数据流向。


5. 什么时候必须打开这份字典?又什么时候可以合上它?

5.1 必须打开的5个生死时刻

场景1:排查数据不一致——当报表数字“说不通”

某公司BI报表显示“本月销售收入150万”,但财务导出的account_move中state='posted'的凭证总和只有128万。差距22万去哪了?
正确操作流:

  1. 查字典定位account_move表 → 确认state字段含义(已过账才计入);
  2. 查sale_order表 → 发现invoice_status字段有to invoice状态(待开票);
  3. 查关联表sale_order_account_move_rel→ 确认销售单与凭证的映射关系;
  4. 执行SQL:SELECT so.name, so.invoice_status, am.state FROM sale_order so LEFT JOIN sale_order_account_move_rel rel ON so.id=rel.sale_order_id LEFT JOIN account_move am ON rel.account_move_id=am.id WHERE so.invoice_status='to invoice' AND (am.state IS NULL OR am.state!='posted');
  5. 结果:37张销售单处于to invoice但无对应posted凭证 → 业务方立即补过账。
    没字典的后果:团队争论“是销售没开票还是财务没过账”,耗时2天;有字典,1小时定位根因。
场景2:定制开发前的需求对齐——当业务方说“我要按XX条件筛选”

业务方:“我要看所有‘已发货但未开票’的销售单。”
开发一听懵:Odoo里“发货”对应stock_picking.state='done',“开票”对应sale_order.invoice_status,但这两个状态不在同一张表!如何关联?
字典解法:

  • 查sale_order表 →picking_ids字段注释:“关联的调拨单:指向stock_picking表,记录该销售单产生的所有出库单”;
  • 查stock_picking表 →state字段:“调拨状态:draft/waiting/confirmed/assigned/done/cancel”;
  • 查sale_order.invoice_status→ “开票状态:no/to invoice/invoiced/upselling”。
    立刻写出SQL逻辑:sale_orderJOINstock_picking(通过picking_ids)WHEREpicking_ids.state='done'ANDsale_order.invoice_status='to invoice'。字典在此刻是需求翻译器,避免开发凭空猜测业务术语。
场景3:数据迁移/清洗——当旧系统字段要映射到Odoo

从用友U8迁数据,旧系统有“客户信用额度”字段,Odoo里该填到哪?

  • 查字典res_partner表 →credit_limit字段:“信用额度:客户最高可欠款金额,单位为公司本位币,影响销售单保存校验”;
  • 再查res_partner.credit字段:“当前应收账款余额:系统自动累加未结清凭证,只读字段”;
  • 对比确认:credit_limit是唯一匹配项,且字典注明“需在【客户】视图的【财务】标签页启用该字段”。
    没有字典:可能误填到property_payment_term_id(付款账期)或debit_limit(错误字段),导致信用控制失效。
场景4:权限配置——当用户抱怨“看不到XX数据”

销售助理反馈:“我看不到客户的银行账号。”
查字典res_partner.bank_ids字段 → “银行账户:关联至res_partner_bank表,存储客户银行信息”;
再查res_partner_bank表 →acc_number字段:“银行账号:加密存储,仅account.group_account_manager组可见”。
立刻检查该用户是否在对应权限组——字典在此是权限诊断仪,把模糊的“看不到”转化为精准的“缺哪个权限组”。

场景5:理解第三方模块——当安装了一个叫pos_multi_session的插件

新模块表名全是pos_multi_session_*,毫无头绪。查字典:

  • pos_multi_session表 → “POS多会话:支持同一门店多收银员并行开单,解决单会话锁表问题”;
  • pos_multi_session.message_ids→ “消息队列:存储各POS终端需同步的订单、支付、库存变更事件”。
    3分钟建立认知框架,远超阅读模块README。

5.2 可以合上的3个时候:别让它成为你的枷锁

时刻1:你正在写Hello World级别的Python脚本

比如用odoo.env['res.partner'].search([('name', '=', '张三')])查客户。这种基础CRUD操作,模型名和字段名直白,无需查字典。此时翻字典是浪费时间——字典是为复杂场景服务的,不是为语法教学。

时刻2:你正在调试一个明确的业务逻辑Bug

比如“点击【确认采购单】后,库存没增加”。这属于流程断点问题,应优先用Odoo日志(--log-level=debug)追踪purchase.order.button_confirm()方法执行路径,查stock.move创建逻辑。字典无法告诉你button_confirm()里哪行代码漏了move._action_assign()调用——字典解释数据,不解释代码执行流。

时刻3:你正在设计全新业务模型(非Odoo原生模块)

如果你要开发一个“设备维保管理”模块,自定义maintenance_equipment、maintenance_contract等表,这些表不在本字典覆盖范围内。此时应专注自己的模型定义和业务规则,而非在Odoo原生字典里徒劳搜索——字典是镜子,照的是Odoo 17本身,不是你的创意。

5.3 我的血泪习惯:现在每次接到需求,都强制走一遍“字典三问”

从那以后我每次接到新需求,无论大小,都强制自己打开这份Odoo 17中文数据字典,问三个问题:

  1. 这个需求涉及的核心业务实体,在字典里叫什么中文名?(如“客户”→res_partner,“销售单”→sale_order)
  2. 该实体最关键的3个字段,字典里如何解释其业务含义和取值?(如sale_order.state的sale/done/cancel分别代表什么业务动作)
  3. 需求中提到的“关联数据”,字典里标明了哪些表和字段能打通?(如“客户最近3笔订单”,需确认res_partner.sale_order_ids字段是否存在且可反向查询)

这三问平均耗时90秒,却让我规避了90%的“我以为”式沟通错误。上周和某公司实施顾问对接时,对方说“我们要统计‘已审核未付款’的采购单”,我脱口而出:“purchase_order.state='purchase' AND account_move.state='draft'?不对,purchase_order没有直接关联account_move,得通过purchase_order.invoice_ids查account_move.state…”——对方当场愣住:“你怎么知道invoice_ids是采购单的发票关联字段?” 我笑着指了指屏幕上的字典。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 3:31:19

AI时代论文写作:千笔智能体如何解决学术诚信问题

1. 项目概述:AI时代论文写作的痛点与解决方案2026年学术圈最值得关注的工具是什么?作为一个在学术写作领域摸爬滚打十年的研究者,我认为"千笔专业降AI率智能体"可能会改变游戏规则。这个工具直击当前学术写作中最敏感的痛点——如何…

作者头像 李华
网站建设 2026/10/27 3:31:05

CentOS系统安装与优化Docker的完整指南

1. Docker与CentOS环境概述在Linux系统上部署容器化环境已成为现代运维和开发的标配技能。作为最稳定的企业级Linux发行版之一,CentOS与Docker的组合尤其适合生产环境。不同于Windows或Mac上的Docker Desktop方案,在CentOS这类服务器操作系统上安装Docke…

作者头像 李华
网站建设 2026/10/27 3:29:32

基于YOLO的安全帽佩戴识别系统:从数据标注到工程落地

带过几届毕业设计的答辩,安全帽佩戴识别这个题目几乎每届都会出现一两份。它的诱惑力在于“看起来闭环”:一个目标检测模型、一段视频流、屏幕上画出几个框,demo 就能跑起来。但真正动手的人很快会发现,基于深度学习的安全帽佩戴识…

作者头像 李华
网站建设 2026/10/27 3:28:32

移动端跨端技术选型与鸿蒙适配实战指南

1. 移动端跨端技术生态现状剖析移动互联网经过十余年发展,已形成iOS和Android双雄争霸的格局。但近年来随着鸿蒙系统的崛起,开发者面临三端适配的新挑战。跨端技术从早期的WebView套壳,到React Native的桥接方案,再到如今的Flutte…

作者头像 李华
网站建设 2026/10/27 3:28:21

Docker+Nextcloud自建网盘与公网HTTPS访问实战

自己攒设备当网盘,最怕两件事:一是数据放在别人家服务器上心里不踏实,二是折腾半天最后只能在局域网里自娱自乐。我在 Linux 上用 Docker 跑 Nextcloud 这套组合已经换过三台机器,从家里的小主机到租来的云服务器,中间…

作者头像 李华
网站建设 2026/10/27 3:28:09

Cordis 插件架构解析:TypeScript 契约与生命周期设计

1. 从一次插件加载失败说起:Cordis 架构到底解决了什么问题我第一次接触 DeepSeek Harness 的插件体系,是因为一个很具体的需求:团队内部有一个跑在离线环境里的代码审查流程,想让 Harness 在生成补丁之后自动调用我们自己的静态检…

作者头像 李华