2012-05-15 21 views
1

兩個功能域的和/差我在OpenERP的兩個功能域,它們不是存儲在數據庫中。實際上,他們在db中沒有列。它們是從其他表格中隨時計算出來的。我希望能夠計算出他們的總和或差異。我在這裏看到了一些東西(calculate sum of fields),但我認爲它去db獲取數據。請如何才能做到這一點。將數據存儲在數據庫中並從中提取數據是最好的選擇嗎?如何計算的OpenERP

回答

4

它們可替代的解決方案一樣,限定第三計算字段,並使用「多=‘’」,並且還計算差值並且或者可以保存在分貝該第三字段,或可以保持它的動態如果需要購買外部使用。

優勢在這裏將計算後的2場店DIFF第三場。

示例代碼片段是如下:

class code_play(osv.osv): 
_name = 'code.play' 

def _calc_function(self, cr, uid, ids, fields_list, args, context=None): 
    vals = {} 
    for id in ids: 
     fields = {} 
     for field in fields_list: 
      fields[field] = 10 
     fields["calc3"] = fields['calc1'] + fields['calc2'] 
     vals[id] = fields 
    return vals  

_columns = { 
    'name': fields.char('Name', required=True, size=50), 
    'calc1': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
    'calc2': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
    'calc3': fields.function(_calc_function, type='integer', store=False, multi="compute_person_data"), 
} 

正如我解釋了再次與現場多將計算,但相同的功能,因此返回類型爲

# when called with ``ids=[1,2,3]``, ``compute_person_data`` could return: 
    { 
     1: {'calc1': 10, 'calc2': 10, 'calc3': 20}, 
     2: {'calc1': 10, 'calc2': 10, 'calc3': 20}, 
     3: {'calc1': 10, 'calc2': 10, 'calc3': 20} 
    } 

問候

4

你可以將函數字段與multi關鍵字結合起來並在一個函數內計算它們,然後添加第三個函數字段將很容易。

class your_class(osv.osv): 
    _inherit = 'whatever' 

    def calc_fields(self, cr, uid, ids, fields, arg, context=None): 
     res = {} 
     for record in self.browse(cr, uid, ids, context=context): 
      res[record.id] = { 
       'field1': 5, # Calculate the field values here 
       'field2': 3, 
       'field3': 5+3, 
      } 
     return res 

    _columns = { 
     'field1': fields.function(calc_fields, multi='my_combination', string='Field 1'), 
     'field2': fields.function(calc_fields, multi='my_combination', string='Field 2'), 
     'field3': fields.function(calc_fields, multi='my_combination', string='Field 1 + Field 2'), 
    } 
your_class() 

請記住這個例子被簡化和缺少功能欄「類型」的關鍵字,只是爲了保持這個例子乾淨點「多」關鍵字的重要性