首页 > 其他分享 >深入解析OpenERP的报表开发机制

深入解析OpenERP的报表开发机制

时间:2023-08-06 12:56:20浏览次数:47  
标签:报表 OpenERP sxw report 解析 order rml name

1) OpenERP报表的基本运行机制
    OpenERP报表的一般定义语法是:
      <report id="c2c_demo_report_x" string="C2C Demo Report" model="hr.holidays"
          name="sandbox_c2c_reporting_tools" auto="False" header="False"/>

这个定义的含义是,在对象hr.holidays上增加报表操作(model="hr.holidays"),该报表操作的显示字符是C2C Demo Report(string="C2C Demo Report"),当用户点击该操作字符(C2C Demo Report),系统调用名为sandbox_c2c_reporting_tools(name="sandbox_c2c_reporting_tools")的Services,该Services返回报表文件(PDF或其他格式文件)。
    因此,理解OpenERP报表机制的核心是,理解报表Services机制。

2) OpenERP的报表Service
    OpenERP的报表Service的基本接口定义在文件:openerp-server-6.0.3\bin\report\interface.py,期定义如下:
        report_int(netsvc.Service)
          init(self, name, audience='*')
          create(self, cr, uid, ids, datas, context=None)

    init方法中最重要的参数是name,该参数是Service Name,其格式是"report.xxx", xxx 必须和报表定义时候的(name="sandbox_c2c_reporting_tools")一致,系统是通过该名字找到该Service。
    create方法中,最重要的参数是ids,该参数是报表操作所在的画面上,选定的对象的id列表。通常,系统会为ids中的每一个对象出一个报表。datas参数通常用于Wizard的情况,即先弹出Wizard画面,用户输入一些数据,点击按钮,系统再输出报表文件。在这种情况,datas参数里保存着用户在Wizard画面上输入的数据。
    显然,系统的内部动作是,用户点击报表动作,系统根据name="sandbox_c2c_reporting_tools"找到相应Service,调用Service的Create方法,返回报表文件。Create方法的返回值格式是:(report_doc,mimetype)。例如,如果返回pdf报表,返回值是(pdf_doc,'pdf')。

3) RML报表
    如果直接继承接口report_int,编写create方法生成pdf文档,代码复杂,工作量大。系统提供了RML格式报表,用于简化pdf报表开发。其基本原理是,开发RML格式文档,系统的Create方法读取rml文件,渲染成pdf文档,输出。相关接口如下:
  report_rml(report_int)
    init(self, name, table, tmpl, xsl)
    create(self, cr, uid, ids, datas, context)

  report_sxw(report_rml)
    init(self, name, table, rml=False, parser=rml_parse, header='external', store=False)
    create(self, cr, uid, ids, data, context=None)

    这两个派生Class中,create方法的参数没有变化,init方法增加了一些参数,说明如下:
    table: 报表关联的数据对象,渲染rml时候需要调用该对象取得数据。
    rml:RML文件路径及名称,系统需要读取该文件渲染成PDF报表。
    parser:渲染器,系统的实际做法是,在create方法中调用渲染器的有关方法,将rml渲染成pdf。用户可以开发自己的渲染器,用于将rml渲染成其他格式,如html、txt等,实际上,系统已经提供了html、txt等的渲染器。

    因此,开发rml格式的报表时候,通常只需要开发自己的渲染器(parser),不需要开发report_int。

 

 

===========================================================

 

 

在模块中添加一笔 report 记录
<?xml version="1.0"?>
<terp>
<data>
<report id="sale_category_print"
string="Sales Orders By Categories"
model="sale.order"
name="sale_category.print"
rml="sale_category/report/sale_category_report.rml"
menu="True"
auto="False"/>
</data>
</terp>

id :
string:
model:报表渲染对象
rml  rml文件路径,路径以本模块的路径开始
menu  True or False  是否在客户端上显示菜单, False 一般用语Wizard 向导是,不需要菜单,
auto  是否利用缺省方法分析 .RML文件
name 报表名称    (report_sxw.report_sxw 中的 第一个参数 去掉 ‘report.’) 

==================
sxw2rml  文件
open用的使用的报表渲染文件,.rml。可由 openoffice 的.sxw 文件转换而来
具体方法

手动转换方法 
要求文件在同一个目录  openerp_sxw2rml.py  ,  normalized_oo2rml.xsl  , name.sxw
在命令行中  : python openerp_sxw2rml.py  order.sxw  > order.rml


=================Server PDF Output
报表分析器
from report import report_sxw
import time
class order(report_sxw.rml_parse):
                def init(self, cr, uid, name, context):
                                super(order, self).init(cr, uid, name, context)
                                self.localcontext.update({
                                ’time’: time,
                })
