2017-05-25 94 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