SOG-Helpcenter Logo SOG Business - Software

Der ObjectSelector-Control


SelectoreMit Hilfe des ObjectSelector Controls können Datensätze aus einer Datenmenge ausgewählt werden.

 

 

Die Schaltflächen der Funktionsleiste haben folgende Bedeutung:

 

Aktiviert die erweiterten Funktionen nur für diesen Control.

Löscht alle Eingabewerte in allen Suchkriterien

Anzeigen

Führt die Suche mit den in den Suchkriterien eingegebenen Suchvorgaben aus, und stellt das Ergebnis in der Verbundenen Ergebnisliste dar.

default

Name der aktuellen Ansicht. Über Ansichten können unterschiedliche Suchvorgaben gespeichert und abgerufen werden. Wählen Sie hier die gewünscht Ansicht aus, und geben Sie anschließend über die zur Verfügung stehenden Suchkriterien Ihre Suchvorgaben vor.

Ruft die Ausgewählte Ansicht erneut ab.

Anzahl: 1000

Erlaubt die Vorgabe einer maximalen Anzahl von darzustellenden Treffern. Dieser Wert sollte nicht zu hoch eingestellt werden, damit Datenbank, Netzwerk und Anzeige nicht unnütz viele Daten bewegen müssen. Stellen Sie hier ein, wieviele Datensätze noch sinnvoll in der Trefferliste auszuwerten sind.

SQL

Kopiert das durch die Suchvorgaben definierte SQL Statement in die Zwischenablage.

 

Gruppierung mit "Und" und "Oder"

 

Suchkriterien erlauben das Einschränken der gefundenen Datenmenge über Vorgabe von Suchwerten für verschiedene Datenfelder.
Im einfachsten Fall besteht die Liste der Suchkriterien aus einer Liste von Datenfeldern, die über eine "Und" Gruppe miteinander verknüpft sind.

Eine "Und" Gruppe liefert dann einen Datensatz, wenn alle darin vorgegebenen Bedingungen erfüllt sind.

Im Gegensatz dazu liefert eine "Oder" Gruppe immer dann einen Datensatz, wenn eine der darin vorgegebenen Bedingungen erfüllt ist.

 

Dabei können "Und" und "Oder" Gruppen beliebig miteinander kombiniert auftreten.

 

In diesem Beispiel werden alle Datensätze geliefert, bei denen das Datenfeld "Land" den Wert "Deutschland (4)" aufweist und das Datenfeld "Postleitzahl" den Wert "22769", oder aber das Datenfeld "Land" den Wert "Niederlande (3)" und das Datenfeld "Postleitzahl" den Wert "7957"-

Der aus diesen Vorgaben gebildete SQL sieht dabei wie folgt aus:

 

select * from f010 where ( ( f010.land = 4 AND f010.plz = '22769' ) OR ( f010.land = 3 AND f010.plz = '7957' ) )

 

Nicht geliefert würden Datensätze die zwar in Deutschland liegen, nicht aber die Postleitzahl 22769 enthalten.

Ebenfalls nicht geliefert würden alle Datensätze die zwar in den Niederlanden liege, nicht aber die Postleitzahl 7957 aufweisen.

Natürlich werden ebenfalls keine Datensätze anderer Länder angezeigt.

 

Negieren einer Gruppe

 

Mit Hilfe der Gruppenoperatoren "Nicht (... Und ...)" bzw. "Nicht (... Oder ...)" wird eine Gruppe vollständig negiert.

Im oben genannten Beipsiel würde also die Verwendung von "Nicht (... Oder ...)" an Stelle von "Oder" auf oberster Ebene dazu führen, dass nicht mehr die beiden genannten Datensätze gefunden würden, sondern das genau diese beiden Datensätze in der Ergebnismenge nicht mehr vorkommen. Also: Alle Datensätze gefunden werden, die der angegebenen Bedingung nicht entsprechen.

 

 

 

Die gebildete SQL-Anweisung hat folgenden Aufbau:

 

select * from f010 where NOT ( ( f010.land = 4 AND f010.plz = '22769' ) OR ( f010.land = 3 AND f010.plz = '7957' ) )

 

und unterscheidet sich nur durch das "NOT" von dem oben genannten Beispiel.

 

Der Unterschied zwischen SQL Filter und Datensatz Filter

 

ObjectSelector-Controls können 2 unabhängig voneinander wirkende Filterbereiche aufweisen.
 

SQL Filter

 

