如何计算openerp中的函数字段和数据库字段

时间:2017-05-25 11:00:16

标签: python function openerp openerp-7

我在获取功能字段以在一个列表中计算折扣,税金和总额时遇到问题。

我正在使用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.我做错了什么?

1 个答案:

答案 0 :(得分: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 您将获得每个领域的完美数据。

在系统即将获得total时代码内部,而total1系统的计算总是得到'0'(零),因为它的值仍未设置。

2)使所有功能不同,并给予适当的优先权来调用它们。

多数民众赞成。