财务视角:事后折扣的开票与退款 (Finance & Credit Note)
本指南主要面向财务人员(或同时处理账单的销售管理人员)。
当销售人员为一个已经确认的订单申请了“事后折扣”后,这些折扣在财务上是如何体现的?如果客户后续又要退货,退款金额该如何计算?
我们的 3will_sale_post_discount 插件专门为财务端做了防错设计。这里主要涉及两种财务操作场景:
- 纯退款(只退折扣钱):商品不退,只是把事后协商的折扣金额以贷项通知单(Credit Note)的形式退给客户(或抵扣后续应收)。
- 发生实物退货(退商品也退钱):客户把买了的商品退回来了,此时退款金额必须扣除之前已经给过的事后折扣,按“折后有效价”来退,否则就会出现“原价退款,公司亏钱”的严重错误。
1. 场景一:仅针对“事后折扣”开具贷项通知单
通常情况下,申请事后折扣时,原订单上的商品早已全部开过票(Fully Invoiced)了。
当销售在向导中仅点击了 Confirm(只落折扣未开票)时,订单上会新增一条“待开票”的负数服务行。此时,财务或销售只需再次点击订单上的 Create Invoice 按钮。
Odoo 的自动识别机制: 系统会自动检测到原商品行已开票,只针对这行新加的、未开票的折扣行生成一张新的发票。
(注:如果销售在向导里直接点击的是 Confirm & Invoice,则跳过此步,系统已自动生成了这张单据。)

如图所示,系统生成了一张只包含折扣行的**客户退款(草稿)**单据,请关注以下细节:
- 黄色防呆横幅:顶部会显示醒目的提示:
⚠️ 关联的销售订单已应用事后折扣。处理退款时请留意。 - 专属服务产品:明细行自动匹配为定制的
[POST-DISC] 事后折扣服务产品,确保它不影响任何实物库存。 - 数量与金额:
- 在生成的退款单(Credit Note)中,系统会带出负数的数量或负数的单价(例如图中的数量
-1.00,单价-40.00)。 - 含义:
-1 * -40 = 40。在客户退款单(Credit Note)的语境下,总计金额$40.00代表我们欠客户/要退给客户 40 元。 - 后果:财务确认(Confirm)这张单据后,这
$40.00将作为客户的可用额度,可以用来核销该客户的其他应收账款。
- 在生成的退款单(Credit Note)中,系统会带出负数的数量或负数的单价(例如图中的数量
2. 场景二:实物退货时的“折后价”防呆提示
这是本定制插件最核心的财务价值之一。
痛点背景: 过去,如果商品原价卖了 $100,后来由于瑕疵私下补偿了 $10 (事后折扣)。几个月后,客户把商品退回来了。由于系统里该商品的原销售单价还是 $100,财务在做退款时很容易直接按 $100 全额退款,导致公司倒贴 $10。
解决方案: 现在,只要该订单发生过事后折扣,财务在处理任何相关退款时,都会看到系统强提醒。
步骤 A:查收警告横幅
当财务在原发票上点击【添加贷方票据 (Add Credit Note)】,或者打开上述的退款草稿单时,顶部的黄色警告横幅是永远存在的。
步骤 B:点击“查看详情”追溯历史
为了知道具体该扣除多少钱,财务可以点击横幅右侧的 【查看详情 (View Details)】 按钮。

- 这个弹窗完整列出了该订单所有的事后折扣历史。
- 你可以清晰地看到:针对哪个产品、采用了什么折扣类型(百分比/固定金额)、具体的金额是多少、当时发生折扣的原因(如“卖的不好”),以及是谁在什么时候操作的。
步骤 C:人工调整退款金额(Action-Consequence)
- Action(动作):财务根据弹窗中显示的“已折扣金额”,在退货的贷项通知单明细行中,手动修改退款单价或总金额。
- Consequence(后果):按照折后实际价格(原价减去已退款的折扣金额)进行退款过账。彻底杜绝“按原价退款”导致的财务资金流失。
3. 结果验证:开票后的双单据状态
当事后折扣的发票(即退款单)被财务确认(Confirm)后,我们回到销售订单视角,会看到清晰的“双单据”并行状态。这非常有利于后续的对账与查询。
3.1 订单上的发票列表 (Smart Button)
点击销售订单顶部的 Invoices 按钮,你会看到类似下图的列表:

- 双单据并行:列表中会同时存在两张单据:
- 一张是原始销售发票(正数,例如
INV/2026/00010),代表正常的货物销售收入。 - 一张是事后折扣退款单(负数,例如
RINV/2026/00016),代表事后产生的折扣/退款。
- 一张是原始销售发票(正数,例如
- 总收益一目了然:列表底部的
Total栏会自动计算这两张单据的抵扣后总金额(如 $360.00),这才是该订单最终的真实营收。
3.2 订单详情页的完整视图

在订单详情页,你可以获得最完整的业务全景:
- Smart Button 计数:顶部的
Invoices按钮显示数量为2,提示该订单关联了两笔财务单据。 - 折扣行状态:订单行中的
[POST-DISC]服务行状态显示为已开票 (Invoiced),表示折扣已落实到财务。 - Chatter 审计追踪:右侧的消息流(Chatter)中完整记录了整个过程:
- 什么时候申请了折扣("已应用事后折扣...原因...")。
- 什么时候生成了新的折扣行("Extra line with [POST-DISC]...")。
- 什么时候原发票被支付,以及折扣单据的状态变更。
4. 常见问题 (FAQ)
Q: 为什么事后折扣开出来的退款单明细上,数量和单价都是负数?
A: 这是 Odoo 处理“服务类负数明细行”转化为贷项通知单(Credit Note)时的计算逻辑映射。只要右下角的“未税金额/总计”显示的是正数(在退款单据类型下,正数总计代表我们要支付或抵扣给客户的钱),财务记账的借贷方向就是正确的。
Q: 如果销售在向导里点击了 Confirm & Invoice,我还需要手动去原订单里点“创建发票”吗?
A: 不需要。Confirm & Invoice 会一步到位自动生成带有折扣明细的客户退款单(草稿状态)。财务只需进入 财务 (Accounting) -> 客户 (Customers) -> 客户退款 (Credit Notes) 中找到该草稿,审核无误后点击确认即可。