---
title: Odoo Direct Print
description: Jeden Odoo Bericht oder Etikette von überall nach überall drucken.
kind: howto
partner: Mint System
prev: ./iot
---
# Odoo Direct Print

{{ $frontmatter.description }}
Technischer Name: `printnode_base`\
Odoo App Store: \
Video: [Odoo Experience 2021 - Automating Direct Printing](https://www.youtube.com/watch?v=6dnHvpsukPg)
## Beschreibung
Mit Odoo Direct Print werden Druckaufträge aus Odoo via PrintNode an lokale Drucker gesendet. Die App wird von VentorTech entwickelt und angeboten.

Bildquelle: https://www.printnode.com/en/docs
### Voraussetzungen
- Ein Computer mit Zugriff auf die gewünschten Drucker und mit installiertem PrintNode Client und Internetzugang. Diese Software kann kostenlos [heruntergeladen und installiert](https://www.printnode.com/en/download) werden. Dieser Computer kann ein Raspberry Pi sein, eine Workstation oder eine virtuelle Maschine auf einem Server.
- Ein Nutzerkonto auf [PrintNode.com](https://www.printnode.com/en)
- Odoo On Premise oder Odoo.sh
### Kosten
- Direct Print PRO: [zu den Preismodellen von Ventor](https://print.ventor.tech/plans)
- PrintNode: [zu den Preismodellen von PrintNode](https://www.printnode.com/en/pricing)
## Konfiguration
### PrintNode API Key generieren
Loggen Sie sich unter ein. Geben Sie die URL der Odoo-Instanz ein und wählen Sie _Create_.

### API Key in Odoo einfügen
Unter _Einstellungen > Direct Print > Account_ müssen Sie den _API Key_, den Sie von erhalten haben, eintragen.

### PrintNode Client installieren
Öffnen Sie und installieren die den Client für ihr Betriebssystem.
Starten Sie den _PrintNode_ Client und loggen Sie sich mit dem PrintNode-Account ein.

## Druckerverwaltung
### PrintNode Client Drucker hinzufügen
Der PrintNode Client erkennt die angeschlossenen Drucker automatisch. Falls das nicht der Fall ist, muss der Drucker-Treiber installiert werden.
**MacOS**
Unter MacOS fügen Sie den Drucker wie folgt hinzu.

Einmal konfiguriert wird der Drucker im PrintNode Client angezeigt:

### Direktes Drucken aktivieren
Damit Druckaufträge mit PrintNode gerduckt werden können, muss dies explizit festgelegt werden. Öffnen Sie _Einstellungen > Direct Print_ und aktivieren Sie die Option _Print via Direct Print_.
Wurde entweder ein globaler Standarddrucker festegelegt oder ein Standarddrucker auf dem dem Benutzer (siehe [Direktes Drucken für Benutzer einrichten](#Direktes%20Drucken%20für%20Benutzer%20einrichten)), dann erscheint bei druckbaren Objekten das folgende Aktions-Menu:

### Drucker in Odoo anzeigen
Zeigen Sie _Direct Print > Configuration > Printers_ an. Hier werden alle verfügbaren Drucker aufgelistet.

Mit der Aktion _Einstellungen > Direct Print > Import Printers_ werden die auf PrintNode verfügbaren Drucker importiert.
## Testen
### PrintNode App Testseite drucken
Loggin Sie sich auf ein und wählen Sie _Print something_. Wählen Sie eine Quelle, Drucker und die Testseite aus und erstellen Sie einen Druckauftrag mit _Print_.

## Druckszenarien
### Methode erfassen
Navigieren Sie nach _Direct Print > Configuration > Methods_ und erstellen Sie einen neuen Eintrag. Dazu ein Beispiel für den Abschluss von Fertigungsaufträgen:
- **Model**: `mrp.workorder`
- **Name**: Weiterfahren
- **Method**: `action_open_manufacturing_order`
### Druck-Aktion erstellen
Wenn Sie beispielsweise beim Abschliessen eines Fertigungsauftrags einen Bericht drucken möchten, müssen Sie dazu eine Druck-Aktion erfassen. Zeigen Sie _Direct Print > Print Action Buttons_ an und erstellen Sie den folgenden Eintrag:
- **Model**: `mrp.workorder`
- **Method ID**: Weiterfahren (siehe [Methode erfassen](#Methode%20erfassen))
- **Description**: Print product labels when workorder is continued
- **Report**: Wählen Sie den Bericht aus.
### Druckszenario aktivieren
::: warning
Für den aktuellen Benutzer muss die Option _Print via Direct Print_ aktiviert sein.
:::
Odoo Direct Print stellt gängige Druckszenarios unter _Direct Print > Print Scenarios_ zur Verfüng. Aktivieren Sie ein Senario mit einem Klick auf _Active_ und wählen Sie einen Drucker aus.

### Druck-Aktion aktivieren
::: warning
Für den aktuellen Benutzer muss die Option _Print via Direct Print_ aktiviert sein.
:::
Mit Odoo Direct Print können Druckaktionen ganz einfach hinzugefügt werden. Öffnen Sie die Ansicht _Direct Print > Print Action Buttons_. Aktivieren Sie eine Aktion mit einem Klick auf _Active_ und wählen Sie einen Drucker aus.

In diesem Beispiel wird der Lieferschein ausgedruck, sobald auf einem Lieferschein der Knopf _Bestätigen_ gedrückt wurde.
### Produktlabel von Lieferauftrag drucken
Öffnen Sie eine Lieferung via _Lager > Lieferaufträge > Lieferauftrag auswählen_ und klicken Sie auf _Aktionen > Print Product Labels_

::: tip
Beachten Sie dass der Druckvorgang einige Sekunden in Anspruch nimmt.
:::
### Packvorgang/Lieferschein automatisch drucken
Mit Druck-Senarien können Sie Druckvorgänge automatisieren. Damit der Packvorgang nach der Bestätigung eines Verkaufsauftrags automatisch gedruckt wird, navigieren Sie als erstes nach _Direct Print > Print Scenarios_. Aktivieren Sie die Zeile _Print Picking Document after Sales Order Confirmation_.
Für das automatische Drucken das Lieferschein aktivieren Sie die Zeile _Print document on Backorder (created after Transfer validation_.
## Einstellungen
### Direktes Drucken für Benutzer einrichten
Für das direkte Drucken kann dem Benutzer ein Standarddrucker zugewiesen werden. Navigieren Sie nach _Einstellungen > Benutzer und Unternehmen > Benutzer > Benutzer auswählen > Tab Einstellungen_ und legen Sie im Abschnitt _Print_ die Standarddrucker fest. Mit der Option _Print via Direct Print_ wird das direkte Drucken aktiviert.
### Standarddrucker für Bericht festlegen
Unter _Direct Print > Print Report Policy > User Rules_ können Sie für jeden Benutzer den Standarddrucker für einen bestimmten Bericht festlegen. Erstellen Sie dazu einen Eintrag, wählen Sie den Benutzer, Drucker und Bericht aus.

## Papierformat
### Papierformat anlegen
Unter _Direct Print > Configuration > Papers_ können Sie Papierformat für Bericht hinterlegen.

### Papiefromat für Drucker festlegen
Erstellen Sie unter _Direct Print > Print Report Policy > Printer Settings_ einen Eintrag für ihren Drucker.

### Papieformat für Bericht festlegen
Erstellen Sie unter _Direct Print > Print Report Policy > Report Settings_ einen Eintrag für ihren Bericht.
::: tip
Odoo Direct Print gibt eine Warnung aus, wenn das Papieformat nicht mit dem verknüpften Drucker übereinstimmt.
:::
## Aktionen
### Produktetiketten drucken
Auf Transfers _Lager > Vorgänge > Transfers_ können Sie eine bestimmte Anzahl Produktetiketten drucken. Öffnen Sie einen Transfer und wählen Sie _Aktionen > Print Product Labels_. Im Dialog wählen Sie den Bericht aus, bestimmen die Produkte und Anzahl der Etiketten, die Sie drucken möchten, wählen den Drucker aus und führen den Vorgang mit _Print_ aus.

## Geplante Aktionen
### Rüstschein drucken
Navigieren Sie nach _Einstellungen > Technisch > Automatisierungsregeln_ und erstellen Sie einen neuen Eintrag:
Name der Aktion: `Rüstschein drucken`\
Modell: `ir.actions.server`\
Ausführen alle: `1` Tage\
Nächstes Ausführungsdatum: `DD.MM.YYYY 07:00:00`\
Anzahl der Anrufe: `-1`\
Typ: `Code ausführen`
Kopieren Sie die folgenden Zeilen in das Feld _Python-Code_:
```python
## Get deliveries due in 3 days
start_date = (datetime.datetime.now() + datetime.timedelta(days=2)).strftime('%Y-%m-%d')
end_date = (datetime.datetime.now() + datetime.timedelta(days=4)).strftime('%Y-%m-%d')
pickings = env['stock.picking'].search([
('picking_type_id', '=', 2),
('scheduled_date', '>', start_date),
('scheduled_date', '<', end_date)
])
## raise Warning([start_date, end_date, pickings])
report_name = 'stock.action_report_picking'
printer_id = env.user.get_report_printer(report_name)[0]
## raise Warning(["Printer:", printer_id.name])
picking_ids = pickings.filtered(lambda r: not r.printed)
## raise Warning(["Print Pickings:", picking_ids])
if picking_ids:
log('Start print job for %s on %s' % (picking_ids, printer_id))
number_of_copies = 1
report_id = env.ref(report_name)
printer_id.printnode_print(
report_id,
picking_ids,
copies=number_of_copies
)
picking_ids.write({'printed': True})
```
### Print Scenario Datum aktualisieren
Navigieren Sie nach _Einstellungen > Technisch > Automatisierungsregeln_ und erstellen Sie einen neuen Eintrag:
Name der Aktion: `Print Scenario Datum aktualisieren`\
Modell: `ir.actions.server`\
Ausführen alle: `1` Tage\
Nächstes Ausführungsdatum: `DD.MM.YYYY 05:00:00`\
Anzahl der Anrufe: `-1`\
Typ: `Code ausführen`
Kopieren Sie die folgenden Zeilen in das Feld _Python-Code_:
```python
printnode_scenario = env.ref("printnode_base.print_picking_document_after_so_confirmation_scenario")
date = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%Y-%m-%d')
printnode_scenario['domain'] = '[["commitment_date", "<=", "' + date + '"]]'
```
## Troubleshooting
### Druckereinstellungen haben keinen Effekt
**Problem**
Die Druckereinstellung auf dem Computer mit dem PrintNode Client haben kein Effekt auf den Druckvorgang.
**Ursache**
Der PrintNode Client ist als Dienst installiert und läuft unter einem anderen Benutzer.
**Lösung**
Der PrintNode Client muss als Programm und nicht als Dienst installiert werden.
Quelle:
### Drucken mit Methode führt zu Fehler
**Problem**
Wenn Sie eine [Methode erfassen](#Methode%20erfassen) und diese aufrufen wird der folgende Fehler geworfen:
```
ValueError: dictionary update sequence element #0 has length 1; 2 is required
```
**Ursache**
Aufgrund der Methode muss der Druckauftrag vor Ausführung der Methode ausgelöst werden.
**Lösung**
Auf der entsprechenden Methode die Option _Print before action_ aktivieren.