infra:NET User
 
×
992.02 Begriffe und Verfahren
Dateien, Felder und Sortierung - Datenzugriff mit System
Dieses Kapitel sollten Sie unbedingt lesen, wenn Sie mit dem Aufbau von infra-Dateien und den Zugriffstechniken auf die infra-Datenbank nicht so vertraut sind. In diesem Handbuch werden des öfteren Begriffe genannt und Verfahren angesprochen, deren Bedeutung im Folgenden ausführlich erklärt wird.
Daten und Dateien
Was sind Daten ? Grob gesagt sind Daten Ausprägungen bestimmter Merkmale oder Eigenschaften eines Objektes. Ein Objekt kann dabei alles Mögliche sein. Objekte sind z.B. ein Kundenauftrag, ein Artikel oder eine Maschine. Diese Objekte werden mit Daten beschrieben. In der Regel werden nun alle Objekte der gleichen Art in einer Datei gesammelt, zum Beispiel werden alle Teile in der Teilestammdatei oder alle Kunden in der Kundenstammdatei hinterlegt.
Datensätze
Eine Datei enthält, wie bereits erwähnt, alle Objekte einer bestimmten Art in gesammelter Form. Um der Datenbank den Zugriff auf diese Objekte etwas zu erleichtern, wird das einzelne Objekt in einem sogenannten Datensatz gespeichert, d.h. ein Datensatz enthält immer Daten über genau ein Objekt, und alle Datensätze einer Objektart werden in einer Datei gesammelt.
Abbildung: Datensätze Teilestammdatei
Datenfelder
Alle Eigenschaften eines Objektes werden in einem Datensatz gespeichert. Um diese Eigenschaften geordnet innerhalb eines Datensatzes einzuräumen wurden Felder definiert, sogenannte Datenfelder. Der Name eines Felds gibt Auskunft über die in dem Feld gespeicherte Eigenschaft.
Abbildung: Datenfelder
An welcher Stelle welches Feld im Datensatz zu finden ist und in welchem Format es gespeichert wird, ist im DataDictionary der infra-Datenbank hinterlegt. In diesem Zusammenhang tauchen des öfteren die Begriffe PIS=Position im Datensatz und Feldlänge auf. Beides sind Werte, die den Aufenthaltsort eines Felds in einem Datensatz präzise beschreiben.
Sortierung
Die Datensätze in einer infra-Datei werden nicht nur gesammelt, sondern außerdem sortiert abgelegt, damit sie a) beim Zugriff schneller gefunden und b) bei der Ausgabe übersichtlich dargestellt werden können. Diese Vorgehensweise ist etwas vereinfacht dargestellt, reicht aber für das Verständnis der Abläufe vollkommen aus. Um dem System mitzuteilen, nach welchen Kriterien die Datensätze sortiert werden sollen, müssen für jede Datei sogenannte Sortier- oder Schlüsselfelder definiert werden. Eine Trennung dieser beiden Feldarten ist für uns wichtig, deshalb verwenden wir die beiden Begriffe synonym. Diese Sortierfelder werden bei der Definition der Dateien im DataDictionary der infra-Datenbank hinterlegt. Oft werden für eine Datei mehrere Sortiermöglichkeiten hinterlegt, d.h. je nach Fall kann eine der vorhandenen Sortiermöglichkeiten beim Zugriff auf die Objekte einer Datei gewählt werden. Eine Sortiermöglichkeit wird dabei als Sortierpfad oder Zugriffspfad bezeichnet.
Hier sind zwei Beispiele, die die Bedeutung eines Sortierpfades für den Zugriff auf eine infra-Datei verdeutlichen.
Sortierpfad 1:                1.Sortierfeld                  Teilenummer
Abbildung: Sortierung 1
 
Sortierpfad 2:           1.Sortierfeld             Teileart
                               2.Sortierfeld             Gewicht
