我已经在模型mrp.BOM结构中创建了一个自定义字段,如下所示,以计算产品的BOM成本:-
Field Name:- x_bom_total
Field Label:- Total BOM
Field Type:- Float
ReadOnly:- True
Dependency:- bom_line_ids
从属字段名称“ bom_line_ids”是显示产品中使用的所有物料的字段。它引用一个“一对多”关系模型中的模型“ mrp.bom.line”。因此,现在在计算部分中,如何计算产品的总物料清单,如下所示:-
for record in self:
for each_object in record.bom_line_ids:
record['x_bom_total'] += record.bom_line_ids.qty * record.bom_line_ids.list_price
我正在使用odoo v11。有人有主意吗?
答案 0 :(得分:0)
您的方法正确,但是您也应该考虑子BOM。
首先,您要使用几乎没有子BOM的几乎正确的方法:
for record in self:
total = 0.0
for line in record.bom_line_ids:
total += line.product_qty * line.product_id.list_price
record['x_bom_total'] = total
现在考虑子BOM表。您显然正在使用Odoo Studio App,但我不知道您是否可以在计算字段上定义方法,但可以尝试一下。递归函数在这里会非常好:
def get_bom_total(lines)
total = 0.0
for line in lines:
if line.child_bom_id:
total += get_bom_total(line.child_bom_ids) # recursive call
else:
total += line.product_qty * line.product_id.list_price
return total
for record in self:
record['x_bom_total'] = get_bom_total(record.bom_line_ids)