Im Bereich "SQL Filter" können Auswahlkriterien vorgegeben werden, die direkt in die SQL-Anweisung aufgenommen werden, mit der die Daten aus der Datenbank abgerufen werden. Dadurch vermindert sich die gefundene Datenmenge. Die Ausführung der Anweisung geht schneller, als wenn keine Vorgaben gemacht würden. Je genauer die Vorgabe dabei gefasst werden, um so kleiner ist die gefundene Datenmenge und um so schneller kann das Ergebnis angezeigt werden. Existieren passende Indices in der Datenbank, werden diese ggf. automatisch zur Steigerung der Anzeigegeschwindigkeit verwendet.

 

Datensatz Filter

 

Im Bereich "Datensatz Filter" können darüber hinaus Auswahlkriterien vorgegeben werden, die für eine Datensatzauswahl nach Übermittlung der Daten aus der Datenbank an ActiveSkin herangezogen werden. Auch diese Kriterien vermindern die angezeigte Datenmenge, führen aber zu einer Erhöhung der benötigten Dauer zur Anzeige aller Daten, da die gefundene Datenmenge vollständig an ActiveSkin übermittelt wird, und erst hier eine Filterung der Datensätze erfolgt.

Sind für die Berechnung der Filterwerte für jeden Datensatz noch weitere Daten anzulesen, oder ist die Werteberechnung anderweitig aufwendig, kann die Vorgabe von Filterwerten die benötigt Gesamtanzeigedauer stark negativ beeinflussen.

 

Wenn es irgendwie geht, sollten immer Vorgaben im Bereich SQL Filter getroffen werden, die zuerst die Datenmenge möglichst effizient einschränken.

 

 

In diesem Beispiel wurde die Datenmenge durch Vorgaben im SQL Filterbereich stark eingeschränkt und nur zusätzlich im "Datensatz Filter" eine weitere Vorgabe getroffen.

Die Anzeige der Daten wird schnell erfolgen.

 

 

In diesem Beispiel wurden keine Vorgaben im Bereich "SQL Filter" gemacht. ActiveSkin muss alle Datensätze aus der betroffenen Tabelle abrufen und bzgl. des Fehlkennzeichens prüfen.
Die Anzeige der Daten wird sich stark verzögern und die Systeme stark belasten.

 

Praktisches Beispiel zur Verdeutlichung der beiden Filter:

 

Sie benötigen die Auswahl von Kunden in Deutschland mit einem Saldo größer/gleich 10.000.

 

 

Zunächst sucht das System alle Kunden aus Deutschland (SQL Filter). Aus den ermittelten Datensätzen dieser Suche wird erst dann der Datensatz Filter genutzt und aus den ermittelten deutschen Kunden werden nun die Kunden mit einem Saldo größer/gleich 10.000 gesucht (Datensatz Filter).

 

Durch die nachgelagerte Suche des Datensatz Filters kann die Suche entsprechend länger dauern. Alles Felder, die im SQL-Filter genutzt werden können, sollten auch dort und nicht im Datensatz Filter genutzt werden. Es gibt allerdings Felder (wie im Beispiel das Saldo), die nur im Datensatz Filter genutzt werden können.

 

Anwahl einer Ansicht über das Seitenmenü

 

In SOG ERP Suchfunktionen werden die im ObjectSelector zur Verfügung stehenden Ansichten im Seitenmenü dargestellt.

 

 

Durch einen Klick auf eine gewünschte Ansicht wird diese in gleicher Weise eingestellt, als wenn sie über das Ansichtsmenü in der Toobar des Controls ausgewählt worde wäre.

 

Auswahl einer Auswahloperation

 

In jedem Suchkriterium kann eine Auswahloperation eingestellt werden, mit der bestimmt wird, wie das Datenfeld mit dem oder den eingegebenen Vergleichswerten zu verknüpfen ist.

 

 

Folgende Auswahloperationen stehen zur Verfügung (Nicht alle Auswahloperationen stehen immer zur Verfügung)

 

Beginnt

Prüft, ob der Inhalt des Datenfeldes mit dem vorgegebenen Wert beginnt.

Beginnt nicht

Prüft, ob der Inhalt des Datenfeldes nicht mit dem vorgegebenen Wert beginnt.

Enthält

Prüft, ob der Inhalt des Datenfeldes den vorgegebenen Wert enthält.

Enthält nicht

Prüft, ob der Inhalt des Datenfelder den vorgegebenen Wert nicht enthält.

Zwischen

Prüft, ob der Inhalt des Datenfeldes zwischen den beiden vorgegebenen Werten liegt. Dabei gelten die Vorgaben selbst als "liegt dazwischen".

Nicht Zwischen

