# Angebot

> Wie Angebote und ihre Positionen aus Business Central nach Customer Engagement kommen — Gesamtbild und die Schritte im Detail.

---

LLMS index: [llms.txt](/llms.txt)

---

Das Angebot schließt den großen Kreis der Integration. Die
[Verkaufschance](../verkaufschance/) geht von Customer Engagement nach Business
Central — dort entsteht daraus das kaufmännische Dokument, und dieses kommt zurück:

> Das Angebot läuft **ausschließlich von Business Central nach Customer Engagement**.

In CE wird kein Angebot erfasst und keines nach BC übertragen. Kalkulation, Preise,
Rabatte und Belegnummern gehören ins ERP; Customer Engagement führt das Angebot nur mit,
damit der Vertrieb Pipeline und Abschluss im CRM sieht.

```mermaid
flowchart LR
  A["Verkaufschance in CE"] -->|"Verkaufschance<br/>nach BC"| B["Verkaufschance in BC"]
  B -->|"Angebot erstellen<br/>(in BC)"| C["Angebot in BC"]
  C -->|"<b>Angebot nach CE</b>"| D["Angebot in CE"]
  D -.->|"verknüpft mit"| A
```

| Schritt | Was passiert | Wann |
|---|---|---|
| [Angebote aus BC](bcsalesquotes/) | Angebotsköpfe kommen nach CE | alle 2 Minuten |
| [Positionen aus BC](bcsalescalculationelements/) | die Kalkulationszeilen kommen nach CE | alle 2 Minuten |
| [Gewonnene Angebote aus BC](bcsalesquotesactivate/) | in BC beauftragte Angebote werden in CE gewonnen | alle 3 Minuten |
| [Positionen löschen](bcsalescalculationelementsdelete/) | in BC gelöschte Positionen werden in CE gelöscht | alle 2 Minuten |
| [Angebote stornieren](bcsalesquotesdelete/) | in BC gelöschte Angebote werden in CE geschlossen (Storniert) | alle 2 Minuten |

## Der Ablauf

```mermaid
flowchart TB
  Q["Angebot in BC angelegt<br/>oder geändert"] --> S1["<b>Angebote aus BC</b><br/>Angebotskopf nach CE"]
  S1 --> V{"Verkaufschance<br/>über BC-Nummer<br/>gefunden?"}
  V -->|ja| VK["Angebot hängt an<br/>der Verkaufschance"]
  V -->|nein| FREI["Angebot ohne<br/>Verkaufschance"]

  S1 --> S2["<b>Positionen aus BC</b><br/>Kalkulationszeilen nach CE"]

  VK --> T{"In BC in einen<br/>Auftrag überführt?"}
  FREI --> T
  T -->|"ja — Status TRANSFERRED"| W["<b>Gewonnene Angebote aus BC</b><br/>Angebot wird <b>Gewonnen</b>"]

  Q --> DEL["Angebot in BC gelöscht"]
  DEL --> D1["<b>Stornierung</b><br/>Angebot wird in CE<br/><b>geschlossen / storniert</b>"]
  Q --> DELP["Position in BC gelöscht"]
  DELP --> D2["<b>Löschung</b><br/>Position wird in CE<br/><b>gelöscht</b>"]
```

## Zwei Besonderheiten gegenüber den anderen Bereichen

### Positionen werden wirklich gelöscht

Firma, Kontakt und Produkt werden bei einer Löschung in BC nur **deaktiviert** — an
ihnen hängt Historie. Angebote werden **geschlossen und storniert**, Angebotspositionen
dagegen **tatsächlich gelöscht**:

| Datenbereich | Verhalten bei Löschung in BC |
|---|---|
| Firma, Kontakt, Produkt | deaktivieren (Status *Inaktiv*) |
| **Angebot** | **schließen** (Status *Geschlossen*, Statusgrund *Storniert*) |
| **Angebotsposition** | **löschen** |

Das stornierte Angebot bleibt an der Verkaufschance nachvollziehbar, zählt aber nicht mehr
als offen. Eine Position ist dagegen eine reine Kopie der BC-Kalkulationszeile; existiert
sie in BC nicht mehr, hat sie keinen Wert. Technisch trägt nur der Positions-Job
`Action = Delete` — siehe
[Datenfluss](../datenfluss/).

### Der Abschluss kommt aus dem ERP

Ob ein Angebot gewonnen ist, entscheidet Business Central: Wird der Beleg dort in einen
Auftrag überführt, meldet das Änderungsprotokoll den Vorgang `TRANSFERRED`. Der Schritt
[Gewonnene Angebote aus BC](bcsalesquotesactivate/) setzt das Angebot in CE daraufhin auf
**Gewonnen**.

