> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# ERP- (WWS-InfoDaten)

> Daten aus der Warenwirtschaft im Shop anzeigen: Auftragsliste mit Filtern, Auftragsdetails, noch nicht übernommene Aufträge, Lagerbestand und allgemeine Anfragen.

Die WWS-Infodatenschnittstelle holt Daten direkt aus dem Warenwirtschaftssystem des Händlers und zeigt sie im Shop an. Zwei Anwendungsfälle stehen im Vordergrund: der angemeldete Käufer sieht seine eigenen Aufträge, und jeder Besucher kann den Lagerbestand zu einem Produkt abfragen.

Die Anzeige geschieht in Modul-Templates, die über `WS-ExternInclude` in ein Master-Template geholt werden. Welche Datei welche Aufgabe übernimmt, legen Sie in der Konfiguration `wws-online-interface.config` im Abschnitt `Templates` fest. Die Tags dieser Seite gelten ausschließlich in diesen Modul-Templates.

Wegweiser: [WWS-Infodatenschnittstelle verwenden](https://dokumentation.websale.de/v8s/externe-dienste/wws-infodatenschnittstelle.md) · Referenz: Konfiguration wws-online-interface.config

> [!WARNING]
>
> Die Schnittstelle ist für das Warenwirtschaftssystem V4 der D\&G entwickelt und nur mit diesem einsetzbar. Sie muss außerdem von der WEBSALE AG freigeschaltet werden.
>
> Käuferbezogene Abfragen setzen voraus, dass der Käufer angemeldet ist und eine Kundennummer besitzt, und dass diese Kundennummer im Shop nicht editierbar ist. Andernfalls könnte jeder die Aufträge fremder Kunden einsehen.

## Die sechs Templates

| Parameter in `Templates` | In dieser Referenz | Zeigt |
| - | - | - |
| `ListEntries` | List | die Übersichtsliste der Aufträge samt Filtern |
| `ShowEntry` | Detail | einen einzelnen Auftrag |
| `PendingEntries` | Pending | Aufträge, die das Warenwirtschaftssystem noch nicht übernommen hat |
| `StockAmount` | StockAmount | den Lagerbestand zu einem Produkt |
| `CommonRequest` | CommonRequest | das Ergebnis einer allgemeinen Anfrage |
| `error` | Error | Fehlermeldungen der Schnittstelle |

Die Spalte "Templates" in den Tabellen dieser Seite nennt jeweils, in welchen dieser Templates ein Tag ausgewertet wird. "alle" bedeutet, dass es überall gilt.

Klammern Sie den Aufruf der Schnittstelle immer mit `WS-OnlineERPLink` beziehungsweise `WS-OnlineERPStockLevelLink`. Die Klammerung greift nur, wenn die Schnittstelle überhaupt verfügbar ist, und hält den Block sonst aus der Seite heraus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{WS-OnlineERPLink}
   ~WS-ExternInclude($WS-OnlineERPLink$)~
{/WS-OnlineERPLink}
```

> [!WARNING]
>
> Setzen Sie den Lagerbestands-Aufruf zusätzlich in eine `{!ST-Robot}`-Klammerung. Ohne sie schickt jeder Suchmaschinen-Crawler bei jedem Produktaufruf eine Anfrage an die Warenwirtschaft.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!ST-Robot}
   {WS-OnlineERPStockLevelLink}
      ~WS-ExternInclude($WS-OnlineERPStockLevelLink$&erp_pn=$PR-NumberEnc$)~
   {/WS-OnlineERPStockLevelLink}
{/!ST-Robot}
```

Referenz: [WS-OnlineERPLink](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md#die-tags-im-uberblick) · [WS-OnlineERPStockLevelLink](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md#die-warenwirtschafts-schnittstelle) · [WS-ExternInclude()](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md)

## Die Feldnamen aus der Konfiguration

Welche Datenfelder die Warenwirtschaft liefert, ist von Shop zu Shop verschieden. Deshalb tragen die Felder keine sprechenden Tagnamen, sondern Nummern: `H1` bis `H1000` für die Kopfdaten eines Auftrags und `P1` bis `P1000` für die Positionsdaten. Welche Nummer wofür steht, legen Sie in `wws-online-interface.config` in den Abschnitten `HeadData` und `PositionData` fest.

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-HeadName(HX)` | 1110 | alle | die konfigurierte Beschriftung des Kopf-Parameters |
| `ERP-HeadName(HX,Wert)` | 0110 | alle | greift, wenn die Beschriftung gleich `Wert` ist |
| `ERP-PositionName(PX)` | 1110 | alle | die konfigurierte Beschriftung des Positions-Parameters |
| `ERP-PositionName(PX,Wert)` | 0110 | alle | greift, wenn die Beschriftung gleich `Wert` ist |

Damit schreiben Sie die Spaltenüberschriften einer Tabelle nicht ins Template, sondern holen sie aus der Konfiguration. Ändert die Warenwirtschaft später die Bedeutung eines Feldes, genügt eine Änderung in der Konfiguration.

> [!WARNING]
>
> Zwei Nummern liegen fest: `H1` ist immer die Kundennummer, `P1` immer die Menge. Alle anderen Nummern sind frei belegbar und müssen mit der Warenwirtschaft abgestimmt werden.

## Die Auftragsliste

`ERP-HeadData` ist zugleich die Anzahl der gefundenen Aufträge, die Prüfung auf Treffer und die Schleife darüber.

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-HeadData` | 1111 | List | die Anzahl, die Prüfung und die Schleife über die Aufträge |
| `ERP-HeadData_Counter` | 1000 | List/Detail | die laufende Nummer innerhalb der Schleife |
| `ERP-HeadData(HX)` | 1110 | List/Detail | den Wert des Kopf-Parameters |
| `ERP-HeadData(HX,Wert)` | 0110 | List/Detail | greift, wenn der Wert gleich `Wert` ist |
| `ERP-HeadData_ID` | 1000 | List/Detail | die Referenzkennung, die die Warenwirtschaft vergeben hat |
| `ERP-HeadData_ID(Wert)` | 0110 | List/Detail | greift, wenn die Kennung gleich `Wert` ist |
| `ERP-HeadData_Type` | 1000 | List/Detail | den Auftragstyp als Zahl |
| `ERP-HeadData_Type(Wert)` | 0110 | List/Detail | greift, wenn der Typ gleich `Wert` ist |
| `ERP-HeadData_Type_Txt` | 1000 | List/Detail | den konfigurierten Text zum Auftragstyp |
| `ERP-HeadData_Type_Txt(Wert)` | 0110 | List/Detail | greift, wenn der Text gleich `Wert` ist |
| `ERP-HeadData_Download` | 1110 | List/Detail | den Link auf eine hinterlegte Datei, und die Prüfung, ob es eine gibt |
| `ERP-LinkDownload` | 1110 | List/Detail | dasselbe unter einem zweiten Namen |
| `ERP-LinkDetail` | 1000 | List | den Link auf die Detailansicht dieses Auftrags |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!ERP-HeadData}
   <p>Ihre Anfrage ergab keine Treffer.</p>
{/!ERP-HeadData}

{ERP-HeadData}
   <p>Gefundene Aufträge: ~ERP-HeadData~</p>

   <table>
      <tr>
         <th>Nr.</th>
         <th>~ERP-HeadName(H2)~</th>
         <th>~ERP-HeadName(H4)~</th>
         <th>~ERP-HeadName(H8)~</th>
         <th>Status</th>
         <th></th>
      </tr>

      {@ERP-HeadData}
         <tr>
            <td>~ERP-HeadData_Counter~</td>
            <td>~ERP-HeadData(H2)~</td>
            <td>~ERP-HeadData(H4)~</td>
            <td>~ERP-HeadData(H8)~</td>
            <td>
               {ERP-HeadData_Type_Txt}~ERP-HeadData_Type_Txt~{/ERP-HeadData_Type_Txt}
               {!ERP-HeadData_Type_Txt}Typ ~ERP-HeadData_Type~{/!ERP-HeadData_Type_Txt}
            </td>
            <td>
               <a href="~ERP-LinkDetail~">Details</a>
               {ERP-HeadData_Download}
                  <a href="~ERP-HeadData_Download~">Beleg herunterladen</a>
               {/ERP-HeadData_Download}
            </td>
         </tr>
      {/@ERP-HeadData}
   </table>
{/ERP-HeadData}
```

Der Auftragstyp kommt als Zahl aus der Warenwirtschaft. Den lesbaren Text dazu legen Sie in `wws-online-interface.config` im Abschnitt `Types` fest. Fehlt dort ein Eintrag, bleibt `ERP-HeadData_Type_Txt` leer. Die Klammerung im Beispiel fängt das ab und zeigt dann wenigstens die Zahl.

`ERP-HeadData_Download` und `ERP-LinkDownload` sind zwei Namen für dasselbe Tag. Verwenden Sie in einem Template durchgängig einen davon.

> [!WARNING]
>
> Als Einzel-Tag außerhalb der Schleife gibt `ERP-HeadData` die Trefferzahl aus, innerhalb der Schleife bezieht sich alles auf den gerade durchlaufenen Auftrag. Die Trefferzahl gehört deshalb vor die Schleife, nicht hinein.

## Die Positionen eines Auftrags

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-PositionData` | 1111 | List/Detail | die Anzahl, die Prüfung und die Schleife über die Positionen |
| `ERP-PositionData_Counter` | 1000 | List/Detail | die laufende Nummer innerhalb der Schleife |
| `ERP-PositionData(PX)` | 1110 | List/Detail | den Wert des Positions-Parameters |
| `ERP-PositionData(PX,Wert)` | 0110 | List/Detail | greift, wenn der Wert gleich `Wert` ist |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@ERP-HeadData}
   <h3>Auftrag ~ERP-HeadData(H4)~</h3>

   {!ERP-PositionData}
      <p>Zu diesem Auftrag liegen keine Positionen vor.</p>
   {/!ERP-PositionData}

   {ERP-PositionData}
      <table>
         <tr>
            <th>~ERP-PositionName(P1)~</th>
            <th>~ERP-PositionName(P3)~</th>
            <th>~ERP-PositionName(P21)~</th>
            <th>~ERP-PositionName(P6)~</th>
         </tr>
         {@ERP-PositionData}
            <tr>
               <td>~ERP-PositionData(P1)~</td>
               <td>~ERP-PositionData(P3)~</td>
               <td>~ERP-PositionData(P21)~</td>
               <td>~ERP-PositionData(P6)~</td>
            </tr>
         {/@ERP-PositionData}
      </table>
   {/ERP-PositionData}
{/@ERP-HeadData}
```

Die Positionsschleife läuft innerhalb der Auftragsschleife und bezieht sich immer auf den aktuellen Auftrag. Dieselbe Schachtelung funktioniert im Listen- und im Detail-Template, Sie können den Block also aus einem ins andere übernehmen.

## Filter und Zeitraum

Die Übersichtsliste lässt sich über die Anzahl der Einträge, einen Zeitraum und einen alternativen Zeitraum einschränken. Alle dafür nötigen Auswahllisten bringt die Schnittstelle fertig mit.

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-MaxEntries_select` | 1110 | List | die Auswahlliste für die Höchstzahl der Aufträge |
| `ERP-DateFrom_day_select` | 1000 | List | die Auswahlliste für den Anfangstag |
| `ERP-DateFrom_month_select` | 1000 | List | die Auswahlliste für den Anfangsmonat |
| `ERP-DateFrom_year_select` | 1000 | List | die Auswahlliste für das Anfangsjahr |
| `ERP-DateUntil_day_select` | 1000 | List | die Auswahlliste für den Endtag |
| `ERP-DateUntil_month_select` | 1000 | List | die Auswahlliste für den Endmonat |
| `ERP-DateUntil_year_select` | 1000 | List | die Auswahlliste für das Endjahr |
| `ERP-AlternativeDate_select` | 1110 | List | die Auswahlliste der vorgefertigten Zeiträume |

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-DateSelection` | 0110 | List/Detail | greift, wenn ein Anfangs- oder ein Enddatum gewählt ist |
| `ERP-DateFrom_day` | 1110 | List/Detail | den gewählten Anfangstag |
| `ERP-DateFrom_month` | 1110 | List/Detail | den gewählten Anfangsmonat als Zahl |
| `ERP-DateFrom_month_txt` | 1110 | List/Detail | den Monatsnamen zum Anfangsmonat |
| `ERP-DateFrom_year` | 1110 | List/Detail | das gewählte Anfangsjahr |
| `ERP-DateUntil_day` | 1110 | List/Detail | den gewählten Endtag |
| `ERP-DateUntil_month` | 1110 | List/Detail | den gewählten Endmonat als Zahl |
| `ERP-DateUntil_month_txt` | 1110 | List/Detail | den Monatsnamen zum Endmonat |
| `ERP-DateUntil_year` | 1110 | List/Detail | das gewählte Endjahr |
| `ERP-AlternativeDate_txt` | 1110 | List/Detail | den Text zum gewählten vorgefertigten Zeitraum |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<form action="~FORM-Template(tpl_wws-online.htm)~" method="post">
   {ERP-MaxEntries_select}
      <label>Einträge je Seite ~ERP-MaxEntries_select~</label>
   {/ERP-MaxEntries_select}

   <label>Zeitraum von
      ~ERP-DateFrom_day_select~ ~ERP-DateFrom_month_select~ ~ERP-DateFrom_year_select~
   </label>
   <label>Zeitraum bis
      ~ERP-DateUntil_day_select~ ~ERP-DateUntil_month_select~ ~ERP-DateUntil_year_select~
   </label>

   {ERP-AlternativeDate_select}
      <label>Oder ein fester Zeitraum ~ERP-AlternativeDate_select~</label>
   {/ERP-AlternativeDate_select}

   <button type="submit">Anzeigen</button>
</form>

{ERP-DateSelection}
   <p>
      Gewählter Zeitraum:
      {ERP-DateFrom_day}
         vom ~ERP-DateFrom_day~. ~ERP-DateFrom_month_txt~ ~ERP-DateFrom_year~
      {/ERP-DateFrom_day}
      {ERP-DateUntil_day}
         bis ~ERP-DateUntil_day~. ~ERP-DateUntil_month_txt~ ~ERP-DateUntil_year~
      {/ERP-DateUntil_day}
   </p>
{/ERP-DateSelection}

{ERP-AlternativeDate_txt}
   <p>Gewählter Zeitraum: ~ERP-AlternativeDate_txt~</p>
{/ERP-AlternativeDate_txt}
```