Prüft, ob der Inhalt des Datenfeldes nicht zwischen den beiden vorgegebenen Werten liegt. Dabei gelten die Vorgaben selbst als "liegt dazwischen".

in

Prüft, ob der Inhalt des Datenfeldes einem der vorgegebenen Datenwerte entspricht.

nicht in

Prüft, ob der Inhalt des Datenfeldes keinem der vorgegebenen Datenwerte entspricht.

In einer Selektion

Prüft, ob der Inhalt des Datenfeldes in einer der vorgegebnenen Selektionen enthalten ist.

Nicht in einer Selektion

Prüft, ob der Inhalt des Datenfeldes in keiner der vorgegebnenen Selektionen enthalten ist.

In allen Selektionen

Prüft, ob der Inhalt des Datenfeldes in allen vorgegebnenen Selektionen enthalten ist.

Nicht in allen Selektion

Prüft, ob der Inhalt des Datenfeldes nicht in allen vorgegebnenen Selektionen enthalten ist.

ist null

Prüft, ob das Datenfeld keinen Inhalt besitzt.

ist nicht null

Prüft, ob das Datenfeld einen Inhalt besitzt.

Ist gleich

Prüft, ob der Inhalt des Datenfeldes dem vorgegebenen Wert entspricht.

ist nicht gleich

Prüft, ob der Inhalt des Datenfeldes nicht dem vorgegebenen Wert entspricht.

Größer gleich

Prüft, ob der Inhalt des Datenfeldes größer oder gleich dem vorgegebenen Wert ist.

Größer

Prüft, ob der Inhalt des Datenfeldes größer als der vorgegebenen Wert ist.

Kleiner gleich

Prüft, ob der Inhalt des Datenfeldes kleiner oder gleich dem vorgegebenen Wert ist.

Kleiner

Prüft, ob der Inhalt des Datenfeldes kleiner als der vorgegebenen Wert ist.

Sql Text (sql)

Freie SQL-Anweisung. Hier formulieren Sie frei einen Teil einer SQL-Where-Klausel.
Beispiel: "konto = 12345" => Die SQL-Anweisung wird um diese Angabe ergänzt.

Wird innerhalb einer Relation mit dieser Möglichkeit gearbeitet, so wird der hier angegebene Text in den Relations-SQL eingesetzt. In diesem Fall sollten alle Feldnamen mit "#TABNAME#." prefixiert werden. #TABNAME#. wird zur Laufzeit durch den aktuellen, dynamischen Tabellennamen der Relation ersetzt.
Beispiel: "#TABNAME#.datum < 20110801"

Beginnt der für eine Relation angegebene SQL mit der Zeichenfolge "#NOTEXISTS#", oder ist nur diese Zeichenfolge angegeben, so liefert die Relation nicht alle Datenzeilen, die den angegebenen Bedingungen entsprechen, sondern alle Datenzeilen, die den angegebenen Bedingungen nicht entsprechen!
Beispiel: "#NOTEXISTS# #TABNAME#.datum < 20110801"

Für die Verwendung der Funktion ist das SOG ERP Recht "opcode_sql" notwendig.

Sql Datei (sqlfile)

Gleiche Funktion wie "Sql Text". Jedoch wird hier nur der Name einer SQL-Datei hinterlegt. Zur Laufzeit wird die SQL-Datei in den Verzeichnissen gesucht, die über die Variable SOGSqlFilePath festgelegt sind.
Standardmäßig sind dies die Verzeichnisse:

  • ${PROJ}\sql.${HHENVDOMAIN}\Selector

  • ${PROJ}\sql.indi\Selector

  • ${PROJ}\sql\Selector)

Abweichend davon könnte ein Eintrag in der Firm01.env z.B. folgenden Inhalt haben: envexp SOGSqlFilePath (${PROJ}\\sql.${HHENVDOMAIN}\\Selector)

 

Siehe auch: SQL-Skripte

 

Zusätzlich zu diesen Namen wird noch der Konfigurationsname des aktuellen Selector-Datentyps als Unterverzeichnis angehängt (z. B. Kundenstamm oder Artikelstamm).

Wird also z. B. in der Funktion p742 - Kundensuche (ksu) die Datei "AusHamburg" als "Sql Datei" eingestellt, so könnte diese z. B. unter
${PROJ}\sql\Selector\Kundenstamm\AusHamburg.sql hinterlegt werden.

Der Inhalt der SQL-Datei entspricht dem eintragbaren Text der Funktion "Sql Text". Es darf also kein vollständiger SQL, sondern nur ein Teil einer Where-Klausel geschrieben werden.

