You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo v15 POS自定义按钮打印额外PDF单据的实现思路咨询

Odoo v15 POS 自定义打印方案分析与收据数据来源说明

两种打印实现思路的可行性分析

1. 复用OrderReceipt.xml,通过t-if控制打印内容

完全可行,适合逻辑不复杂的场景。

  • 优势:不用新增模板文件,所有打印逻辑集中在原有文件,初期维护成本低。
  • 实现方式:在原有模板中新增一个判断变量(比如print_mode),用t-if/t-elif区分两种打印内容:
    <!-- 原有收据内容 -->
    <t t-if="print_mode === 'receipt'">
        ... 原有OrderReceipt模板代码 ...
    </t>
    <!-- 新增票据打印内容 -->
    <t t-if="print_mode === 'ticket'">
        ... 票据相关内容,可使用RPC获取的origin数据 ...
    </t>
    
    在JS的打印按钮事件里,调用打印方法时传入对应的print_mode参数,渲染模板时带上这个变量即可。
  • 注意点:如果后续票据逻辑复杂,会导致模板代码臃肿,容易和原有收据的渲染逻辑冲突,增加后期维护难度。

2. 新建独立XML模板

同样完全可行,推荐用于逻辑独立的场景。

  • 优势:模板逻辑完全分离,不会干扰原有收据的代码,后续修改、扩展更清晰,也方便单独调试。
  • 实现方式:
    1. 新建比如OrderTicket.xml文件,编写专属的票据打印模板,直接使用RPC获取的票据数据。
    2. 在POS的assets配置中引入这个新模板,确保前端能加载到。
    3. 在JS的「打印票据」按钮事件里,单独加载这个新模板,传入票据数据后触发打印。
  • 注意点:需要额外维护一个模板文件,但整体架构更清晰,适合长期迭代的需求。

POS收据信息的获取来源

POS前端打印收据时,核心数据来自前端的order对象:

  • 这个对象包含了订单的所有核心信息:订单号(order.name)、商品明细(order.lines)、支付记录(order.paymentlines)、客户信息(order.partner)、折扣、税额等,这些数据要么是前端创建订单时生成的,要么是从后端同步过来的。
  • 打印时,Odoo会把order对象的属性作为上下文传入模板,模板通过t-foreach、t-esc等指令渲染内容。
  • 如果你需要额外的票据信息,通过receipt.origin调用RPC获取后端数据后,只需把这些数据合并到打印的上下文对象中,就能在模板里直接使用。

内容的提问来源于stack exchange,提问作者DZEUF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:25:07