Druckformat (Printformat)
Der Print Format Bilder hat keine Änderungshistorie!
Einleitung
Alle DocTypes in ERPNext haben eine oder mehrere Druckansichten. Diese werden für den Versand als PDF, zum Ausdruck auf DIN-A4 Papier oder für den Druck von Labels oder auch Eintrittskarten verwendet. Für das Erstellen für rudimentären PDF Ansichten in welchen nicht auf spezielle Formatierung geachtet wird hat frappe einen Drag & Drop Editor im Programm eingebaut. Ist es notwendig z.B. Adresse für eine Brieffenster optimal einzustellen sind HTML/CSS Kenntnisse notwendig.
Übersicht
Standard setzen
Wir können jedes Druckformat als Standard auf dem entsprechenden DocType einstellen
https://doku.phamos.eu/books/erpnext-benutzerhandbuch/page/standarddruckformat
Felder
Bezeichnung | Feldname | Erklärung |
DocType | doctype | Verknüpfung zu dem DocType auf welches dieses Druckformat angewendet werden soll. |
Modul | Hier stellen wir ein unter welchem Modul das Druckformat zu finden sein soll. Es wird dort im Workspace angezeigt. | |
Standarddrucksprache |
Hier stellen wir ein welche Sprache als Standard zum Drucken verwendet werden soll. Standarddrucksprachen können auch in den Stammdaten eingestellt werden. |
|
Benutzerdefiniertes Format |
Aktivieren wir dies, wird der Print Format Builder deaktiviert. Das Druckformat muss nun händisch im Feld HTML selbst konfiguriert werden. |
|
Deaktiviert | Deaktiviert das Druckformat und verhindert damit die Auswahl in anderen Systemteilen. |
Bezeichnung | Feldname | Erklärung |
Druckformat Type |
Auswahl aus
|
|
Rohdruck | ||
HTML |
Dieses Feld erwscheint, wenn das Benutzerdefiniertes Format aktiviert wurde. Hier können wir den Inhalt des Druckformats bestimmen. |
Bezeichnung | Feldname | Erklärung |
CSS | Dieses Feld füllen wir mit unserem gewünschten Style Sheet um die Rahmenbedingungen für das Erstellen der Druckformats als PDF einzustellen. |
Cheatsheet
Da Druckformate immer wieder im Nachhinein gelöscht werden können, weil es neue Versionen gibt, ist es nicht ratsam dort Bilder anzuhängen. Diese Bilder werden gerne in weiteren Druckformaten verwendet und verschwinden dann in zukünftigen, weil die Referenz verloren geht. Mit dem Löschen des Druckformats wird auch die Datei gelöscht!
Seitenumbruch
Die Verwendung eines
<div class="page-break"></div>
ist in der HTML Ansicht sichtbar durch eine gestrichelte Linie
Seitenumbruch erzwingen:
<div style="page-break-before:always;">
Fügen wir diesen Code vor "Summery" ein, sehen wir, dass Summery immer auf einer neuen Seite ist.
Adressfenster
<div class="row address-padding">
<div class="col-xs-8">
<!-- Firmenadressezeile -->
{% set address = frappe.get_doc("Address", doc.company_address) %}
<span class="text-muted text-sm">
{{ address.address_title }} | {{ address.address_line1 }} | {{ address.pincode }} {{ address.city }}
</span>
<img src="/files/sonnen_ico.png" width="20mm" alt=""/>
<br>
<!-- Kundenadresse -->
{% set ca = frappe.get_doc("Address",doc.customer_address) %}
<span>
{{ ca.address_title }}<br>
{% if ca.address_line1 == '-' %}
{{ _('Postfach') }} {{ ca.postfach }}<br>
{% else %}
{{ ca.address_line1 }}<br>
{% endif %}
{% if ca.address_line2 %}
{{ ca.address_line2 }}<br>
{% endif %}
{{ ca.pincode }} {{ ca.city }}<br>
{{ _(ca.country) }}<br>
</span>
</div>
Firmenadresse
<div class="col-xs-4">
<!-- Firmenadresse -->
{% set address = frappe.get_doc("Address", doc.company_address) %}
<span class="text-muted pull-right nowrap">
{{ address.address_title }}<br>
{{ address.address_line1 }}<br>
{{ address.pincode }} {{ address.city }}<br>
<p></p>
Telefon {{ address.phone }}<br>
Telefax {{ address.fax }}<br>
<p></p>
post@phamos.eu<br>
phamos.eu<br>
</span>
</div>
Custom Artikeltabelle
<table style="border-top: solid black;border-bottom: solid black;page-break-inside:auto">
<thead style="border-bottom: solid black; display:table-header-group">
<tr>
<th style="width: 5%">{{ _("Sr") }}</th>
<th style="width: 50%">{{ _("Description") }}</th>
<th style="width: 10%">{{ _("Qty") }}</th>
<th style="width: 15%">{{ _("Price") }}</th>
<th style="width: 20%" class="text-right">{{ _("Amount") }} EUR</th>
</tr>
</thead>
<tbody style="border-bottom: solid black;page-break-inside:auto">
<!-- Positions -->
{% set currency = frappe.get_doc("Currency",doc.currency) %}
{%- for row in doc.items -%}
<tr>
<td>
{{ row.idx }}
</td>
<td>
<b>{{ _(row.item_name) }}</b><br>
{{ _(row.description) }}
</td>
<td>
{{ ("%.2f"|format(row.qty)).rstrip('0').rstrip('.') }}<br>
</td>
<td>
{% if row.discount_percentage == 0 %}
{{ frappe.format_value(row.rate, {'fieldtype': 'Currency', 'options': doc.currency}, doc)[1:] }} {{ currency.symbol }}<br>
{% else %}
{{ frappe.format_value(row.rate, {'fieldtype': 'Currency', 'options': doc.currency}, doc)[1:] }} {{ currency.symbol }}<br>
{% endif %}
</td>
<td class="text-right">
{{ frappe.format_value(row.amount, {'fieldtype': 'Currency', 'options': doc.currency}, doc)[1:] }} {{ currency.symbol }}
</td>
</tr>
{%- endfor -%}
</tbody>
<tfoot style="display:table-row-group">
<tr style="page-break-inside: avoid;page-break-before:auto">
<td colspan="4">
{{ _('Net total') }}
</td>
<td class="text-right">
{% set currency = frappe.get_doc("Currency",doc.currency) %}
{{ frappe.utils.fmt_money(doc.net_total, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
{% if doc.taxes %}
{% for row in doc.taxes %}
{% if row.tax_amount > 0 %}
<tr>
<td colspan="4">
{{ _(row.description) }}
</td>
<td class="text-right">
{{ frappe.utils.fmt_money(row.tax_amount, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
{% else %}
{% endif %}
{% endfor %}
{% else %}
<tr>
<td colspan="4">
{{ _('Umsatzsteuer') }}
</td>
<td class="text-right">
0.00 {{ currency.symbol }}
</td>
</tr>
{% endif %}
<tr>
<td colspan="4">
<b>{{ _('Grand Total') }}</b>
</td>
<td class="text-right">
{{ frappe.utils.fmt_money(doc.grand_total, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
</tfoot>
</table>
Steuertabelle ohne 0€ Zeilen
Wenn die Steuern auf einem Beleg (Angebot, Auftrag, Rechnung) nicht größer als 0% bzw. 0€ sind wollen wir diese oft nicht auf unserem PDF Ausdruck haben.
<table class="table table-bordered table-condensed" style="page-break-inside: avoid;page-break-before: auto; margin-top:-20px !important">
<tbody>
<!-- Sums -->
<tr class="text-right" style="page-break-inside: avoid;page-break-before:auto">
<td colspan="4">
{{ _('Net total') }}
</td>
<td style="width: 30%; padding-right: 3%">
{% set currency = frappe.get_doc("Currency",doc.currency) %}
{{ frappe.utils.fmt_money(doc.net_total, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
{% if doc.taxes %}
{% for row in doc.taxes %}
{% if row.tax_amount > 0 %}
<tr class="text-right">
<td colspan="4">
{{ _(row.description) }}
</td>
<td>
{{ frappe.utils.fmt_money(row.tax_amount, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
{% else %}
{% endif %}
{% endfor %}
{% else %}
<tr class="text-right">
<td colspan="4">
{{ _('Umsatzsteuer') }}
</td>
<td>
0.00 {{ currency.symbol }}
</td>
</tr>
{% endif %}
<tr class="text-right">
<td colspan="4">
<b>{{ _('Grand Total') }}</b>
</td>
<td>
{{ frappe.utils.fmt_money(doc.grand_total, currency = doc.currency, precision = 2)[1:] }} {{ currency.symbol }}
</td>
</tr>
</tbody>
</table>
ggf ist es auch gewünscht die Steuern anders zu behandeln. z.B.:
{% if row.tax_amount > 0 %}
{% if row.tax_amount != 0 %}