前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决 OpenERP v7 中的报告问题

解决 OpenERP v7 中的报告问题

原创
作者头像
华科云商小徐
发布2024-04-11 09:16:44
970
发布2024-04-11 09:16:44
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫

在 OpenERP v7 中,报告问题可能涉及多个方面,包括报告模板的设计、数据源的配置、报告生成的逻辑等。然后再我们日常使用中还是会遇到各种各样的问题,那么如果出现下面的错误,可以尝试用我的解决方案。

1、问题背景

在使用 OpenERP v7 的 base_report_designer 模块创建产品对象的报告时,遇到一个问题。报告看起来似乎没有问题,但每次尝试打印时,都会出现一个错误:

代码语言:javascript
复制
Field 'product' does not exist in object 'browse_record(product.product, 12)'
​
(<type 'exceptions.AttributeError'>, AttributeError(KeyError("Field 'product' does not exist in object 'browse_record(product.product, 12)'",),), <traceback object at 0xc2801e4>)

这个问题通常发生在直接将文档保存到本地而不是发送到服务器时,但实际上并没有这样做。正在使用一个由自己编写的解析器,该解析器使用 product.product 模型,并且应该可以正常工作。下面是解析器的代码:

代码语言:javascript
复制
import time
from openerp.report import report_sxw
​
class reporte_locacion(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(reporte_locacion, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,
            'qty_total': self._qty_total
        })
​
    def _qty_total(self, objects):
        total = 0.0
        uom = objects[0].product_uom.name
        for obj in objects:
            total += obj.product_qty
        return {'quantity': total, 'uom': uom}
​
report_sxw.report_sxw(
    'report.reporte.locacion',
    'product.product',
    'addons/stock/report/reporte_locacion.rml',
    parser=reporte_locacion,
    header='internal'
)

报告的 SXW 格式代码如下:

代码语言:javascript
复制
[[ repeatIn(objects,'o') ]] 
Stock Inventory
​
Inventory
Date
[[ o.name ]]
[[ formatLang(o.date,date_time=True) ]]
​
Location
Production Lot
Product 
Quantity
[[ repeatIn(o.product, 'p') ]]
[[ p.location_id.name ]]
[[ p.prod_lot_id  and p.prod_lot_id.name or '' ]]
[ [[ p.product_id.code ]] ] [[ p.product_id.name ]]
[[ formatLang(p.product_qty) ]] [[ p.product_uom.name ]]
​
Total:
[[ formatLang(qty_total(o.inventory_line_id)['quantity']) ]] [[ qty_total(o.inventory_line_id)['uom'] ]]

2、解决方案

这个问题是由于使用 repeatIn 循环时,没有正确地指定对象。在 report.reporte.locacion.rml 文件中,repeatIn 循环被用于在 product.product 对象上循环。但是,在 reporte_locacion 解析器中,objects 参数实际上是 stock.inventory 对象的列表,而不是 product.product 对象的列表。

为了解决这个问题,需要在 report.reporte.locacion.rml 文件中将 repeatIn 循环更改为在 stock.inventory.line 对象上循环。这样,就可以正确地访问 product 对象了。

修改后的 report.reporte.locacion.rml 文件如下:

代码语言:javascript
复制
[[ repeatIn(objects.inventory_line_id,'o') ]] 
Stock Inventory
​
Inventory
Date
[[ o.name ]]
[[ formatLang(o.date,date_time=True) ]]
​
Location
Production Lot
Product 
Quantity
[[ repeatIn(o.product_id, 'p') ]]
[[ p.location_id.name ]]
[[ p.prod_lot_id  and p.prod_lot_id.name or '' ]]
[ [[ p.code ]] ] [[ p.name ]]
[[ formatLang(o.product_qty) ]] [[ o.product_uom.name ]]
​
Total:
[[ formatLang(qty_total(o.inventory_line_id)['quantity']) ]] [[ qty_total(o.inventory_line_id)['uom'] ]]

修改后的代码中,repeatIn 循环现在是在 stock.inventory.line 对象上循环,而不是 product.product 对象上。这将允许报告正确地访问 product 对象。

总体来说,当我们在在解决报告问题时,重要的是仔细分析问题并逐步排除可能的原因,可能需要结合调试技术、日志分析以及与社区的交流来解决问题。如果有不懂可以贴上代码帮助大家解决问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档