OpenERP Relatorio ODT 报表模块
-
[quote]原帖由 [i]vincent@mrsf[/i] 于 2009-9-10 09:51 发表 www.shine-it.net/redirect.php?goto=findpost&pid=2704&ptid=618
我成功地在All InOne上使用了ODT Report,
确实比较麻烦,
需要的包很多,
每个都需要手工添加。还有一个问题就是,怎么在Report上添加公司的Logo? [/quote]
静态的方法:改一下模块里的 odt
动态的方法:我还没试过把图片字段插到报表里为了方便使用 all in one 的朋友,有空我会上传个包含 relatorio 相关依赖的模块。
-
popkar77: 数据是不会存放在.py文件里的,数据都是存放在数据库中的。report是如何获取数据的呢?以sale模块下的report为例(addons/sale/report/):
对于order这个报表,目录下有一个名为order.py的文件,
[code]...
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)
[/code]可以看到它定义了一个report_sxw.rml_parse的子类,名叫order。从其父类的名字就可以猜出这个类是用来解析rml文件的。在上例中实际上这个order类只多做了一件事情,就是把time模块作为键值放到localcontext里,这样你在报表中就可以使用time来显示时间了。
另外一个就是report_sxw.report_sxw, 来看看这个类的定义:
[code]class report_sxw(report_rml, preprocess.report):
def init(self, name, table, rml=False, parser=rml_parse, header=True, store=False):
[/code]
由此可以知道,我们传递给它的'report.sale.order'是这个报表内部的名称,'sale.order'就是表对象了(其在addons/sale/sale.py中定义,通过ORM映射到数据库,所有的数据都是从这里来得),后面的参数也应该能看得懂了。