Der Vertrieb muss den Abschluss also nicht doppelt pflegen. Was daraus weiter folgt —
etwa das optionale Gewinnen der verknüpften Verkaufschance — steht unter
[Abschluss von Angebot und Verkaufschance](../../business-logik/abschluss-angebot-chance/).

## Wie ein Angebot seine Zuordnungen findet

Ein Angebotskopf bringt aus BC nur Nummern und Codes mit. Drei davon werden in CE zu
Verknüpfungen aufgelöst:

```mermaid
flowchart LR
  Q["Angebot aus BC"] -->|"Verkaufschancennummer"| O["Verkaufschance"]
  Q -->|"<b>Kontaktnummer</b>"| A["Firma"]
  Q -->|"Verkäufercode"| S["Verkäufer (BC)"]
```

| Zuordnung | Aufgelöst über | Voraussetzung |
|---|---|---|
| Verkaufschance | **BC Verkaufschancennummer** | die Verkaufschance wurde nach BC übertragen und zurückgemeldet |
| Firma | **BC Kontaktnummer** | die Firma wurde nach BC übertragen und hat ihre Kontaktnummer zurückgemeldet |
| Verkäufer (BC) | Verkäufercode | Stammdaten-Job 130 ist gelaufen |

> **Die Firma wird über die BC Kontaktnummer gefunden**
>
> Wie in allen übrigen Bereichen wird die Firma über die **BC Kontaktnummer**
> (`wysa_bcContactNumber`) zugeordnet; das Angebot liefert dafür die
> *Verkauf-an-Unternehmenskontaktnr.*. Die Debitorennummer spielt nicht mehr mit — die
> Zuordnung klappt damit auch für Firmen, die in BC noch kein Debitor sind.
> 
> Solange die Kontaktnummer an der Firma leer ist (die Firma also noch nicht nach BC
> übertragen und zurückgemeldet wurde), kommt ein Angebot in CE **ohne Kundenzuordnung** an.



## Positionen enthalten Kalkulationselemente, keine Artikel

Die Angebotspositionen in CE werden aus den **Kalkulationselementen** des BC-Belegs
gefüllt — denselben Bausteinen, die auch die
[Verkaufschancenpositionen](../verkaufschance/ceopportunityproducts/) verwenden.

Die eigentlichen **Artikelzeilen** eines BC-Angebots werden nicht übertragen. Angebote in
CE zeigen also die Kalkulation, nicht die Artikelaufstellung.

## Welche Felder kommen an?

### Angebotskopf

| Feld in Business Central | Feld in Customer Engagement |
|---|---|
| Nr. | Angebotsnummer |
| id | BC System-ID |
| Buchungsbeschreibung | Name |
| Verkaufschancennummer | Verkaufschance |
| Verkauf an Unternehmenskontaktnr. | Kunde |
| Verkäufercode | Verkäufer (BC) |
| Auftragsdatum | Gültig ab |
| Angebot gültig bis | Gültig bis |
| Betrag inkl. MwSt. | BC Gesamtbetrag inkl. MwSt. |
| Status | BC Status |

### Angebotsposition

| Feld in Business Central | Feld in Customer Engagement |
|---|---|
| systemId | BC System-ID |
| Belegnummer | Angebot |
| Elementcode | Produkt |
| Beschreibung | Beschreibung |
| Menge | Menge |
| Zeilenbetrag (LW) | BC Betrag |
| Zeilenbetrag inkl. MwSt. (LW) | BC Betrag inkl. MwSt. |
| — | Einheit *(fester Vorgabewert)* |

## Was der Abgleich nicht liefert

Mehrere Felder des Datenmodells werden von diesen Schritten **nicht** gefüllt. Sie
entstehen in Customer Engagement selbst:

| Feld | Woher es kommt |
|---|---|
| BC Gesamtbetrag *(netto)* | aus den Positionen aufsummiert |
| Marge | aus den Zeilenmargen aufsummiert |
| Angebotsklassifizierung | beim Anlegen in CE bestimmt (Erst- oder weiteres Angebot) |
| Archivierte Versionen | Standard-Funktion von Dynamics 365 Sales bei Angebots-Revisionen, keine DataBridge-Funktion — es gibt nichts zu übertragen |
| BC Deckungsbeitrag *(Position)* | wird von keinem Job befüllt — Marge steht deshalb bei aus BC übernommenen Angeboten immer auf 0,00, siehe [Angebotspositionen aus Business Central](bcsalescalculationelements/) |

