Report report error,help
-
http://www.openerp.com/forum/topic21552.html
I need to print a report,below is the code,but Run Error
error(debug_rpc):
[2010-12-27 22:51:03,375][?] Level 9:service:'report'
[2010-12-27 22:51:03,375][?] Level 9:method:'report'
[2010-12-27 22:51:03,375][?] Level 9:params:[01]: ('retail_demo',
[2010-12-27 22:51:03,375][?] Level 9:params:[02]: 1,
[2010-12-27 22:51:03,375][?] Level 9:params:[03]: 'admin',
[2010-12-27 22:51:03,375][?] Level 9:params:[04]: u'report.sale.order.product.2',
[2010-12-27 22:51:03,390][?] Level 9:params:[05]: [1, 2, 3, 4, 99999999],
[2010-12-27 22:51:03,390][?] Level 9:params:[06]: {'context': {},
[2010-12-27 22:51:03,390][?] Level 9:params:[07]: 'id': 1,
[2010-12-27 22:51:03,390][?] Level 9:params:[08]: 'model': 'report.sale.order.product.2',
[2010-12-27 22:51:03,390][?] Level 9:params:[09]: 'report_type': 'pdf'},
[2010-12-27 22:51:03,390][?] Level 9:params:[10]: {'client': 'web', 'lang': u'zh_CN', 'tz': False})
[2010-12-27 22:51:03,390][?] Level 9:result:2
[2010-12-27 22:51:03,390][?] Level 9:service:'report'
[2010-12-27 22:51:03,390][?] Level 9:method:'report_get'
[2010-12-27 22:51:03,390][?] Level 9:params:('retail_demo', 1, 'admin', 2)
[2010-12-27 22:51:03,390][?] Level 9:result:{'state': False}
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[01]:
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[02]: Environment Information :
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[03]: System : Windows-XP-5.1.2600-SP3
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[04]: OS Name : nt
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[05]: Operating System Release : XP
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[06]: Operating System Version : 5.1.2600
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[07]: Operating System Architecture : 32bit
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[08]: Operating System Locale : zh_CN.cp936
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[09]: Python Version : 2.5.2
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[10]: OpenERP-Server Version : 5.0.15
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[11]: Last revision No. & ID :
[2010-12-27 22:51:03,562][retail_demo] ERROR:module:[12]: This service does not exists: u'report.report.sale.order.product.2'
[2010-12-27 22:51:03,703][retail_demo] ERROR:web-services:[01]:
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[02]: Environment Information :
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[03]: System : Windows-XP-5.1.2600-SP3
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[04]: OS Name : nt
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[05]: Operating System Release : XP
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[06]: Operating System Version : 5.1.2600
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[07]: Operating System Architecture : 32bit
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[08]: Operating System Locale : zh_CN.cp936
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[09]: Python Version : 2.5.2
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[10]: OpenERP-Server Version : 5.0.15
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[11]: Last revision No. & ID :
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[12]: Exception: u'report.report.sale.order.product.2'
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[13]: Traceback (most recent call last):
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[14]: File "service\web_services.pyo", line 682, in go
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[15]: File "netsvc.pyo", line 70, in init
[2010-12-27 22:51:03,717][retail_demo] ERROR:web-services:[16]: KeyError: u'report.report.sale.order.product.2'
error code web_service.py
def go(id, uid, ids, datas, context):
cr = pooler.get_db(db).cursor()
import traceback
import sys
try:
obj = netsvc.LocalService('report.'+object)
code:
model,
import string
import sys
import netsvc
from osv import fields,osv
class report_report_sale_order_product_2(osv.osv):
_name = "report.report.sale.order.product.2"
_description = "Sales Orders by Products"
_auto = True
_columns = {
'memo': fields.char(u'说明', size=64,readonly=True),
'month': fields.date('月份', readonly=True),
'product_name':fields.char(u'产品名称',size=128, readonly=True),
'quantity': fields.float('销售数量', readonly=True),
'price_total': fields.float('销售金额', readonly=True),
'price_average': fields.float('平均售价', readonly=True)
}
report_report_sale_order_product_2()
class report_sale_order_product_2(osv.osv):
_name = "report.sale.order.product.2"
_description = "Sales Orders by Products"
_auto = False
_columns = {
'memo': fields.char(u'说明', size=64,readonly=True),
'month': fields.date('月份', readonly=True),
'product_name':fields.char(u'产品名称',size=128, readonly=True),
'quantity': fields.float('销售数量', readonly=True),
'price_total': fields.float('销售金额', readonly=True),
'price_average': fields.float('平均售价', readonly=True)
}
_order = 'id,month desc,product_name'
def init(self, cr):
cr.execute("""
create or replace view report_sale_order_product_2 as (
select
min(b.id) as id,
' ' as memo,
to_char(a.date_order, 'YYYY-MM-01') as month,
e.name as product_name,
sum(b.product_uom_qtyu.factor) as quantity,
sum(b.product_uom_qtyb.price_unit) as price_total,
(sum(b.product_uom_qtyb.price_unit)/sum(b.product_uom_qtyu.factor))::decimal(16,2) as price_average
from sale_order a right join sale_order_line b on (a.id=b.order_id)
left join product_uom u on (u.id=b.product_uom)
left join product_product d on (b.product_id=d.id)
left join product_template e on (d.product_tmpl_id=e.id)
group by to_char(a.date_order, 'YYYY-MM-01'),product_name ) """
)
def search(self, cr, user, args, offset=0, limit=None, order=None,
context=None, count=False):
if not context:
context = {}
filter=""
logger = netsvc.Logger()
logger.notifyChannel('app', netsvc.LOG_ERROR, args)
firstflag=True
for arg in args:
afield=arg[0]
if arg[0]=="product_name":
afield="e.name"
if arg[0]=="month":
afield="to_char(a.date_order, 'YYYY-MM-01')"
if firstflag:
filter+=afield+" "+arg[1]+" '"+str(arg[2])+"' "
firstflag=False
else:
filter+=" and "+afield+" "+arg[1]+" '"+str(arg[2])+"' "
if len(filter)>0:
wherestr=" where "
else:
wherestr=" "
try:
cr.execute("""drop view report_sale_order_product_2 """)
except TypeError :
pass
sql="create or replace view report_sale_order_product_2 as ( <br />select <br />min(b.id) as id, <br />' ' as memo, <br />to_char(a.date_order, 'YYYY-MM-01') as month,<br />e.name as product_name,<br />sum(b.product_uom_qtyu.factor) as quantity, <br />sum(b.product_uom_qtyb.price_unit) as price_total, <br />(sum(b.product_uom_qtyb.price_unit)/sum(b.product_uom_qtyu.factor))::decimal(16,2) as price_average <br />from sale_order a right join sale_order_line b on (a.id=b.order_id) <br />left join product_uom u on (u.id=b.product_uom) <br />left join product_product d on (b.product_id=d.id) <br />left join product_template e on (d.product_tmpl_id=e.id) "<br />+wherestr+filter +" group by to_char(a.date_order, 'YYYY-MM-01'),product_name <br />union all <br />select <br />99999999 as id, <br />'合计' as memo,<br />min(to_char(a.date_order, 'YYYY-MM-01')) as month,<br />' ' as product_name,<br />sum(b.product_uom_qtyu.factor) as quantity, <br />sum(b.product_uom_qtyb.price_unit) as price_total, <br />(sum(b.product_uom_qtyb.price_unit)/sum(b.product_uom_qtyu.factor))::decimal(16,2) as price_average <br />from sale_order a right join sale_order_line b on (a.id=b.order_id) <br />left join product_uom u on (u.id=b.product_uom) <br />left join product_product d on (b.product_id=d.id) <br />left join product_template e on (d.product_tmpl_id=e.id) "<br />+wherestr + filter + " ) "
logger.notifyChannel('app', netsvc.LOG_ERROR, sql)
print sql
cr.execute(sql)
cr.execute("""
select * from report_sale_order_product_2 order by id,month desc,product_name
""")
res = cr.fetchall()
return [x[0] for x in res]
report_sale_order_product_2()
report:
import pooler
import time
from report import report_sxw
class glass_saleorder_product_2(report_sxw.rml_parse):
def init(self, cr, uid, name, context):
super(glass_saleorder_product_2, self).init(cr, uid, name, context)
self.ret_list = []
self.localcontext.update({
'time': time,
'rpt_datas':self.create_sum_data
})
def create_sum_data(self):
cr=pooler.get_db(self.cr.dbname).cursor()
cr.execute(
"select * from report_sale_order_product_2 " )
sum_lines = cr.dictfetchall()
for line in sum_lines:
ret_dict={
'memo':line['memo'],
'month':line['month'],
'product_name':line['product_name'],
'quantity':line['quantity'],
'price_total':line['price_total'],
'price_average':line['price_average']
}
self.ret_list.append(ret_dict)
return self.ret_list
report_sxw.report_sxw('report.report.sale.order.product.2', 'report.sale.order.product.2',
'addons/report_sale_xlscan/report/rpt_sale_product_2.rml',
parser=glass_saleorder_product_2, header=False)
report xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report auto="False" id="report_report_sale_order_product_2" model="report.sale.order.product.2" name="report.sale.order.product.2" rml="report_sale_xlscan/report/rpt_sale_product_2.rml" string="打印报表" header="False"/>
</data>
</openerp
Please Help me. -
[quote author=chengwenge link=topic=2260.msg7296#msg7296 date=1293502754]
http://www.openerp.com/forum/topic21552.html
report_sxw.report_sxw('[color=#ff0000]report.report.sale.order.product.2[/color]', 'report.sale.order.product.2',
'addons/report_sale_xlscan/report/rpt_sale_product_2.rml',
parser=glass_saleorder_product_2, header=False)
report xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report auto="False" id="report_report_sale_order_product_2" model="report.sale.order.product.2" name="[color=#ff0000]report.sale.order.product.2[/color]" rml="report_sale_xlscan/report/rpt_sale_product_2.rml" string="打印报表" header="False"/>
</data>
</openerp
Please Help me.
[/quote]
红色标记的地方使用的名称不一致,将xml中改成'report.report.sale.order.product.2'试试 -
xml 中的 name 好象不需要 "report." 前缀的.
例如:<br />addons\account\report\general_ledger.py<br />...<br />report_sxw.report_sxw('report.account.general.ledger', 'account.account', 'addons/account/report/general_ledger.rml', parser=general_ledger, header=False)<br />...<br /><br />addons\account\account_report.xml<br /><br />...<br /><br /><br /> <report auto="False" id="account_general_ledger" menu="False" model="account.account" name="account.general.ledger" rml="account/report/general_ledger.rml" string="General Ledger"/><br /><br />...<br /><br />
-
我做成功过好几个报表,不过都是单据。
我这次实行的是对报表的打印,报表的模型不是自动建立,通过视图实现的模式。
跟踪了下,还是不知道如何解决。我看了代码,系统会自动增加 report.object
web_service.py
def go(id, uid, ids, datas, context):
cr = pooler.get_db(db).cursor()
import traceback
import sys
try:
obj = netsvc.LocalService('report.'+object) -
mrshelly 二楼回答是正解。
我在 report/init.py 不正确,需要 import report目录下的所有 py文件。
靠,确实走了弯路,谢谢大家。 -
感谢Mrshelly, 纠正了我一个错误,report标签确实不需要再添加report前缀了