You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Wenn eine "normale" DBInfo-Formel nicht weiter hilft, da der Standardindex nicht passend ist oder manche Felder des Indexes (Schlüsselwert) nicht gefüllt werden können, muss mit einem abweichenden Index gearbeitet werden. Dieser steht in der Formel zwischen dem Datenbanknamen und den Schlüsselwerten. 

Dieser abweichende Index wird dann verwendet, um auf die Datentabelle zu zugreifen. 

Da die verschiedenen Indizes, ihre Namen und die Felder genau bekannt sein müssen, benötigen Sie die Feldliste (siehe DBInfo-Erklärung). 

Allgemeiner Aufbau: 

External$('DBInfo("Name der Datentabelle"|"IX;<Index>"|Schlüsselwert[e]|"Zielfeldname")') 

Mit IX; wird immer ein Abweichender Index eingeleitet. 

<Index>: Hier muss der Indexname angegeben werden, der verwendet werden soll. 

Beispiel: 

In der Feldliste steht bei Versand folgendes: DataSet: Versand - Versand 

... 

Index: ID - ID 

IndexField:ID - ID 

Index: PktNr - Paketnummer 

IndexField:PktNr - Paketnummer 

IndexField:VsdArt - Versandart 

Index: VsdArtLfdPktNr - Versandart 

IndexField:PktNrVsdArt - Versandart 

IndexField:LfdPktNr - laufende Paketnummer 

Index: AdrNr - Adressnummer 

IndexField:AdrNr - Adressnummer 

IndexField:PktNr - Paketnummer 

Index: AdrNrDat - Adressnummer & Datum 

IndexField:AdrNr - Adressnummer 

IndexField:Dat - Datum 

IndexField:PktNr - Paketnummer 

Index: BelegNr - Belegnummer 

IndexField:BelegNr - Belegnummer 

... 

Wenn Sie auf einen Versand-Datensatz zugreifen möchten, haben aber nicht die Paketnummer, sondern nur die Belegnummer des Vorgangs, dann kann man mit IX;BelegNr den Index benutzen, der die Belegnummer benötigt. 

Die Schlüsselwerte müssen natürlich angepasst werden, so dass sie zu den Feldern des abweichenden Indexes passen. 

 

Verkürzter Index: 

Bei komplizierten Indizes sind oft nicht alle Felder eines Indexes gewünscht, da man nicht die nötigen Daten hat. Damit diese trotzdem verwendet werden können, gibt es die Möglichkeit, einen Index zu verkürzen. Sozusagen anzugeben wie viele Parameter vom Index verwendet werden sollen. Diese Anzahl wird mit einem Semikolon hinter dem abweichenden Index eingetragen. Die restlichen Felder des Indexes werden nicht beachtet. 

Allgemeiner Aufbau: External$('DBInfo("Name der Datentabelle"|"IX;<Index>;<Anzahl der verwendeten Parameter>"|<übergebene Parameter>|"Zielfeldname")') 

Beispiel: Es soll nur mit der Auftragsnummer auf die Vorgänge zugegriffen werden. In der Feld-Liste steht folgendes: 

DataSet: Vorgang - Vorgänge 

... 

Index: ID - ID 

IndexField:ID - ID 

Index: BelegNr - Belegnummer 

IndexField:BelegNr - Belegnummer 

Index: PrjNr - Projektnummer 

IndexField:PrjNr - Projektnummer 

IndexField:Dat - Datum 

Index: AuftrNr - Auftragsnummer 

IndexField:AuftrNr - Auftragsnummer 

IndexField:BelegNr - Belegnummer 

... 

Da mit der Auftragsnummer zugegriffen werden soll, wird der Index AuftrNr genommen. Für diesen wird allerdings auch die Belegnummer benötigt, die wir nicht haben. Also muss der Index verkürzt werden. 

Dies sieht wie folgt aus: 

IX;AuftrNr;1 

