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

如何将采购订单行的Many2one字段传递至会计凭证行

问题分析与解决思路

你当前的方案有两个核心错误,导致同步失效:

1. 重写了错误模型的方法

_prepare_account_move_line 方法的定义主体是 purchase.order.line,而非 account.move.line。你在 account.move.line 里重写这个方法,根本不会被采购订单生成凭证的流程调用。

2. 字段引用逻辑错误

你写的 self.order_id.task_id.id 是去取采购订单(purchase.order)的 task_id,但你定义的 task_id 是在采购订单行(purchase.order.line)上的,应该直接引用当前行的 task_id。


修正后的代码

第一步:修改采购订单行模型,添加字段并重写正确的方法

class PurchaseLine(models.Model):
    _inherit = 'purchase.order.line'

    task_id = fields.Many2one('project.task', string='Rubriques', store=True)

    def _prepare_account_move_line(self, move=False):
        # 调用父类方法获取基础凭证行数据
        res = super()._prepare_account_move_line(move)
        # 将当前采购订单行的task_id同步到凭证行参数中
        if self.task_id:
            res['task_id'] = self.task_id.id
        return res

第二步:仅在会计凭证行模型添加字段即可

class AccountMoveLine(models.Model):
    _inherit = "account.move.line"

    task_id = fields.Many2one('project.task', string='Rubriques', store=True)

额外检查点

  • 确保你的模块在 __manifest__.py 中声明了对 purchase、account、project 模块的依赖
  • 升级模块后,重新生成采购订单的会计凭证(已存在的旧凭证不会自动更新,需要删除后重新生成)
  • 确认采购订单行的 task_id 字段已经正确赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:56:29