Inhalt

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;<Index>"|Schlüsselwert[e]|"Zielfeldname")') 

Erläuterung zum Aufbau des abweichenden Index

AngabeBedeutung
IX;Mit IX; wird immer ein Abweichender Index eingeleitet.
<Index>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 FormelHervorhebung in FormelWeitere Informationen
Datenbanktabelle: AnsprechpartnerExternal$('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 SuchfeldernExternal$('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 FormelHervorhebung in Formel

Gibt das Datum der WV zurück

External$('DBInfo("Kalender"|"IX;AnhNrArtDat;2"|Vog|ID|"StartDat")')

Gibt Kurzinformation der WV zurückExternal$('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")
  • No labels