2013-04-01 18 views
0

我在一个类中有两个字段,在第三个字段中,我需要先前声明的两个字段的乘法结果。OpenErp中两个字段的简单乘法

例如:

_columns = { 
      'Item' : fields.integer('Items'), 
      'Fecha': fields.date('Fecha del Documento', required=True, select=True), 
      'Codigo Arancelario' : fields.integer('Codigo Arancelario'), 
      'Descripcion Arancelaria' : fields.char('Descripcion Arancelaria', size=42, required = True, translate = True), 
      'Especificaciones Tecnicas' : fields.char('Especificaciones Tecnicas', size=60, required = True, translate = True), 
      'Cantidad' : fields.float('Cantidad'), 'Unidad de Medida': fields.many2one('product.uom', 'Unidad de Medida'), 
      'Precio Unitario Declarado' : fields.float('Precio Unitario Declarado'), 'Moneda' : fields.many2one('res.currency', 'Moneda'), 
      'Valor En Divisas' : Result of the multiplication of 'Precio Unitario Declarado' * 'Cantidad', 
      'notas' : fields.text('Notas'), 
      } 

应该使用的函数字段用于这种简单的计算?

有没有更简单的方法来实现这个目标?

回答

5

功能字段将是做这种操作的好选择。以下是使用功能字段乘以两个字段的示例代码。

def multi_a_b(self, cr, uid, ids, name, arg, context=None): 
    res = {} 
    for record in self.browse(cr, uid, ids,context): 
     res[record.id] = record.field_a * record.field_b 
    return res 

_columns = { 
    'field_a': fields.integer('A'), 
    'field_b': fields.integer('B'), 
    'field_c': fields.function(multi_a_b, type='integer', 'C'), 
} 
+0

我来试试,非常感谢你 – NeoVe

0

我认为这种类型的计算功能领域是可以的。

或者可以通过另一种方式放一个按钮,在按钮上单击乘以这两个值。

1

您需要对这些答案进行组合。

首先将c4定义为user1576199答案中指定的功能字段,然后根据Atul的答案中的定义创建on_change函数;

def onchange_value(self, cr, uid, ids, c1 = 0.0, c2 = 0.0, c3 = 0.0, context = None): 
    return {'value': {'c4': c1 + c2 + c3}} 

但是,把on_change的值C1到C3,C4没有,像这样......

<field name="c1" on_change="onchange_value(c1, c2, c3, context) /> 
<field name="c2" on_change="onchange_value(c1, c2, c3, context)/> 
<field name="c3" on_change="onchange_value(c1, c2, c3, context)/> 
<field name="c4" /> 

C4是一个功能性领域,但你仍然可以返回它的on_change值子句中对于其他字段,屏幕上的值将被刷新,但不会将其存储在数据库中,除非您向c4字段定义添加store = True。

如果用户更改c1,c2或c3字段中的任何一个,将调用on_change方法,并且总数将在显示屏上重新计算和刷新。

+0

哇,真棒!另一种方式来实现它,新年快乐,谢谢你! – NeoVe

1

以下是可能的解决方案

from osv import osv, fields 

def multi_price_qty(self, cr, uid, ids, name, arg, context=None): 
    res = {} 
    for product in self.browse(cr, uid, ids,context): 
     res[product.id] = product.price * product.qty 
    return res 

class abs_product(osv.Model): 
    _name = "abs.product" 
    _columns = { 
    'code': fields.char('Code', size=32), 
    'description': fields.char('Description', size=64), 
    'sizeunit': fields.char('Size /Unit', size=32), 
    'qty': fields.integer('Quantity', size=32), 
    'price': fields.integer('Price'), 
    'pullout': fields.char('Pull-Out', size=32), 
    'return': fields.char('Return', size=32), 
    'offtake': fields.char('Offtake', size=32), 
    'weeksales': fields.char('Weekly Sales', size=32), 
    'date': fields.date('Date'), 
    'totalprice': fields.function(multi_price_qty, type='integer', 'Total Price'), 
    } 
abs_product() 
+0

嗨,高手,我得到了错误上面的代码这个谢谢你的问题 – user3396632