# ERP Display (Zusätzliches ERP-Anzeigedisplay)

Anzeigen von Belegpositionen (Artikelnummer, Bezeichnung, Menge) sowie Zusatzinformationen.

# ERPDisplay – Kundendisplay für Lieferschein- oder Belegpositionen

ERPDisplay ist eine Windows-Hintergrundanwendung zur Darstellung von Lieferscheinpositionen auf einem separaten Kundendisplay.

<a href="https://bookstack.erpaustria.com/uploads/images/gallery/2026-08/3YqNWuzIWTRZMnRP-image-1786021710356.png">
  <img src="https://bookstack.erpaustria.com/uploads/images/gallery/2026-08/scaled-1680-/3YqNWuzIWTRZMnRP-image-1786021710356.png"
       alt="Bild 1"
       width="300">
</a>

<a href="https://bookstack.erpaustria.com/uploads/images/gallery/2026-08/BPiictc41INlwzwj-image-1786021894160.png">
  <img src="https://bookstack.erpaustria.com/uploads/images/gallery/2026-08/scaled-1680-/BPiictc41INlwzwj-image-1786021894160.png"
       alt="Bild 2"
       width="400">
</a>

Die Anwendung ist für folgende Umgebung vorgesehen:

- Virtuos-Kundendisplay mit 1024 × 600 Pixeln
- Windows-Arbeitsplatz mit lokal angeschlossenem Kundendisplay
- ERP-System innerhalb einer RDP-Sitzung
- Datenaustausch über eine lokale XML-Datei oder eine SMB-/UNC-Netzwerkfreigabe
- Erforderliches Framework: .NET Framework 4.8

ERPDisplay läuft ohne sichtbares Hauptfenster. Die Bedienung erfolgt über ein Symbol im Windows-Infobereich neben der Uhr.

---

## Systemaufbau

```text
ERP-System in der RDP-Sitzung
            │
            │ schreibt anzeige.xml
            ▼
SMB-/UNC-Netzwerkfreigabe
            │
            │ Dateiänderung
            ▼
ERPDisplay auf dem lokalen Arbeitsplatz
            │
            ▼
Lokal angeschlossenes Virtuos-Display
```

Das Kundendisplay wird nicht in die RDP-Sitzung übernommen. Es bleibt Bestandteil des lokalen Windows-Arbeitsplatzes.

---

## Voraussetzungen

- Windows 10 oder Windows 11
- .NET Framework 4.8
- Virtuos-Display als zusätzlicher Windows-Bildschirm
- Bildschirmauflösung 1024 × 600 Pixel
- Windows-Anzeigemodus **Diese Anzeigen erweitern**
- Lesezugriff des lokalen Benutzers auf die XML-Datei
- Schreibzugriff des ERP-Benutzers auf die XML-Datei

---

## Installation

1. ERPDisplay in einen lokalen Programmordner kopieren, beispielsweise:

   ```text
   C:\Programme\ERPDisplay
   ```

2. Prüfen, ob sich mindestens folgende Dateien im Programmordner befinden:

   ```text
   ERPDisplay.exe
   ERPDisplay.exe.config
   anzeige.xml
   ```

3. `ERPDisplay.exe` starten.

4. Im Windows-Infobereich erscheint das ERPDisplay-Symbol.

5. Über **Erkannte Bildschirme** prüfen, welcher Bildschirm das Kundendisplay ist.

ERPDisplay verhindert den gleichzeitigen Start mehrerer Programminstanzen innerhalb derselben Windows-Sitzung.

---

## Automatischer Programmstart

ERPDisplay sollte beim Anmelden des lokalen Windows-Benutzers gestartet werden.

1. `Win + R` drücken.
2. Folgenden Befehl eingeben:

   ```text
   shell:startup
   ```

3. Eine Verknüpfung zu `ERPDisplay.exe` in diesem Ordner anlegen.

ERPDisplay sollte nicht als Windows-Dienst ausgeführt werden. Windows-Dienste laufen in der nicht interaktiven Session 0 und können das Kundendisplay im Benutzerdesktop nicht zuverlässig ansteuern.

---

## Bedienung über das Tray-Symbol

Ein Rechtsklick auf das ERPDisplay-Symbol öffnet das Menü.

| Menüpunkt | Funktion |
|---|---|
| Anzeigedatei festlegen … | Lokale XML-Datei oder UNC-Pfad auswählen bzw. eingeben |
| Anzeigedatei neu laden | Aktuelle Datei manuell erneut einlesen |
| Erkannte Bildschirme | Bildschirmindex, Gerätename und Auflösung anzeigen |
| Darstellungsgröße | Anzeige zwischen Normal, Mittel und Groß umschalten |
| Beenden | Displayfenster und ERPDisplay schließen |


