SXW/RML报表中,你可以在中括号中加入Python代码,以获得OpenERP中的对象(object)
代码可以使用如下变量:
可以用的 Python 对象/变量: objects : 将要打印的object记录(例如发票(invoice)对象). data : 向导(wizard)中获得的数据 time : Python的time模块(详见Python文档). user : 运行这个报表的用户.
可以用的 Python 函数: setLang('fr') : 设置语言,用于自动取得对应翻译. repeatIn(list, varname[, tagname]) : 遍历模板当前部分list中的对象 (整个文档, 当前段落, 表格中的当前行),可以在模板中使用varname作为变量名。 从 4.1.X版开始, 你可以使用第三个(可选的)参数指定循环结果放在哪个.RML标记中. setTag('para','xpre') : 在由sxw转换rml文档过程中,替换指定标记。这里是用xpre替换para (xpre 是一个预定义格式的段落)。(?) removeParentNode('tr') : 移除类型'tr'的父结点, 这个参数经常在条件语句中使用 (如下例)
标签示例: [[ repeatIn(objects,'o') ]] : 循环objects,指定变量名为o. [[ repeatIn(o.invoice_line,'l') ]] : 对o的invoice_line循环,指定变量名为'l'. [[ repeatIn(o.invoice_line,'l', 'td') ]] : 循环每行,并为每行数据创建一个单元格 [[ (o.prop=='draft') and 'YES' or 'NO' ]] : 根据变量‘prop’输出YES或 NO [[ round(o.quantity * o.price * 0.9, 2) ]] : 可以进行变量计算. [[ '%07d' % int(o.number) ]] : 数字的格式化输出 [[ reduce(lambda x, obj: x+obj.qty , list , 0 ) ]] : 列表中所有对象 qty 字段值的和 (可以试一下用 “object” 作为列表变量) [[ user.name ]] : 打印报表的当前用户名 [[ setLang(o.partner_id.lang) ]] : 从变量中取得语言 [[ time.strftime('%d/%m/%Y') ]] : 以dd/MM/YYYY格式输出时间, 查阅python文档获得关于“%d”的帮助, ... [[ time.strftime(time.ctime()[0:10]) ]] 或 [[ time.strftime(time.ctime()[-4:]) ]] : 只输出日期. [[ time.ctime() ]] : 输出当前日期 & 时间 [[ time.ctime().split()[3] ]] : 只输出时间 [[ o.type in ['in_invoice', 'out_invoice'] and 'Invoice' or removeParentNode('tr') ]] : 如果type是 ‘in_invoice’ 或‘out_invoice’ 那么输出 ‘Invoice’;如果 不是,‘tr’类型的父节点会被删除.
报表中显示二进制字段图像
[[ setTag('para','image',{'width':'100.0','height':'80.0'}) ]] o.image or setTag('image','para')