Abbildung: Sortierung 2
Das Beispiel zeigt deutlich die Wirkung der Verwendung verschiedener Sortierpfade beim Zugriff auf
die infra-Datenbank. Zusätzlich zu den Standard-Sortierpfaden aus der Datenbank bietet der Listengenerator die Möglichkeit, eigene listenspezifische Sortierpfade zu definieren. Außerdem können Sie jedes beliebige Sortierfeld in umgekehrter Richtung sortieren lassen, d.h. von der höchsten zur niedrigsten Teilenummer. Bei derartigen individuellen Sortierpfaden werden die Datensätze erst zum Zeitpunkt der Druckausgabe oder beim Export sortiert.
Datei-, Feld- und Pfad-Index
Inzwischen haben wir geklärt, was Dateien, Felder und (Sortier-)Pfade in der infra-Datenbank sind. Doch wie teilen Sie dem Listengenerator mit, welche Datei oder welches Feld Sie genau ansprechen wollen ? Für diese eindeutigen Identifikationen von Dateien, Feldern und Pfaden wurden jeweils Indizes vergeben. Wird zum Beispiel die Angabe der Leitdatei für Ihre Definition verlangt, so müssen Sie über den entsprechenden Datei-Index dem Listengenerator mitteilen, dass Sie zum Beispiel den Teilestamm als Leitdatei verwenden wollen. Hier wäre der entsprechende Datei-Index die 6. Genauso verhält es sich mit den Feldern und Standard-Sortierpfaden. Der jeweilige Index identifiziert das gewünschte Feld oder den gewünschten Pfad. Damit Sie nicht sämtliche Indizes auswendig wissen müssen, können Sie diese über die infra-Auskunftsfunktion abrufen oder den Dateiaufbau in den infra-Handbüchern anschauen.
Anmerkung: Jede Eingabe eines Indexes wird vom Listengenerator durch führende Nullen ergänzt.
DataDictionary
Inzwischen ist des öfteren der Begriff DataDictionary gefallen, aber was verbirgt sich dahinter ? In einem DataDictionary wird, grob gesagt, die Beschreibung der Datenbank verwaltet und zur Verfügung gestellt. Alle Informationen bezüglich der definierten infra-Dateien, den in einer Datei definierten Datenfeldern, den Zugriffs- bzw. Sortierpfaden und Dateirelationen werden im DataDictionary gespeichert. Bei jedem Zugriff auf einen Datensatz einer infra-Datei prüft nun das Datenbanksystem im DataDictionary, ob und wie die jeweilige Datei definiert wurde, welche Sortierpfade es gibt, welcher Pfad für den aktuellen Zugriff verwendet wird, welches Feld an welcher Stelle im Datensatz zu finden ist etc..
Was ist ein Gruppenwechsel
Nachdem zuvor die Grundzüge der Verwaltung von Daten in der infra-Datenbank geklärt wurden, sind in diesem Kapitel weiterführende Informationen bezüglich der Sortierung der Datensätze beim Zugriff auf die infra-Dateien mittels Listengenerator zu finden. Wie bereits gezeigt, richtet sich die Sortierung einer infra-Datei immer nach den Sortierfeldern einer Standard-Sortierfolge oder den bei der Definition einer Liste oder eines Exports angegebenen individuellen Sortierfeldern. Wechselt nun beim Zugriff auf eine Datei ein Sortierfeld seinen Inhalt, so spricht man von einem Gruppenwechsel, sofern dieses Feld als Gruppenwechselfeld verwendet werden soll. Das folgende Beispiel macht dies deutlich.
1.Sortierfeld             Teileart                    (soll auch Gruppenwechselfeld sein)
2.Sortierfeld             Gewicht
 
Beginn der Gruppe mit Teileart A
Abbildung: Sortierung 3
 
Beginn der Gruppe mit Teileart B
Abbildung: Sortierung 4
 
Beginn der Gruppe mit Teileart K
Abbildung: Sortierung 5
Der Listengenerator erlaubt Ihnen die Definition jedes Sortierfelds als Gruppenwechselfeld, so haben Sie die Möglichkeit bis zu 6 Gruppenwechsel zu beschreiben.
Das folgende Beispiel zeigt noch einmal ein Sortierbeispiel, diesmal mit 2 Gruppenwechselfeldern.
1.Sortierfeld:            Teilegruppe    (Gruppenwechselfeld)
2.Sortierfeld:            Teileart                    (Gruppenwechselfeld)
3.Sortierfeld:                 Teilenummer
 
