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

如何使用PHP从OpenERP获取销售订单的送货地址

解决OpenERP获取销售订单送货地址而非发票地址的问题

你踩的坑很典型——现在你调用res.partner时传的是sales['partner_invoice_id'][0],这个字段本身就对应发票地址的关联伙伴记录,所以拿到发票地址完全是意料之中的事。要获取送货地址,只需要换个关联字段就行:

正确实现步骤

  1. 获取销售订单数据:你的初始查询逻辑没问题,要是想更高效,可以明确指定要读取的字段(可选操作):
$arr = ['manual', 'shipping_except', 'done', 'progress'];
$partner_ids = $models->execute_kw($db, $uid, $password, 'sale.order', 'search', [
    [
        ['state', 'in', $arr],
        ['date_order', '=', '2018-04-11']
    ]
]);
// 可选:指定读取字段,确保包含送货地址关联字段
$saledata = $models->execute_kw($db, $uid, $password, 'sale.order', 'read', [
    $partner_ids,
    ['name', 'partner_shipping_id', /* 其他你需要的字段 */]
]);
  1. 获取送货地址对应的伙伴信息:把partner_invoice_id替换成partner_shipping_id即可:
// 假设$saledata是单个订单记录,批量处理的话遍历数组就行
$sales = $saledata[0];
$userspecificdata = $models->execute_kw($db, $uid, $password, 'res.partner', 'read', [
    [$sales['partner_shipping_id'][0]]
]);
  1. 提取地址信息:这部分代码基本不用改,注意原代码里的country字段应该是country_id(OpenERP里国家字段的正确标识):
$shipping_address = [
    "street1" => $userspecificdata[0]["street"],
    "city" => $userspecificdata[0]["city"],
    "state" => $userspecificdata[0]["state_id"][1],
    "zip" => $userspecificdata[0]["zip"],
    "country" => $userspecificdata[0]["country_id"][1],
    "phone" => $userspecificdata[0]["phone"],
];

额外提示

  • 如果销售订单没有单独设置送货地址,partner_shipping_id会默认和客户主记录(partner_id)一致,此时拿到的就是客户档案里的默认送货地址。
  • 调用read方法时建议明确指定需要的字段,避免读取冗余数据,提升接口调用效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:51