`ERP-MaxEntries_select`, `ERP-AlternativeDate_select` und `ERP-Search_Type_select` greifen als Klammerung nur, wenn mindestens **zwei** Einträge konfiguriert sind. Bei nur einer Auswahlmöglichkeit hat eine Liste keinen Sinn, und die Beschriftung daneben verschwindet gleich mit.

Die Monatsnamen und die Texte der vorgefertigten Zeiträume stehen in `wws-online-interface.config` im Abschnitt `PeriodSelection`. Dort legen Sie mit `ShowYearsAgo` auch fest, wie weit die Jahresliste zurückreicht.

> [!WARNING]
>
> Steht nur ein einziges Jahr zur Auswahl, geben `ERP-DateFrom_year_select` und `ERP-DateUntil_year_select` statt einer Liste ein verstecktes Feld aus. Das Formular funktioniert dadurch weiter, im Layout fehlt an dieser Stelle aber ein sichtbares Element.
>
> Die Auswahllisten bringen ihren Feldnamen selbst mit. Setzen Sie kein eigenes `select`-Element und keinen eigenen `name` darum herum.

## Die Suche

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-Search_input` | 1000 | List | den Feldnamen für das Sucheingabefeld |
| `ERP-Search_value` | 1110 | List/Detail | den eingegebenen Suchbegriff |
| `ERP-Search_Type_select` | 1110 | List | die Auswahlliste, mit der sich der Auftragstyp einschränken lässt |
| `ERP-Search_Type` | 1110 | List/Detail | den gesuchten Typ als Zahl |
| `ERP-Search_Type(Wert)` | 0110 | List/Detail | greift, wenn der gesuchte Typ gleich `Wert` ist |
| `ERP-Search_Type_Txt` | 1000 | List/Detail | den konfigurierten Text zum gesuchten Typ |
| `ERP-Search_Type_Txt(Wert)` | 0110 | List/Detail | greift, wenn dieser Text gleich `Wert` ist |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<label>Suchbegriff
   <input type="text" name="~ERP-Search_input~" value="~ENCHTML-ERP-Search_value~">
</label>

{ERP-Search_Type_select}
   <label>Nach Auftragstyp filtern ~ERP-Search_Type_select~</label>
{/ERP-Search_Type_select}

{ERP-Search_Type}
   <p>Gefiltert nach ~ERP-Search_Type_Txt~</p>
{/ERP-Search_Type}
```

