Get Company Master Data
Zuletzt geändert: 19.04.2026 03:03

Übersicht

Get-CompanyMasterData #

ÜBERSICHT #

Liest zentrale Firmen-, Anschrift-, Kommunikations- und Bankdaten aus dem EULANDA-Firmenstamm und gibt sie als verschachtelte Hashtable zurück.

SYNTAX #

Get-CompanyMasterData  [<CommonParameters>]

BESCHREIBUNG #

Liest die unter \MODULES\Grundwerte\Firmenstamm, \MODULES\Grundwerte\Xfacture und \MODULES\Grundwerte\Bank\1..5 hinterlegten Registry-Werte aus der EULANDA-Datenbank und bündelt sie in einer verschachtelten Hashtable. Das Ergebnis ist das kanonische Input-Format für die XML-Export-Pipeline (Export-InvoiceXml, Export-SalesOrderXml, Export-DeliveryNoteXml, Export-AddressXml, Export-GobdZ3) sowie für die Platzhalter-Engine (Get-PlaceholderContext -> Expand-PlaceholderString).

Abgedeckte Felder #

  • Identifikation: GLN, UstID, SteuerNr, CreditorID
  • Firma: Ident (Firmenname), Ceo (Geschäftsführer), RegisterGericht, RegisterNummer
  • Rechtlicher Zusatztext: LegalNote (Fußzeile aus Xfacture-Konfiguration)
  • Anschrift: Strasse, Plz, Ort, Land (ISO-Code via cnf_LandNachIso)
  • Kommunikation: Tel, Fax, Email, PeppolId
  • Bankverbindungen 1..3: Id, Ident (Bankname), IBAN, BIC

Bankeinträge ohne Name, IBAN und BIC werden ausgelassen. Alle Strings werden per Get-TrimmedValue bereinigt (Trim + geschützte Leerzeichen); IBAN, BIC, GLN, UstID, SteuerNr, CreditorID, RegisterNummer, Tel und Fax werden zusätzlich von allen Leerzeichen befreit. Die LegalNote wird von CRLF auf Komma-Trennung normalisiert.

Registry-Cache (EULXT_REGCACHE). Die Funktion liest über die RegCache-API (Get-EulandaRegistrySubtree). Ist die Environment-Variable EULXT_REGCACHE=hive gesetzt, werden die sieben Subtrees (Firmenstamm, Xfacture, Bank\1..5) aus dem lokalen HiveStore unter %LOCALAPPDATA%\EULANDA\EulandaXtools\RegCache\<DbKey> bedient statt aus der SQL-Registry geholt. Spart in VPN-Szenarien spürbar Roundtrips. Ohne gesetzte Variable (oder EULXT_REGCACHE=off) läuft der Zugriff transparent direkt gegen die Datenbank.
Memory-Footprint. Es wird bewusst NICHT der komplette \MODULES\Grundwerte-Tree geladen (der kann in Produktion mehrere MB umfassen - Logos, Large-Texts). Stattdessen werden nur die sieben tatsächlich benötigten Sub-Subtrees angefordert. Das kostet ein paar Roundtrips mehr, hält den Speicherverbrauch aber unter ca. 100 KB und vermeidet OOM-Probleme in Export-Batches.
Rückgabe $null bei fehlendem Firmenstamm. Liegt unter \MODULES\Grundwerte\Firmenstamm kein Eintrag vor (frische oder unvollständig initialisierte Datenbank), liefert die Funktion $null. Aufrufer müssen das prüfen - siehe Export-AddressXml für das kanonische Fehlerverhalten.

PARAMETER #

-Conn #

Offenes ADODB.Connection-Objekt zur EULANDA-Datenbank. Die Connection muss bereits geöffnet sein ($Conn.Open(...)); sie wird von dieser Funktion weder geöffnet noch geschlossen (Caller-owns-Connection).

AUSGABEN #

System.Collections.Hashtable

Verschachtelte Hashtable mit Top-Level-Keys GLN, UstID, SteuerNr, CreditorID, Ident, LegalNote, Ceo, RegisterGericht, RegisterNummer (alle string) sowie Unterknoten Anschrift (Hashtable mit Strasse, Plz, Ort, Land), Kommunikation (Hashtable mit Tel, Fax, Email, PeppolId) und Bank (Array von Hashtables mit Id, Ident, IBAN, BIC, 0..3 Elemente). Bei leerem Firmenstamm: $null.

BEISPIELE #

# 1) Absender-Kopf für eine selbstgebaute Rechnungsmail
$conn = New-Object -ComObject ADODB.Connection
$conn.Open("File Name=C:\EULANDA\eulanda.udl")
try {
  $firma = Get-CompanyMasterData -Conn $conn
  if (-not $firma) { throw "Firmenstammdaten fehlen." }

  $absender = "{0}, {1}, {2} {3}" -f `
    $firma.Ident, $firma.Anschrift.Strasse,
    $firma.Anschrift.Plz, $firma.Anschrift.Ort
  Write-Host "Von: $absender"
  Write-Host "USt-ID: $($firma.UstID)  |  GLN: $($firma.GLN)"
}
finally {
  $conn.Close()
}
# 2) IBAN und BIC der Hauptbank in Mail-Signatur einsetzen
$firma = Get-CompanyMasterData -Conn $conn
$hausbank = $firma.Bank | Where-Object { $_.Id -eq '1' } | Select-Object -First 1
if ($hausbank) {
  $signatur = @"
Mit freundlichen Grüßen
$($firma.Ceo)
$($firma.Ident)

Bankverbindung: $($hausbank.Ident)
IBAN: $($hausbank.IBAN)
BIC:  $($hausbank.BIC)
"@
  Send-EulandaMail -To 'kunde@example.com' -Subject 'Rechnung' -BodyHtml $signatur
}
# 3) Peppol-/Xfacture-Versand vorbereiten (Hive-Cache aktiv)
$env:EULXT_REGCACHE = 'hive'
Initialize-EulRegStore    # Store auf Hive umschalten

$firma = Get-CompanyMasterData -Conn $conn
if (-not $firma.Kommunikation.PeppolId) {
  Write-Warning "Keine PeppolId im Firmenstamm - Peppol-Versand nicht möglich."
  return
}
$routing = @{
  SenderId    = $firma.Kommunikation.PeppolId
  SenderGln   = $firma.GLN
  SenderName  = $firma.Ident
  LegalFooter = $firma.LegalNote
}
$routing | Format-List
# 4) Einfache Snapshot-Zeile fürs Logbuch eines Export-Batchlaufs
$f = Get-CompanyMasterData -Conn $conn
"{0} | {1} {2} | {3}" -f $f.Ident, $f.Anschrift.Plz, $f.Anschrift.Ort, $f.UstID |
  Add-Content -Path 'C:\Logs\export.log'

HINWEISE #

Consumer dieser Funktion im Modul: Export-InvoiceXml, Export-SalesOrderXml, Export-DeliveryNoteXml, Export-AddressXml (bei -WithCompanyData), Export-GobdZ3, Get-PlaceholderContext, Import-SalesOrderSimulation.

Externe Consumer (bei Signaturänderungen prüfen): XfactureModule (C:\Git\Products\XfactureModule), ErpXe-Plugins, kundenspezifische Projekte unter C:\Git\customers\.

Datenquelle: cnf_LandNachIso für ISO-Länderkonvertierung, alles andere über die RegCache-API (Get-EulandaRegistrySubtree -> $script:RegStore).