Wir verwenden den abweichenden Index AuftrNr und nehmen nur den ersten Parameter vom Index. 

Komplett würde das so aussehen: External$('DBInfo("Vorgang"|"IX;AuftrNr;1"|<Variable für Auftragsnummer>|"Zielfeldname")') 

Beispiel: 

Es soll eine Liste erstellt werden für einen speziellen Kunden mit allen Artikeln und eine Bemerkung, ob er diesen Artikel jemals gekauft hat. Alle Artikel kann man nur in den Stammdaten->Artikel ausgeben. Dort muss also eine Liste erstellt werden. Wenn der Kunden einen Artikel erworben hat, sehen Sie dies nur in der History. Somit müsste aus der Artikel-Liste auf die History-Datenbank zu gegriffen werden. 

In der Feldliste steht folgendes: DataSet: History - History 

... 

Index: ID - ID 

IndexField:ID - ID 

Index: AdrNr - Adressnummer 

IndexField:AdrNr - Adressnummer 

IndexField:Dat - Datum 

IndexField:ArtNr - Artikelnummer 

Index: BelegNr - Belegnummer 

IndexField:BelegNr - Belegnummer 

IndexField:BelegPosNr - Belegpositionsnummer 

IndexField:ArtNr - Artikelnummer 

Index: PrjNr - Projektnummer 

IndexField:PrjNr - Projektnummer 

IndexField:Dat - Datum 

Index: AuftrNr - Auftragsnummer 

IndexField:AuftrNr - Auftragsnummer 

Index: Dat - Datum 

IndexField:Dat - Datum 

IndexField:BelegNr - Belegnummer 

Index: VsdArt - Versandart 

IndexField:VsdArtBez - Versandart 

IndexField:BelegNr - Belegnummer 

IndexField:Dat - Datum 

Index: ArtNr - Artikelnummer 

IndexField:ArtNr - Artikelnummer 

IndexField:Dat - Datum 

IndexField:AdrNr - Adressnummer 

Index: AdrNrArtNr - Adress- und Artikelnummer 

IndexField:AdrNr - Adressnummer 

IndexField:ArtNr - Artikelnummer 

IndexField:Dat - Datum 

... 

In der Liste sind die Artikelnummern vorhanden und die Adressnummer des Kunden. Demnach benötigen wir einen Index mit Artikelnummer und Adressnummer. Bei allen Indizes wird allerdings ein Datum gebraucht. Dieses steht uns jedoch nicht zur Verfügung. Das Datum muss also abgeschnitten werden. Damit dies gemacht werden kann, muss das Datum am Ende des Index stehen. Also wird ein Index benötigt, in dem die ersten beiden Parameter die Artikel-Nr und die Adress-Nr und der dritte das Datum ist. Dies trifft auf den Index AdrNrArtNr zu. Die Formel würde dann so aussehen, wenn festgelegt ist, dass die Liste für den Kunden mit der Kundenummer "10000" ausgegeben werden soll: 

External$('DBInfo("History"|"IX;AdrNrArtNr;2"|"10000"|Art.ArtNr|"<gewünschtes Feld>")') 

Da es ja das Ziel war auszugeben, ob der Kunde den Artikel schon einmal gekauft hat, wird ein Vergleich benötigt. Da eine DBInfo-Formel "Keine Eintragung..." zurück gibt, wenn es keinen passenden Datensatz findet, kann einfach als gewünschtes Feld die Artikelnummer genommen werden. Wenn der Rückgabewert die Artikelnummer ist, dann hat der Kunde "10000" diesen Artikel bereits einmal gekauft, sonst nicht. 

Dies könnte wie folgt aussehen: 

Cond(External$('DBInfo("History"|"IX;AdrNrArtNr;2"|"10000"|Art.ArtNr|"ArtNr")') = Art.ArtNr,"Artikel bereits gekauft","Artikel noch nie gekauft")

  • No labels