Gruppe mit Teilegruppe EE
Gruppe mit Teileart B
Abbildung: Sortierung 6
 
Gruppe mit Teilegruppe HO
Gruppe mit Teileart A
Abbildung: Sortierung 7
 
Gruppe mit Teileart B
Abbildung: Sortierung 8
 
Gruppe mit Teileart K
Abbildung: Sortierung 9
 
Gruppe mit Teilegruppe ME
Gruppe mit Teileart A
Abbildung: Sortierung 10
 
Gruppe mit Teileart B
Abbildung: Sortierung 11
Was sind Dateikoppelungen?
Dieses Kapitel ist wahrscheinlich das wichtigste Kapitel für den späteren Umgang mit dem Listengenerator, denn sobald Sie komplexe Listen oder Auswertungen erstellen wollen, werden Sie die eine oder andere Dateikoppelung mit dem Listengenerator aufbauen müssen.
Der Hauptgrund für die Notwendigkeit von Dateikoppelungen ist der verteilte Aufbau einer Datenbank. Es werden nie alle zusammenhängenden Informationen in einer einzigen Datei gespeichert, sondern möglichst redundanzfrei, d.h. ohne Doppelspeicherung, auf verschiedene Dateien verteilt. Im Abschnitt "Dateien, Felder und Sortierung - Datenzugriff mit System" war von Objekten die Rede. Dateien sind Sammlungen von Objekten eines Typs. So ist zum Beispiel ein Teil ein anderes Objekt als ein Lieferant und somit auch in einer anderen Datei gespeichert. Und trotzdem bestehen logische Beziehungen zwischen diesen verschiedenen Objekten. Ein Teil kann von einem Lieferanten geliefert werden. Diese Beziehungen zwischen zwei Objekten bzw. Dateien werden indirekt bei mindestens einem der beteiligten Objekte als Datenfeld hinterlegt und stellen die Verbindungsmöglichkeit zu der jeweils anderen Datei dar. Im folgenden Beispiel können Sie diese Verbindung nachvollziehen.
Abbildung: Ein Datensatz (Objekt) aus der Datei "Teilestamm"
Abbildung: Einige Datensätze (Objekte) aus der Datei "Lieferantenstamm":
Einstufige/Mehrstufige Koppelung
Bei dem obigen Beispiel handelt es sich um eine sogenannte "einstufige Koppelung". Die Koppelung findet über eine einzige Stufe statt. Eine mehrstufige Koppelung ist die Fortsetzung einer einstufigen Koppelung. Dabei werden Informationen eines Objektes zur Verfügung gestellt, welches stufenweise von mehreren anderen Objekten abhängig ist. Das folgende Beispiel zeigt eine mehrstufige Koppelung mit zwei Stufen.
Abbildung: Eine Position aus einem Kundenauftrag
Mehrfache Koppelung auf gleicher Stufe
Neben der mehrstufigen Koppelung sind auch mehrere Koppelungen auf gleicher Stufe möglich. Diese Fälle treten dann auf, wenn mehrere Objekte direkt aus einem Objekt abgeleitet werden. Das Beispiel zeigt den typischen Fall einer Mehrfachkoppelung.
Abbildung: Eine Position aus einer Stückliste (Baukasten) zum Teil "666100".
Eindeutige/Mehrdeutige Koppelungen
Bisher wurden ausschließlich eindeutige Koppelungen beschrieben. Eine eindeutige Koppelung zeichnet sich dadurch aus, dass genau ein Objekt durch ein anderes Objekt erreicht werden kann. Ist eine Koppelung dagegen mehrdeutig, so können durch ein Merkmal eines Objektes auch mehrere andere Objekte, die alle das gewünschte Merkmal aufweisen, angesprochen werden. Dieser Unterschied zwischen Eindeutigkeit und Mehrdeutigkeit hängt von den ausgewählten Merkmalen ab, mit denen auf eine Koppeldatei zugegriffen wird. Da zum Beispiel ein Teil durch eine Teilenummer oder ein Auftrag durch eine Auftragsnummer eindeutig identifiziert werden kann, ist eine Koppelung über das Merkmal "Teilenummer" auf die Teilestammdatei bzw. das Merkmal "Auftragsnummer" auf die Kundenauftragsdatei immer eindeutig. Anders verhält es sich z.B. beim Zugriff auf die Stücklistendatei über das Merkmal "übergeordnetes Teil". Da ein Baukasten in der Regel aus mehreren Positionen besteht, gehören dementsprechend auch mehrere Datensätze mit dem gleichen Merkmal "übergeordnetes Teil" zusammen.
Abbildung: Ein Datensatz aus der Teilestammdatei
Abbildung: Mehrere Sätze aus der Stücklistendatei
Derartige mehrdeutige Koppelungen können wie alle bisher gezeigten Koppelungsarten mit dem Listengenerator realisiert werden. Bei einer mehrdeutigen Koppelung können auf Wunsch alle gefundenen Datensätze nacheinander zum Drucken angeboten werden, d.h. für jeden gefundenen Koppelsatz wird ein Zeilendruck veranlasst.
Zusätzlich bietet der Listengenerator die Möglichkeit negative Koppelungen herzustellen. Dabei wird für jede nicht erfolgreiche Koppelung ein Zeilendruck ausgelöst. Sinnvoll sind diese Koppelungen vor allem um zum Beispiel nach einem "Unfall" Fehler in der Datenstruktur zu finden.
Koppelungen mit Zweigen
Der Listengenerator bietet die Möglichkeit, Koppelungen, die in einer Liste verwendet werden, verschiedenen Zweigen zuzuordnen. Das wird dann notwendig, wenn die übliche Verarbeitung der Dateikoppelungen durch den Listengenerator nicht erwünscht oder für einen bestimmten Anwendungsfall gar falsch ist. Die übliche Verarbeitung der Koppelungen geschieht entsprechend der Reihenfolge ihrer Eintragung im Koppelmenü (siehe Kapitel Koppelungen bearbeiten). D.h. der Listengenerator versucht erst alle Koppelungen (beginnend mit der niedrigsten Koppelstufe) herzustellen, bevor ein Zeilendruck ausgelöst wird. Danach wird die letzte Koppelung ermittelt, von der noch weitere Datensätze zu erwarten sind (also die letzte mehrdeutige Koppelung). Wurde ein weiterer Datensatz gefunden, so versucht der Listengenerator wiederum alle Folgekoppelungen bis zur letzten Koppelung herzustellen, bevor ein weiterer Zeilendruck veranlasst wird. Dieser Prozess wird solang wiederholt, bis alle selektierten Datensätze der Leitdatei und die damit zusammenhängenden Koppelsätze gefunden wurden.
Die Auswirkung dieser Vorgehensweise soll am folgenden Beispiel erläutert werden.
Gefordert ist eine Liste, die zu jedem Teil der Teilestammdatei evtl. vorhandene Stücklistenpositionen und zusätzliche M-Zeilen in der Arbeitsplandatei ausgeben soll. Um diese Liste zu erzeugen sollen die folgenden Koppelungen angegeben werden.
 
