guyguy a écrit :
(snip)
Bruno voici l'ensemble du code
crt_obj =
self.pool.get('production.contrat').browse(cr,uid,vals['numcontrat'])
id_contrat = (str(crt_obj)[-2:-1])
coa = crt_obj.numcontrat
sit = crt_obj.situation
type_sous = crt_obj.type_souscri
cr.execute("SELECT txtp FROM production_coassurance WHERE
numcontrat=%s AND situation=%s AND type_souscri=%s" ,[id_contrat, sit,
type_sous])
res = []
for val in cr.fetchall():
res.append(val)
vals['txtp'] = res[0][0] + vals['txtp']
et sa me donne le resultat voulu(c'est à dire après chaque
enregistrement il me donne la somme de ('txtp')
Pas exactement, non. Tu ajoutes la valeur du champ txtp *du premier enregistrement* à chaque itération. je doute très honnêtement que ce soit ce que tu veux.
Si tu a l'usage de res ailleurs dans ton code (et en partant du principe que txtp est un numérique, of course...):
cr.execute("""
SELECT txtp FROM production_coassurance
WHERE numcontrat=%s
AND situation=%s
AND type_souscri=%s
""",
(id_contrat, sit, type_sous)
)
res = cr.fetchall()
vals['txtp'] += sum(rec[0] for rec in res)
Sinon (ie: tu n'utilises pas le contenu de res ailleurs), utiliser les fonctions d'agrégation de ta base serait certainement plus payant:
cr.execute("""
SELECT sum(txtp) FROM production_coassurance
WHERE numcontrat=%s
AND situation=%s
AND type_souscri=%s
""",
(id_contrat, sit, type_sous)
)
vals['txtp'] += cr.fetchone()[0]