2016-07-29 46 views
0

在record.py的源代碼,我發現get_pdf api.v8 Odoo。我應該送什麼參數爲「記錄」

@api.v8 
    def get_pdf(self, records, report_name, html=None, data=None): 
     return Report.get_pdf(self._model, self._cr, self._uid, records.ids, 
          report_name, html=html, data=data, context=self._context) 

我繼承了「記錄」在我的自定義模塊。我定義了一個這樣的按鈕:

<record id="report_maker_form" model="ir.ui.view"> 
        <field name="name">Impression</field> 
        <field name="model">cust_report</field> 
        <field eval="1" name="priority"/> 
        <field name="arch" type="xml"> 
          <form> 
            <header> 
              <button string="Envoyer le rapport" type="object" name="send_report_cust"/> 
            </header> 
            <sheet> 
              <group> 
                <field name='date'/> 
              </group> 
            </sheet> 
          </form> 
        </field> 
      </record> 

函數send_report_cust在繼承的report.py中是這樣定義的。

@api.one 
    def send_report_cust(self): 
      #self.pool.get('report').get_pdf(self, None, "report_vote_document", None, None) 
      self.get_pdf(None, "report_vote_document", None, None) 

所以「report_vote_document」是我的report_name。我只是測試用最小的模板創建報告。 report_vote_document不需要任何特定的記錄,它只是模板格式的測試文本。因此,我以「記錄」的形式發送:get_pdf參數中的「無」。 我得到這個錯誤:

AttributeError: 'NoneType' object has no attribute 'ids' 

這是自「記錄」,需要在get_pdf身上那種明顯的錯誤,但我不知道是什麼放入系統的記錄應該是。誰能告訴我這個「記錄」應該是什麼?我應該發送什麼?

編輯:我想調用get_pdf,但是我給它的參數有些問題。

這裏是我做過什麼:

@api.one 
def send_report_cust(self): 
    self.get_pdf(self, "my_report_name", "my_report_template", None) 

我也試過這個最後一行。

self.get_pdf(**my_model_name** , "my_report_name", "my_report_template", None)

我得到的錯誤是:

File "/usr/lib/python2.7/dist-packages/openerp/addons/report/models/report.py", line 508, in _get_report_from_name 
    idreport = report_obj.search(cr, uid, conditions)[0] 
IndexError: list index out of range 

我試圖與模塊「報告」的源代碼一些pdb.set_trace得到錯誤,在「報告/模型/ report.py」。我用我的按鈕使用「send_report_cust」(讓我們稱之爲情況A)和基本的自動使用報告(情況B)與(我的工作,但不會讓我有我自己的按鈕,並做一些改變之前和之後的相同功能的PDF創建。)

首先在get_pdf@api.v8,這表明一切順利就在此。但是,這個get_pdf調用的get_pdf。在這其中,在這條線出現錯誤:

report = self._get_report_from_name(cr, uid, report_name) 

所以在這裏,我再次在_get_report_from_name去和使用pdb.set_trace()。

整個功能進入右和在情況A比在情況B中的每一個變量作爲完全相同的值,但是當_get_report_from_name呈上行

idreport = report_obj.search(cr, uid, conditions)[0] 

上情況下的但不是在情況B會出現錯誤

因此,我做了「打印report_obj.search(cr,uid,conditions)」這是一個空案例A(這是錯誤描述,但我沒有得到它)​​和一個列表int對於情況B.我檢查了使用pdb.set_trace()測試的3個函數中的每個變量,並且所有東西都是相同的。

回答

1

記錄是對象形式的數據庫條目。例如account.invoice:當您按發票上的打印按鈕時,它將成爲報告的記錄。在你的例子中,self將成爲你按下按鈕的模型cust_report模型的記錄。

每個Odoo報告都是爲模型定義的。打印時至少需要一個模型記錄。

+0

感謝您的答案,所以我必須添加一個one2many從我的report.py到模板中使用的模型?因此,嘗試打印一個沒有任何記錄的最小模板是沒有意義的,這就是爲什麼我無法實現它的原因。接受爲答案。 –

+0

Odoo試圖讓您可以打印發票,訂單,揀貨等業務對象的文檔。但是你也可以定義一個瞬態模型(記錄在數據庫中被作業刪除)和一個報告。您對該模型和報告所做的工作取決於您的意願。例如:針對特定時間段的所有未結髮票的報告。您只需要一個包含開始日期和結束日期字段的瞬態模型即可完成此任務。獲取打印數據可以在報告中完成。 – CZoellner

+0

所以,如果我想用我的模型重新定義get_pdf,我該怎麼做?當我嘗試發送自己作爲記錄時,我得到一個IndexError,我想我必須在「自我」之後添加一些精度,但我不知道哪些是精確的。當我只用xml來調用報表時(所以設置和模板沒有重新定義get_pdf它工作,但在這裏它不會。) 編輯:這是什麼出現在日誌IndexError之前: idreport = report_obj。搜索(cr,uid,條件)[0] –

相關問題