在Odoo v15/v16中实现发货单显示销售订单客户地址
在Odoo v15/v16发货单报表中显示销售订单客户地址的解决方案
问题核心
发货单(stock.report_delivery_document)默认将联系地址与送货地址显示为同一信息,且直接调用o.partner_id获取的是送货地址——因为库存调拨单(stock.picking)的partner_id字段默认绑定的是送货地址,而非销售订单上的客户地址。
解决方案
通过继承QWeb报表,直接关联销售订单的客户地址字段即可实现需求,具体步骤如下:
明确数据关联逻辑
库存调拨单通过sale_id字段关联销售订单,销售订单的客户地址存储在sale_id.partner_id中,送货地址则是sale_id.partner_shipping_id。修改报表代码
继承stock.report_delivery_document模板,替换partner_header区域,调用销售订单的客户地址信息:<xpath expr="//div[@name='partner_header']" position="replace"> <div class="pt-5" name="partner_header"> <!-- 关联销售订单时显示客户地址 --> <t t-if="o.sale_id"> <span t-esc="o.sale_id.partner_id.name"/><br/> <span t-esc="o.sale_id.partner_id.street"/><br/> <t t-if="o.sale_id.partner_id.street2"><span t-esc="o.sale_id.partner_id.street2"/><br/></t> <span t-esc="o.sale_id.partner_id.city"/> <span t-esc="o.sale_id.partner_id.state_id.name"/> <span t-esc="o.sale_id.partner_id.zip"/><br/> <span t-esc="o.sale_id.partner_id.country_id.name"/><br/> <t t-if="o.sale_id.partner_id.phone"><span>Phone: </span><span t-esc="o.sale_id.partner_id.phone"/><br/></t> <t t-if="o.sale_id.partner_id.email"><span>Email: </span><span t-esc="o.sale_id.partner_id.email"/></t> </t> <!-- 无关联销售订单时显示默认地址 --> <t t-else=""> <span t-esc="o.partner_id.name"/><br/> <span t-esc="o.partner_id.street"/><br/> <t t-if="o.partner_id.street2"><span t-esc="o.partner_id.street2"/><br/></t> <span t-esc="o.partner_id.city"/> <span t-esc="o.partner_id.state_id.name"/> <span t-esc="o.partner_id.zip"/><br/> <span t-esc="o.partner_id.country_id.name"/><br/> <t t-if="o.partner_id.phone"><span>Phone: </span><span t-esc="o.partner_id.phone"/><br/></t> <t t-if="o.partner_id.email"><span>Email: </span><span t-esc="o.partner_id.email"/></t> </t> </div> </xpath>模块依赖配置
在自定义模块的__manifest__.py中声明依赖,确保能正常调用销售订单相关字段:'depends': ['stock', 'sale'],
内容的提问来源于stack exchange,提问作者Matija Amondi
相关产品推荐
相关产品推荐