Siehe auch Beispieldatei: sql\selector\Kundenstamm\AusHamburg.sql

Für die Verwendung der Funktion ist das SOG ERP Recht "opcode_sqlfile" notwendig.

 

Volltext

Führt eine Volltextsuche auf dem angegebenen Datenfeld aus. Dazu ist die Anlage eines Datenbank Volltext-Indexes notwendig.

 

Suchkriterien mit mehr als einer Werteangabe

 

Bestimmte Auswahloperationen bieten die Möglichkeit, mehr als einen Vergleichswert anzugeben. Wenn eine bestimmte Anzahl von Vergleichswerten angegeben werden muss (z. B. genau 2 Werte für die Auswahloperation bei "Zwischen") steht sofort die benötigte Anzahl von Eingabefeldern zur Verfügung.

 

 

Ist die Anzahl der möglichen Vergleichswerte unbestimmt, so wird nach Ausfüllen eines Wertes jeweils ein neues, leeres Eingabefeld am Ende der Liste angefügt.

 

 

Bitte beachten Sie, dass die maximale Anzahl der eingebbaren Datenwerte begrenzt ist. Sollte mehr als die hier erlaubten Eingaben benötigt werden, soll mit Selektionen gearbeitet werden. Also bitte an Stelle von "In" den Operator "In einer Selektion" verwenden.

 

Abfrage ob ein Datenfeld Daten enthält, oder nicht

 

Bei einigen wenigen Datenfelder erlaubt SOG ERP den Zustand, dass keine Daten im Datenfeld enthalten sind.

 

 

Bei solchen Datenfeldern stehen zusätzlich die Auswahloperationen "Ist null" und "Ist nicht null" zur Verfügung. Diese Filtern entsprechend auf alle Datensätze die keinen Wert im Datenfeld enthalten (Ist null) bzw. einen Datenwert enthalten (Ist nicht null).

Ein Vorgabe eines Vergleichswertes ist in diesem Fall nicht notwendig.

 

Verwendung von relational verknüpften Daten

 

 

Suchkriterien können sich auch auf relational verknüpfte Datenbanktabellen beziehen. Solche relationalen Kriterien erkennen Sie an dem Symbol   oder  vor dem Namen des Datenfeldes.
In dem gezeigten Beispiel bezieht sich das Suchkriterium auf das Datenfled "Auftragsdatum (adat)" der relational mit dem Kundenstamm (f010) verknüpften Datenbanktabelle Auftragsleitsätze (f092).

 

Gefunden werden in diesem Beispiel alle Datensätze der Tabelle Kundenstamm, zu denen es relational verknüpfte Datensätze in der Tabelle Auftragsleitsätze gibt, die die angegebene Bedingung (Auftragsdatum >= Vegleichsdatum) erfüllen.

 

Der erzeugte SQL sieht dabei wie folgt aus:

 

select * from f010

where ( 

  ... AND 

exists (select 1 from f092 as rel1_f092 where 

  f010.firma = rel1_f092.firma AND f010.sa = rel1_f092.sa AND f010.konto = rel1_f092.konto      -->  Relationsverknüpfung

  AND rel1_f092.adat >= 20080401                                                                -->  Suchkriterium

) 

)

 

Alle Suchkriterien, die sich auf die gleiche relational verbundene Tabelle beziehen, und in der gleichen logischen Ebene der Abfrage liegen, werden zu einer Relationsverknüpfung zusammengefasst.

 

Bedingungen mit dem Symbol  liefern alle Datensätze zu denen es relational verknüpfte Datensätze gibt, die den angegebenen Bedingungen entsprechen.

Bedingungen mit dem Symbol  liefern alle Datensätze zu denen es keine relational verknüpften Datensätze gibt, die den angegebenen Bedingungen entsprechen.

 

Verwendung symbolischer Daten


In Datumsfeldern des ObjectSelectors ist es möglich, an Stelle eines echten Datums, ein symbolisches Datum zu verwenden. Symbolische Daten können dann in Ansichten gespeichert werden. Damit ist es möglich, Ansichten zu definieren, die mit Hilfe von symbolischen Daten z. B. Datensätze des aktuellen Tages, oder des aktuellen Buchungsmonats anzeigen.
Vor der Verwendung des Datumswertes werden die symbolischen Daten jeweils in das aktuell gültige Datum umgerechnet.

Die Definition von symbolischen Daten erfolgt in der Konfigurationsdatei ReplaceDate_cfg.xml.

Beispiel:
Die Eingabe des Datums "15.06.1970" wird standardmäßig durch das jeweils aktuelle Tagesdatum ersetzt.