> [!WARNING]
>
> `ERP-Search_value` gibt den Suchbegriff **unverändert** aus, so wie der Besucher ihn eingetippt hat. Im `value`-Attribut eines Eingabefeldes gehört deshalb zwingend das Präfix `ENCHTML-` davor. Ohne dieses Präfix lässt sich über das Suchfeld fremder HTML-Code in die Seite bringen.

`ERP-Search_Type` greift als Klammerung ohne Parameter genau dann, wenn überhaupt nach einem Typ gefiltert wird. Der Wert 0 bedeutet "kein Filter".

Der Vergleich in `ERP-Search_Type(Wert)` läuft über Zahlen. Ein nicht numerischer Parameter wird zu 0 und trifft damit den ungefilterten Zustand.

## Noch nicht übernommene Aufträge

Zwischen der Bestellung im Shop und der Übernahme in die Warenwirtschaft vergeht Zeit. In dieser Lücke kennt die Warenwirtschaft den Auftrag noch nicht, der Shop dagegen schon. Das eigene Template `PendingEntries` schließt diese Lücke.

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-LinkPendingOrders` | 1000 | List | den Link auf dieses Template |
| `ERP-LinkOverview` | 1000 | Detail/Pending | den Link zurück auf die Auftragsliste |
| `ERP-PendingOrders` | 1111 | Pending | die Anzahl, die Prüfung und die Schleife über die offenen Aufträge |
| `ERP-PendingOrderPosition` | 1000 | Pending | die laufende Nummer innerhalb der Schleife |
| `ERP-PendingOrderData` | 1000 | Pending | den Auftrag selbst |
| `ERP-PendingOrderNumber` | 1000 | Pending | die Bestellnummer |
| `ERP-PendingOrderDate` | 1000 | Pending | das Bestelldatum |
| `ERP-PendingOrderTime` | 1000 | Pending | die Bestelluhrzeit |
| `ERP-LastShopOrderNumber` | 1110 | Pending | die letzte Bestellnummer, die die Warenwirtschaft kennt |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!ERP-PendingOrders}
   <p>Alle Ihre Bestellungen sind übernommen.</p>
{/!ERP-PendingOrders}

{ERP-PendingOrders}
   <p>~ERP-PendingOrders~ Bestellungen sind noch in Bearbeitung.</p>
   <ul>
      {@ERP-PendingOrders}
         <li>
            Bestellung ~ERP-PendingOrderNumber~
            vom ~ERP-PendingOrderDate~ um ~ERP-PendingOrderTime~ Uhr
         </li>
      {/@ERP-PendingOrders}
   </ul>
   <a href="~ERP-LinkOverview~">Zurück zur Übersicht</a>
{/ERP-PendingOrders}
```