Leitdatei:       Teilestammdatei
1. Koppelung:
Teilestammdatei (Leitdatei)
->
Stücklistendatei
(mehrdeutig)
2. Koppelung:
Stücklistendatei
->
Teilestammdatei
(eindeutig)
3. Koppelung:
Teilestammdatei (Leitdatei)
->
Arbeitsplan M
(mehrdeutig)
4. Koppelung:
Arbeitsplan M
->
Teilestammdatei
(eindeutig)
Die Koppelungen 2 und 4 werden für die Ausgabe der Teilebezeichnung einer Komponente benötigt.
In der Teilestammdatei seien folgende Teile gespeichert:
Abbildung: Gespeicherte Teile in der Teilestammdatei
Die Stücklistendatei soll die folgenden Eintragungen enthalten:
Abbildung: Eintragungen in der Stücklistendatei
Und schließlich soll die Arbeitsplandatei folgende Materialzeilen enthalten:
Abbildung: Materialzeilen in der Arbeitsplandatei
Die Liste soll jetzt gestartet werden. Um die Listenausgabe verstehen zu können, verfolgen wir Schritt für Schritt die Vorgänge im Listengenerator.
Phase 1:
  • der Listengenerator liest die Leitdatei und findet einen Datensatz für das Teil "666100"
  • nun wird die erste Koppelung hergestellt -> dabei wird die Teilenummer aus der Leitdatei benutzt, um einen Eintrag in der Stücklistendatei mit der gleichen Teilenummer im Feld «übergeordnetes Teil» zu finden
  • der Listengenerator findet den ersten Datensatz in der Stücklistendatei, der zu dem übergeordneten Teil "666100" gehört
  • jetzt ist die zweite Koppelung an der Reihe -> die Teilenummer des untergeordneten Teils aus der Stücklistendatei (hier ist es die "666110") wird benutzt, um einen zugehörigen Datensatz in der Teilestammdatei zu finden
  • der Listengenerator findet das Teil "666110" in der Teilestammdatei
  • die dritte Koppelung wird wieder über die Leitdatei hergestellt -> die Teilenummer "666100" wird für den Zugriff auf die Arbeitsplan M-Datei verwendet
  • der Listengenerator findet den ersten Datensatz in der Arbeitsplan M-Datei zu dem übergeordneten Teil "666100"
  • bei der vierten Koppelung sucht der Listengenerator einen Datensatz in der Teilestammdatei zum eingesetzten Material (hier "730000") aus dem Arbeitsplan
  • der Listengenerator findet das Teil "730000" in der Teilestammdatei
  • da keine weiteren Koppelungen vorhanden und alle vorhandenen Koppelungen erfüllt sind, startet der Listengenerator die erste Druckausgabe