Alternativ können diese Daten auch über den Datumsauswahl-Dialog ausgewählt werden:

 

Verwendung von Platzhaltern


Bei der Festlegung von Auswahlkriterien in einem ObjectSelector-Control können zum Teil auch symbolische #Platzhalter verwendet werden. Die Platzhalter haben das das Format
   Hash-Zeichen Name Hash-Zeichen

 

SOG ERP kennt einige Standardplatzhalter. Daneben können aber auch über eine Konfigurationsdatei Datenfelder aus der aktuellen Maske zu Platzhaltern ernannt werden, die dann innerhalb von ObjectSelectoren dieser Maske zum Festlegen der anzuzeigenden Daten genutzt werden können.

 

Standardplatzhalter von SOG ERP sind:

 

#ME#

Die Id des aktuellen Sachbearbeiters.

#SACH#

Die Id des ausgewählten Sachbearbeiters. (Nur verwendbar in Funktionen mit auswählbarem Sachbearbeiterbezug)

#BEREICH#

Der Bereich (Ek/Vk) des aktuellen Sachbearbeiters.

#LG#

Das aktuell ausgewählte Lager. (Nur verwendbar in Funktionen mit auswählbarem Lagerbezug)

 

Dazu kommen maskenabhängig konfigurierbare Maskenfelder, die als Platzhalter in ObjectSelectoren verwendet werden können.

Beispiel

 

In der Maske p102

#KONTO#

Aktuell in der Maske angewähltes Konto.

#PROJEKT#

Aktuell in der Maske angewähltes Projekt.

#PROJEKTTEIL#

Aktuell in der Maske angewählter Projektteil.

 

Die verfügbaren Maskenplatzhalter können über Konfigurationsdateien eingestellt werden.

 

Verwendung von SQL Funktionen für Datums- und Zeitpunktfelder

 

Im SQL-Teil des Selectors besteht für Datums- und Zeitpunktfelder die Möglichkeit, das Datums bzw. den Zeitpunkt vor der Verwendung umzuformen. Damit kann an Stelle des gesamten Datums nur mit einer bestimmten Eigenschaft des Datums verglichen werden.

z.B. könnten so alle Datensätze angezeigt werden, bei denen dieses Datum auf einen Montag zeigt.

Da Zeitpunkte in der Datenbank immer UTC Zeitpunkte sind, werden diese für den Vergleich unter Zuhilfenahme der Zeitzone des aktuellen Benutzers in lokale Zeitpunkte gewandelt.

 

Folgende SQL Funktionen stehen dafür zur Verfügung:

 

Jahr

Vergleicht mit der 4-stelligen Jahreszahl des Datums

Monat

Vergleicht mit der 2-stelligen Monatsnummer des Datums, wobei 1 für Januar und 12 für Dezember steht.

Wochentag

Vergleicht mit der 1-stelligen Tagesnummer der Woche des Datums, wobei 1 für Montag und 7 für Sonntag steht.

Woche

Vergleicht mit der 2-stelligen Wochennummer des Datums. Mögliche Werte: 1-53

Jahreswoche

Vergleicht mit der 6-stelligen Jahr/Woche des Datums. Beispiel: Der 01.01.2023 gehört zur 52. Woche des Jahres 2022. Dar Vergleichswert lautet dann hier: 202252

Quartal

Vergleicht mit der 1-stelligen Quartalsnummer des Datums, wobei 1 für Januar/Februar/März und 3 für Oktober/November/Dezember steht.

AlterTage

Vergleicht mit dem Alter des Datums in Tagen, bezogen auf das aktuelle Tagesdatums des Benutzers. Das heutige Datum ergibt dabei ein Alter von "0" Tagen. Das gestrige "1" Tage.

Bei Aufruf der Funktion in unterschiedlichen Zeitzonen können je nach Tageszeit unterschiedliche Ergebnisse entstehen, da z.B. ein gegebener Zeitpunkt in der englischen Zeitzonen bereits "gestern" sein kann, während der gleiche Zeitpunkt aus Sicht der deutschen Zeitzone noch "heute" ist.

 

Für Datenfelder, die einen Zeitpunkt festlegen sind noch zwei weitere Funktionen möglich:

 

Datum

Vergleicht nur den Datumsanteil des Zeitpunktes.

Uhrzeit

Vergleicht nur den Uhrzeitanteil des Zeitpunktes.

 

Erweiterte Funktionen

Weitere Funktionen des Controls sind durch Klicken auf die Konfigurationsschaltfläche   in der Toolbar des Control zugänglich.