【问题标题】:precision decimal精度小数
【发布时间】:2021-01-21 13:31:05
【问题描述】:

你好 我在 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:

请帮忙

【问题讨论】:

    标签: odoo odoo-8


    【解决方案1】:

    您可以使用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)  
    

    编辑:

    您可以在表达式中添加条件以在值等于 0 时显示空字符串。

    [[ k.debit and formatLang(k.debit, digits=2, grouping=True) or '' ]]
    

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

    【讨论】:

    • 感谢您的回复。但我不明白我把第二个代码“解析器”放在哪里
    • 初始化时可以转换金额dicts
    • 不!您可以逐步详细说明我是新人,谢谢
    • 您可以使用formatLang 格式化RML 文件中的金额。循环_get_etat 结果并使用formatLang 函数格式化金额,例如&lt;para style="P12"&gt;[[ formatLang(d['tht']) ]]&lt;/para&gt;
    • 所以我必须逐行执行RML文件,因为有很多不同的数量
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2013-07-17
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多