Ein Doppelklick auf das Tray-Symbol liest die Anzeigedatei ebenfalls neu ein.

---

## Anzeigedatei festlegen

Die Anzeigedatei kann auf drei Arten angegeben werden.

### Auswahl über das Tray-Menü

1. Rechtsklick auf das ERPDisplay-Symbol.
2. **Anzeigedatei festlegen …** auswählen.
3. Lokalen Dateipfad oder UNC-Pfad eingeben.
4. Mit **OK** bestätigen.

Beispiel für einen UNC-Pfad:

```text
\\Fileserver\ERPDisplay\KASSE01\anzeige.xml
```

Die Auswahl wird benutzerspezifisch gespeichert:

```text
%LocalAppData%\Firma2\ERPDisplay\Anzeigepfad.txt
```

Diese Benutzereinstellung hat Vorrang vor der Einstellung in `ERPDisplay.exe.config`.

---

## Darstellungsgröße

Die Größe der gesamten Kundenanzeige kann während des Betriebs über das Tray-Menü geändert werden:

```text
Darstellungsgröße
├── Normal
├── Mittel
└── Groß
```

Die Änderung wird sofort übernommen und benutzerspezifisch gespeichert unter:

```text
%LocalAppData%\Firma2\ERPDisplay\Anzeigegroesse.txt
```

| Modus | Darstellung | Maximal sichtbare Zeilen |
|---|---|---:|
| Normal | Standard | 8 |
| Mittel | Vergrößert | 7 |
| Groß | Stark vergrößert | 6 |

Der Standardwert wird in `ERPDisplay.exe.config` festgelegt:

```xml
<add key="Darstellungsgroesse" value="Normal" />
```

Gültige Konfigurationswerte sind `Normal`, `Mittel` und `Gross`.

### Konfiguration über ERPDisplay.exe.config

Lokale Datei:

```xml
<add key="Anzeigedatei" value="C:\ERPDisplay\anzeige.xml" />
```

UNC-Netzwerkpfad:

```xml
<add key="Anzeigedatei"
     value="\\Fileserver\ERPDisplay\KASSE01\anzeige.xml" />
```

Relativer Pfad neben ERPDisplay.exe:

```xml
<add key="Anzeigedatei" value="anzeige.xml" />
```

---

## Empfohlene Netzwerkstruktur

Für jeden Arbeitsplatz sollte ein eigenes Verzeichnis verwendet werden:

```text
\\Fileserver\ERPDisplay\
├── KASSE01\anzeige.xml
├── KASSE02\anzeige.xml
├── KASSE03\anzeige.xml
└── LAGER01\anzeige.xml
```

Beispiel für Arbeitsplatz `KASSE01`:

```text
\\Fileserver\ERPDisplay\KASSE01\anzeige.xml
```

Das ERP muss die Kennung des aktuellen Arbeitsplatzes kennen und die XML-Datei in dessen Verzeichnis schreiben.

### Empfohlene Berechtigungen

| Benutzer/Gruppe | Berechtigung |
|---|---|
| Lokaler Arbeitsplatzbenutzer | Lesen |
| ERP-Anwendung bzw. ERP-Benutzer | Lesen, Schreiben, Ändern |
| Andere Arbeitsplatzbenutzer | Kein Zugriff oder nur auf das eigene Verzeichnis |

---

## XML-Format: Positionen anzeigen

```xml
<?xml version="1.0" encoding="utf-8"?>
<Anzeige modus="Positionen"
         titel="Ihr Lieferschein"
         belegnummer="LS 2026-004218">

  <Zeile typ="Position"
         artikelnummer="1004711"
         bezeichnung="Aluminiumprofil 40 × 40 mm"
         menge="12 Stk." />

  <Zeile typ="Position"
         artikelnummer="1005820"
         bezeichnung="Befestigungssatz [b]Premium[/b]"
         menge="2 Satz" />

  <Zeile typ="Vollbreite"
         hervorgehoben="true"
         text="[b]Hinweis:[/b] Ware vollständig geprüft und kommissioniert." />

  <Zeile typ="Position"
         artikelnummer="1006105"
         bezeichnung="Schutzkappe schwarz"
         menge="24 Stk." />
</Anzeige>
```

### Attribute des Elements Anzeige

| Attribut | Pflicht | Bedeutung |
|---|---:|---|
| modus | Ja | `Positionen` oder `Leer` |
| titel | Nein | Überschrift im oberen Bereich |
| belegnummer | Nein | Lieferschein- oder Belegnummer |
| information | Nein | Information für den Modus `Leer` |

### Normale Positionszeile

```xml
<Zeile typ="Position"
       artikelnummer="A-100"
       bezeichnung="Beispielartikel"
       menge="2 Stk." />
```

