2017-01-30 8 views
1

Я новичок в оду. Мне нужен один пользовательский отчет, но я не понимаю все это.Создать пользовательский отчет odoo 9

В odoo документации пребывания:

from openerp import api, models 

class ParticularReport(models.AbstractModel): 
    _name = 'report.module.report_name' 

    @api.multi 
    def render_html(self, data=None): 
     report_obj = self.env['report'] 
     report = report_obj._get_report_from_name('module.report_name') 
     docargs = { 
      'doc_ids': self._ids, 
      'doc_model': report.model, 
      'docs': self, 
     } 
     return report_obj.render('module.report_name', docargs) 

Я хочу от res.users в qweb отображения всех пользователей и поле (create_date, имя, Descrption), что мне нужно изменить в приведенном выше примере, и как я создаю вид?

Любые подобные примеры для новичка?

+0

Взгляните на мой существующий ответ. У него может быть необходимая информация. http://stackoverflow.com/questions/40290627/custom-report-through-python-odoo-9/40291820#40291820 –

+0

@PhillipStack Спасибо за повтор. В вашем примере я не вижу вида (с полем) и как вызывается render_html –

+0

Когда вы правильно зарегистрировали свой отчет, Odoo вызовет этот метод для вас. Вы просто пытаетесь назвать свой отчет, используя более раскрывающееся меню? Я сейчас расширяю для вас ответ. Дайте мне минуту. –

ответ

2

Если вы посмотрите на мой предыдущий ответ, вы увидите, как вы определяете собственный отчет для своей модели. Важная часть состоит в том, что вы находите объект отчета и вызываете метод визуализации на нем. Следующая важная часть - передать аргументы, которые вы хотите передать.

Как только вы это сделаете, вы можете получить доступ к этим значениям по имени ключа в отчете qweb. Я понимаю, что существует много концепций и контекстов и бла-бла-бла, чтобы переварить нового разработчика Odoo. Я попытаюсь привести пример. И сделайте все возможное, чтобы оно было максимально простым. Если это заставляет вас чувствовать себя лучше, я провел большую часть дня в первый раз, когда я попытался сделать это с помощью специального отчета.

Вам необходимо будет определить класс AbstractModel для вашего отчета. Включите это файл .py, который включен в __init__.py. Вероятно, вам понадобится некоторое ведение журнала, чтобы увидеть, что происходит, если вам не повезло, что он работает в первый раз.

Я не был.

import logging 
_logger = logging.getLogger(__name__) 

class YourReport(models.AbstractModel): 
    _name = 'report.your_addon.report_template_id' 

    @api.multi 
    def render_html(self, data=None): 
     _logger.info("RUNNING REPORT") 
     report_obj = self.env['report'] 
     report = report_obj._get_report_from_name('your_addon.report_template_id') 
     docs = self.env['your_addon.your_model'].search([('something','=','something')]) 
     docargs = { 
      'doc_model': report.model, 
      'docs': docs, 
     } 
     return report_obj.render('your_addon.report_template_id', docargs) 

В классе выше мы переопределяем метод render_html. Метод модели отчета _get_report_from_name - это всего лишь метод, который возвращает объект отчета для именованного отчета. Вы можете заменить его любым odoo orm, который возвращает объект просмотра для отчета.

Затем вы должны создать определение xml для своего отчета.

<openerp> 
    <data> 
    <report 
     id="report_template_id" 
     model="your_addon.model" 
     string="Report Title" 
     name="your_addon.report_template_view" 
     file="your_addon.report_template" 
     report_type="qweb-pdf"/> 

    <template id="report_template_view"> 
     <t t-call="report.html_container"> 
      <t t-foreach="docs" t-as="doc"> 
       <t> 
        <div class="page"> 
         <t t-esc="doc.field_name"/> 
        </div> 
       </t> 
      </t> 
     </t> 
    </template> 
    </data> 
</openerp> 

При создании кнопки в представлении формы любой модели, которая выполняет метод возвращающегося действие отчета функция render_html для отчета будет называться.

@api.multi 
    def print_report(self): 
    return { 
     'type' : 'ir.actions.report', 
     'report_name': 'report_template_id' 
     'datas': { 
      'ids': [ self.id ], 
      'model': 'your_addon.your_model' 
     } 
    } 
+0

@Philip Stack Tnx для описания, я мой пример Я хочу, чтобы данные диспетчера из res.users - это правильный код http://imgur.com/a/k6U0N. Чем отличается ваш_модель в документах и ​​report.model в docargs? –

+0

Нет никакой разницы. Это должна быть та же модель. 'report.model' - это атрибут' model' объекта просмотра отчета. Некоторые из них я адаптировал из документации одо. На самом деле вы можете просто использовать 'your_addon.your_model' –

+0

Я думаю, что если ваша модель Anastasio.res.users, тогда doc_model должен быть таким же. Вы должны иметь возможность проверить правильность имени своей модели, используя erppeek или даже оболочку odoo. Это отличные инструменты. Вы можете протестировать свои методы в оболочке оболочки в интерактивном режиме, что скажет вам, если вы на правильном пути или нет. –