您当前的位置: 首页 > 

寒冰屋

暂无认证

  • 3浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Odoo10参考系列--QWeb报表

寒冰屋 发布时间:2018-04-16 13:20:38 ,浏览量:3

报表是写在HTML / QWeb中,像Odoo中的所有普通视图。你可以使用普通QWeb 流程控制工具。PDF的渲染是通过wkhtmltopdf执行的。

如果要在某个模型上创建报表,则需要定义该报表和它将使用的报表模板。如果您愿意,还可以为该报表指定特定的报表格式。最后,如果您需要访问更多的模型,您可以定义一个自定义报表类,让您访问模板中的更多模型和记录

报表

每个报表都必须通过报告操作(在odoo10参考系列--操作(Actions)中有介绍)声明。

为简单起见,可以使用快捷方式元素来定义报表,而不必手动设置操作及其环境。 可以具有以下属性:

id

生成的记录的外部id

name (强制性的)

仅仅当查询一些列表中某个列表记录时作为报表的一个记忆/描述是有用的

model (强制性的)

你报表将从事的模型

report_type (强制性的)

要么是针对PDF报表的 qweb-pdf 要不是针对HTML的 qweb-html 

report_name

报表的名称(它将是PDF输出的名称)

groups

Many2many 字段到允许查看/使用当前报表的组中

attachment_use

如果设置为True,则报告将使用attachment表达式生成的名称作为记录的附件存储;如果您只需要生成一次报告(例如出于法律原因),您可以使用它

attachment

定义报表名称的Python表达式;记录作为变量object是可访问的

paperformat

你希望使用的报表格式的外部id(如果不指定默认为公司的报表格式)

例子:


报表模版 最小可行的模板

最小的模板看起来像:


    
        
            
                
Report title

This object's name is

调用external_layout 将在报表中添加默认页眉和页脚。PDF正文将是

内部的内容。模版的 id 必须是报表声明中指定的名称; 例如上面报表中的 account.report_invoice 。由于这是一个QWeb模板,你可以访问所有被模版接收的docs对象的字段。

报表中有一些特定的变量可以访问,主要是:

docs

当前报表的记录

doc_ids

docs 记录的id列表

doc_model

docs 记录模型

time

来自Python标准库的time参考

user

用户打印报表的res.user记录

res_company

当前user的公司记录

如果您希望访问模板中的其他记录/模型,则需要一个自定义报表

可翻译的模版

如果您希望将报表转换为合作伙伴的语言,则需要定义两个模板:

  • 主报表模板
  • 翻译的文件

然后你可以从你的主模版中调用翻译文件,这个模版带有一个设置语言代码(例如fr 或 en_US)或者记录字段的属性t-lang。你也将需要重新浏览与适当的上下文相关的记录,如果你使用的是可译的字段(如国家名、销售条件等)

警告

如果你的报告模板不使用翻译的记录字段,再浏览其他语言记录是不必要的,会影响性能

例如,让我们看看销售模块的销售订单报表:



    
        
            
        
    




    
    
    
        
Invoice and shipping address: Invoice address:

The主模版调用翻译使用 doc.partner_id.lang作为t-lang 参数的模版,那么它将用合作伙伴的原因渲染。这样,每个销售订单将以相应客户的语言打印。 如果您只想翻译文档的主体,但将页眉和页脚保留在默认的语言中,可以用以下方式调用报表的外部布局:


提示

请注意,这只有在调用外部模版是有效的,你将不能通过设置一个在xml节点上的t-lang属性而不是 t-call属性去翻译文件的一部分。 如果你要翻译模板的一部分,你可以使用这个模版部分来创建一个外部模版并从使用t-lang属性的主模版中调用它。

条码

条码是由一个控制器返回的图片,可以很容易地嵌入到QWeb语法报告:


可以将更多参数作为查询字符串传递


有用的备注
  • Twitter Bootstrap和FontAwesome类可以用在你的报告模板
  • 本地的CSS可以直接放在模板中
  • 通过继承模板并插入CSS,可以在主报表布局中插入全局CSS:

    
      
        
          .example-css-class {
            background-color: red;
          }
        
      
    
    
  • 如果您的PDF报告缺少样式,请检查这些说明
报表格式

报表格式是report.paperformat的记录并包含以下属性:

name (强制性的)

仅仅当查询一些列表中某个列表记录时作为报表的一个记忆/描述是有用的

description

对格式的小描述

format

要么是一个预定义的格式(A0 to A9, B0 to B10, Legal, Letter, Tabloid,...) 要么是 custom;默认是A4格式。如果定义页面尺寸,则不能使用非自定义格式

dpi

输出的DPI;默认是90

margin_topmargin_bottommargin_leftmargin_right

毫米的边距尺寸

page_heightpage_width

毫米的页面尺寸

orientation

竖向

header_line

布尔值以显示标题行

header_spacing

毫米的头间距

例子:


    French Bank Check
    
    custom
    80
    175
    Portrait
    3
    3
    3
    3
    
    3
    80

定制报表

报表模型有一个默认的get_html 函数用以查询一个名叫report.module.report_name的模版。如果它存在,它将使用它去调用QWeb引擎;否则将使用一个通用的函数。如果您希望通过在模板(例如,像其他模型的记录)中包含更多的内容来定制报表,你可以定义这个模型,重写函数 render_html 并在docargs字典中传递对象:

from odoo import api, models

class ParticularReport(models.AbstractModel):
    _name = 'report.module.report_name'
    @api.model
    def render_html(self, docids, data=None):
        report_obj = self.env['report']
        report = report_obj._get_report_from_name('module.report_name')
        docargs = {
            'doc_ids': docids,
            'doc_model': report.model,
            'docs': self,
        }
        return report_obj.render('module.report_name', docargs)
报表是网页

报表由报表模块动态生成,可以通过URL直接访问:

例如, 您可以通过HTML方式访问销售订单报报表: http:///report/html/sale.report_saleorder/38

或者你可以访问pdf版本:http:///report/pdf/sale.report_saleorder/38

 

ps:有翻译不当之处,欢迎留言指正。

原文地址:https://www.odoo.com/documentation/10.0/reference/reports.html

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0454s