【问题标题】:Odoo creating an invoice with Web Service API (PHP)Odoo 使用 Web 服务 API (PHP) 创建发票
【发布时间】:2018-08-01 07:37:24
【问题描述】:

我正在尝试使用基于 XML-RPC 的 Odoo Web 服务 API(通过 PHP)在 Odoo 上创建发票,使用 official API documentation 中的代码示例。我已经使用documentation 中提供的代码成功创建了一个客户:

$id = $models->execute_kw($db, $uid, $password,
    'res.partner', 'create',
    array(array('name'=>"New Partner"))
);

但我无法使用提供的代码示例创建发票:

$client = $models->execute_kw(
    $db, $uid, $password,
    'res.partner', 'search_read',
    array(array(array('customer', '=', true))),
    array(
        'limit' => 1,
        'fields' => array(
            'property_account_receivable_id',
            'property_payment_term_id',
            'property_account_position_id'
        )))[0];
$invoice_id = $models->execute_kw(
    $db, $uid, $password,
    'account.invoice', 'create', array(array(
        'partner_id' => $client['id'],
        'account_id' => $client['property_account_receivable_id'][0],
        'invoice_line_ids' => array(array(0, false, array('name' => "AAA")))
    )));

当我运行代码时,我得到一个错误响应:

array(2) {
  ["faultCode"]=>
  int(1)
  ["faultString"]=>
  string(989) "Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/odoo/service/wsgi_server.py", line 56, in xmlrpc_return
    result = odoo.http.dispatch_rpc(service, method, params)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 118, in dispatch_rpc
    result = dispatch(method, params)
  File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 38, in dispatch
    res = fn(db, uid, *params)
  File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 157, in execute_kw
    return execute(db, uid, obj, method, *args, **kw or {})
  File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 143, in wrapper
    raise ValidationError(msg)
ValidationError: ('The operation cannot be completed, probably due to the following:\n- deletion: you may be trying to delete a record while other records still reference it\n- creation/update: a mandatory field is not correctly set\n\n[object with reference: price_unit - price.unit]', None)
"
}

如果我将此行更改为空数组,它会创建发票:

'invoice_line_ids' => array(array(0, false, array('name' => "AAA")))

但是我不知道如何添加发票行。

【问题讨论】:

    标签: php python odoo odoo-10


    【解决方案1】:

    对于发票行(account.invoice.line),有许多必填字段,例如名称(描述)、数量等。在您的示例中,您只传递了名称。

    尝试传递所有必填字段。

    【讨论】:

    • 能否请您提供必填字段?或指向我可以找到它们的文档的链接?谢谢!
    • 简单的方法是在 account.invoice.line 的 create 方法中打印 vals,然后创建一个包含所有需要填写的字段的示例发票。
    • 我认为缺少的字段可能是 account_id(如果您没有为客户发票日记帐指定默认借记帐户和贷记帐户,则必须将其与所有发票行一起输入)。
    • 我指定了 account_id,如您在 account.invoice 创建中所见。我还检查了它,它包含一个 ID。
    • 发票行中有 account_id 字段,发票中没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多