以模块oecnj_trainning为例,模块路径: ~/openerp/addons/oecn_training/ ,以下简写为 path/oecn/

Report生成方法:(手写) rml + reportlab生成.

实践步骤:

1. 在 path/oecn/oecn_report.xml ,
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <report
                id="report_oecn_training_lesson" # 标签 id
                name="oecn.lesson" # 标签名称, 是下文中oecn_print.py中的 "'report.oecn.lesson"中除去前面report.的部分.
                model="oecn.training.lesson" # 标签匹配的model
                rml="oecn_training/report/oecn_report.xml" # 使用到的 rml 文件
                string="打印课程" # 客户端上 显示此报表 的对应菜单的文本
                header="False" # 是否在本报表中显示公司统一的表头和表尾
                auto="False" />
    </data>
</openerp>

2. 在 path/oecn/__openerp__.py, 注意update_xml的值
# -*- coding: utf-8 -*-
{
        "name" : "OECN Training", #模块名
    "version" : "1.0", #模块版本
    "description" : 'OECN Training Demo', #模块说明
    "author" : "Shine IT", #作者
    "website" : "http://www.openerp.cn", #网址
    "depends" : [], #依赖的模块
    "update_xml" : ["lesson_view.xml",
                                        "lesson_report.xml",
                                        "report/oecn_report.rml"
        ], #模块更新的时候会读入的文件
    "installable" : True, #可否安装
    "category":'Generic Modules/Others' #模块类型
}

3. 新增path/oecn/report/ 文件夹, 其下有 __init__.py, oecn_print.py, oecn_report.rml 文件,
 3.1) __init__.py:
  import oecn_print

3.2) oecn_print.py:
import time
from openerp.report import report_sxw

# rml parser 类
class rpt_oecn_training_lesson(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(rpt_oecn_training_lesson, self).__init__(cr, uid, name, context)
        self.localcontext.update({"time": time,})
        
report_sxw.report_sxw('report.oecn.lesson', # 对象的内部名字,可以任意取, 以"report."开头
                      'oecn.training.lesson', # 与报表想关联的对象(model),报表数据通过该对象访问.
                      'addons/oecn_training/report/oecn_report.rml', # 与报表关联的RML文件名及路径.
                      parser=rpt_oecn_training_lesson, # 解析rml文件的对象。
                      header=False) # 表示要不要在本报表中显示公司统一的表头和表尾。

3.3) oecn_report.rml , <template> 标签下必须对页面进行设置,否则在OpenERP运行会报错。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<document filename="report.pdf">
    <!-- 报表页面设置 -->
    <template>
        <pageTemplate id="main">
            <frame id="first" x1="72" y1="72" width="451" height="698"/>
        </pageTemplate>
    </template>
    
    <!-- 报表页面样式设置 -->
    <stylesheet>
        <paraStyle name="Standard" fontName="Helvetica" fontSize="14.0" leading="16.0" alignment="CENTER" />
    </stylesheet>
    
    <!-- 报表页面正文-->
    <story>
        <para>[ repeatIn(objects,'o') ]</para>
        <para style="Standard">介绍</para>
        <para style="Standard">[ o.name ]</para>
    </story>
</document>

note:
 将 repeatIn( ) 放在 <section> tag 下,内容迭代不分页
 将 repeatIn( ) 放在 <story> tag 下,内容迭代分页
测试发现,objects 参数 必须在 <story>下,不然会报错。

4. 升级该模块, 就可以打印report。 由于 OpenERP 对中文支持不够, 输出的pdf文档会显示为黑块。 安装第三方模块oecn_base_fonts(安装说明)即可解决中文打印的问题:

【OpenERP】Report 生成的更多相关文章

  1. OpenERP report doesn't work

    1. When you have used OpenOffice edited  one of reports,it has stored the report's banary data is da ...

  2. openerp report image

    webkit : 再mako 文件中插入以下代码, <% %>标签用于再mako中定义代码或者函数. 然后  ${ embed_image('图片类型', 图片字段 , 宽度,高度)  } ...

  3. Beyond Compare 命令行生成目录下所有文件比对的Html网页report

    MAC环境下,使用Beyond Compare命令行生成两个文件夹差异的html,按目录递归生成. #1. 创建compare #2. 创建compare/old #3. compare/new #4 ...

  4. openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)

    原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...

  5. Openerp 添加修改报表

    Report Designer 模块在生成新报表的时候是有BUG的不建议直接使用,不过我们也可以通过该插件再写简单的代码来实现新添加报表,插件安装成功后我们可以按照下列方法来添加报表 OpenERP ...

  6. Openerp开发进销存系统完毕总结

      转自:http://blog.csdn.net/heartrude/article/details/9142463 安装Openoffice 在openoffice中安装openerp repor ...

  7. Openerp开发进销存系统总结

    转自 :http://blog.sina.com.cn/s/blog_7cb52fa80101ngt8.html 差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发.细节总 ...

  8. jmeter生成html格式接口自动化测试报告

    jmeter生成html格式接口自动化测试报告 jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观. 笔者刚做了这方面的尝试,总结出来分享 ...

  9. java生成word的几种方案

    http://blog.sina.com.cn/s/blog_a5e968370101crtl.html 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建 ...

随机推荐

  1. SyncThingWin -- Run syncthing as a windows service

    SyncThingWin Auto restart and minor bug fixes bloones released this on 23 Dec 2014 There is now an a ...

  2. Overview of MySQL Programs

    http://blog.163.com/digoal@126/blog/static/16387704020110198756512/

  3. Android native层动态库注射

    1.简单介绍 本文解说在Android native层.root权限下.注射动态库到目标进程,从而hook目标进程中动态库的函数的实现方式. 文中的源代码所有来源于网络.我仅仅是略微加以整理. 环境: ...

  4. UVa409_Excuses, Excuses!(小白书字符串专题)

    解题报告 题意: 找包括单词最多的串.有多个按顺序输出 思路: 字典树爆. #include <cstdio> #include <cstring> #include < ...

  5. 重写Html.DropDownList和Html.DropDownListFor的name属性

    □ 重写前 通常这样写: @Html.DropDownListFor(m => m.DelFlag,(List<SelectListItem>)ViewBag.d,"==请 ...

  6. 解决Arcgis10.2.2中dbf文件用EXCEL打开乱码问题

    1.开始 -- 运行,输入”Regedit“,打开 注册表 . 2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ‘计算机\HKEY_CURRENT_USER\Software\E ...

  7. ubuntu下C++和C编程

      一.anjuta Anjuta DevStudio 的官方地址:http://anjuta.sourceforge.net/Anjuta是一个C/C++ IDE,它最大的特色是灵活,同时打开多个文 ...

  8. Kafka分布式环境搭建 (二)赞

    这篇文章将介绍如何搭建kafka环境,我们会从单机版开始,然后逐渐往分布式扩展.单机版的搭建官网上就有,比较容易实现,这里我就简单介绍下即可,而分布式的搭建官网却没有描述,我们最终的目的还是用分布式来 ...

  9. Android图片加载框架最全解析(六),探究Glide的自定义模块功能

    不知不觉中,我们的Glide系列教程已经到了第六篇了,距离第一篇Glide的基本用法发布已经过去了半年的时间.在这半年中,我们通过用法讲解和源码分析配合学习的方式,将Glide的方方面面都研究了个遍, ...

  10. [转]Unicode和UTF-8的关系

    Unicode和UTF-8的关系作者: 张军 原文地址: http://blog.renren.com/blog/284133452/485453790 今天中午,我突然想搞清楚Unicode和UTF ...