2016-03-01 1 views
0

Je crée un champ dans la GUI Odoo a une méthode avec le 'calcul'. Mais je ne peux pas l'avoir.Comment définir un calcul dans un champ de l'interface graphique Odoo?

J'ai un champ créé avec l'attribut de calcul dans le module sale.order.line of sale.py.

niu = fields.Char(string="NIU", compute="_niu_validation", readonly=True, store=True) 

@api.depends('product_id.product_tmpl_id.type') 
def _niu_validation(self): 
    for rec in self: 
     if rec.product_id.product_tmpl_id.type == 'product' and not rec.niu: 
       rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line') 

Cela fonctionne parfaitement, mais ce même vouloir faire dans l'interface graphique Odoo.

Ci-dessous l'image est affichée: http://es.zimagez.com/zimage/computefield.php

Mais il me montre l'erreur suivante:

ValueError: forbidden opcode(s) in u"for rec in self:\n  if rec.product_id.product_tmpl_id.type == 'product' and not rec.niu:\n \t rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line')" 

Peut-être il y a une erreur de syntaxe, mais je ne sais pas comment définir une méthode pour champ dans l'interface graphique Odoo.

Toute aide, conseil, suggestion sont les bienvenus. Si quelqu'un pouvait m'aider, je serais très reconnaissant.

+1

Avez-vous essayé d'éviter la boucle for? Peut-être essayez simplement de l'enlever et de l'utiliser seulement si la condition. –

+0

Maintenant, j'obtiens l'erreur suivante: ValueError: "nom 'rec' n'est pas défini" lors de l'évaluation – beriliox

+0

Quand j'ai dit d'éviter la boucle, bien sûr, vous avez besoin d'adapter le reste du code! –

Répondre

1

Je ne travaille pas avec v9, donc je pense que vous avez juste besoin de faire un peu d'essais et d'erreurs.

Essayez avec ceci:

if self.product_id.product_tmpl_id.type == 'product' and not self.niu: 
      self.niu = self.env['ir.sequence'].next_by_code('sale.order.line') 

Si cela ne fonctionne pas, essayez peut-être avec:

if self.product_id.product_tmpl_id.type == 'product' and not self.niu: 
      return self.env['ir.sequence'].next_by_code('sale.order.line') 
+0

Merci, mais j'ai la même erreur. – beriliox

+1

ça ne peut pas être pareil: rec n'est plus dans mon code. Quelle valeur n'accepte-t-elle pas? –

+0

Le premier code affiche l'erreur suivante: ValueError: opcode (s) interdit (s) dans u "if self.product_id.product_tmpl_id.type == 'product' et non self.niu: \ n self.niu = self.env [' ir.sequence ']. next_by_code (' sale.order.line ') " Et le second code affiche l'erreur suivante: SyntaxError:' return 'outside function – beriliox

0

Dears,

J'ai fait face à un problème similaire, vous pouvez essayer avec

if self.product_id.product_tmpl_id.type == 'product' and not self.niu: self.['niu'] = self.env['ir.sequence'].next_by_code('sale.order.line')

1

La solution est pour attribuer la valeur avec une affectation de type dictionnaire au lieu du soi. annotation, par exemple:

self.x_hora_estimada_llegada = self.date_order 

jetteront

forbidden opcode(s) in u....

Mais au lieu que vous utilisez l'affectation comme dictionnaire et votre domaine sera très bien !:

for record in self: 
    record['x_hora_estimada_llegada'] = self.date_order