tüit Logo

Einstellungen

Druckkopf

Einleitung

Der Druckkopf in ERPNext ist ein DocType welcher lediglich für eine Drucküberschrift verwendet werden kann. z.B. ist der Kundenauftrag auch gleichzeitig die Auftragsbestätigung.

Wir können also für den Kundenauftrag zwei Druckköpfe anlegen (Auftrag und Auftragsbestätigung) und diese dann entsprechend für die interne oder externe Kommunikation verwenden.

 

Druckkopf anlegen

Einstellungen -> Druck -> Druckkopf

 

 

Übersetzungen (Translation)

Das verwenden von mehreren Sprachen im System kann zu einem hohen Fehlerpotential führen!

Einleitung

frappe's ERPNext erlaubt es das System mehrsprachig zu verwenden. Für Übersetzungen gibt es in ERPNext mind. drei Herangehensweisen:

  1. Händisches erstellen einer Übersetzung im eigenen DocType
  2. Verwenden des Translation Tools
  3. Übersetzen einzelner Felder eines DocTypes

1. Der DocType Übersetzung, welcher über die Suche zu finden ist gibt uns die Möglichkeit Text des Systems zu übersetzen. Dazu gehören nicht nur einzelne Feldnamen sondern auch ganze Meldungen die z.B. in Pop-Ups oder

1. Händische Übersetzung

Im Doctype Übersetzung können einzelne Strings übersetzt werden.

 

image-1621245528928.gifDocType Übersetzung zum händischen übersetzen einzelner Worte oder Sätze im System.

Achtung, "Case Sensitive" Groß und Kleinschreibung wird hier berücksichtigt.

PDF Belege übersetzen

ERPNext ermöglicht die Abbildung von unterschiedlichen Sprachen in Belegen

Texte in Druckformaten übersetzen

Alle Druckformate werden in der Entwicklungsebene (custom HTML) auf englisch gehalten. Dort sind Texte welche abgedruckt werden immer in folgendem Schema angelegt

Print: {{  _('English Text') }}

Wollen wir, dass der Inhalt von Feld-Variablen übersetzt wird geht dies ebenfalls mit

{{  _(doc.feld_variable) }}

der Text der dort eingetragen ist kann dann selbstständig übersetzt werden. Hier für bietet das System pro Satz oder Wort, im folgenden String genannt. Eine einzelne Übersetzung eines Strings passiert im DocType Übersetzung.

Hier wählen wir dann die Sprache aus in welche übersetzt werden soll und die entsprechenden Strings.

image-1603980550168.png

 

"Übersetzbar" beim erstellen von DocTypes

Das übersetzen von Standardfeldern ist möglich!

Das Feld übersetzbar beim erstellen von custom fields bringt die Möglichkeit den Inhalt des Feldes von Nutzern übersetzen zu lassen.

image-1598336065308.png

 

 

image-1598336485586.png

 

 

 

 

Nummernkreis (Naming Series)

Seit Version 13 kann der Nummernkreis auf DocTypes fast beliebig angepasst werden.

Einleitung

In ERPNext können wir für eine Vielzahl von Dokumenten einen Nummernkreis einstellen. Für das ordentliche anlegen von Daten essentiell. Das Feld name in jeder Listenansicht wird immer der Nummernkreis sein sofern am DocType der Nummernkreis eingestellt ist.

Den Nummernkreis zeichnet aus, dass er zählt. Wählen wir als Namensgebung ein Feld wie Titel muss der Name genauso einmal sein wie es beim Nummernkreis gefordert wird. Dopplungen gibt es nur DocType übergreifend. So kann z.B. ein Kunde den gleichen Namen wie ein Lieferant tragen obwohl beide so eingstellt sind, dass der Klarname den "Name" ausmacht (Nummernkreis, Kundennummer etc. nicht eingestellt).

Vorkentnisse

Um diesen DocType besser zu verstehen sollten wir uns mit

haben.

Nummernkreis einstellen

Mit den entsprechenden Rechten können wir fast jeden beliebigen DocType anpassen. Dort finden wir unter der "Felder-Tabelle" den Abschnitt Naming.

image-1625560492939.png

1.) Auto Name auf naming_series umstellen und speichern.

image-1625560835222.png

2.) Auf "Add Row" klicken um einen neue Zeile zu erstellen.

3.) Auf der neu erstellten Zeile als Name "Naming Series" eingeben, Type Data.
    Speichern!

4.) Speichern "Update"

image-1625560940839.png