report_sxw.report_sxw(’report.sale.order’, ’sale.order’, ’addons/sale/report/order.rml’, parser=order, header=True)

report_sxw.report_sxw参数分别为

1:报表名称  ('report.'  +  ' xml中定义的name' )
2:报表使用的对象
3:rml文件路径 addons/
4:报表提取方法 , 即为 报表分析器的class名            ( 缺省值  parser=order)
5: 是否增加公司表头

###############sxw模板的构造方法
数据用[[  ]] 中的python代码填充

可以使用的对象
object  报表使用的对象
data    来自 wizard
time    time模块
user    res.user

方法
setlang('fr')
repeatIn(list,varname) 
setTag
removeParentNode

标签:报表,OpenERP,sxw,report,解析,order,rml,name
From: https://www.cnblogs.com/pythonClub/p/17609312.html

相关文章

  • 深入理解OpenERP的工作流(Workflow)
    一、工作流定义:<?xmlversion="1.0"?> <terp><data>  <recordmodel="workflow"id=workflow_id>  <fieldname="name">workflow.name</field>  <fieldname="osv">resource.model</f......
  • OpenERP中生产领料、投料、损耗、退料、成品入库的操作方法
    1)OpenERP中生产订单MO的运行原理1.1)计算物料需求。在OpenERP中,MO确认时候(跑MRP的话,系统通常会自动确认),系统基于MO上的BoM表,计算需要的原料,并自动生成一张领料单(从MO上的源库位领料到MO上的Routing上定义的库位,通常是车间)。默认情况下(如果不装stock_no_autopicking模块的话),该领料......
  • OpenERP分析会计(Analytic Account)应用案例
    AnalyticAccount,分析会计,也叫管理会计、成本会计。分析会计有何应用呢?试看两个例子:1)佣金计算,对于每一张销售订单(SO,SalesOrder),业务员提成销售额的1%,关系人返点(回扣)5%。如何配置OpenERP系统以实现本业务需求呢?2)制造费用分配,我们知道生产成本核算中,先要按标准费率计算加工费用,......
  • Inferllm源码解析
    Inferllm源码解析文件结构application:放置几个不同模型的参数配置和后处理include:包含抽象model类的头文件src/core:核心组件,包括tensor、算法等基础算子的抽象和KV文件系统的实现src/graph:包含了几种LLM模型的具体实现src/kern:包含了不同硬件下的算子实现src:......
  • 如何快速对比两张Excel报表
    背景最近由于工作原因,要切换系统,新老系统都会产生excel报表,上线前需要验证新老系统产生的报表数据的一致性,作为测试的一部分。理论上,是要求新老系统新生成的报表要一模一样,要是不一致的地方,也需要标注出合理的解释。本文地址:https://www.cnblogs.com/hchengmx/p/17609130.html......
  • Spring源码之XML文件中Bean标签的解析1
    读取XML文件,创建对象xml文件里包含Bean的信息,为了避免多次IO,需要一次性读取xml文件中所有bean信息,加入到Spring工厂。读取配置文件newClassPathResource("applicationContext.xml")ClassPathResource是Spring封装的一个类型;Resource接口:可以读取相关资源文件的内容获得......
  • rtems解析(1)
    目录概述概述多处理器系统实时执行器(RTEMS)是一个多线程、单地址空间、实时操作系统,没有内核空间/用户空间分隔。它能够在SMP配置中操作,提供最先进的功能集。RTEMS生态系统是RTEMS项目提供的工具、包、代码、文档和在线内容的集合。生态系统提供了一种开发、维护和使用RTEMS......
  • 正向解析
    一.各种资源记录区域解析库:由众多资源记录RR(ResourceRecord)组成name[TTL]INrr_typevalue 记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX SOA:StartOfAuthority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说......
  • 安装 配置 正向 解析 DNS方法
    安装配置正向解析DNS方法1,安装dhcp[root@localhost~]#yuminstallbind*-y2,关闭防火墙和selinux[root@localhost~]#systemctlstopfirewalld.service关闭防火墙[root@localhost~]#setenforce0关闭selinux3,查看bind文件列表[root@localhost~]#rpm-qlbind......
  • CleanMyMac真的有必要买吗 2023年最新CleanMyMac和腾讯柠檬详细解析
    在如今的电脑使用过程中,保持电脑干净整洁是一项重要的任务。而随着Mac电脑越来越受欢迎,Mac电脑清理软件也愈发流行。在众多的Mac电脑清理软件中,CleanMyMac是一款备受好评的软件。但是,很多人还在犹豫CleanMyMac有必要买吗?同时,也有人想知道CleanMyMac和腾讯柠檬哪个好。接下来,我们将......