其他分享
首页 > 其他分享> > 在OpenERP报告中添加多个对象

在OpenERP报告中添加多个对象

作者:互联网

如何将多个对象传递给报告引擎?

我正在尝试创建一个自定义发票报告,我需要附加其他应用程序中的数据以显示在发票上.我可以使用Web服务将数据导入OpenERP服务器,但如何将其传递给报告引擎?
也许是

set_context or (self.localcontext.update())

方法在这里很有用,因为它允许我将自定义变量传递给报表,但是如何传递整个对象.

我从其他应用程序导入的内容本质上是一个庞大的表,可能有100个与当前合作伙伴相关的记录,我不需要将其保存在OpenERP数据库中,只需在生成发票时显示它.

编辑:

测试我在解析器中的对象

class test_invoice(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
    super(test_invoice, self).__init__(cr, uid, name, context=context)
    self.localcontext.update({
        'time': time,
        'test_var': 'Worked!',
        'get_list': self._get_list,
    })


def _get_list(self):
    result = []
    ress = {'first': '1',
        'second': '2',
        }
    result.append(ress)
    return result

并在rml文件中

...start of rml file
     <section>
        <para>
            [[ repeatIn(get_list(), 'g')]]
            [[ g.first ]]
        </para>
    </section>

  </story>
</document>

但这会引发一个错误“强制转换为Unicode:需要字符串或缓冲区,找到元组”.我们如何在rml中显示自定义列表?

谢谢.

解决方法:

你可以传递整个对象,直到OpenERP(嗯,你运行OpenERP的python)知道该对象.否则你必须’代理’对象是某种方式.使用SQLAlchemy从外部数据库中获取数据可能是一个极少数的解决方案.你可以用这样的东西:

[...somewhere into your parser...]
self.localcontext.update({'external_rows': session.query(MyObject).filter_by(foo='baz')})

或者如果您正在管理CSV数据:

self.localcontext.updarte({'external_rows': self._get_myrows_from_csv()})

例如,_get_myrows_from_csv返回字典列表.

标签:python,openerp,report,rml,erp
来源: https://codeday.me/bug/20190901/1783767.html