Jetzt kann in --https://exampleERP/app/naming-series/Naming%20Series-- die Namingseries angepasst werden.

Beispiele zur Funktion: (siehe ltz. Screenshot innerhalb Rotes Quadrat)

 

Wo Nummernkreise zwingend notwendig sind

Ausgangsrechnung

Für das Finanzamt ist eine Rechnungsnummer zwingend notwendig. Hier wird darauf geachtet, dass diese lückenlos geführt werden. Hier ist das einstellen eines Nummernkreises unumgänglich.

Wo Nummernkreise sinnvoll sind

Nummernkreise können überall dort besonders gut eingesetzt werden wo etwas automatisch hochgezählt werden soll.

Weiterführende Themen

Kundennummern verwenden

Einleitung

Wächst eine Firma ist es notwendig, dass Daten eindeutig zugewiesen werden können. Gleiches gilt für die Kommunikation nach Außen sowie die Zuordnung von Vorgängen innerhalb der Firma. Ein Hilfsmittel ist hierbei die Kundennummer. Diese gibt uns die Möglichkeit einen Kunden eindeutig zu identifizieren. Weiter kann diese auch vom Kunden genutzt werden um sich zügig zu identifizieren.

Grundeinstellung

Zunächst können wir in den Vertriebseinstellungen vorgeben ob wir Kunden nach Name oder eben nach Nummernkreis erstellen wollen:

image-1606845925811.png

Kundenname

Stellen wir ein, dass die Kunden nach dem Namen erstellt werden hilft dies oft bei der Leserlichkeit und bei der Navigation und Verständlichkeit des Systems. Wollen wir aber eine saubere Datenbasis empfiehlt sich ganz klar die Verwendung eines Nummernkreises.

Nummernkreis 

Der Nummernkreis eignet sich vor allem dann, wenn wir eine große Anzahl an Kunden im System anlegen werden.

Nummerkreise in ERPNext nie ohne Präfix verwenden

Mehr zum Nummernkreis finden wir hier

Druckformat (Printformat)

Druckformate haben 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.

Neues Druckformat erstellen

Standard setzen

Wir können jedes Druckformat als Standard auf dem entsprechenden DocType einstellen

https://handbuch.tueit.de/books/erpnext-benutzerhandbuch/page/standarddruckformat

 

 

Mitteilung (Notification)

Einleitung

In diversen Szenarien wünschen wir uns Benachrichtigungen die automatisiert vom System versendet werden. Dies kann gewünscht sein, wenn wir auf Fälligkeiten hingewiesen werden möchten, eingereichte Dokumente verarbeitet wurden oder Projektvorgänge geschlossen wurden. ERPNext bietet uns hierzu diverse Möglichkeiten.

Benachrichtungen können per E-Mail, SMS oder... vom System ausgelöst werden.

Filter

Alarm senden bei

image-1637614033132.png

Eine Benachrichtigung erstellen

image-1621201100516.pngIm Modul Einstellungen auf der Karte E-Mail Benachrichtungen befindet sich der DocType Mitteilung.

E-Mailbenachrichtungen

Berechtigungen

Die E-Mailbenachtichtung wird auch ohne die Berechtigungn "Email" auf dem DocType ausgelöst. Sprich, die Mitteilung wird unabhängig der Anwenderberechtigung versendet.

image-1637225957804.png

 

Beispiele

Anfrage

image-1637229387171.png

image-1637229405628.png

Vorgang

image-1637229432079.png

image-1637229444808.png

Quellen & Verweise

https://frappe.io/kb/notifications/include-document-link-in-notification-email

https://docs.erpnext.com/docs/v13/user/manual/en/setting-up/workflow-actions

 

Benuzerdefinierte Tabellen im Druckformat

Einleitung

Verwenden wir im Druckformat benutzerdefinierte Tabellen...

<div>s verwenden

image-1622798852883.png

Ohne <div>

<!-- Table Heading -->
<table class="table table-bordered table-condensed">
<thead>
<tr>
   <th>{{ _('Item Code') }}</th>
   <th>{{ _('Description') }}</th>
   <th>{{ _('Quantity') }}</th>
   <th>{{ _('Price') }}</th>
   <th>{{ _('Amount') }}</th>
</tr>
</thead>
<tbody>