Phase 2:
  • der Listengenerator versucht durch die letzte Koppelung einen weiteren Datensatz zu finden und sucht einen weiteren Datensatz zum Teil "730000" in der Teilestammdatei -> das misslingt natürlich, da die Koppelung zwischen Arbeitsplan- und Teilestammdatei eindeutig ist und somit nur maximal einen Datensatz liefern kann
  • also versucht der Listengenerator in der darüber liegenden Koppelung einen weiteren Datensatz zu erreichen (Koppelung 3)
  • der Listengenerator findet einen weiteren Datensatz zum Teil "666100" in der Arbeitsplandatei
  • daraufhin wird versucht die Folgekoppelung (Koppelung 4) zur Teilestammdatei wieder herzustellen -> diesmal mit der Teilenummer "740003"
  • der Listengenerator findet das Teil "740003" in der Teilestammdatei
Phase 3:
  • wieder versucht der Listengenerator durch die 4. Koppelung einen weiteren Datensatz zu findet - auch diesmal ohne Erfolg (s.o.)
  • und wieder versucht er sein Glück in der nächsten übergeordneten Koppelung (Koppelung 3)
  • der Listengenerator findet keinen weiteren Datensatz in der Arbeitsplandatei, der zu dem übergeordneten Teil "666100" passen könnte
  • also versucht der Listengenerator in der nächsten darüberliegenden Koppelung einen weiteren Datensatz zu finden (Koppelung 2)
  • da auch diese Koppelung eindeutig ist (Stückliste -> Teilestamm) und kein weiterer Satz zum Teil 666110 in der Teilestammdatei vorhanden ist, bleibt auch dieser Versuch erfolglos
  • also versucht der Listengenerator in der nächsten darüberliegenden Koppelung einen weiteren Datensatz zu finden (Koppelung 1)
  • diesmal ist ein weiterer Satz vorhanden -> der Listengenerator findet den zweiten Stücklistensatz zum Teil "666100"
  • jetzt ist wieder die zweite Koppelung an der Reihe -> diesmal wird das Teil "666120" in der Teilestammdatei gesucht
  • der Listengenerator findet das Teil "666120" in der Teilestammdatei
  • daraufhin wird die Koppelung 3 hergestellt -> der Listengenerator greift mit der Teilenummer "666100" aus der Leitdatei auf die Arbeitsplandatei zu
  • der Listengenerator findet einen Datensatz mit dem übergeordneten Teil "666100" in der Arbeitsplandatei
  • die Koppelung 4 wird wieder zwischen der Arbeitsplandatei und der Teilestammdatei über das Teil der Materialzeile ("730000") hergestellt
  • der Listengenerator findet das Teil "730000" in der Teilestammdatei
  • da keine weiteren Koppelungen vorhanden und alle vorhandenen Koppelungen erfüllt sind, startet der Listengenerator die dritte Druckausgabe
