2017-05-25 100 views
0

我在获取函数字段以计算折扣,税收和总计在一个列表中遇到问题。如何计算openerp中的函数字段和db字段

我与OpenERP的7这里工作是我的代码:

def _total(self,cr,uid,ids,field_names,args,context=None): 
    res = {} 
    for record in self.browse(cr,uid,ids,context=context): 
     res[record.id]={ 
         'total': record.cantidad * record.precioe, 
         'total1': record.total * record.descuento/100, 
         'total2': record.total - record.total1, 
         'iva': record.total2 * 16/100, 
         'gran_total': record.iva + record.total2, 
         } 
    return res 

'cantidad': fields.integer('Cantidad', multi='calc'), 
    'precioe': fields.float('Costo', multi='calc'), 
    #'precio_equipo': fields.related('equipo', 'precio', string='Precio', type='float', readonly=True), 
    'total': fields.function(_total, type='float', method=True, string='Total', store=True, multi='calc'), 
    'descuento': fields.integer('Descuento', multi='calc'), 
    'total1': fields.function(_total, type='float', method=True, string='Total descuento', store=True, multi='calc'), 
    'total2': fields.function(_total, type='float', method=True, string='subtotal', store=True, multi='calc'), 
    'iva': fields.function(_total, type='float', method=True, string='IVA', store=True, multi='calc'), 
    'gran_total': fields.function(_total, type='float', method=True, string='Total', store=True, multi='calc'), 
} 

,我只能算总分第一名,其他值出现在0什么IM我做错了?

回答

1

您必须使用两种方式来管理此代码。 1)使你的代码不被任何函数字段用来计算任何其他功能字段,如下所示。

def _total(self,cr,uid,ids,field_names,args,context=None): res = {} for record in self.browse(cr,uid,ids,context=context): total = record.cantidad * record.precioe total1 = total * record.descuento/100 total2 = total - record.total1 iva = total2 * 16/100 gran_total = iva + total2 res[record.id]={ 'total':total, 'total1': total1, 'total2': total2, 'iva': iva, 'gran_total': gran_total, } return res 您将获得每个字段的完美数据。

内,您的代码时,系统会得到totaltotal1系统的计算总是得到“0”,因为它的价值还是不能设置(零)。

2)使所有功能不同,并给予相应的优先级来调用它们中的每一个。

就是这样。

+0

谢谢你,那工作,你很棒 – user3364356