| Attribut | Bedeutung |
|---|---|
| artikelnummer | Artikelnummer |
| bezeichnung | Artikelbezeichnung |
| menge | Menge einschließlich optionaler Einheit |

### Vollbreitenzeile

```xml
<Zeile typ="Vollbreite"
       hervorgehoben="true"
       text="[b]Hinweis:[/b] Ware vollständig geprüft." />
```

Eine Vollbreitenzeile verwendet die gesamte Tabellenbreite. Sie eignet sich für Hinweise, Statusmeldungen oder zusätzliche Informationen.

### Fettformatierung

Text innerhalb von `[b]` und `[/b]` wird fett dargestellt:

```text
Befestigungssatz [b]Premium[/b]
```

Die Formatierung kann in Artikelnummer, Bezeichnung, Menge und Vollbreitenzeilen verwendet werden.

---

## XML-Format: Anzeige leeren

Wenn keine Lieferscheinpositionen vorhanden sind, wird der Modus `Leer` verwendet:

```xml
<?xml version="1.0" encoding="utf-8"?>
<Anzeige modus="Leer"
         titel="Willkommen"
         information="Aktuell sind keine Lieferscheinpositionen vorhanden." />
```

Dadurch wird die Positionstabelle geleert und die angegebene Information dargestellt.

Wird die XML-Datei vollständig gelöscht, zeigt ERPDisplay automatisch:

```text
Willkommen
Warte auf neue Anzeigedaten.
```

---

## Sicheres Aktualisieren der XML-Datei

Die ERP-Anwendung sollte `anzeige.xml` nicht langsam und direkt überschreiben. ERPDisplay könnte die Datei sonst lesen, während sie erst teilweise geschrieben wurde.

Empfohlenes Verfahren:

1. Gesamten XML-Inhalt in eine temporäre Datei schreiben.
2. Datei vollständig schließen.
3. Temporäre Datei atomar in `anzeige.xml` umbenennen bzw. die vorhandene Datei ersetzen.

Beispiel:

```text
anzeige.tmp schreiben
        ↓
Datei schließen
        ↓
anzeige.tmp → anzeige.xml
```

ERPDisplay überwacht Änderungen, Neuanlagen, Umbenennungen und Löschungen.

Die XML-Datei muss als UTF-8 gespeichert werden. XML-Sonderzeichen müssen maskiert werden:

| Zeichen | XML-Schreibweise |
|---|---|
| `&` | `&amp;` |
| `<` | `&lt;` |
| `>` | `&gt;` |
| `"` in Attributen | `&quot;` |

---

## Bildschirmauswahl

Die Bildschirmauswahl wird in `ERPDisplay.exe.config` konfiguriert.

### Automatische Erkennung

```xml
<add key="BildschirmModus" value="Auto" />
```

Reihenfolge der automatischen Erkennung:

1. Zusätzlicher Bildschirm mit genau 1024 × 600 Pixeln
2. Anderer zusätzlicher Bildschirm

Der Hauptbildschirm wird niemals als automatischer Fallback verwendet.

Wenn kein zusätzlicher Bildschirm vorhanden ist, öffnet ERPDisplay kein Anzeigefenster und meldet den Fehler über das Tray-Symbol.

### Fester Bildschirmindex

```xml
<add key="BildschirmModus" value="Index" />
<add key="BildschirmIndex" value="1" />
```

Die verfügbaren Indizes können über **Erkannte Bildschirme** angezeigt werden.

### Fester Windows-Gerätename

```xml
<add key="BildschirmModus" value="Geraetename" />
<add key="BildschirmGeraetename" value="\\.\DISPLAY2" />
```

Der Gerätename ist meist stabiler als der Index, da sich Bildschirmindizes nach dem Umstecken verändern können.

---

## Verhalten bei Netzwerkunterbrechungen

ERPDisplay verwendet bei einem UNC-Pfad eine ereignisbasierte Dateiüberwachung.

Bei erreichbarer Freigabe:

- keine permanente Abfrage der XML-Datei
- automatisches Einlesen bei Dateiänderungen
- sehr geringe Netzlast

Bei nicht erreichbarer Freigabe:

- ERPDisplay bleibt aktiv
- die letzte gültige Anzeige bleibt erhalten
- ohne vorherige Daten erscheint ein Wartezustand
- ERPDisplay versucht automatisch, die Verbindung wiederherzustellen

Das Wiederholungsintervall wird in Millisekunden konfiguriert:

```xml
<add key="NetzwerkWiederholungMs" value="10000" />
```

Der Wert `10000` entspricht zehn Sekunden.

---

## Netzlast

Die Überwachung arbeitet bei einer bestehenden SMB-Verbindung ereignisbasiert. Die XML-Datei wird nur bei einer tatsächlichen Änderung gelesen.

Die mitgelieferte Beispieldatei ist kleiner als 1 KB.

