Kapitel 4 – Stammdatenverwaltung
Ziel dieses Kapitels
Die Stammdaten bilden das Fundament der ERPNext-Lösung. Sämtliche nachgelagerten Prozesse – von der Vertragsverwaltung über die Verarbeitung von Ladevorgängen bis hin zur Rechnungsstellung – greifen auf diese Daten zu.
Dieses Kapitel beschreibt den Aufbau der Stammdaten, deren Herkunft sowie deren Zusammenspiel innerhalb der ERPNext-Lösung.
Nach diesem Kapitel soll der Leser verstehen,
-
welche Stammdaten innerhalb ERPNext verwaltet werden,
-
aus welchem System diese stammen,
-
wie die Synchronisation erfolgt,
-
welche Daten manuell gepflegt werden dürfen,
-
welche Stammdaten ausschließlich aus Gridware übernommen werden.
4.1 Überblick
Die Stammdatenverwaltung umfasst sämtliche dauerhaft benötigten Informationen innerhalb der ERPNext-Lösung.
Hierzu gehören insbesondere:
| Stammdaten | Beschreibung | Quelle |
|---|
Diese Stammdaten werden in nahezu allen Geschäftsprozessen verwendet.
4.2 Gridware Party (Custom)
Zweck
Die Gridware Party bildet die zentrale Integrationsschicht zwischen der Datenstruktur von Gridware und der kaufmännischen Datenstruktur von ERPNext.
Während ERPNext zwischen Customer und Supplier unterscheidet, verfolgt Gridware einen anderen Ansatz. Dort wird zunächst in Entitäten (Parties) gedacht. Eine Entität repräsentiert entweder eine Person oder eine Organisation und beschreibt damit den eigentlichen Vertragspartner.
Erst innerhalb eines bestimmten Vertrags oder Geschäftsprozesses erhält diese Entität eine fachliche Rolle. Eine Entität kann beispielsweise:
- ausschließlich Kunde sein,
- ausschließlich Lieferant sein oder
- gleichzeitig Kunde und Lieferant sein.
Diese Flexibilität lässt sich mit den Standard-Doctypes von ERPNext nicht abbilden, da Customer und Supplier dort voneinander getrennte Stammdatenobjekte sind.
Aus diesem Grund wurde der Gridware Party Doctype als zentrale Integrationsschicht entwickelt.
Rolle innerhalb der Systemarchitektur
Gridware API
↓
[Authentifizierung & Datenabfrage]
↓
Gridware Party (zentrale Integrationsschicht)
↓
├─→ Customer (wenn is_customer=1)
├─→ Supplier (wenn is_supplier=1)
├─→ Contact (Ansprechpartner)
├─→ Address (Adressen)
└─→ Gridware Payment Method (SEPA-Mandate)
Der Gridware Party Doctype steht im Zentrum der Stammdatensynchronisation