<!-- Table Content -->
{% set currency = frappe.get_doc("Currency",doc.currency) %}
{%- for row in doc.items -%}
    <tr>
        <td>
            {% set item = frappe.get_doc("Item", row.item_code) %}
            {% if item.variant_of %} 
                {{ item.variant_of }}
            {% else %}
                {{ item.name }}
            {% endif %}     
        </td>
        <td>
            {{ row.description }}<br><br>

    	    <!-- Herkunftsland -->
            {{  _('Country of Origin') }}:
            {% if item.country_of_origin %}
                {{ item.country_of_origin }}
            {% else %}
                {{ _('None') }}
            {% endif %}<br>

            <!-- Kundenreferenzen -->
            {% for refs in item.customer_items %}
                {% if refs.customer_name == doc.customer %}
                {{ _('Your Itemcode')}}: {{ refs.ref_code }}<br>
                {{ _('Your Itemname')}}: {{ refs.ref_name }}
                {% else %}
                    
                {% endif %}
            {% endfor %}<br>
            
            <!-- Palette/Charge -->
            {% if row.batch_no %}
                {% set batch = frappe.get_doc("Batch", row.batch_no) %}
                {{ _('Charge') }}: {{ row.batch_no }}<br>
                                {% if batch.print_supplier_batch == 1 %}
                {{ _('Charge') }} {{ _('Producer') }}: {{ batch.supplier_batch_number }}<br>
                {% endif %}
                {{ _('Manufacturing Date') }}: {% if batch.manufacturing_date %} {{ frappe.utils.get_datetime(batch.manufacturing_date).strftime('%d.%m.%Y') }}{% endif %}<br>
                {{ _('BBE') }}: {% if batch.expiry_date %}{{ frappe.utils.get_datetime(batch.expiry_date).strftime('%d.%m.%Y') }}{% endif %}<br>
            

                <!-- Certificates -->
                {% if batch.technical_data_sheet %}
                    {% set tds = frappe.get_doc("Technical Data Sheet", batch.technical_data_sheet) %}
                    {% if tds.certificates %}
                        {{ _('Certificates') }}:
                    {% endif %}
                    {% for certificate in tds.certificates %}
                        {% if certificate.certified == "Yes" %}
                            {{ certificate.type }}
                            {% if certificate.type == "Organic" %}
                                {% if batch.country_of_origin %}
                                    {% set country = frappe.get_doc("Country", batch.country_of_origin) %}
                                    {% if country.eu_landwirtschaft %}
                                        <br><b>CH-Bio-006 "EU-Landwirtschaft"</b>
                                    {% else %}
                                        <br><b>CH-Bio-006 "Nicht-EU-Landwirtschaft"</b>
                                    {% endif %}
                                {% endif %}
                            {% endif %}
                        {% endif %}
                    {% endfor %}<br>
                {% else %}
                    -
                {% endif %}

            {% endif %}
        <br>
        <br>
        <!-- Lieferdatum -->
        {{ _('Delivery Date') }}: {{ frappe.utils.get_datetime ( row.delivery_date ).strftime('%d.%m.%Y') }}
        </td>

        <td>
            {{ row.qty }} {{ row.uom }}
        </td>
        <td  class="price-column">
            {% if row.uom != row.stock_uom %}
                {% set rate_in_stock_uom = row.rate * row.conversion_factor %}
                {{'%0.2f'| format(rate_in_stock_uom|float)  }} {{ currency.symbol }} / {{ row.stock_uom }}<br>
                {{ row.conversion_factor }} {{ row.stock_uom }} &#8792; 1 {{ row.uom}}
            {% else %}
                {{'%0.2f'| format(row.rate|float)  }} {{ currency.symbol }} / {{ row.uom }}
            {% endif %}
        </td>
        <td  class="price-column">{{'%0.2f'| format(row.amount|float) }} {{ currency.symbol }}</td>
    </tr>
{%- endfor -%}
</tbody>
</table>

image-1622798993193.png

image-1622799047537.png

 

Mit <div>

<!-- Table Heading -->
<table class="table table-bordered table-condensed">
<thead>
<tr>
   <th>{{ _('Item Code') }}</th>
   <th>{{ _('Description') }}</th>
   <th>{{ _('Quantity') }}</th>
   <th>{{ _('Price') }}</th>
   <th>{{ _('Amount') }}</th>
</tr>
</thead>
<tbody>

