Belegfluss
Zuletzt geändert: 14.03.2026 11:35

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
ParameterTypBeschreibung
@Lf_idintLieferschein-ID (alternativ: @Lf_Nummer)
@Lf_NummerintLieferscheinnummer
@Flagsint0 = Standard (Standard)
@JobIDint OUTID 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'
ParameterTypBeschreibung
@Af_idintAuftrags-ID (alternativ: @Af_Nummer)
@Af_NummerintAuftragsnummer
@StornoGrundvarchar(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
ParameterTypBeschreibung
@re_idintRechnungs-ID (alternativ: @re_nummer)
@re_nummerintRechnungsnummer
@ResetNummerint1 = Rechnungsnummer wird freigegeben (Standard)

Die Ereignisse ReStorno.Before (10032) und ReStorno.OnSuccess (10024) ermöglichen Eingriffe vor und nach der Stornierung.

Zusammenfassung der Prozeduren #

SchrittProzedurEreignis
Angebot anlegencn_AnCre + cn_CreAnp10015 (AnCreate)
Angebot → Auftragcn_AnCopyToAf10010 (TraAnAf)
Auftrag anlegencn_CreAf + cn_CreAfp10014 (AfCreate)
Auftrag buchencn_AfBuchen10000 / 10027
Auftrag → Lieferscheincn_TraAfLf_DoJob10005
Lieferschein buchencn_LfBuchen10009 / 10019
Lieferschein → Rechnungcn_TraLfRe_DoJob10006
Restmengen stornierencn_AfStornoRest10013
Rechnung stornierencn_ReStorno10024 / 10032

Siehe auch #