以模块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. SyncthingTray -- Syncthing wrapper for Windows

    SyncthingTray Syncthing wrapper for Windows. Includes a small interface to configure start on boot a ...

  2. 强烈推荐:Android史上最强大的自定义任务软件Tasker

    强烈推荐:Android史上最强大的自定义任务软件Taskerhttp://bbs.mumayi.com/thread-28387-1-1.html(出处: 木蚂蚁手机乐园) Android上的Tas ...

  3. jrebel使用

    背景与愿景:开发环境下,tomcat对热布署的支持还不够全面,致使开发人员浪费大量时间在重起服务上.为了提高开发效率,决定引入Jrebel,它对热布署的支持相对比较全面.虽然Jrebel官方号称使用它 ...

  4. C#流水号生成汇总(四)

    简单高效的ID生成方式 http://www.ikende.com/blog/6014522c24ff4ef89cfb430f9c5a8489 一个简单唯一ID生成规则 http://www.iken ...

  5. Delphi7下使用FastMM4

    1> 将文件Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下 ...

  6. [Asp.net MVC]页面伪静态实现

    摘要 从页面Url及页面名称上看,你会发现静态页面和伪静态是一样的.伪静态的页面后缀可能是html,htm,cshtml等,只是改变了url的表现形式,实际上还是动态的页面.在SEO方面,伪静态和静态 ...

  7. MVC借助MvcSiteMapProvider实现站点地图

    使用MvcSiteMapProvider可轻松实现站点地图,俗称"面包屑".如图: 通过NuGet,输入MvcSiteMapProvider搜索,并安装. 在Mvc.sitemap ...

  8. xml转换成map

    import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.H ...

  9. Arcgis Runtime for andriod 100 加载geodatabase

    private void LoadMY(){ try { String mainGeodatabaseFilePath = YLPub.getMapData() + "/gismap/sl. ...

  10. JAVA常见算法题(三十四)---计算加密之后的电话号码

    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的, 加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换. 求加密之后的 ...