Alle späteren Geschäftsprozesse greifen indirekt auf den Gridware Party Datensatz zurück.
Aufbau des Doctypes
Der Gridware Party Doctype speichert sämtliche grundlegenden Informationen eines Vertragspartners.
Die Informationen lassen sich in mehrere Bereiche unterteilen.
Tab 1 – Details
Der Reiter Details enthält die grundlegenden Stammdaten sowie die fachliche Klassifizierung der Entität.
Connections
Im oberen Bereich werden sämtliche Beziehungen der Gridware Party zu anderen ERPNext-Objekten dargestellt.
Hierzu gehören insbesondere:
- Customer – Verknüpfung zum kaufmännischen Kunden
- Supplier – Verknüpfung zum Lieferanten
- Gridware Contract – Zugeordnete Verträge
Links (automatisch generiert):
├─ Customer (custom_gridware_party)
├─ Supplier (custom_gridware_party)
└─ Gridware Contract (über contract_customers.gridware_party)
Dadurch ist jederzeit nachvollziehbar, in welchen kaufmännischen Prozessen die Entität verwendet wird.
Basic Identity
Dieser Bereich beschreibt die eigentliche Identität der Entität.
Gespeichert werden unter anderem:
display_name
Text
Gridware API
Anzeigename (Person oder party_kind
Select
Gridware Die/ Person / User
gridware_subject_id
Text (eindeutig)
Gridware organization_name
Text
Gridware API
Name der Organisation (bei party_kind="Organization")
first_name
Text
Gridware API
Vorname (bei party_kind="Person"/"User")
last_name
Text
Gridware API
Nachname (bei party_kind="Person"/"User")
salutation
Link→Salutation
Gridware API
Anrede (Herr/Frau/etc.)
is_active
Check
Gridware API
Aktiv-Status (0/1)
is_employee
Check
Gridware API
Mitarbeiter-Flag (0/1)
Wichtig: Die gridware_subject_id ist der eindeutige technische Identifikator. Sie dient als Referenz für sämtliche Synchronisationsprozesse.Synchronisationsprozesse und wird von Gridware als subjectId für Personen oder Organisationen vergeben.
Contact
Hier werden die grundlegenden Kommunikationsinformationen gespeichert.
Beispiele:
TelefonnummerE-Mail-Adresse
contact_id
Text
Gridware API
email
Email
Gridware API
phone
Text
Gridware API (Funktion: sanitize_phone_number)
Diese Daten dienen später als Grundlage für die automatische Erstellung bzw. Aktualisierung von ERPNext Contacts.
Role Classification and Links
Dieser Bereich definiert die fachliche Rolle der Entität innerhalb des Systems.
Eine Entität kann dabei folgende Rollen besitzen:
- Customer
- Supplier
- Customer und Supplier gleichzeitig
Zusätzlich werden hier die jeweiligen Gridware-spezifischen Nummern gespeichert.
Beispiele:
- Feld Datentyp Wert Beschreibung
is_customer
Check
0/1
Ist diese Party ein Kunde?
gridware_customer_number
Text
z.B. "BEC-K-00001058"
Eindeutige Kundennummer aus Gridware
external_customer_number
is_supplier
Check
0/1
Ist diese Party ein Lieferant?
gridware_supplier_number
Text
z.B. "BEC-L-00001143"
Eindeutige Lieferantennummer aus Gridware
Diese Informationen werden in späteren Geschäftsprozessen, insbesondere im Vertragsmanagement und in der Abrechnung, verwendet.
Tab 2 – Address & Contact
Der Reiter Address & Contact verwaltet sämtliche Adressinformationen einer Gridware Party.
Dabei wird bewusst zwischen den Originaldaten aus Gridware und den innerhalb ERPNext erzeugten Stammdaten unterschieden.
Die Adress und Kontaktdatensätze werden sowohl vom DocType Supplier als auch Customer verwendet, sodass es nicht zu Duplikaten kommt. Jeder Adress- und Kontaktdatensatz wird mit einer ID versehen, die direkt zu der Gridware Party zugeordnet werden kann.
Raw Address
Im oberen Bereich werden sämtliche Adressen gespeichert, die direkt aus Gridware synchronisiert wurden.
Hierzu gehören beispielsweise:
gridware_address_id
Eindeutige Address ID aus Gridware
address_type
Adresstyp (z.street
Straße
house_number
Hausnummer
postal_code
Postleitzahl
city
Stadt
country
Land
additional_info
Zusatzinformationen
Diese Daten stellen den unveränderten Datenbestand aus Gridware dar und dienen als Grundlage für die weitere Verarbeitung innerhalb ERPNext.
Address & Contact
Im unteren Bereich können aus den synchronisierten Rohdaten automatisch ERPNext-Stammdaten erstellt werden.
Hier werden anschließend die eigentlichen ERPNext-Objekte verwaltet:
- Address
- Contact
Dadurch erfolgt eine klare Trennung zwischen den synchronisierten Gridware-Daten und den kaufmännischen Stammdaten innerhalb ERPNext.
Diese Struktur ermöglicht es, Änderungen an den Originaldaten nachzuvollziehen und gleichzeitig die ERPNext-Standards vollständig zu nutzen.
Tab 3 – Payment Method
Der Reiter Payment Method enthält sämtliche Zahlungsmethoden, die einer Gridware Party zugeordnet sind.
Da eine Entität mehrere Zahlungsmethoden besitzen kann (immer nur eine Methode aktiv, die anderen als Historie), wurde dieser Bereich als Child Table umgesetzt.
Jede Zeile repräsentiert eine einzelne Gridware Payment Method.
Gridware Payment Method
Für jede Zahlungsmethode werden unter anderem folgende Informationen gespeichert:
gridware_payment_id
Eindeutige ID aus Gridware
Gridware payment_type
erpnext_bank_account
Link→Bank Account
Automatisch gemappt
bank_name
Name der Bank
Gridware API
iban
Kontonummer
Gridware API
bic
Bank erpnext_sepa_mandate
Link→SEPA Mandate
sepa_mandate_id
SEPA-ID aus Gridware
Gridware API
created_date
Erstellungsdatum
is_default
Standard-Zahlungsmethode
Gridware API
Zweck
Dieser Bereich bildet die Grundlage für sämtliche Zahlungsprozesse innerhalb der ERPNext-Lösung.
Die gespeicherten Informationen werden insbesondere verwendet für:
- Erstellung von SEPA-Mandaten
- Zuordnung von Bankkonten
- Generierung von SEPA-XML-Dateien
- Zahlungsabwicklung
- Payment Entries
Durch die Verknüpfung zwischen der Gridware Payment ID und dem ERPNext Bank Account kann jederzeit nachvollzogen werden, welche Zahlungsmethode aus Gridware welchem Bankkonto und welchem SEPA-Mandat in ERPNext entspric
Typische Anwendungsfälle
Ein Gridware Party Datensatz wird unter anderem verwendet für:
-
Synchronisation neuer Kunden
-
Synchronisation neuer Lieferanten
-
Aktualisierung von Kontaktdaten
-
Verknüpfung mit Gridware Contracts
-
Zuordnung von Payment Methods
-
Erstellung von Customer- und Supplier-Beziehungen
-
Grundlage für Customer Portal Benutzer
-
Identifikation von Vertragspartnern während der Abrechnung
4.3 Customer
Zweck
Der Customer repräsentiert den kaufmännischen Rechnungsempfänger innerhalb ERPNext.
Ein Customer kann sowohl eine Privatperson als auch ein Unternehmen sein.
Der Customer bildet die Grundlage für:
-
Angebote
-
Aufträge
-
Rechnungen
-
Payment Entries
-
Subscriptions
-
Customer Portal
- Customer Usage Data (für Ladevorgänge)
Herkunft
Customer werden nicht in ERP Next manuell angelegt. Sie entstehen durch die Synchronisation der entsprechenden Organisation oder Person aus Gridware.
Während der Synchronisation erfolgt zusätzlich die Verknüpfung mit:
-
Contacts
-
Addresses
-
Contracts
-
Payment Methods
Besondere Anpassungen
Im Rahmen der Implementierung wurden Customer um projektspezifische Informationen erweitert.
Hierzu gehören unter anderem:
Custom
FieldsGridware-ID
Zuordnung
custom_gridware_party
Link→Gridware API-Synchronisation
Customer
custom_gridware_customer_number
Text
Eindeutige Vertragsinformationen
custom_sepa_mandate_reference
Link→SEPA Mandate
Standard-Lastschriftmandat
4.4 Supplier
Zweck
Supplier repräsentieren Betreiber oder andere Leistungserbringer, welche später gegenüber becharged abgerechnet werden.
Sie bilden die Grundlage für:
-
Purchase Invoices
-
Supplier Usage Data
-
Lieferantenabrechnungen
-
Rückvergütungen
Herkunft
Wie Customer entstehen auch Supplier auf Basis der Informationen aus Gridware.
Die Zuordnung erfolgt über den jeweiligen Gridware Contract.
Zukunft
Mit der Erweiterung der Lieferantenabrechnung wird dieser Bereich deutlich an Bedeutung gewinnen.
Insbesondere werden zukünftig weitere Funktionen ergänzt:
Lieferantengutschriften
Selbstabrechnung
Auszahlungsprozesse
Supplier Statements
4.5 Contacts
Contacts enthalten sämtliche Ansprechpartner eines Customers oder Suppliers.
Ein Unternehmen kann mehrere Ansprechpartner besitzen.
Typische Rollen:
-
Primary Contact
-
Billing Contact
-
Technical Contact
Bei der Erstellung von Verkaufsdokumenten wird automatisch der passende Ansprechpartner verwendet.
4.6 Addresses
Adressen werden getrennt von Customer und Supplier verwaltet.
Dadurch können mehrere Adressen einem Geschäftspartner zugeordnet werden.
Beispiele:
-
Rechnungsadresse
-
Lieferadresse
-
Firmenstandort
-
Ladepark
-
Baustelle
Für die Druckformate gelten projektspezifische Regeln bezüglich Customer Name, Address Title und Contact Person.
(Verweis auf Kapitel "Druckformate")
4.7 Items
Artikel bilden die Grundlage sämtlicher Rechnungs- und Lieferantenabrechnungen.
Je nach Geschäftsmodell werden unterschiedliche Artikel verwendet.
Beispiele:
-
Ladevorgänge
-
Monatliche Grundgebühren
-
Hardware
-
Dienstleistungen
-
Erstattungen
Die Zuordnung erfolgt später über die Vertragslogik.
Zuordnung
via Contract Type Mapping
Quelle: becharged/becharged/utils.py Funktion get_item_code_from_mapping
# In Becharged Settings: contract_type_mappings (Child Table)
settings = frappe.get_single("Becharged Settings")
for mapping in settings.contract_type_mappings:
# Contract Type + VAT → Item Code
if (mapping.contract_type == "USAGE_POSTPAID" and
mapping.vat_rate == 19):
return "CHARGING-POSTPAID-19" # Item Code
Tabelle (Beispiel):
4.8 Subscriptions
Subscriptions bilden die Grundlage für wiederkehrende Abrechnungen.
Sie werden insbesondere verwendet für:
-
monatliche Grundgebühren
-
Vertragsgebühren
-
Servicegebühren
Zusätzlich werden im Rahmen der monatlichen Abrechnung die entsprechenden Verbrauchsdaten ergänzt.
4.9 Payment Terms & SEPA
Für jeden Customer können Zahlungsbedingungen und SEPA-Informationen hinterlegt werden.
Die SEPA-Stammdaten stammen grundsätzlich aus Gridware und werden nach ERPNext synchronisiert.
Sie bilden die Grundlage für:
-
SEPA-XML
-
Payment Entries
-
Lastschriftverfahren
4.10 Synchronisationsprozesse:
Daily Scheduler Jobs
Quelle: hooks.py
scheduler_events = {
"daily": [
"becharged.becharged.utils.fetch_all_contract_parties",
"becharged.becharged.utils.update_gridware_usage_suppliers",
"becharged.becharged.doctype.gridware_usage.gridware_usage.retry_failed_usage_completion"
]
}
1. fetch_all_contract_parties() (täglich)
Quelle: utils.py
def fetch_all_contract_parties():
"""
Findet alle Gridware Contracts wo:
- gridware_supplier_party gesetzt, aber supplier NICHT gesetzt
- contract_customers.gridware_party gesetzt, aber customer NICHT gesetzt
Erstellt dann die fehlenden Customer/Supplier Links
"""
Logik:
SELECT DISTINCT gc.name
FROM `tabGridware Contract` gc
LEFT JOIN `tabGridware Contract Customer` gcc ON gcc.parent = gc.name
WHERE
(gc.gridware_supplier_party IS NOT NULL
AND gc.gridware_supplier_party != ''
AND (gc.supplier IS NULL OR gc.supplier = ''))
OR
(gcc.gridware_party IS NOT NULL
AND gcc.gridware_party != ''
AND (gcc.customer IS NULL OR gcc.customer = ''))
2. update_gridware_usage_suppliers() (täglich)
Quelle: utils.py
def update_gridware_usage_suppliers():
"""
Updated supplier + gridware_supplier_party in allen Gridware Usage
basierend auf deren Gridware Contract
"""
Logik:
SELECT gu.name, gc.supplier, gc.gridware_supplier_party
FROM `tabGridware Usage` gu
INNER JOIN `tabGridware Contract` gc ON gu.gridware_contract = gc.name
WHERE
(gc.gridware_supplier_party IS NOT NULL
AND (gu.gridware_supplier_party IS NULL OR gu.gridware_supplier_party = ''))
OR
(gc.supplier IS NOT NULL
AND (gu.supplier IS NULL OR gu.supplier = ''))
4.11 Typische Fehler
| Problem | Ursache | Lösung |
|---|---|---|
| Customer fehlt | Synchronisation nicht durchgeführt | API-Synchronisation prüfen |
| Supplier fehlt | Gridware Party nicht zugeordnet | Contract prüfen |
| Contact fehlt | Ansprechpartner nicht synchronisiert | API erneut ausführen |
| Adresse falsch | Änderungen nur in ERPNext vorgenommen | Änderungen in Gridware durchführen |
| SEPA fehlt | Mandat nicht synchronisiert | Payment Method prüfen |
4.12 Best Practices
Für die Pflege der Stammdaten gelten folgende Grundregeln:
-
Stammdaten grundsätzlich im führenden System pflegen.
-
Manuelle Änderungen an synchronisierten Feldern vermeiden.
-
Änderungen nach Möglichkeit über die vorgesehenen Synchronisationsprozesse durchführen.
Zusammenfassung
Die Stammdatenverwaltung bildet die Grundlage aller weiteren Geschäftsprozesse. Eine konsistente Pflege und Synchronisation der Stammdaten ist Voraussetzung für eine fehlerfreie Vertragsverwaltung, Abrechnung und Finanzbuchhaltung.





