2017-01-30 5 views
1

odoo의 새로운 기능입니다. 하나의 맞춤 보고서가 필요하지만이 모든 것을 이해하지는 못합니다. odoo 문서 체재에서사용자 정의 보고서 작성 odoo 9

:

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) 

내가 qweb 표시 모든 사용자 및 필드 (create_date, 이름, 설명 제품명) 나는 위의 예에서 변경하려면 어떻게해야합니까 내가보기 어떻게 만듭니 까에 res.users에서 원하는?

초보자를위한 유사한 예가 있습니까?

+0

내 기존 대답을 살펴보십시오. 필요한 정보가있을 수 있습니다. http://stackoverflow.com/questions/40290627/custom-report-through-python-odoo-9/40291820#40291820 –

+0

@PhillipStack 재생 해 주셔서 감사합니다. 예에서는보기 (필드 있음) 및 통화 방법이 표시되지 않습니다. render_html –

+0

보고서를 올바르게 등록하면 Odoo가 해당 방법을 호출합니다. 더 많은 드롭 다운을 사용하여 보고서를 호출하려고합니까? 나는 지금 너를 위해 대답을 넓히고있다. 잠시만 요. –

답변

2

이전 답변을 살펴보면 모델에 대한 사용자 지정 보고서 정의 방법을 알 수 있습니다. 중요한 부분은 보고서 개체를 찾아서 렌더링 메서드를 호출한다는 것입니다. 다음으로 가장 중요한 부분은 전달하려는 인수를 전달하는 것입니다.

이 작업을 완료하면 qweb 보고서의 키 이름으로 해당 값에 액세스 할 수 있습니다. 새로운 개념의 Odoo 개발자를 위해 많은 컨셉과 컨텍스트가 있고 그보다 더한 부분이 있음을 이해합니다. 나는 그 예를 제시하려고 노력할 것이다. 가능한 한 간단하게 유지하도록 최선을 다하십시오. 기분이 좋아지면 처음으로 맞춤 보고서로이 작업을 시도하면서 오후의 더 좋은 부분을 보냈습니다.

보고서에 대한 AbstractModel 클래스를 정의해야합니다. 이 파일은 __init__.py에 포함 된 .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 docs의 your_model과 docargs의 report.model의 차이점은 무엇입니까? –

+0

차이는 없습니다. 그것은 같은 모델이어야합니다. 'report.model'은 보고서 찾아보기 객체의'model' 속성입니다. 이 중 일부는 odoo의 문서에서 수정 한 것입니다. 실제로'your_addon '을 사용할 수 있습니다.your_model' –

+0

당신의 모델이 Anastasio.res.users라면, doc_model이 같아야한다고 생각합니다. erppeek 또는 심지어 odoo 쉘을 사용하여 모델 이름의 유효성을 테스트 할 수 있어야합니다. 이것들은 훌륭한 도구입니다. 대화 형으로 odoo 쉘에서 메소드를 테스트 할 수 있습니다. 그러면 올바른 경로에 있는지 여부를 알 수 있습니다. –