Кто-нибудь знает, как изменить источник документов в настраиваемом отчете? Мне нужно загрузить набор данных из представления, унаследованного от моей модели. Столбцы такие же, как и в модели, это просто фильтр данных.
Как настроить отчеты в Odoo 11 в Qweb? Как отправить данные из другой модели в отчет qweb?
Ответы (3)
В версии 11 был удален модуль отчета вместе с объектом отчета. По этой причине вы столкнулись с этой ошибкой. Вы должны удалить отчет из зависимостей, так как он добавлен / объединен в базовом модуле. Вы можете проверить это здесь.
Вы можете вызвать свой отчет с помощью метода report_action следующим образом:
self.env.ref('your_report_name').report_action(self, data=data)
Надеюсь, это поможет вам и решит вашу проблему.
Odoo 11
Больше нет необходимости использовать odoo.report
библиотеку. Это устарело. Вы можете использовать odoo.tools, если это необходимо:
from odoo.tools import report
Как объясняется здесь
И вы можете отправлять данные, как говорит Мухсин К. в своем ответе
self.env.ref('your_report_name').report_action(self, data=data)
Предыдущие версии Odoo
Вся документация находится здесь. В любом случае, если вы хотите настроить данные, которые вы можете использовать в отчете, вы можете использовать такой метод:
from odoo import api, models
class ParticularReport(models.AbstractModel):
_name = 'report.module.report_name'
@api.model
def render_html(self, docids, data=None):
report_obj = self.env['report']
report = report_obj._get_report_from_name('module.report_name')
custom_data = self.env['model.name'].get_data()
docargs = {
'doc_ids': docids,
'doc_model': report.model,
'docs': self,
'custom_data': custom_data,
}
return report_obj.render('module.report_name', docargs)
Модель model.name
- это модель, в которой вы хотите получать информацию
Наследовать шаблоны Qweb
Тег template
- это ярлык для некоторых представлений. Здесь также можно использовать атрибут inherit_id
. Большинство отчетов построено с использованием такого вида:
<template id='report_invoice_document' inherit_id='account.report_invoice_document'>
<xpath expr="//p[@t-if='o.payment_term.note']" position="after">
<!-- You can use you data object here -->
</xpath>
</template>
custom_data
к своему ответу, чтобы прояснить его
- person ChesuCR; 14.12.2017
report
, но я его тоже не проверял
- person ChesuCR; 09.01.2018
render_html
был заменен функцией get_report_values
:
@api.model
def get_report_values(self, docids, data=None):
docs = self.env['model.name'].browse(docids)
return {
'doc_ids': docids,
'doc_model': 'model.name',
'docs': docs,
'lines': self.some_func(docs),
'data': data,
}