Get-InvoiceAttachmentSource #
ÜBERSICHT #
Sammelt die Beizettel einer Rechnung (Anlagen BG-24) aus dem DMS der Klassik und aus der Ablage der X-Suite und prüft sie.
SYNTAX #
Get-InvoiceAttachmentSource [-InvoiceId] <int> [[-InvoiceNo] <int>] [[-Source] <string>]
[[-WorkFolder] <string>] [[-Conn] <__ComObject>] [[-Udl] <string>] [[-ConnStr] <string>]
[<CommonParameters>]
BESCHREIBUNG #
Stundenzettel, Aufmaße und andere Beizettel gehen als Anlage mit der E-Rechnung hinaus. Bis November 2026 kamen sie nur aus dem Ordner ‘Annex’ im DMS-Ordner der Rechnung (Klassik, Plugin esol.DMS). Die X-Suite hat bewusst kein dateibasiertes DMS; ihre Beizettel liegen in der Ablage (EulandaXdms) und werden über die Sicht ‘xdms.InvoiceAttachment’ gelesen (EulandaXdms ab 1.1.0, Vertrag mit der XSuite-Sitzung vom 06.11.2026). Anlass: Kunde Brummbaum.
Diese Funktion kennt beide Quellen; wer sie aufruft (Xfacture, die E-Beleg-Route der X-Suite), weiß nicht, woher eine Datei kommt.
- Dms: alle Dateien im Ordner ‘Annex’ des DMS-Ordners der Rechnung, nicht rekursiv, nach Namen sortiert, ohne versteckte und Systemdateien. Ohne DMS-Plugin oder ohne Ordner: nichts, kein Fehler.
- Suite: die Zeilen der Sicht zur Rechnung in der Reihenfolge SortKey. Die Bytes werden in einen Arbeitsordner geschrieben, der Titel wird zur Beschreibung (BT-123), der Dateiname zur Kennung (BT-122). Ohne Sicht (keine X-Suite oder älteres EulandaXdms): nichts, kein Fehler. Fehlt das Leserecht, bricht die Funktion mit Klartext ab.
- Auto (Vorgabe): beide Quellen, erst DMS, dann Ablage.
Am Ende prüft ‘Get-InvoiceAttachment’ die ganze Liste wie bisher: erlaubte Dateitypen, höchstens 15 MB zusammen, kein Name doppelt, auch nicht über beide Quellen hinweg. Gelesen wird nur; in die Ablage der X-Suite schreibt diese Funktion nichts (EulandaRules docs/plugins.md).
PARAMETER #
-InvoiceId #
Type: int
Id der Rechnung (dbo.Rechnung.Id).
-InvoiceNo #
Type: int
Rechnungsnummer, hilft dem DMS beim Finden des Ordners.
-Source #
Type: string
Default: 'Auto'
Auto (beide), Dms (nur Klassik) oder Suite (nur Ablage der X-Suite).
-WorkFolder #
Type: string
Default: ''
Ordner für die Dateien aus der Ablage der X-Suite. Ohne Angabe ein neuer Ordner unter %TEMP%. Der Aufrufer löscht ihn nach dem Export (Rückgabe WorkFolder).
-Conn #
Type: __ComObject
Offene ADODB-Verbindung. Wird nicht geschlossen.
-Udl #
Type: string
Pfad zu einer UDL-Datei, wenn keine Verbindung übergeben wird.
-ConnStr #
Type: string
Verbindungszeichenfolge, wenn keine Verbindung übergeben wird.
AUSGABEN #
hashtable mit
- Items: hashtable[] wie von ‘Get-InvoiceAttachment’ (Path, FileName, MimeType, Reference, Description, Length) plus Source (‘Dms’ oder ‘Suite’); unverändert an ‘Export-Invoice -Attachment’ zu geben. - DmsFolder: der geprüfte Annex-Ordner oder ‘’. - SuiteAvailable: $true, wenn die Sicht der X-Suite da ist. - WorkFolder: der Arbeitsordner oder ‘’, wenn keiner gebraucht wurde.
BEISPIELE #
$att = Get-InvoiceAttachmentSource -Conn $conn -InvoiceId 4711 -InvoiceNo 20260852
Export-Invoice -Conn $conn -InvoiceId 4711 -OutputXml $xml -Attachment $att['Items']
if ($att['WorkFolder']) { Remove-Item $att['WorkFolder'] -Recurse -Force }
HINWEISE #
Plan: Xfacture docs/internal/plan-invoice-attachment-source.md; Vertrag der Sicht: EulandaXdms docs/internal/plan-invoice-annex.md.