<!-- Table Content -->
{% set currency = frappe.get_doc("Currency",doc.currency) %}
{%- for row in doc.items -%}
    <tr>
        <td>
            {% set item = frappe.get_doc("Item", row.item_code) %}
            {% if item.variant_of %} 
                {{ item.variant_of }}
            {% else %}
                {{ item.name }}
            {% endif %}     
        </td>
        <td><div>
            {{ row.description }}<br><br>

    	    <!-- Herkunftsland -->
            {{  _('Country of Origin') }}:
            {% if item.country_of_origin %}
                {{ item.country_of_origin }}
            {% else %}
                {{ _('None') }}
            {% endif %}<br>

            <!-- Kundenreferenzen -->
            {% for refs in item.customer_items %}
                {% if refs.customer_name == doc.customer %}
                {{ _('Your Itemcode')}}: {{ refs.ref_code }}<br>
                {{ _('Your Itemname')}}: {{ refs.ref_name }}
                {% else %}
                    
                {% endif %}
            {% endfor %}<br>
            
            <!-- Palette/Charge -->
            {% if row.batch_no %}
                {% set batch = frappe.get_doc("Batch", row.batch_no) %}
                {{ _('Charge') }}: {{ row.batch_no }}<br>
                                {% if batch.print_supplier_batch == 1 %}
                {{ _('Charge') }} {{ _('Producer') }}: {{ batch.supplier_batch_number }}<br>
                {% endif %}
                {{ _('Manufacturing Date') }}: {% if batch.manufacturing_date %} {{ frappe.utils.get_datetime(batch.manufacturing_date).strftime('%d.%m.%Y') }}{% endif %}<br>
                {{ _('BBE') }}: {% if batch.expiry_date %}{{ frappe.utils.get_datetime(batch.expiry_date).strftime('%d.%m.%Y') }}{% endif %}<br>
            

                <!-- Certificates -->
                {% if batch.technical_data_sheet %}
                    {% set tds = frappe.get_doc("Technical Data Sheet", batch.technical_data_sheet) %}
                    {% if tds.certificates %}
                        {{ _('Certificates') }}:
                    {% endif %}
                    {% for certificate in tds.certificates %}
                        {% if certificate.certified == "Yes" %}
                            {{ certificate.type }}
                            {% if certificate.type == "Organic" %}
                                {% if batch.country_of_origin %}
                                    {% set country = frappe.get_doc("Country", batch.country_of_origin) %}
                                    {% if country.eu_landwirtschaft %}
                                        <br><b>CH-Bio-006 "EU-Landwirtschaft"</b>
                                    {% else %}
                                        <br><b>CH-Bio-006 "Nicht-EU-Landwirtschaft"</b>
                                    {% endif %}
                                {% endif %}
                            {% endif %}
                        {% endif %}
                    {% endfor %}<br>
                {% else %}
                    -
                {% endif %}

            {% endif %}
 
        <br>
        <br>
        <!-- Lieferdatum -->
        {{ _('Delivery Date') }}: {{ frappe.utils.get_datetime ( row.delivery_date ).strftime('%d.%m.%Y') }}
        </div>
        </td>

        <td>
            {{ row.qty }} {{ row.uom }}
        </td>
        <td  class="price-column">
            {% if row.uom != row.stock_uom %}
                {% set rate_in_stock_uom = row.rate * row.conversion_factor %}
                {{'%0.2f'| format(rate_in_stock_uom|float)  }} {{ currency.symbol }} / {{ row.stock_uom }}<br>
                {{ row.conversion_factor }} {{ row.stock_uom }} &#8792; 1 {{ row.uom}}
            {% else %}
                {{'%0.2f'| format(row.rate|float)  }} {{ currency.symbol }} / {{ row.uom }}
            {% endif %}
        </td>
        <td  class="price-column">{{'%0.2f'| format(row.amount|float) }} {{ currency.symbol }}</td>
    </tr>
{%- endfor -%}
</tbody>
</table>

image-1622799095576.png

E-Mail-Bericht (Email Digest)

https://docs.erpnext.com/docs/v13/user/manual/en/setting-up/email/email-digest

Einleitung

Dies ist eine im Standard aktivierte E-Mail-Mitteillung welche wir so konfigurieren können, damit wir modulbezogen eine Übersicht der Zahlen erhalten. Die Vorlage kann frei definiert werden. Im Standard ist eine leere Vorlage eingestellt. Diese wird täglich versendet.

image-1644416150078.png

Einstellungen zum täglichen E-Mail-Bericht

Aktiviert
Häkchen Auswirkung
Ja Bericht wird an alle im Feld Empfänger genannten Adressen versendet. Die Häufigkeit wird über das Feld "Wie Häufig?" bestimmt.
Nein Der Bericht wird nicht versendet.

Rechnungswesen

image-1644416489763.png

Arbeitsvorbereitung

image-1644416502127.png

Andere

image-1644416513117.png