Phase 4:
entspricht Phase 3
Dieser Ablauf wiederholt sich solange, bis die Koppelung 1 keine weiteren Datensätze mehr liefert, also am Ende der Stückliste zum Teil "666100". Danach liest der Listengenerator den nächsten Satz der Leitdatei und findet dort das Teil "666110". Da zu diesem und allen folgenden Teilen keine Datensätze in der Stücklistendatei existieren, ist die Druckausgabe damit beendet.
Ihnen ist sicherlich aufgefallen, dass diese Abarbeitung nicht zu einem zufriedenstellenden Ergebnis führt. Deutlich wird dies an der Druckausgabe, die zu diesem Beispiel wie folgt aussehen könnte:
Abbildung: Beispiel für die Verarbeitung von Koppelungen
Offensichtlich ist in der Liste der Wurm drin. Neben dem Durcheinander von Stückliste und Arbeitsplan ist vor allem die ständige Wiederholung der Arbeitsplanpositionen störend. Ein weiterer unerwünschter Effekt würde dann auftreten, wenn zu einem übergeordneten Teil zwar eine Arbeitsplan-M-Zeile existiert aber keine Stücklistenposition. In diesem Fall würde für das Teil keine Komponente ausgewiesen ! Der Listengenerator würde in Koppelung 1 keinen Datensatz finden und deshalb alle Folgekoppelungen (also auch die zur Arbeitsplandatei) ignorieren.
An dieser Stelle werden Koppelzweige notwendig. Durch die Zuordnung von Koppelungen zu verschiedenen Zweigen werden die Koppelungen einerseits zusammengefasst (alle Koppelungen im gleichen Zweig) und andererseits voneinander getrennt (Koppelungen in verschiedenen Zweigen). Die Trennung hat zur Folge, dass alle Koppelungen eines Zweiges abgearbeitet werden, ohne einen anderen Zweig zu beeinflussen.
Im obigen Beispiel würden die Koppelzweige wie folgt zugeordnet:
1. Koppelung:
Teilestammdatei (Leitdatei)
->
Stücklistendatei
(mehrdeutig)
Zweig 1
2. Koppelung:
Stücklistendatei
->
Teilestammdatei
(eindeutig)
Zweig 1
3. Koppelung:
Teilestammdatei (Leitdatei)
->
Arbeitsplan M
(mehrdeutig)
Zweig 2
4. Koppelung:
Arbeitsplan M
->
Teilestammdatei
(eindeutig)
Zweig 2
Diese Gruppierung hat zur Folge, dass der Listengenerator bei der Abarbeitung der Koppelungen nicht erst dann eine Druckausgabe startet, wenn alle Koppelungen erfüllt sind, sondern immer dann, wenn die Koppelungen eines Zweiges hergestellt wurden. Innerhalb eines Zweiges verhält sich der Listengenerator wie üblich, solange bis keine weiteren Datensätze im jeweiligen Zweig gefunden werden - dann erst wird der nächste Koppelzweig verarbeitet.
In diesem Fall würde der Ausdruck des Beispiels in etwa so aussehen:
Abbildung: Beispiel für die Verarbeitung von Koppelungen
Ein Teil ohne Stückliste aber mit Arbeitsplan würde nun auch angezeigt, da sich die nicht erfüllbare Koppelung Nummer 1 (Leitdatei -> Stückliste) in Zweig 1 befindet und Zweig 2 unabhängig davon abgearbeitet wird.