`ERP-LastShopOrderNumber` ist die Grenze zwischen beiden Welten: Alles bis zu dieser Bestellnummer steht in der Auftragsliste, alles darüber in dieser Liste. Der Hinweis darauf erspart Rückfragen von Käufern, die ihre jüngste Bestellung in der Übersicht vermissen.

## Der Lagerbestand

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-StockAmount` | 1110 | StockAmount | den Online-Lagerbestand |
| `ERP-RequestSent` | 0110 | StockAmount | greift, wenn die Anfrage bereits gestellt wurde |
| `ERP-BranchID(Wert)` | 1110 | StockAmount | greift, wenn die gewählte Filialkennung gleich `Wert` ist |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!ERP-RequestSent}
   <p>Bitte wählen Sie zuerst eine Filiale aus.</p>
{/!ERP-RequestSent}

{ERP-RequestSent}
   {ERP-StockAmount}
      <p>Verfügbar: ~ERP-StockAmount~ Stück</p>
   {/ERP-StockAmount}
   {!ERP-StockAmount}
      <p>Derzeit nicht vorrätig.</p>
   {/!ERP-StockAmount}
{/ERP-RequestSent}
```

`ERP-RequestSent` trennt zwei Zustände, die im Template sonst gleich aussehen: Es wurde noch gar nicht angefragt, weil der Besucher erst eine Filiale wählen muss, oder es wurde angefragt und die Antwort lautet null. Ohne diese Klammerung meldet die Seite im ersten Fall fälschlich, das Produkt sei nicht vorrätig.

