# Einen Lauf exportieren

> Die tragbaren Kopien und das erzeugte PDF eines Laufs: was jeder Befehl verlangt, wie die Dateien benannt werden und was genau eine CSV, eine XLSX, eine GLAB und ein PDF enthalten.

Der Streifen über dem geöffneten Lauf trägt zuerst die tragbaren Kopien, dann die erzeugten
Dokumente ([Die Laufaufzeichnung](histories-record#the-strip)). Die vier Befehle weiter unten
verlangen die Berechtigung **Historien exportieren/importieren**, und alle vier sind Lesevorgänge
auf der Laufdatei: Sie bleiben verfügbar, solange die Runtime gestoppt ist und während eine Einheit
aufzeichnet, und keiner von ihnen schreibt etwas in den Lauf.

Der Streifen trägt einen fünften Befehl, **Neues Etikett**, der weder ein Export noch ein
Lesevorgang ist: Er gibt ein Etikett in den Lauf aus und wird dort als Nachweis dafür aufgezeichnet,
er verlangt also **Abläufe ausführen** statt der Exportberechtigung und ist bei den Dokumenten
beschrieben, zu denen er gehört ([Etiketten und Berichte](histories-documents)).

| Befehl | Erzeugt | Verfügbar für | Landet |
| --- | --- | --- | --- |
| CSV exportieren | Das rohe Datalog als Text. | Jeden Lauf, auch einen, der noch aufzeichnet. | Einen Browser-Download, auch im Fenster der Station selbst ("CSV exportiert · Datei"). |
| XLSX exportieren | Eine Excel-Arbeitsmappe mit der Kennung des Laufs, den Metadaten und dem typisierten Datalog. | Jeden Lauf, auch einen, der noch aufzeichnet; ein Lauf, der noch nichts aufgezeichnet hat, antwortet "Der Lauf hat noch keine Momentaufnahme der Kopfdaten. Versuchen Sie es gleich noch einmal." | Einen Browser-Download ("XLSX exportiert · Datei"). |
| GLAB exportieren | Den ganzen Lauf als eine tragbare `.glab`-Datei, die eine andere Station importieren kann. | Nur Läufe, die abgeschlossen, abgebrochen oder fehlgeschlagen sind. | Einen Browser-Download ("GLAB exportiert · Datei (Größe)"). |
| PDF erzeugen | Ein frisches Bericht-PDF, aus dem ganzen Lauf mit dem in der Auswahl gewählten Layout zusammengesetzt. | Jeden Lauf, der zu Ende aufgezeichnet hat. | Den Berichtsordner des Datenordners, danach geöffnet. |

Ein Export nach CSV oder XLSX mitten im Lauf ist eine in sich stimmige Teilkopie: Der eingefrorene
Kopf wird beim Start des Laufs geschrieben, der Export trägt also den vollständigen Satz Spalten und
die bis dahin aufgezeichneten Zeilen, gelesen über die laufende Aufzeichnung statt über eine zweite
Verbindung zur Datei. Jedes Datum und jede Uhrzeit in einem Export folgt dem Format, das in den
[Einstellungen](settings-localization) festgelegt ist, und jede Datei erklärt den Bezug, in dem ihre
Stempel zu lesen sind: "UTC" oder "UTC±hh:mm", der Zeitversatz der Station beim Export.

## Dateinamen {#file-names}

CSV, XLSX, GLAB und PDF teilen je Lauf einen Grundnamen: den Startzeitpunkt im Datums- und
Zeitformat der Station, dessen Trennzeichen dateisicher gemacht wurden, dann die Namen von Modell,
Einheit und Ablauf ("02-09-2026 14-05-30 - Klimakammer - Einheit 1 - Dauerprüfung"), jeder Teil auf
48 Zeichen gekürzt und um Zeichen bereinigt, die Windows abweist. Der Grundname wird dauerhaft
reserviert, wiederholte Exporte eines Laufs behalten also über Neustarts hinweg denselben Namen, und
nur ein anderer Lauf, der auf denselben Namen fiele, erhält aus seiner Kennung ein kurzes Anhängsel.
Ein Bericht, den eine Aktion ausgibt, hängt den Namen der Gruppe an den Grundnamen; ein hier
erzeugtes PDF behält den schlichten Grundnamen. Jede Datei wird unter einem vorläufigen Namen fertig
geschrieben und erst dann veröffentlicht, wenn sie vollständig ist, ein abgebrochener Export lässt
also nie eine Teildatei mit der Endung des Produkts zurück.

## CSV {#csv}

Eine Spalte **Timestamp**, überschrieben mit "Timestamp (UTC-03:00)" samt Zeitbezug, dann, je
aufgezeichnetem Kanal in der eingefrorenen Spaltenreihenfolge, eine Wertespalte, überschrieben mit
dem Namen, den der Lauf für diese Spalte eingefroren hat, dem auf der Einheit geltenden Alias oder,
wenn es keinen gab, dem Namen des Kanals, und seiner technischen Einheit in eckigen Klammern
("Temperature [°C]"), und daneben eine Qualitätsspalte ("Temperature [°C] Quality"), die **Good**
oder **Unavailable** lautet. Diese Überschrift ist der Name, den Diagramm und Bericht des Laufs
derselben Spalte geben. Die Wertespalte behält, was das Datalog gespeichert hat (leer, wenn nichts
gespeichert war), Wahrheitswerte lauten `true`/`false`, ein als Datum typisierter Kanal liest sich
im Format der Station, und ein Wert, der das Trennzeichen, ein Anführungszeichen oder einen
Zeilenumbruch enthält, wird in Anführungszeichen gesetzt. Einer Textzelle, die mit `=`, `+`, `-`
oder `@` beginnt, wird ein Apostroph vorangestellt, damit eine Tabellenkalkulation sie als Text und
nicht als Formel liest: den Namen der Spalten in der Kopfzeile und den Messwerten eines Textkanals,
die von der Anlage kommen. Zahlen erhalten nie ein Anhängsel, ein negativer Messwert bleibt also
eine Zahl.

Die Datei folgt der Einstellung der Station für das Dezimaltrennzeichen: Bei Dezimalpunkt ist das
Listentrennzeichen `,`, bei Dezimalkomma ist es `;`, so dass die Datei in einer Tabellenkalkulation
dieser Region sauber öffnet. Zahlen werden ohne Tausendertrennzeichen geschrieben, in der vollen
gespeicherten Genauigkeit des Datalogs. Der Text ist UTF-8.

## XLSX {#xlsx}

Die Arbeitsmappe öffnet mit einem Blatt **Run**, zwei Spalten mit den Überschriften Field und Value:

| Feld | Inhalt |
| --- | --- |
| Run ID | Die eindeutige Kennung des Laufs. |
| Run Name, Model, Model Revision, Unit, Procedure | Die Namen, die beim Aufzeichnen des Laufs eingefroren wurden; ein Feld, für das der Lauf keinen Wert hat, bleibt leer. |
| Started At, Finished At | Die Grenzen des Laufs. Ein Lauf, der noch aufzeichnet, liest sich bei Finished At als **In progress**. |
| Time Zone | Der Bezug, in dem jeder Zeitpunkt der Arbeitsmappe zu lesen ist. |
| State | Der Zustand im Lebenszyklus beim Export. |
| Result | Das Prüfergebnis (OK, NOK, Indeterminate oder None) oder **In progress**, solange der Lauf noch aufzeichnet. |
| Termination | None oder StopInterlock. |
| Interval (ms) | Das Aufzeichnungsintervall. |
| Imported At, Imported From | Nur bei einer aus einer anderen Installation importierten Kopie: wann sie hier ankam und aus welcher empfangenen Datei sie stammt. Ein hier aufgezeichneter Lauf trägt keine der beiden Zeilen. |
| Notes | Die Notizen des Laufs. |

Es folgt eine zweite Überschrift, Metadata und Value, mit einer Zeile je Metadatenfeld, das bei
Start aufgezeichnet wurde, in der Reihenfolge der Abfrage. Danach folgen ein oder mehrere Blätter
**Datalog**, in derselben Spaltenreihenfolge und mit denselben Kanalüberschriften wie die CSV, mit
fixierter Kopfzeile, einem Autofilter auf jedem Blatt und ohne Gitternetzlinien. Ein Datalog, das
länger ist als die Grenze von 1.048.576 Zeilen eines Excel-Blattes, teilt sich von selbst auf
**Datalog 2**, **Datalog 3** und so weiter auf, jedes mit eigener Kopfzeile.

Die Werte werden als typisierte Zellen geschrieben: ganze Zahlen und endliche Dezimalzahlen als
echte Zahlen in der vollen gespeicherten Genauigkeit des Datalogs, Wahrheitswerte als echtes
TRUE/FALSE. Excel selbst rechnet mit höchstens 15 signifikanten Stellen, weitere Stellen werden dort
also nicht gezeigt, obwohl die Datei sie trägt. Ein nicht endlicher Messwert, ein als Datum
typisierter Kanal und die Zeitstempel sind Text; ein Messwert, dessen Qualität **Unavailable** ist,
lässt seine Wertezelle leer, und die Qualitätsspalte sagt es. Ein Lauf, der mehr als die 16.384
Spalten von Excel bräuchte, oder eine Textzelle über deren Grenze von 32.767 Zeichen wird mit dem
Grund abgewiesen, statt eine abgeschnittene Arbeitsmappe zu erzeugen.

## GLAB {#glab}

Die `.glab`-Datei ist eine in sich stimmige, seitengenaue Kopie der eigenen SQLite-Datei des Laufs,
im laufenden Betrieb genommen: keine Archivhülle, kein Manifest, keine abgeleiteten Dokumente und
kein veröffentlichtes PDF. Sie trägt alles, was die Laufdatei trägt: die eingefrorene
Momentaufnahme, die Zeilen, die Metadaten, die Schreibvorgänge des Rezepts, die Kriterien, die
Ereigniseinträge, die Kommentare, die Anmerkungen, die Aufzeichnungen zur Produktivität, die
Etikettenartefakte mit ihren eingefrorenen Bytes und die Berichtsregistrierungen mit jeder Kopie,
die sie behalten haben. Sie verwendet denselben Grundnamen wie die anderen Exporte und wird erst
veröffentlicht, wenn sie vollständig geschrieben ist. Eine andere Station nimmt sie über
[Läufe importieren](histories-import) wieder auf.

## PDF {#pdf}

**PDF erzeugen** setzt den Bericht mit dem Layout zusammen, das die Auswahl daneben trifft.
"(Bericht des Ablaufs)" ist das Layout, das der heute erste Abschlussberichtsbefehl des Ablaufs in
der Reihenfolge der Ausgabe nennt (sein erster Startbefehl, wenn er bei Abschluss keinen ausgibt);
ein Ablauf, der fort ist oder keinen Bericht ausgibt, und ein gelöschtes Layout fallen auf die
Vorgabe mit allen Abschnitten zurück, eine erneute Erzeugung überlebt die Konfiguration also. Es
kann stattdessen jedes andere Layout der Bibliothek gewählt werden, denn die Laufdatei genügt sich
selbst. Das PDF wird im Berichtsordner unter dem schlichten Grundnamen des Laufs veröffentlicht,
ersetzt die vorherige Fassung von Hand und registriert nichts auf dem Lauf.

Im Fenster der Station selbst öffnet das fertige PDF im PDF-Betrachter des Systems und fällt auf
einen Browser-Download zurück, wenn das misslingt ("Der Bericht konnte nicht geöffnet werden. Er
wird stattdessen heruntergeladen."); in einem Browser, lokal oder entfernt, öffnet es in einer neuen
Registerkarte. Was die Seiten enthalten, steht unter
[Berichtslayouts](process-reports#what-the-pdf-prints). Der bereits für einen Lauf registrierte
Bericht wird stattdessen aus [Etiketten und Berichte](histories-documents) erneut ausgegeben, das
ihn nie neu zusammensetzt.
