Zum Inhalt

Aufbau einer DBInfo-Formel mit abweichendem Index

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 abweichende Index steht in der Formel zwischen dem Datenbanknamen und den Schlüsselwerten. Dieser abweichende Index wird verwendet, um auf die Datentabelle zu zugreifen.

Beachten Sie:

Die verschiedenen Indizes, ihre Namen und die Felder müssen Ihnen genau bekannt sein.

DBInfo-Formel mit abweichendem Index

Allgemeiner Aufbau

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

Erläuterung zum Aufbau des abweichenden Index

Angabe Bedeutung
IX; Mit IX; wird immer ein Abweichender Index eingeleitet.
\ An dieser Stelle muss der Indexname angegeben werden, der verwendet werden soll.

Beispiel: Zugriff auf Versand-Datensatz

Angenommen, Ihnen ist im Bereich "Versand" folgender Aufbau bekannt:

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 können Sie mit IX;BelegNr den Index benutzen, der die Belegnummer benötigt.

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

DBInfo-Formel mit abweichendem Index im Druckdesigner

Die Funktion "External$('DBInfo(...)')" mit "abweichendem Index" lässt sich unter bestimmten Voraussetzungen auch im Druckdesigner verwenden.

Beispiel 1: Es soll auf Ansprechpartner mittels DBInfo-Formel mit abweichendem Index im Druckdesigner zugegriffen werden

Voraussetzung für die Nutzung der DBInfo-Formel mit abweichenden Index im Druckdesigner in diesem Kontext:

  • Der Ansprechpartner-Name innerhalb einer Anschrift muss eindeutig sein (Ansprechpartner darf nicht mehrfach vorkommen)
  • Der Ansprechpartner-Name im Kontakt darf nicht geändert werden

Erstellen Sie eine Formel nach dem folgenden Beispiel:

External$('DBInfo(“Ansprechpartner“|“IX;AdrNrAnsNrNa;3“|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|“Anr“)')

Erläuterungen zur Beispielformel1:

Bedeutung in Formel Hervorhebung in Formel Weitere Informationen
Datenbanktabelle: Ansprechpartner External$('DBInfo(“Ansprechpartner“|“IX;AdrNrAnsNrNa;3“|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|“Anr“)') Ansprechpartner ist die Datenbanktabelle nach der gesucht wird
Abweichender Index mit Indexname und nachfolgenden Suchfeldern External$('DBInfo(“Ansprechpartner“|“IX;AdrNrAnsNrNa;3“|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|“Anr“)') IX: Gibt an, das es sich bei der Suche um einen abweichenden Index (Suchesortierung) handelt
External$('DBInfo(“Ansprechpartner“|“IX;AdrNrAnsNrNa;3“|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|“Anr“)') AdrNrAnsNrNa: Bezeichnet den internen Indexnamen, nach welchen gesucht werden soll
External$('DBInfo(“Ansprechpartner“|“IX;AdrNrAnsNrNa;3“|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|“Anr“)') 3:  Anzahl der nachfolgenden Suchfelder für den Index
Vorgabewerte für die Suche:
- Adressnummer
- Anschriftennummer
- Ansprechpartnername
External$('DBInfo(Ansprechpartner|IX;AdrNrAnsNrNa;3|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|Anr)') Kkt.Nr|Kkt.LfdNr|Kkt.Ansp sind die Vorgabewerte für die Suche. In diesem Beispiel: Adressnummer, Anschriftennummer, Ansprechpartnername
Feldname für Feldwert, den Formel zurückliefern soll:
- Anrede
External$('DBInfo(Ansprechpartner|IX;AdrNrAnsNrNa;3|Kkt.Nr|Kkt.LfdNr|Kkt.Ansp|Anr)') Anr: Feldname für den Feldwert, den DBInfo zurückliefern soll

Beispiel 2: Im Vorgangsdruck soll für einen Artikel (für den eine Charge ausgewählt wurde), die jeweilige BelegNr aus dem Lagerbestand von der Zubuchung mit ausdruckt werden

Formel:

External$('DBInfo("LagerBestand"|"IX;ArtNrLagNrCharge"|VPo.ArtNr|VPo.AusLagNr|VPo.Charge|"BelegNr")')

Info:

Die Lagerbestandtabelle hat keinen Primärindex. Deswegen muss bei einer DBInfo-Funktion immer ein Abschnitt mit "IX;..." vorhanden sein.

Beispiel 3: Bei Vorgangsdruck soll ein separates Blatt mit den Daten aus der Wiedervorlage (WV), die für den Vorgang erzeugt wurde, ausgedruckt werden

Der Druck wurde als Vorgangsseite im Register "Vorgangsseite ohne Positionen" erstellt.

Bedeutung in Formel Hervorhebung in Formel
Gibt das Datum der WV zurück External$('DBInfo("Kalender"|"IX;AnhNrArtDat;2"|Vog|ID|"StartDat")')
Gibt Kurzinformation der WV zurück External$('DBInfo("Kalender"|"IX;AnhNrArtDat;2"|Vog|Vog.ID|"KuInfo")')

DBInfo-Formel mit verkürztem Index

Bei komplizierten Indizes sind oft nicht alle Felder eines Indexes gewünscht, da Ihnen z. B. nicht alle nötigen Daten bekannt sind. 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

Angenommen, Folgendes ist Ihnen in diesem Beispiel bekannt:

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.

Angenommen, Folgendes ist Ihnen in diesem Beispiel bekannt:

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 in diesem Beispiel 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")