> [!WARNING]
>
> Der Lagerbestand ist die einzige Abfrage, die ohne angemeldeten Käufer funktioniert. Genau deshalb braucht sie die `{!ST-Robot}`-Klammerung um den Modulaufruf. Ohne sie erzeugt jeder Crawler-Durchlauf so viele Anfragen an die Warenwirtschaft, wie der Shop Produkte hat.

## Allgemeine Anfragen

Neben Aufträgen und Lagerbestand kann die Schnittstelle beliebige weitere Datensätze liefern. Das Template `CommonRequest` zeigt sie an.

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `ERP-CommonName(name)` | 1110 | CommonRequest | die konfigurierte Beschreibung zum technischen Namen |
| `ERP-CommonData` | 1111 | CommonRequest | die Anzahl, die Prüfung und die Schleife über die Datensätze |
| `ERP-CommonData_Counter` | 1000 | CommonRequest | die laufende Nummer innerhalb der Schleife |
| `ERP-CommonData_Name` | 1110 | CommonRequest | den technischen Namen des Datensatzes |
| `ERP-CommonData_Name(Wert)` | 0110 | CommonRequest | greift, wenn der technische Name gleich `Wert` ist |
| `ERP-CommonData_Value` | 1111 | CommonRequest | die Anzahl, die Prüfung und die Schleife über die Werte des Datensatzes |
| `ERP-CommonData_Value_Counter` | 1000 | CommonRequest | die laufende Nummer innerhalb der Werteschleife |
| `ERP-CommonData_Value_Data` | 1110 | CommonRequest | den einzelnen Wert |
| `ERP-CommonData_Value_Data(Wert)` | 0110 | CommonRequest | greift, wenn der Wert gleich `Wert` ist |
| `ERP-Type_Select_Name` | 1000 | CommonRequest | den Feldnamen der Auswahlliste für den Typ |
| `ERP-Type_Selected(Wert)` | 0110 | CommonRequest | greift, wenn der gewählte Typ gleich `Wert` ist |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ERP-CommonData}
   {@ERP-CommonData}
      <section>
         {ERP-CommonData_Name(bestand)}
            <h3>~ERP-CommonName(bestand)~</h3>
         {/ERP-CommonData_Name(bestand)}
         {ERP-CommonData_Name(termine)}
            <h3>~ERP-CommonName(termine)~</h3>
         {/ERP-CommonData_Name(termine)}

         {ERP-CommonData_Value}
            <ul>
               {@ERP-CommonData_Value}
                  <li>~ERP-CommonData_Value_Data~</li>
               {/@ERP-CommonData_Value}
            </ul>
         {/ERP-CommonData_Value}
      </section>
   {/@ERP-CommonData}
{/ERP-CommonData}
```

Ein allgemeiner Datensatz hat einen Namen und beliebig viele Werte. Deshalb liegen hier zwei Schleifen ineinander: die äußere über die Datensätze, die innere über deren Werte.

`ERP-CommonName()` erwartet den technischen Namen als festen Parameter. Die Überschrift je Datensatz bauen Sie deshalb über eine Klammerung mit `ERP-CommonData_Name(…)` auf, wie im Beispiel. Wer die Namen nicht kennt, gibt stattdessen schlicht `~ERP-CommonData_Name~` aus.

`ERP-CommonName()` verträgt einen zweiten Parameter. `{ERP-CommonName(bestand,verfuegbar)}` greift dann nur, wenn die konfigurierte Beschreibung zu `bestand` gleich `verfuegbar` ist.

> [!WARNING]
>
> Ist der übergebene technische Name gar nicht konfiguriert, gibt `ERP-CommonName()` eine leere Zeichenkette aus, statt sich bemerkbar zu machen. Eine fehlende Überschrift ist also ein Hinweis auf einen Tippfehler im Namen.

`ERP-Type_Selected(Wert)` vergleicht numerisch. Der Parameter muss eine Zahl sein, kein Text.

## Fehler und Meldungen

| Tag | Typ | Templates | Liefert |
| - | - | - | - |
| `MSG-OnlineERP_Error` | 1110 | alle | die Meldung der Warenwirtschaft |
| `MSG-OnlineERP_ErrorCode` | 1110 | Error | den Fehlercode der Warenwirtschaft |
| `MSG-OnlineERP_TooManyConnections` | 0110 | Error | greift, wenn gerade mehr Anfragen laufen, als die Schnittstelle verarbeiten kann |
| `MSG-OnlineERP_InternalError` | 1110 | Error | den internen Fehler der Schnittstelle |
| `ERP-InternalErrorMessage` | 1110 | Error | den internen Fehlertext im Klartext |
| `ERP-UserDependentRequest` | 0110 | alle | greift, wenn die Anfrage käuferbezogen war |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{MSG-OnlineERP_TooManyConnections}
   <p>Derzeit sind sehr viele Anfragen unterwegs. Bitte versuchen Sie es in wenigen Minuten erneut.</p>
{/MSG-OnlineERP_TooManyConnections}

{!MSG-OnlineERP_TooManyConnections}
   {MSG-OnlineERP_Error}
      <p>Ihre Daten lassen sich derzeit nicht abrufen.</p>
   {/MSG-OnlineERP_Error}
{/!MSG-OnlineERP_TooManyConnections}

{ERP-InternalErrorMessage}<!-- ~ERP-InternalErrorMessage~ -->{/ERP-InternalErrorMessage}
```

