tüit Logo Direkt zum Hauptinhalt

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

  • Jinja
  • JS
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

image-1671014448199.png

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.

image-1668598812184.png

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 %}
                        &nbsp;
                        {% 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>

image-1675180751757.png

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.

image-1670946435668.png

image-1670946485063.png

<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 %}
                        &nbsp;
                        {% 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>

image-1670946530990.png

 

ggf ist es auch gewünscht die Steuern anders zu behandeln. z.B.:

{% if row.tax_amount > 0 %}

{% if row.tax_amount != 0 %}