Belegfluss (Angebot bis Rechnung) #
Diese Seite zeigt den vollständigen Belegfluss von EULANDA auf SQL-Ebene – vom Angebot bis zur Rechnung einschließlich Teillieferungen und Stornos. Jeder Schritt enthält ein lauffähiges SQL-Beispiel und einen Verweis auf die detaillierte Prozedurdokumentation.
Übersicht #
graph TD
AN["Angebot anlegen
cn_AnCre + cn_CreAnp"]
ANAF["Angebot → Auftrag
cn_AnCopyToAf"]
AF["Auftrag anlegen
cn_CreAf + cn_CreAfp"]
AFBU["Auftrag buchen
cn_AfBuchen"]
AFLF["Auftrag → Lieferschein
cn_TraAfLf_DoJob"]
LFBU["Lieferschein buchen
cn_LfBuchen"]
LFRE["Lieferschein → Rechnung
cn_TraLfRe_DoJob"]
STAF["Restmengen stornieren
cn_AfStornoRest"]
STRE["Rechnung stornieren
cn_ReStorno"]
AN --> ANAF
ANAF --> AFBU
AF --> AFBU
AFBU --> AFLF
AFLF -->|"komplett"| LFBU
AFLF -->|"Teillieferung"| AFLF
AFLF -->|"Rest stornieren"| STAF
LFBU --> LFRE
LFRE --> STRE
1. Angebot anlegen #
Ein Angebot wird über cn_AnCre (Kopf) und cn_CreAnp (Positionen) erstellt.
DECLARE @an_id int, @an_nummer int, @e int
-- Angebotskopf anlegen
EXEC cn_AnCre @ad_id = 42, @an_id = @an_id OUT, @an_nummer = @an_nummer OUT
-- Positionen hinzufügen
EXEC @e = cn_CreAnp @an_id = @an_id, @ar_Nummer = 'PROD-001', @anp_menge = 10
EXEC @e = cn_CreAnp @an_id = @an_id, @ar_Nummer = 'PROD-002', @anp_menge = 5
PRINT 'Angebot ' + CAST(@an_nummer AS varchar) + ' angelegt'
2. Angebot in Auftrag umwandeln #
Die Prozedur cn_AnCopyToAf wandelt ein Angebot in einen Auftrag um. Alle Positionen, Texte und Konditionen werden übernommen.
DECLARE @af_id int, @af_nummer int
EXEC cn_AnCopyToAf
@an_id = @an_id,
@af_id = @af_id OUT,
@af_nummer = @af_nummer OUT
PRINT 'Auftrag ' + CAST(@af_nummer AS varchar) + ' aus Angebot erzeugt'
Das SQL-Ereignis TraAnAf.OnSuccess (10010) wird nach der Umwandlung ausgelöst.
3. Auftrag direkt anlegen #
Alternativ kann ein Auftrag auch direkt – ohne vorheriges Angebot – angelegt werden:
DECLARE @af_id int, @af_nummer int, @e int
-- Auftragskopf anlegen
EXEC cn_CreAf
@ad_id = 42,
@af_BestellNummer = 'PO-2026-001',
@af_id = @af_id OUT,
@af_nummer = @af_nummer OUT
-- Positionen hinzufügen
EXEC @e = cn_CreAfp @af_id = @af_id, @ar_Nummer = 'PROD-001', @afp_menge = 10
EXEC @e = cn_CreAfp @af_id = @af_id, @ar_Nummer = 'PROD-002', @afp_menge = 5
Detaillierte Parameter: cn_CreAf | cn_CreAfp
4. Auftrag buchen #
Das Buchen eines Auftrags fixiert die Preise und gibt den Auftrag zur Weiterverarbeitung frei. Der Auftrag kann über seine ID oder Nummer gebucht werden.
EXEC cn_AfBuchen @Af_id = @af_id
-- oder:
EXEC cn_AfBuchen @Af_Nummer = @af_nummer
Das SQL-Ereignis AfBuchen.OnSuccess (10000) wird nach dem Buchen ausgelöst. Über das Ereignis AfBuchen.Before (10027) kann das Buchen verhindert werden – z.B. für eine Preisprüfung (siehe SQL-Ereignisse).
5. Auftrag in Lieferschein umwandeln #
Die Umwandlung erfolgt über einen Job-Mechanismus. Dadurch können auch mehrere Aufträge in einen Lieferschein zusammengefasst oder Teilmengen geliefert werden.
Komplettlieferung #
DECLARE @JobId int, @lf_id int, @lf_nummer int
-- Job anlegen
INSERT cnTraAfLfJob DEFAULT VALUES
SET @JobId = SCOPE_IDENTITY()
-- Auftrag zum Job hinzufügen (alle Positionen)
EXEC cn_TraAfLf_JobAddAf @JobId = @JobId, @af_id = @af_id
-- Umwandlung durchführen
EXEC cn_TraAfLf_DoJob
@JobId = @JobId,
@lf_id = @lf_id OUT,
@lf_Nummer = @lf_nummer OUT
PRINT 'Lieferschein ' + CAST(@lf_nummer AS varchar) + ' erzeugt'
-- Job aufräumen
EXEC cn_TraAfLf_DelJob @JobId = @JobId
Teillieferung #
Bei einer Teillieferung werden einzelne Positionen mit reduzierter Menge zum Job hinzugefügt:
DECLARE @JobId int, @lf_id int, @lf_nummer int
INSERT cnTraAfLfJob DEFAULT VALUES
SET @JobId = SCOPE_IDENTITY()
-- Nur Position 1 mit Teilmenge (5 von 10)
EXEC cn_TraAfLf_JobAddAfp
@JobId = @JobId,
@afp_id = @afp_id,
@Menge = 5
EXEC cn_TraAfLf_DoJob
@JobId = @JobId,
@lf_id = @lf_id OUT,
@lf_Nummer = @lf_nummer OUT
EXEC cn_TraAfLf_DelJob @JobId = @JobId
Die verbleibende Menge bleibt im Auftrag offen und kann in einer weiteren Lieferung abgerufen werden.
Detaillierte Parameter: cn_TraAfLf_DoJob
6. Lieferschein buchen (Lagerbuchung) #
Die Lagerbuchung des Lieferscheins reduziert den physischen Lagerbestand. Je nach Konfiguration erfolgt die Buchung automatisch bei der Umwandlung oder separat.
DECLARE @JobID int
EXEC cn_LfBuchen
@Lf_id = @lf_id,
@JobID = @JobID OUT
| Parameter | Typ | Beschreibung |
|---|---|---|
@Lf_id | int | Lieferschein-ID (alternativ: @Lf_Nummer) |
@Lf_Nummer | int | Lieferscheinnummer |
@Flags | int | 0 = Standard (Standard) |
@JobID | int OUT | ID des Buchungsjobs |
Das Ereignis LfBuchen.Before (10019) erlaubt Eingriffe vor der Buchung, LfBuchen.OnSuccess (10009) wird danach ausgelöst.
7. Lieferschein in Rechnung umwandeln #
Analog zur Auftragsumwandlung wird auch hier ein Job-Mechanismus verwendet:
DECLARE @JobId int, @re_id int, @re_nummer int
-- Lieferschein zum Rechnungs-Job hinzufügen
EXEC cn_TraLfRe_JobAddLf
@Lf_id = @lf_id,
@JobId = @JobId OUT
-- Rechnung erzeugen
EXEC cn_TraLfRe_DoJob
@JobId = @JobId,
@Re_id = @re_id OUT,
@Re_Nummer = @re_nummer OUT
PRINT 'Rechnung ' + CAST(@re_nummer AS varchar) + ' erzeugt'
Mehrere Lieferscheine desselben Kunden können zu einer Sammelrechnung zusammengefasst werden, indem sie demselben Job hinzugefügt werden.
Das Ereignis TraLfRe_DoJob.OnSuccess (10006) wird nach der Umwandlung ausgelöst.
8. Restmengen stornieren #
Wenn ein Auftrag nicht vollständig geliefert werden soll, können die verbleibenden Mengen storniert werden:
EXEC cn_AfStornoRest
@Af_id = @af_id,
@StornoGrund = 'Kunde hat Restmenge abbestellt'
| Parameter | Typ | Beschreibung |
|---|---|---|
@Af_id | int | Auftrags-ID (alternativ: @Af_Nummer) |
@Af_Nummer | int | Auftragsnummer |
@StornoGrund | varchar(100) | Begründung für die Stornierung |
9. Rechnung stornieren #
Eine Rechnung wird über cn_ReStorno storniert. Dabei wird die Lagerbuchung rückgängig gemacht.
EXEC cn_ReStorno
@re_id = @re_id
| Parameter | Typ | Beschreibung |
|---|---|---|
@re_id | int | Rechnungs-ID (alternativ: @re_nummer) |
@re_nummer | int | Rechnungsnummer |
@ResetNummer | int | 1 = Rechnungsnummer wird freigegeben (Standard) |
Die Ereignisse ReStorno.Before (10032) und ReStorno.OnSuccess (10024) ermöglichen Eingriffe vor und nach der Stornierung.
Zusammenfassung der Prozeduren #
| Schritt | Prozedur | Ereignis |
|---|---|---|
| Angebot anlegen | cn_AnCre + cn_CreAnp | 10015 (AnCreate) |
| Angebot → Auftrag | cn_AnCopyToAf | 10010 (TraAnAf) |
| Auftrag anlegen | cn_CreAf + cn_CreAfp | 10014 (AfCreate) |
| Auftrag buchen | cn_AfBuchen | 10000 / 10027 |
| Auftrag → Lieferschein | cn_TraAfLf_DoJob | 10005 |
| Lieferschein buchen | cn_LfBuchen | 10009 / 10019 |
| Lieferschein → Rechnung | cn_TraLfRe_DoJob | 10006 |
| Restmengen stornieren | cn_AfStornoRest | 10013 |
| Rechnung stornieren | cn_ReStorno | 10024 / 10032 |
Siehe auch #
- SQL-Ereignisse – Vollständige Liste aller Events
- Prozeduren und Funktionen – Detaildokumentation
- cn_Preis_GetVk – Preisermittlung