2012-05-09 9 views
5

Cerco di fare qualche calcolo dei campi del mio oggetto e di memorizzarli in un nuovo campo. Sto iniziando con un semplice esempio di utilizzo di fileds.function, ma quando provo ad accedere a openerp, il sistema genera un errore che l'utente o la password non sono corretti.OpenERP: Semplice utilizzo dei campi. Function

nella mia classe ho aggiungere il campo:

 'a' : fields.integer('A'), 
     'b' : fields.integer('B'), 
     'total' : fields.function(fnct, method=True, string='Tot',type='integer'), 

definizione della funzione:

 def fnct(self, cr, uid, ids, fields, arg, context): 

      x = {} 

      for record in self.browse(cr, uid, ids): 

       x[record.id] = record.a + record.b 

      return x 

Ti prego, qualcuno mi può aiutare? grazie

risposta

4

Nessuna connessione di funzione registrata con Login OpenERP.

Quindi è possibile che si stiano fornendo ID utente o password errati.

La funzione principale di Campo Funzione è:

Auto calcolare il valore del campo sulla base di altri campi.

cioè Totale = campo1 + campo2 + campo3

Esempio: 'totale': fields.function (get_total, metodo = True, stringa = 'Total', tipo = 'integer'),

Come definire funzione:

def get_total(self, cr, uid, ids, fields, arg, context): 

    x={} 

    for record in self.browse(cr, uid, ids): 

     x[record.id]= record.field1 + record.field2 + record.field3 

    return x 
+0

Grazie per la vostra Avadhesh help.But Sono sicuro che l'utente e il passaggio sono corretti, perché quando io commento il codice con la funzione, posso login.I cercato di calcolare il valore del campo sulla base di altri campi come hai detto, ancora non funziona! –

+0

Quale errore si sta ottenendo? – Avadhesh

+0

quando accedo ricevo "Mauvais nom d'utilisateur ou mot de passe" ma sono sicuro che siano corretti !! ecco la mia nuova funzione 'def fnct (self, cr, uid, ids, fields, arg, context): x = {} per record in self.browse (cr, uid, ids): x [record.id ] = record.a + record.b \t return x ' –

2

per risolvere questo problema, controllo per un po 'intendation e anche la definizione della mia funzione deve essere prima della dichiarazione di campi.

+0

Congratulazioni per la correzione! Quando sei in grado, assicurati di contrassegnare la tua risposta come "accettata" in modo che altri possano imparare dalla tua soluzione. Acclamazioni ~ –

0
def fnct(self, cr, uid, ids, fields, arg, context): 

    x = {} 

    for record in self.browse(cr, uid, ids): 

    x[record.id] = record.a - record.b 

if x[record.id]<0: 

    raise osv.except_osv(("Warning"),("You Cant Subtract %s ")%(record.a - record.b)) 

else: 


return x 

    "a":fields.integer('A'), 
    "b":fields.integer('B'), 


"total":fields.function(fnct, method=True, string='Total',type='integer'),