你好 我在 Windows 7 上使用 odoo V8 我想在打印状态上添加小数精度,例如 20000.0 到 20,000.00。 我尝试了一切,但没有成功 附上我的代码:
## -*- coding: utf-8 -*-
import time
from openerp.report import report_sxw
from openerp.osv import osv
from openerp import pooler
import locale
class etat104(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context=None):
super(etat104, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'_get_etat': self._get_etat,
'_get_year': self._get_year,
'_cpt': self._cpt
})
def _cpt(self, ss):
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
if ss < 0.0 :
cpt = (locale.format('%.2f', ss, True))
cpt = '(' + cpt + ')'
else:
cpt = (locale.format('%.2f', ss, True))
return cpt
def _get_year(self,form):
return self.pool.get('account.fiscalyear').browse(self.cr, self.uid, form).name
def _get_etat(self,form):
nbr = 0
fiscalyear = self.pool.get('account.fiscalyear').browse(self.cr, self.uid, form['fiscalyear_id'])
period_ids=self.pool.get('account.period').search(self.cr, self.uid, [('fiscalyear_id', '=', form['fiscalyear_id'])])
if period_ids:
self.cr.execute("SELECT MIN(date_start) AS date_start, MAX(date_stop) AS date_stop FROM account_period WHERE id = ANY(%s)", (period_ids,))
dates = self.cr.dictfetchall()
else:
dates = False
if dates:
if form['tri']==False :
query = "SELECT ai.partner_id as partner, SUM(aml.credit-aml.debit) as ht FROM account_invoice ai, account_move am,account_move_line aml, account_account aa where ai.state IN ('open','paid') "\
"AND ai.date_invoice >= '%s' AND ai.date_invoice <= '%s' AND ai.move_id=aml.move_id "\
"AND ai.move_id=am.id AND aml.account_id=aa.id AND aa.code like '%s' AND aa.code not like '%s' "\
"AND ai.type like '%s' GROUP BY partner" % (dates[0]['date_start'], dates[0]['date_stop'],'70%','706%','out_%')
else:
query = "SELECT ai.partner_id as partner,p.name as nom, SUM(aml.credit-aml.debit) as ht FROM account_invoice ai, account_move am,account_move_line aml, account_account aa, res_partner p where ai.state IN ('open','paid') "\
"AND ai.date_invoice >= '%s' AND ai.date_invoice <= '%s' AND ai.move_id=aml.move_id AND p.id=ai.partner_id "\
"AND ai.move_id=am.id AND aml.account_id=aa.id AND aa.code like '%s' AND aa.code not like '%s' "\
"AND ai.type like '%s' GROUP BY partner,nom ORDER BY nom" % (dates[0]['date_start'], dates[0]['date_stop'],'70%','706%','out_%')
res=[]
self.cr.execute(query)
datas = self.cr.dictfetchall()
obj_partner=self.pool.get('res.partner')
ref = ''
tht = ttax = 0.0
for dd in datas:
if dd['ht']==0.0:
continue
query="SELECT ai.partner_id as partner, SUM(aml.credit-aml.debit) as tax FROM account_invoice ai, account_move am,account_move_line aml, account_account aa where ai.state IN ('open','paid') "\
"AND ai.date_invoice >= '%s' AND ai.date_invoice <= '%s' and ai.move_id=aml.move_id "\
"and ai.move_id=am.id and aml.account_id=aa.id and aa.code = '445700' "\
"AND ai.type like '%s' AND ai.partner_id= '%s' GROUP BY partner" % (dates[0]['date_start'], dates[0]['date_stop'],'out_%',dd['partner'])
# raise Warning(query)
self.cr.execute(query)
datas2=self.cr.dictfetchall()
tax=0.0
# raise Warning(query)
for i in datas2:
tax=i['tax']
# raise Warning(query)
ttax+=tax
partner = obj_partner.read(self.cr, self.uid, dd['partner'], [])
ref = partner['name']
if form['reference'] == True:
if partner['ref'] :
ref= '[' + partner['ref'] + '] ' + partner['name']
else:
ref = partner['name']
p1=partner['street'] and partner['street'] or ''
p2=partner['city'] and partner['city'] or ''
rue = p1 +' '+ p2
tht += dd['ht']
nbr += 1
dicts={
'nbr': nbr,
'art' : partner['ai'],
'rc' : partner['rc'],
'nif' : partner['nif'],
'name': ref[0:20],
'rue' : rue[0:27],
'ht' : dd['ht'],
'tax' : tax,
'tht': tht,
'ttax': ttax
}
res.append(dicts)
return res
###############################################################
report_sxw.report_sxw('report.l10n.dz.Etat-104', 'account.move.line', 'addons/l10n_dz_report/report/rmls/etat104.rml', parser=etat104, header=False)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
请帮忙
答案 0 :(得分:0)
您可以使用 formatLang。
示例:
RML:
formatLang(amount, digits=2, grouping=True)
解析器:
rml_parser = report_sxw.rml_parse(cr, uid, report_name, context=context)
rml_parser.formatLang(amount, dp='Account', currency_obj=currency)
在报表解析器中,您可以简单地使用:
self.formatLang(tht)
编辑:
您可以在表达式中添加一个条件,以在值等于零时显示一个空字符串。
[[ k.debit and formatLang(k.debit, digits=2, grouping=True) or '' ]]
您可以在 OCA account_financial_report 模块中找到更多示例。