Die ersten drei sind unter [Beträge und Margen](../../business-logik/betraege-und-margen/)
und [Abschluss](../../business-logik/abschluss-angebot-chance/) beschrieben.

## Technische Zuordnung

<details>
<summary>Jobs und Mappings dieser Kette</summary>

| Order | Job | Mapping | Seite |
|---|---|---|---|
| 610 | `salesquotesfrombc` | `BCSalesQuotes` | [Angebote aus BC](bcsalesquotes/) |
| 620 | `salescalculationelementsfrombc` | `BCSalesCalculationElements` | [Positionen aus BC](bcsalescalculationelements/) |
| 621 | `salescalculationelementsfrombcdelete` | `BCSalesCalculationElementsDelete` | [Positionen löschen](bcsalescalculationelementsdelete/) |
| 625 | `activatesalesquotesfrombc` | `BCSalesQuotesActivate` | [Gewonnene Angebote aus BC](bcsalesquotesactivate/) |
| 690 | `salesquotesfrombcdelete` | `BCSalesQuotesDelete` | [Angebote stornieren](bcsalesquotesdelete/) |

Beteiligte Tabellen:

| Business Central API Page | Dataverse |
|---|---|
| `.../acdsalesheaders` | `quote` |
| `.../acdsalescalculationelements` | `quotedetail` |
| `.../acdlogentries` | `quote`, `quotedetail` |

Alle unter `singhammerITConsulting/dyce/v2.0/`.

</details>

<details>
<summary>Schlüssel je Schritt</summary>

| Schritt | Schlüssel im Ziel | Alternate Key |
|---|---|---|
| Angebote aus BC | `quotenumber` ← BC `number` | `wysa_quotenumberkey` |
| Positionen aus BC | `wysa_bcsystemid` ← BC `systemId` | `wysa_bcsystemidkey` |
| Gewonnene Angebote aus BC | `wysa_bcsystemid` ← Log `recordId` | `wysa_bcsystemidkey` |
| Positionen löschen | `wysa_bcsystemid` ← Log `recordId` | `wysa_bcsystemidkey` |
| Angebote stornieren | `wysa_bcsystemid` ← Log `recordId` | `wysa_bcsystemidkey` |

Der Angebotskopf ist der einzige Datensatz der ganzen Integration, der über eine
**fachliche Belegnummer** adressiert wird und nicht über die BC System-ID — die
Angebotsnummer in CE ist dieselbe wie in BC. Die Löschjobs müssen dagegen über die
System-ID gehen, weil das Änderungsprotokoll nur diese kennt.

</details>

<details>
<summary>Protokoll-Tabellen der Log-basierten Jobs</summary>

| Job | `tableId` | BC-Tabelle | zusätzlicher Filter |
|---|---|---|---|
| 625 `activatesalesquotesfrombc` | 36 | Verkaufskopf | `operation eq 'TRANSFERRED'` |
| 690 `salesquotesfrombcdelete` | 36 | Verkaufskopf | `operation eq 'DELETE'` |
| 621 `salescalculationelementsfrombcdelete` | 72077783 | Kalkulationselemente | `operation eq 'DELETE'` |

Die Jobs 625 und 690 lesen dieselben Protokolleinträge und trennen sich allein über das
Feld `operation`: `TRANSFERRED` führt zum Gewinnen, `DELETE` zum Stornieren.

</details>

---

Section pages:

- [Angebote aus Business Central übernehmen](/docs/mapping/angebot/bcsalesquotes/): Angebotsköpfe aus dem ERP erscheinen in Customer Engagement und hängen sich an ihre Verkaufschance.
- [Angebotspositionen aus Business Central übernehmen](/docs/mapping/angebot/bcsalescalculationelements/): Die Kalkulationszeilen eines BC-Angebots erscheinen als Angebotspositionen in Customer Engagement.
- [Gewonnene Angebote aus Business Central](/docs/mapping/angebot/bcsalesquotesactivate/): Wird ein Angebot im ERP in einen Auftrag überführt, wird es in Customer Engagement gewonnen.
- [Angebotspositionen löschen](/docs/mapping/angebot/bcsalescalculationelementsdelete/): In Business Central gelöschte Kalkulationszeilen werden in Customer Engagement gelöscht.
- [In BC gelöschte Angebote stornieren](/docs/mapping/angebot/bcsalesquotesdelete/): In Business Central gelöschte Angebote werden in Customer Engagement geschlossen und als storniert markiert.
