Der Versand eines Belegs läuft in **vier Stufen**, von denen die letzten zwei asynchron über die Job Queue laufen (damit PDF-Rendering und der eigentliche REST-Upload die Benutzer-Session nicht blockieren):
```
Beleg (Buchen/Drucken/Archivieren) Benutzer-Aktion "An d.velop senden"
│ │
└──────────────────┬──────────────────────────────────┘
▼
Stufe 1 KWG_DocTransferDocReferenceMgt.SendToDvelop(...)
→ prüft KWG_DocTransActiveDocSetup (aktiv? automatisch/manuell?)
→ legt KWG_DocumentTransferReference an (Status = New)
│
▼
Stufe 2 KWG_DocTransUploadQueueManager
→ baut JSON-Payload aus KWG_DocumentTransMappingTables/-Fields
→ legt KWG_UploadQueue-Eintrag an
→ erzeugt Job Queue Entry → Codeunit KWG_DocumentTransferHelper
→ Reference-Status = Queued
│
▼ (Job Queue, je Beleg)
Stufe 3 KWG_DocumentTransferHelper.OnRun (TableNo = Job Queue Entry)
→ rendert Beleg als PDF (Report Selections / Report.SaveAs)
→ speichert PDF in KWG_UploadQueue.Document
→ KWG_UploadQueue.Status = Waiting
(entfällt bei Anhängen/Drag&Drop – Datei liegt bereits vor)
│
▼ (Job Queue, wiederkehrend)
Stufe 4 KWG_DocTransJobQueueDispatcher → KWG_DocTransferDocReferenceMgt.Upload()
→ holt alle Reference-Datensätze mit Status = Queued
→ KWG_DocTransFileUploadRestMgt.UploadDocumentToDvelop:
1. POST PDF-Chunk → /dms/r/{Repo}/blob/chunk/ → contentLocationUri
2. contentLocationUri in Payload einsetzen
3. POST Payload → /dms/r/{Repo}/o2m → d.velop-Dokument-ID/-URL
→ Erfolg: Reference-Status = Upload, d.velop-ID/-URL gespeichert, Queue-Eintrag gelöscht
→ Fehler: Reference-Status = Error, KWG_ErrorProtocol-Eintrag, Fehler in "Error Messages" sichtbar
```
**Wichtig:**
- Die **automatische** Auslösung (Stufe 1) hängt an Standard-BC-Events (`Sales-Printed`, `Purch.Header-Printed`, `OnAfterInsertEvent` der gebuchten Kopftabellen, `ArchiveManagement`-Events, `Document Attachment.OnAfterInsertEvent`).
- Die **manuelle** Auslösung erfolgt über die Aktion „An d.velop senden" auf Beleg-Karten (Einzelbeleg) bzw. per Mehrfachauswahl auf Listenseiten (`KWG_DocumentTransferBatch`).
- Ob automatisch, manuell oder beides gilt, wird pro Belegart/Dokumenttyp in **Aktive Belegübertragungen** (`KWG_DocTransActiveDocSetup`) festgelegt (Enum `KWG_DocTransferTransferType`).
- Die wiederkehrende Job-Queue-Eintrag für `KWG_DocTransJobQueueDispatcher` (Stufe 4) muss einmalig manuell angelegt werden – die App legt ihn nicht automatisch an.
---