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
Angabe | Bedeutung |
---|---|
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 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:
| 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:
| 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")