精度小数点

问题描述

你好 我在 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,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',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,form['fiscalyear_id'])
        period_ids=self.pool.get('account.period').search(self.cr,[('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,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'],'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,'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'],'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,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:

请帮忙

解决方法

您可以使用 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,grouping=True) or '' ]]

您可以在 OCA account_financial_report 模块中找到更多示例。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...