折扣与促销活动 (Discounts & Promotions)
核心逻辑: 相比于直接修改单价的“价格表”,折扣与促销更加灵活和显性化。 它们通常体现为订单上的折扣百分比 (Disc%) 列,或者额外增加的一行 负数金额行(如:优惠券 -$50)。
1. 三种打折方式
在 Odoo 中,给客户打折主要有三种路径,适用场景各不相同:
| 方式 | 英文名 | 表现形式 | 适用场景 |
|---|---|---|---|
| 手动行折扣 | Manual Line Discount | SO 行上 Disc% 显示 10% | 销售员现场谈判,临时给个 9 折。 |
| 优惠码/券 | Coupons | 增加一行 Coupon: VIP100 金额 -$100 | 电商营销,或者发给客户下次使用。 |
| 自动促销 | Promotions | 自动触发 10% on your order 负数行 | 满减、买一送一、全场 8 折。 |
2. 手动行折扣 (Manual Line Discount)
这是最传统的打折方式,完全依赖销售员的个人判断。
开启功能
进入 Sales > Configuration > Settings,勾选 Discounts (Grant discounts on sales order lines)。
操作步骤
- 在销售订单 (SO) 中录入产品。
- 你会发现多了一列 Disc.%。
- 直接输入数字(如
20)。 - 系统自动计算:
Subtotal = 单价 × 数量 × (1 - 20%)。
折扣限额管控 (Discount Limits)
注:折扣限额管控是我们定制开发的能力,如果不做任何配置,各级折扣上限默认均为 100%(即不限制)。
为了防止销售过度打折,系统引入了三级折扣限额管控。无论是 ERP 后台录单,还是在商城代客下单场景中,都会严格受此限额控制。系统会取三个限额中的最小值作为当前销售对该商品能给出的最高折扣。
- 系统全局限额 (Global Limit):整个系统的最高允许折扣百分比。
- 配置路径:销售 > 配置 > 设置 > Global Line Discount Limit (%)
- 销售员个人限额 (User Limit):赋予特定销售的打折上限。
- 配置路径:设置 > 用户 > 选择具体用户 > 销售页签下的 User Line Discount Limit (%)
- 商品限额 (Product Limit):限制某特定商品允许被降价的底线。
- 配置路径:商品表单 > 销售页签下的代客下单最大折扣 (%)
注:只有具备销售主管 (Sales Manager) 权限的用户才可以修改这三级折扣限额。若输入的折扣超过这三者的最小值,系统将直接拦截拒绝,并提示实际生效的限额。
手动行折扣不会改变 Unit Price。这让客户很清楚地看到:“原价是 $10,但你给了我面子,打了折”。
3. 促销与优惠券 (Discount & Loyalty)
这是 Odoo 16+ 引入的强大引擎,用于处理复杂的营销规则。
入口:Sales > Products > Discount & Loyalty。
场景 A:优惠码 (Coupons)
场景:发给客户一个码 VIP888,结账时输入立减 $50。
- 创建 Program:类型选择 Coupons。
- 定义规则 (Rules):
- 条件:最低消费 $100。
- 定义奖励 (Rewards):
- 类型:Fixed Amount (固定金额)。
- 金额:$50。
- 生成优惠码:点击顶部的 Generate Coupons,系统会生成一堆随机码,或者你可以手动导入
VIP888。 - 使用:
- 后台 SO:点击顶部 Coupon 按钮,输入
VIP888。 - 网站商城:结账页有专门的
Enter Promo Code输入框。
- 后台 SO:点击顶部 Coupon 按钮,输入
场景 B:买赠 (Buy X Get Y)
场景:买 3 箱牛奶,送 1 箱酸奶。
- 创建 Program:类型选择 Buy X Get Y。
- 定义规则:
- 买 3 个
Product A。
- 买 3 个
- 定义奖励:
- 送 1 个
Product B。 - 重点:Odoo 会在订单上加一行
Product B,单价正常,但在下面再加一行Free Product B,金额为负数,抵消掉。或者直接把赠品行的Disc%设为 100%。
- 送 1 个
场景 C:阶梯满减 (Tiered Discount)
场景:满 $1000 减 $100。
- 创建 Program:类型选择 Promotions。
- 定义规则:
- Minimum Amount: $1000。
- 定义奖励:
- Fixed Amount: $100。
- Apply on: Order (整单)。
4. 优先级与冲突 (Priority)
当一个订单同时满足“价格表”、“行折扣”和“优惠码”时,系统怎么算?
- 价格表 (Pricelist) 最先生效:它决定了基础的
Unit Price。 - 行折扣 (Disc%) 次之:在 Unit Price 基础上打折。
- 优惠码/促销 (Promotions) 最后:通常作为额外的负数行加在订单底部,或者进一步修改行折扣。
最终公式: $$ Final Price = (Pricelist Price \times (1 - Disc%)) - Global Coupons $$
5. 常见问题 (FAQ)
Q: 为什么我在网站上输了优惠码没反应?
- A: 检查三点:
- Program 是否已 Published (已发布)?
- Website 字段是否限制了只能在 Website A 使用,而你在 Website B?
- Customer 字段是否限制了特定客户?
Q: "折扣"和"事后折扣"有什么区别?
- A:
- 折扣 (本篇):是在订单确认前谈好的,直接体现在订单金额里,开票金额也是折后价。
- 事后折扣 (Post Discount):是订单已确认/已发货/已开票后,为了安抚客户额外给的返点。这需要走专门的 事后折扣流程。