| Änderungshäufigkeit | Ungefähre XML-Nutzdaten pro Tag |
|---:|---:|
| einmal pro Minute | etwa 1 MB |
| alle 30 Sekunden | etwa 2 MB |
| alle 10 Sekunden | etwa 6 MB |

Hinzu kommen SMB-Protokoll- und Metadatenpakete. Bei normaler Nutzung liegt die gesamte Netzlast üblicherweise nur bei wenigen Megabyte pro Arbeitsplatz und Tag.

Nur während die Freigabe nicht erreichbar ist, erfolgt entsprechend `NetzwerkWiederholungMs` eine kurze Verfügbarkeitsprüfung.

---

## Wichtige Einstellungen

Beispiel einer vollständigen Konfiguration:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"
                      sku=".NETFramework,Version=v4.8" />
  </startup>

  <appSettings>
    <add key="BildschirmModus" value="Auto" />
    <add key="BildschirmIndex" value="1" />
    <add key="BildschirmGeraetename" value="\\.\DISPLAY2" />
    <add key="ImmerImVordergrund" value="true" />
    <add key="Darstellungsgroesse" value="Normal" />

    <add key="Anzeigedatei"
         value="\\Fileserver\ERPDisplay\KASSE01\anzeige.xml" />

    <add key="DateiAenderungsverzoegerungMs" value="300" />
    <add key="NetzwerkWiederholungMs" value="10000" />
  </appSettings>
</configuration>
```

| Einstellung | Bedeutung |
|---|---|
| BildschirmModus | `Auto`, `Index` oder `Geraetename` |
| BildschirmIndex | Nullbasierter fester Bildschirmindex |
| BildschirmGeraetename | Fester Windows-Gerätename |
| ImmerImVordergrund | Anzeigefenster im Vordergrund halten |
| Darstellungsgroesse | `Normal`, `Mittel` oder `Gross` |
| Anzeigedatei | Lokaler Pfad, relativer Pfad oder UNC-Pfad |
| DateiAenderungsverzoegerungMs | Wartezeit vor dem Lesen einer geänderten Datei |
| NetzwerkWiederholungMs | Wiederholungsintervall bei nicht erreichbarem Ordner |

---

## Fehlerbehebung

### Tray-Symbol wird nicht angezeigt

1. Prüfen, ob ERPDisplay bereits läuft.
2. Den ausgeblendeten Bereich des Windows-Infobereichs öffnen.
3. Alte ERPDisplay-Instanz vollständig beenden.
4. Neu erstellte `ERPDisplay.exe` starten.
5. In den Windows-Einstellungen festlegen, dass das ERPDisplay-Symbol immer angezeigt wird.

### Kein Displayfenster sichtbar

1. Windows-Anzeigemodus auf **Diese Anzeigen erweitern** stellen.
2. Über **Erkannte Bildschirme** prüfen, ob das Display vorhanden ist.
3. Auflösung des Virtuos-Displays auf 1024 × 600 stellen.
4. `BildschirmModus`, `BildschirmIndex` und `BildschirmGeraetename` prüfen.
5. Beachten, dass der Hauptbildschirm nicht als automatischer Fallback verwendet wird.

### UNC-Datei wird nicht gelesen

1. UNC-Pfad im lokalen Windows-Explorer öffnen.
2. Lese- und Freigabeberechtigungen prüfen.
3. Sicherstellen, dass ERPDisplay unter demselben Windows-Benutzer läuft, der Zugriff auf die Freigabe besitzt.
4. Im Tray **Anzeigedatei neu laden** auswählen.
5. Prüfen, ob `%LocalAppData%\Firma2\ERPDisplay\Anzeigepfad.txt` einen alten Pfad enthält.

### Änderungen werden nicht angezeigt

1. XML-Datei auf gültige XML-Syntax prüfen.
2. Datei als UTF-8 speichern.
3. Sicherstellen, dass wirklich die konfigurierte Datei geändert wird.
4. Temporäre Datei schreiben und anschließend atomar ersetzen.
5. Bei einfachen NAS-Systemen prüfen, ob SMB-Änderungsbenachrichtigungen unterstützt werden.

### XML-Fehlermeldung

Bei ungültigem XML bleibt die letzte gültige Anzeige bestehen. Typische Ursachen:

- fehlendes Wurzelelement `<Anzeige>`
- unbekannter Modus
- unbekannter Zeilentyp
- nicht maskiertes `&`
- fehlendes Anführungszeichen
- Datei wurde während des Schreibens gelesen

---

## Versionsinformation

| Komponente | Version |
|---|---|
| Anwendung | ERPDisplay 1.3 |
| Plattform | .NET Framework 4.8 |
| Oberfläche | Windows Forms |
| Zielauflösung | 1024 × 600 Pixel |
| Datenformat | XML, UTF-8 |