2016-07-29 4 views
0

Im Quellcode von record.py fand ichget_pdf api.v8 Odoo. Welche Parameter soll ich senden als "Aufzeichnungen"

@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) 

I "record" in meinem benutzerdefinierten Modul geerbt. Und ich definiert eine Schaltfläche wie folgt aus:

<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> 

Die Funktion send_report_cust ist wie folgt definiert in der vererbten 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) 

Also "report_vote_document" ist mein report_name. Ich teste gerade, um einen Bericht mit minimaler Vorlage zu erstellen. report_vote_document erfordert noch keine spezifischen Datensätze, es handelt sich lediglich um einen Testtext im Vorlagenformat. Also sende ich als "records": "None" in Parametern für get_pdf. ich diesen Fehler:

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

die seit „Aufzeichnungen“ Art eines offensichtlichen Fehlers in der get_pdf Körper benötigt wird, aber ich weiß nicht, was thoses Aufzeichnungen sein soll. Kann mir jemand sagen, was in diesen "Aufzeichnungen" sein soll? Was soll ich senden?

EDIT: Ich versuche get_pdf aufrufen, aber etwas ist falsch mit den Argumenten, die ich ihm geben.

Hier ist, was ich getan habe:

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

Ich habe auch versucht, dies für die letzte Zeile.

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

Der Fehler, den ich bekommen ist:

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 

Ich habe versucht, den Fehler mit einigen pdb.set_trace im Quellcode des Moduls "Bericht", in „Report/Modelle erhalten/report.py ". Was ich mit meinem Button mit "send_report_cust" (nennen wir es Fall A) und der grundsätzlichen automatischen Verwendung von Report (Fall B) mit getestet habe (was zwar funktioniert, mir aber nicht erlaubt, eigene Buttons zu haben und vor und einige Änderungen vorzunehmen nach der PDF-Erstellung in der gleichen Funktion.)

Zuerst in der @api.v8 von get_pdf, die zeigen, alles ging in diesem richtig. Aber diese get_pdf rufen Sie die @api.v7get_pdf. In diesem tritt der Fehler auf dieser Linie:

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

hier also wieder, ging ich in _get_report_from_name und verwendet pdb.set_trace().

die gesamte Funktion geht nach rechts und jede einzelne Variable als genau den gleichen Wert in Fall A als im Fall B, aber wenn _get_report_from_name an die Leitung geht

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

Der Fehler tritt auf Fall A, jedoch nicht auf Fall B

Also habe ich "print report_obj.search (cr, uid, conditions)" was eine leere Liste für Fall A ist (was ist der Fehler beschreibt, aber ich bekomme es nicht) und eine Liste mit einem int Für Fall B. habe ich jede einzelne Variable unter den 3 Funktionen überprüft, die ich mit pdb.set_trace() getestet habe, und alle Dinge sind identisch.

Antwort

1

Datensätze sind Datenbankeinträge in Objektform. Zum Beispiel account.invoice: Wenn Sie die Drucktaste auf einer Rechnung drücken, wird dies der Bericht für den Bericht sein. In Ihrem Beispiel wird self der Datensatz des Modells cust_report Modell sein, auf das Sie den Knopf gedrückt haben.

Jeder Odoo-Bericht ist für ein Modell definiert. Es wird mindestens eine Aufzeichnung des Modells während des Druckens benötigt.

+0

Danke für die Antwort, also muss ich eine one2many aus meinem report.py zu dem Modell in meiner Vorlage hinzufügen? Es war also sinnlos, eine minimale Vorlage ohne irgendwelche Datensätze zu drucken, deshalb konnte ich es nicht funktionieren lassen. Akzeptiert als Antwort. –

+0

Odoo versucht, Ihnen die Möglichkeit zu geben, Dokumente für Geschäftsobjekte wie Rechnungen, Bestellungen, Kommissionierungen usw. zu drucken. Sie können aber auch ein transientes Modell (Datensätze werden von einem Job in der Datenbank gelöscht) und einen Bericht dafür definieren. Was Sie mit diesem Modell und Bericht machen, hängt von Ihren Wünschen ab. Beispiel: Ein Bericht für alle offenen Rechnungen für einen bestimmten Zeitraum. Sie benötigen dazu nur ein transientes Modell mit Start- und Enddatumsfeldern. Die Daten zum Drucken können im Bericht abgerufen werden. – CZoellner

+0

Also, wenn ich mein Modell verwenden möchte, in dem ich get_pdf neu definiere, wie kann ich das tun? Wenn ich versuche, das self als record zu senden, bekomme ich einen IndexError, ich denke, ich muss etwas Präzision nach "self" hinzufügen, aber ich weiß nicht welche. Wenn ich nur xml verwendet, um einen Bericht zu nennen (so und die Vorlage Einstellung ohne get_pdf Neudefinition es funktioniert, aber hier wird es nicht.) EDIT: hier was vor dem Indexerror in den Protokollen erscheint, ist: idreport = report_obj. Suche (cr, uid, conditions) [0] –

Verwandte Themen