> [!WARNING]
>
> `ERP-InternalErrorMessage` gehört ausschließlich in einen HTML-Kommentar. Der Text ist für die Fehlersuche gedacht und darf einem Käufer nicht im Klartext erscheinen. Sie lesen ihn über die Quelltextanzeige des Browsers.

`ERP-UserDependentRequest` unterscheidet die käuferbezogenen Abfragen von der Lagerbestandsabfrage. Im gemeinsamen Fehler-Template können Sie damit dem angemeldeten Käufer einen anderen Text zeigen als dem anonymen Besucher.

> [!WARNING]
>
> Die Meldung der Warenwirtschaft ist Fremdtext aus einem System, auf dessen Wortlaut Sie keinen Einfluss haben. Prüfen Sie, ob Sie sie dem Käufer wirklich zeigen möchten, oder ob ein eigener Satz die bessere Auskunft ist.

## Die Spalte Typ

Die Spalte "Typ" in den Tabellen dieser Seite hat vier Stellen. Jede Stelle steht für eine Verwendungsart, `1` bedeutet zulässig, `0` nicht zulässig.

| Stelle | Bedeutung |
| - | - |
| 1 | Einzel-Tag |
| 2 | Bereichs-Tag |
| 3 | negatives Bereichs-Tag |
| 4 | Schleifen-Tag |

