2017-05-25 14 views
0

関数フィールドを取得して割引、税金、合計を1つのリストに計算する際に問題があります。openerpで関数フィールドとdbフィールドを計算する方法

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に何イムに表示されます:私はここにopenerp 7で働いています

は私のコードです私は間違っている?

答えて

1

このコードは2通りの方法で管理する必要があります。 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 フィールドごとに完全なデータが得られます。

システムがtotalになるときのコードの中で、total1システムの計算は、その値がまだ設定されていないので、常に '0'(ゼロ)になります。

2)すべての機能を異なるものにし、それぞれを呼び出すための適切な優先順位を付けます。

それはそれです。

+0

ありがとうございました。 – user3364356

関連する問題