Ein Tag mit `1111` ist also in allen vier Formen verwendbar, ein Tag mit `0110` nur als positive und negative Klammerung.

## Verwandte Themen

* Wegweiser: [WWS-Infodatenschnittstelle verwenden](https://dokumentation.websale.de/v8s/externe-dienste/wws-infodatenschnittstelle.md)
* Wegweiser: [Externe Includes verwenden](https://dokumentation.websale.de/v8s/externe-dienste/externe-inhalte-einbinden.md)
* Referenz: [Konfiguration wws-online-interface.config](https://dokumentation.websale.de/v8s/referenz/konfigurationen/konfiguration-wws-online-interface-config.md)
* Referenz: WS-OnlineERPLink
* Referenz: [WS-OnlineERPStockLevelLink](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md#die-warenwirtschafts-schnittstelle)


## Related topics

- [WWS-Infodatenschnittstelle verwenden](https://dokumentation.websale.de/v8s/externe-dienste/wws-infodatenschnittstelle.md)
- [Styles für Module und Schnittstellen](https://dokumentation.websale.de/v8s/referenz/styles/module-und-schnittstellen.md)
- [Konfiguration wws-online-interface.config](https://dokumentation.websale.de/v8s/referenz/konfigurationen/konfiguration-wws-online-interface-config.md)
- [Daten-Migration](https://dokumentation.websale.de/migration/daten-migration.md)
- [Integrierte Daten-Schnittstelle (IDS)](https://dokumentation.websale.de/v8s/externe-dienste/integrierte-daten-schnittstelle-ids.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.