Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 25 Aktuelle »

Einleitung

Dieses Handbuch bezieht sich auf den neuen Spartenmaskendesigner, der ab ams.5 4.5.0.54591 zur Verfügung steht.

Dieses Handbuch richtet sich sowohl an Neueinsteiger als auch an routinierte Nutzer.

Bitte beachten Sie, dass wenn Sie eine bereits existierende Maske mit dem neuen Designer öffnen, diese nicht mehr mit dem alten Designer geöffnet werden kann.

Was ist der Spartenmaskendesigner?

Mithilfe des Spartenmaskendesigner-Moduls versetzt ams Sie in die Lage eine Spartenmaske inkl. Berechnungslogiken nach Ihren individuellen Bedürfnissen designen und abbilden zu können. Hierfür werden lediglich Grundkenntnisse in der Programmierung benötigt.

Dabei können Ihre Logiken weit über eine einfache Prämienberechnung hinaus gehen. So können Sie selbst den Erfassungsprozess steuern, indem Sie bspw. passende Felder Ein-/Ausblenden und somit Anwenderfehler minimieren und eine hohe Datenqualität sicherstellen.

Wie von anderen Systemsparten gewohnt, sind auch Ihre individuellen Sparten in AMS vollintegriert, sodass diese problemlos in anderen Bereichen wie bspw. Formularwesen oder freie Selektionen verwendet werden können.

Erstellung eigener Spartenmasken

Allgemeines

Um das Verständnis für die eigendefinierten Masken zu verbessern, folgt eine grundlegende Erklärung der drei Grundbausteine beim Erstellen eigener Spartenmasken

Die Sparte

Bei der Sparte handelt es sich um die Tabelle, in welcher die Informationen über die einzelnen Sparteneinträge gespeichert werden. Hier werden dementsprechend Felder/Spalten definiert, welche das Gerüst darstellen, in welchem die Daten gespeichert werden.

Die Maske

Hierbei handelt es sich um die Schnittstelle für den Anwender, also die Ansicht „Spartenteil“ im Vertrag. Hier werden für die zu verwaltenden Daten grafische Komponenten (Eingabefelder, Auswahlboxen etc.) hinterlegt. Diese Komponenten sind wiederrum mit der Tabelle (Sparte) verbunden, wodurch Eingaben beim Speichern ohne zusätzlichen Aufwand und wie aus anderen Bereichen des ams bereits gewohnt, direkt in der Datenbank hinterlegt werden können.

Die Spartenlogik

Hier kommt es zum Herzstück des Spartenmaskendesigners. Bis hierhin war man in der Lage, Daten auf einer individuellen Eingabemaske zu verwalten. Nun kann man aber auch Logiken umsetzen. Zum einen eigene Berechnungslogiken, welche an vordefinierte Geschäftsprozesse des ams angehängt werden können und zum anderen Interaktionslogiken, die durch den Anwender beim Befüllen eines Spartenteils eines Vertrags ausgelöst werden, wodurch Effizienz, aber auch Übersichtlichkeit gesteigert werden kann.

Erstellung der Sparte

Wie und wo?

Zum Erstellen eigener Spartenmasken wird zunächst die Sparte selbst benötigt. Hierbei handelt es sich um die Tabelle in der später die Daten gespeichert werden. Hier wird vom Anwender die Tabellenstruktur definiert.

Organisation → Sparten verwalten

Nach dem Aufruf der Spartenliste werden alle verfügbaren Sparten dargestellt. Über Neuanlage kann nun eine Neue Sparte angelegt werden.

Im folgenden öffnet sich das Fenster mit den Reitern „Allgemein“, „Seite2“ und „Eigendefiniert“.
Die letzten beiden können hier vernachlässigt werden.

Der Reiter Allgemein in der Übersicht:

  1. Ein eindeutiges Kürzel, über welches die Maske identifiziert werden kann

  2. Kurze Beschreibung der Sparte

  3. Steuert die Möglichkeit zu dieser Sparte neue Verträge anzulegen

  4. Entscheidet, ob diese Sparte für Sammelverträge genutzt werden kann.

  5. Wurde Punkt 4 ausgewählt kann hier entschieden werden, ob die Sparte abgerechnet werden kann.

  6. Ist dieser Punkt ausgewählt, kann man eine eigene Tabellenstruktur für seine Sparte definieren. Diese Auswahl ist notwendig, wenn zu dieser Sparte eine eigene Spartenmaske entwickelt werden möchte. Nach Auswahl werden automatisch die Reiter „Tabellenstruktur“ und „Eigene Berechnungen“ eingeblendet.

Das Spartenkürzel sollte ohne Sonderzeichen gewählt werden. Ausnahme stellt hier ein Unterstrich dar. Andernfalls kann dies zu unerwünschten Nebenwirkungen führen.

In älteren Versionen kann es nach der Neuanlage einer Sparte notwendig sein die Sparte neu zu öffnen, damit der Reiter Tabellenstruktur editierbar wird.

Innerhalb der Tabellenstruktur kann nun mit der Anlage der Felder für die neue Sparte begeonnen werden.

  1. In der Tabellenansicht lassen sich die einzelnen Metainformationen von Feldern über eine grafische Benutzeroberfläche hinzufügen.

  2. In der Textansicht wird die Tabelle als Csv-Datei dargestellt, mit einem Komma als Separator

  3. Eine Auflistung der einzelnen Felder, die Sie Ihrer Tabelle hinzufügen

  4. Über diese Schaltfläche lassen sich neue Felder zu der Tabelle hinzufügen

  5. Hier können sog. Filterfelder per Semikolon separiert definiert werden. Diese Filterfelder werden z.B. bei einem Lookup-Dialog als Suchfeld angeboten.

Über diesen Tab können Sie nun eine Tabelle ganz nach Ihren Vorstellungen definieren, sodass diese genau die Daten, die Sie einpflegen möchten, speichern kann. Bei der erstmaligen Erstellung einer Sparte muss im Menüband, nachdem gespeichert wurde, die Tabelle, einmal initial, neu erzeugt werden, über die Schaltfläche „Tabelle neu erzeugen“ (Änderung Datenstrukturen). Nehmen Sie nur Veränderungen vor, so reicht eine Strukturprüfung über die Schaltfläche „Strukturprüfung durchführen (Änderung Feldbezeichner o.ä.).

Ab ams-Version 4.8 hat sich die Ansicht der Gruppensparten verändert. Es ist eine neue Maske hinzugefügt worden, mit der sich mehrere Profile speichern lassen. Diese Profile werden anhand der gegebenen Felder benannt und ist frei definierbar.

Hier haben wir Name des Risikos und die Versicherungssumme als Kriterien ausgewählt. Das gelingt wie folgt:

Unter „Organisation“, „Sparten verwalten“ und wählen Sie die Sparte aus.
Auf dem Reiter „Tabellenstruktur“ finden Sie unter der „Tabellenansicht“ die „Anzeigefelder:“. Dort tragen Sie die gewünschten Feldnamen ein, trennen diese mit Semikolon, Speichern, führen eine „Strukturprüfung durchführen (Änderung Feldbezeichner o.ä.)“ aus und starten AMS neu.

Im Kapitel Dokumentation finden Sie eine genaue Erläuterung zu den einzelnen Metainformationen, die ein Feld haben kann. Bitte lesen Sie sich diese sorgfältig durch, bevor Sie Ihre erste Tabelle definieren! Verinnerlichen Sie bitte auch Kapitel Anpassen/Erweitern der Tabellestruktur.

Anpassen/Erweitern der Tabellenstruktur

Möchten Sie Ihre existierende Tabellenstruktur erweitern, so können Sie das ohne weiteres tun. Es sind allerdings gewisse Voraussetzungen zu beachten, die in diesem Handbuch an verschiedenen Stellen erwähnt werden.

  1. Anpassungen an der Tabellenstruktur müssen gespeichert und mittels Strukturprüfung angewendet werden, damit diese sich auswirken.

  2. Ausgenommen sind Datentypänderungen oder das Entfernen von Feldern. Diese Art von Anpassungen kann nur durch eine Neuerzeugung der Tabelle übernommen werden. Das bedeutet, dass die Sparteninformationen aller Verträge dieser Sparte unwiederruflich verloren gehen.

Erstellung der Maske

Wie und wo?

Nach Anlage der Spartenstruktur kann die Anlage und Bearbeitung der Spartenmaske erfolgen.

Organisation → Spartenmasken verwalten

Beim Aufruf der Spartenmaskenliste werden alle verfügbaren Spartenmasken dargestellt. Über Neuanlage kann nun eine Neue Spartenmaske angelegt werden.

Im folgenden öffnet sich ein Detailfenster mit den Reitern „Allgemein“ und „Eigene Berechnungen“, zweiterer kann vernachlässigt werden, weswegen nur der „Allgemein“ Reiter erklärt wird.

Das Detailfenster in der Übersicht:

  1. Hier wählen Sie die Sparte aus, zu der Sie eine Maske bauen wollen. Mit Klick auf das Lupenfeld öffnet sich eine Liste mit allen Sparten und Sie können Ihre auswählen.

  2. Hier können Sie noch ein Produkt angeben, wenn Ihre Maske nur für eine spezielle Sparten/Produkt-Kombination gebaut werden soll.

  3. Hier können Sie eine Beschreibung für Ihre Maske erfassen.

  4. Hier findet sich der alte Designer, auf den in diesem Handbuch nicht näher eingegangen wird.

  5. Schaltfläche, um den neuen Designer zu starten und mit dem Bau der Spartenmaske zu beginnen.

Nachdem Sie nun Ihre Sparte gewählt haben und die Schaltfläche Maskendefinition ausgewählt haben öffnet dieser sich und dieses Fenster erscheint:

Genauere Informationen zu den einzelnen Abschnitten finden Sie in der Dokumentation.

Platzieren von Komponenten

Komponenten sollten immer auf einem Panel liegen. Dieses sorgt für eine Struktur in Ihrer Anordnung, wodurch Sie zum einen, einen besseren Überblick erhalten und zum anderen ganze Gruppen von Komponenten anpassen können (zum Beispiel ein- und ausblenden von einzelnen Seiten Ihres PageControls).

Sie sollten sich vor Ihrem Bau überlegen, ob Sie mehrere Seiten benötigen, um Ihre Daten zu verwalten. Die Komponente, die Sie hier benötigen ist das PageControl.

Es gibt 2 Arten, wie ein PageControl aussehen kann. Einmal mit und einmal Ohne einem „Alles“ Reiter, welcher die anderen Reiter zusammenfasst.

Möchte man ein solches PageControl haben, so müssen die Komponenten in folgender Reihenfolge abgelegt werden: PageControl -> TabSheet -> Panel -> Ihre Komponenten

Alternativ ohne den „Alles“ Reiter:

Für diese Darstellung müssen die Komponenten in folgender Reihenfolge abgelegt werden: Panel -> PageControl -> TabSheet -> Panel -> Ihre Komponenten

Wenn Sie hiermit fertig sind, können Sie beginnen, Ihre Komponenten zu platzieren und Ihre Maske, nach Ihren Wünschen, zu gestalten.

Sollten Sie nicht mehrere Reiter auf Ihrer Maske benötigen dann lautet die Reihenfolge:    Panel -> Ihre Komponenten

Nutzen Sie bitte keine Scrollbox, wenn Sie sicherstellen wollen, dass auf Ihrer Maske gescrollt werden kann. ams sorgt automatisch für die Scrollfähigkeit, sobald die Größe Ihrer Maske den Bildschirmrand überragt. Scrollboxen sollten nur genutzt werden, wenn es sich nicht um das oben beschriebene Szenario handelt.

Ein hervorheben der Felder über die Funktion “Pflichtfelder” im Spartenteil des Vertrags ist zum aktuellen Zeitpunkt nur bei Verwendung des Aufbaus mit Reiter “Alles” möglich. Die graphische Markierung für “Pflicht-” bzw. “Sollfelder” funktioniert ebenfalls nur mit dieser Variante. Die technische Prüfung inkl. Hinweismeldung nach Speichern funktioniert in beiden Fällen.

Verbindung Komponente - Datenbankfeld

Sie haben nun eine Sparte angelegt und angefangen Ihre Maske zu bauen und haben hierfür schon etliche Komponenten erzeugt. Um diese nun mit den entsprechenden Feldern in der Datenbank zu verbinden, müssen die Datenmenge und das Datenfeld der entsprechenden Komponente gesetzt werden.

In nachfolgendem Beispiel besteht unsere Maske aus einem Dataedit und einem Label. Das Feld, in dem wir die Informationen Speichern wollen, heißt DATEEDIT und ist vom Typ Date.

Die Datenmenge stellt die Quelle der Daten dar. Das Datenfeld hingegen den Feldnamen in der Quelle.

Verbindung Label - Eingabefeld

Um ein Label mit dem Feld, in dem die Informationen gespeichert werden, zu verbinden, ist es notwendig, dass die Bezeichnung des Datenfeldes im Namen des Labels enthalten ist. Im unserem Fall also Beispielsweise “Label1_DATAEDIT”. Durch diese Verknüpfung wirken sich Einstelllungen zum Hervorheben von Feldern im Bereich “Pflichtfelder” des Spartenteils wie gewohnt sowohl auf das Eingabefeld als auch das Label aus. Im folgenden Beispiel sind die unterschiedlichen Konfigurationen aufgeführt.

  1. Das Datenfeld ist im Namen des Labels enthalten:

grafik-20240613-121752.png

  1. Das Datenfeld ist im Namen des Labels nicht enthalten:

grafik-20240613-121825.png

grafik-20240613-121833.png

Im folgenden das Ergebnis der Pflichtfeld-Konfiguration “Hervorheben” für den Spartenteil der eigenen Maske:

Label1 wird aufgrund der Verknüpfung mit dem Datenfeld ebenfalls hervorgehoben, Label3 ist aufgrund der fehlenden Zuordnung nicht mit hervorgehoben.

grafik-20240613-123122.png

Sollten Sie zuvor noch keine Maske erstellt haben, so arbeiten Sie bitte das siebte Kapitel Walkthrough durch. Gerade bzgl. der Komponenten Panel, ScrollBox, PageControl entstehen hier oft Probleme.

Programmieren der Spartenlogik

Allgemeines

Die Programmierung der Spartenlogik lässt sich grob in zwei Bereiche unterteilen, die Berechnungslogik und die Oberflächenlogik.

Die Berechnungslogik stellt hier die Erweiterung der ams Geschäftsprozesse dar. Die Funktionen, die hier erstellt werden können, werden nicht nur über die Oberfläche ausgelöst, das heißt wenn ein Anwender einen Vertrag im ams bearbeitet, sondern auch bei Dunkelverarbeitungen, weswegen die Berechnungslogik streng getrennt von der Oberflächenlogik sein sollte.

Die Oberflächenlogik hingegen wird nur, wie der Name schon sagt, über die Oberfläche ausgelöst. Hier sollten dementsprechend Funktionen umgesetzt werden, die die Eingabe des Anwenders steuern. Typische Umsetzungen sind hier das Ein/Ausblenden von Komponenten oder aber auch farbliche Hervorhebung.

Skripte

Allgemein

Zur Umsetzung der Spartenlogik steht dem Programmierer mit Microsoft JScript ein Javascript-Dialekt zur Verfügung. Dieser ist um einige ams-Objekte erweitert, welche wiederrum ams-bezogene Funktionen liefern. Abgesehen von Regeln wird jede Logik über Microsoft JScript umgesetzt.

Logiken werden in sog. Funktionen zusammengefasst, welche wiederrum vom Programmierer aus anderen Funktionen heraus aufgerufen werden können.

Funktionen

Es gibt drei unterschiedliche Arten von Funktionen:

Maskenfunktionen werden in dem Kontext der selbstdefinierten Maske ausgeführt. Sie haben Zugriff auf alle Datenmengen und alle Steuerelemente. Diese Funktionen werden im Knotenpunkt „Maske“ aufgelistet.

Spartenfunktionen können im Hintergrund, z.B. auch im Dienst „Geplante Aufgabe“, ausgeführt werden. Daher ist aus diesen Funktionen kein Zugriff auf die Maske und deren Elemente möglich. Diese Funktionen werden im Knotenpunkt „Sparte“ aufgelistet.

Allgemeine Funktionen werden im Gegensatz zu den Masken- und Spartenfunktionen nicht von der Maske bzw. dem ams aufgerufen. Diese müssen, aus anderen Funktionen heraus, manuell aufgerufen werden. Der Kontext und somit die Elemente, auf die zugegriffen werden kann, sind dadurch abhängig davon, aus welcher Funktion diese aufgerufen werden.

Allgemeine Funktionen werden in externen Skriptdateien definiert und in dem Knotenpunkt der jeweiligen Datei aufgelistet. Dies sind „GlobalFunctions“, „CustomMask“, „CustomScript“ und „GlobalScripts“.

Wird einer der Knotenpunkte ausgewählt, werden alle zugehörigen Funktionen im Skripteditor angezeigt. So können mehrere Funktionen gleichzeitig bearbeitet werden. Es können auch neue Funktionen geschrieben oder vorhandene gelöscht werden. Diese Änderungen werden dann in den ausgewählten Knotenpunkt übernommen. Wird eine einzelne Funktion ausgewählt, wird nur diese eine im Skripteditor angezeigt.

 

Mit einem Rechtsklick öffnet sich ein Kontextmenü, mit welchem, bei Knotenpunkten, neue Funktionen hinzugefügt werden können. Analog können auch Funktionen umbenannt oder gelöscht werden. Entschließt man sich alle Funktionen eines Knotenpunkts im Skripteditor anzeigen zu lassen, kann man natürlich auch hier neue Funktionen hinzufügen/umbenennen oder löschen. Diese Änderungen werden dann links in der Übersicht übernommen.

Ausgenommen sind Spartenfunktionen und einige Maskenfunktionen, da diese eine spezielle Bedeutung für das ams haben und zu bestimmten Zeitpunkten aufgerufen werden. Wird dennoch versucht eine solche Funktion zu entfernen oder umzubenennen, wird dies ignoriert und die Funktion bleibt unverändert.

Skripteditor

Im Skripteditor können dann schließlich die Funktionen geschrieben werden. Im Grunde handelt es sich hierbei um einen Texteditor, allerdings mit einigen Features, die die Programmierung vereinfachen.

Der Editor lässt sich in vier Bereiche unterteilen.

Im Kopfbereich wird angezeigt, welche Skriptdatei im Editor bearbeitet wird. Wird nur eine einzelne Funktion bearbeitet, wird zusätzlich der Funktionsname dargestellt.

Ebenfalls im Kopfbereich befindet sich eine Auswahlliste, in welcher alle Funktionen der ausgewählten Skriptdatei aufgelistet sind. Wird eine Funktion ausgewählt, springt der Eingabezeiger zu der Funktion. Durch Betätigen der F6-Taste springt der Eingabezeiger in die Funktionsliste und es kann nach einer Funktion gesucht werden.

Im mittleren linken Bereich befindet sich der eigentliche Editor, in dem die Skripte bearbeitet werden können.

An dessen Bildlaufleiste, also im mittleren rechten Bereich, befindet sich eine Miniaturansicht des gesamten Skripts, welche als Navigationshilfe dient.

Im Fußbereich werden situationsabhängig Fehlermeldungen ausgegeben. Außerdem erscheint dort die Eingabeleiste der inkrementellen Suche.

Berechnungslogik

Allgemein

Wie eingangs bereits erwähnt, wird die Berechnungslogik an feste Geschäftsprozesse des ams angehangen. Geschäftsprozesse, deren Logik wir erweitern können, sind die Vertragsberechnung, die Neuanlage eines Vertrags, die Spartenbeschreibung, die Vertragsverlängerung und die Neuanlage eines Risikos.

Vertragsberechnung

Allgemein

Die Vertragsberechnung ist die Funktion, die angestoßen wird, sobald ein Vertrag gespeichert wird. Sie sollte zur Berechnung einer Prämie genutzt werden und bietet weiterhin die Möglichkeit diese Prämie auch an den Vertrag zu übergeben, damit ams diese weiterverarbeiten kann.

Berechnete Prämie an Vertrag übergeben

Damit die Übergabe, einer, von der Sparte berechneten, Prämie, an den Vertrag, möglich ist, steht dem Programmierer das sog. ActionData-Objekt zur Verfügung. Genauere Spezifikationen zu diesem Objekt finden sich im Kapitel Dokumentation.

Beispiel:

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var gesamtPraemie = 0;

//Die Berechnung der Gesamtprämie kann selbstverständlich
//ganz nach Ihren Vorstellungen vonstattengehen, in diesem
//Beispiel ist sie immer 4711.
gesamtPraemie = 4711;

ActionData.SetString("GesamtPraemie", gesamtPraemie);
ActionData.SetString("Berechnet", "JA");

Bei Gruppensparten gibt es kleine, aber wichtige Unterschiede zu beachten. Schauen Sie hierzu bitte in das Kapitel Gruppensparten.

NeuanlageVorbelegung

Diese Funktion wird immer ausgeführt, wenn ein neuer Spartenteil angelegt wird. Das gilt auch für eine Vertragsneuanlage (da hier technisch gesehen auch ein neuer Spartenteil erzeugt wird). Diese Funktion dient dazu, wie der Name schon sagt, Felder vorzubelegen.

Normalerweise muss bei Anpassungen von Feldern im Sparten- oder Vertragsobjekt die Datenmenge in den Editiermodus gesetzt werden. Dies fällt hier weg, da ams bei der Neuanlage diese beiden Objekte vorher in den Editiermodus versetzt und anschließend die Änderungen speichert. Entschließt man sich dennoch das zu tun tritt eine Fehlermeldung auf.

NeuerSpartenteil

Ist identisch mit NeuanlageVorbelegung.

Spartenbeschreibung

Über die Spartenbeschreibung lassen sich grundlegende Eigenschaften einer Sparte definieren. Sie wird immer dann aufgerufen, wenn Detailinformationen zur Sparte vom ams benötigt werden. Beispiele dafür wann diese Funktion aufgerufen wird sind das Öffnen eines Vertrags der Sparte oder aber das Öffnen der Liste aller Sparten.

Vor allem in der Spartenlisten kann das Abarbeiten dieser Funktion einen Augenblick dauern, da dort zu jeder Sparte eine Beschreibung angefordert wird. Es sollte daher vermieden werden zeitintensive Berechnungen hier vorzunehmen.

Dieser Funktion steht ein sog. Descriptor-Objekt zur Verfügung, welches die Detailinformationen, die man hier einstellen kann, bündelt. Details zu diesem Objekt finden sich in der Dokumentation.

Vertragsverlängerung

Diese Funktion wird aufgerufen, wenn ein Vertrag verlängert wird. Außerdem wird bei einer Vertragsverlängerung auch immer eine Vertragsberechnung ausgeführt.

Unter Umständen wollen Sie die Vertragsverlängerung manuell anstoßen, um Ihr Skript zu testen. Hierzu müssen gehen Sie zu Systemsteuerung -> geplante Aufgaben -> Vertragsverlaengerung

Folgende Einstellungen müssen getroffen werden:

Nun können Sie über die Schaltfläche „Jetzt ausführen“ die Vertragsverlängerung starten:

Beachten Sie allerdings, dass Sie hiermit alle abgelaufenen Verträge verlängert werden. Um bestimmte Sparten von der Verlängerung auszuschließen, kann nachfolgender Registry-Schlüssel verwendet werden.

Schlüssel-Art

Schlüssel-Pfad

Schlüsselname

Wert

Systemeinstellung

SYSTEM/VERTRAG/VERLAENGERUNG

AUSSCHLUESSE

[Semikolonseparierte Liste an Spartenkürzeln]

Bitte nehmen Sie diese Einstellungen nur in Ihrem Testsystem vor. Testen Sie dies nicht in Ihrem produktiven System.

Um geziehlt einzelne Verträge zu verlängern, können Sie innerhalb des jeweiligen Vertrags im Menüband “Rechnungswesen” die Schaltfläche “Vertragsverlängerung” wählen.

Oberflächenlogik

Allgemein

Unter dem Begriff der Oberflächenlogik lassen sich alle Reaktionen des ams auf Aktionen des Anwenders zusammenfassen. Das kann das Anklicken eines Feldes, das Ändern eines Wertes oder auch nur das Öffnen des Vertrags sein.

Oberflächenlogik kann vom Programmierer auf drei Arten umgesetzt werden durch Ereignisroutinen, Schaltflächen und Regeln. Nur letzteres erfordert keine Programmierung in MSJscript und kann somit ohne Programmierkenntnisse genutzt werden, um Logiken zu realisieren.

Ereignisroutinen (Events)

Allgemein

Ereignisroutinen bzw. Events sind Eigenschaften einzelner Komponenten des Maskendesigners. Sie geben einem die Möglichkeit zu vordefinierten Aktionen (Ereignisse) selbstdefinierte Reaktionen (Events) zu erstellen. Jede Komponente besitzt hierbei ein festes Repertoire an Events, welchen der Programmierer Logik verleihen kann. In der Dokumentation finden sich unter den Punkten Komponenten und Events jeweils ausführliche Informationen dazu, welche Komponente welche Events unterstützt bzw. auf was diese Events reagieren.

Finden können Sie die Events einer Komponente, in dem sie zunächst die Komponente auswählen und an-schließend im Objektinspektor den Reiter Ereignisse auswählen.

Hier sind dann alle verfüg-baren Events einer Komponente aufgelistet.

Mit einem Doppelklick auf das Feld rechts von einem Event öffnet sich der Skripteditor und man kann eine Funktion erstellen oder eine existierende anpassen.

Ist einem Event bereits eine Funktion zugewiesen, so landet man mit einem Doppelklick ebenfalls im Skripteditor bei der entsprechenden Funktion und kann Anpassungen vornehmen.

 

Beispiel

function RadioButton1_OnClick() {
    if (RadioButton1.Checked == true) {
      Runtime.MsgBox("Angeklicked!");
    }

    if (RadioButton2.Checked == true) {
      Runtime.MsgBox("Nicht angeklicked!");
    }
}

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Menüband-Schaltflächen

Allgemein

Mit dem Spartenmaskendesigner ist es ebenfalls möglich den Zusatz-Tab des Menübands in einem Vertrag anzupassen. Man ist in der Lage Schaltflächen hinzuzufügen, welche dann bei einem Vertrag der entsprechenden Sparte angezeigt werden.

Hinzufügen kann man diese Schaltflächen unter der Ansicht „Skripte“ auf der rechten Seite.

Schaltflächen bestehen aus einer Bezeichnung, einem Symbol und aus bis zu zwei Maskenfunktionen.

Die erste Funktion wird ausgeführt, wenn die Schaltfläche betätigt, also angeklickt, wird.

Die zweite Funktion ist optional und fungiert als Prüffunktion. Sie wird bei jeder Änderung des Vertragsfensters aufgerufen und kann angeben, ob die Schaltfläche aktiv ist oder nicht. Dazu wird die Eigenschaft Result des ActionData-Objekts auf „Ja“ oder „Nein“ gesetzt.

Beispiel

Wir wollen eine Schaltfläche, die beim Betätigen eine Meldung ausgibt und welche nur aktiv ist, wenn eine unsere Combobox cbeSchaltflaeche den Inhalt „aktiv“ hat.

Erste Funktion (Aktion):

function SchaltFExecute(){
    AMS.MsgBox("Hallo aus der Sparte!");
}

Zweite Funktion (Prüffunktion):

function SchaltFUpdate(){
  if (cbeSchaltflaeche.Text == "aktiv"){
    ActionData.SetString("Result", "Ja");
  }
  else {
    ActionData.SetString("Result", "Nein");
  }
}

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Regeln

Allgemein

Die dritte und letzte Möglichkeit Oberflächenlogik zu gestalten ist mit sog. Regeln. Mit Regeln kann die Maske automatisiert an definierte Situationen angepasst werden. Beispielsweise kann ein Hinweistext eingeblendet werden, wenn ein Feld einen bestimmten Wert enthält oder es können, abhängig von den Eingaben des Anwenders, weitere Steuerelemente eingeblendet werden.

Regeln werden im Gegensatz zu anderer Logik nicht programmiert, sondern eingestellt.

Hinzufügen kann man Regeln unter der Ansicht „Maske“ auf der rechten Seite:

Eine Regel hat drei Bestandteile, eine Bezeichnung, einen oder mehrere Auslöser und eine oder mehrere Aktionen.

Bei den Auslösern werden Bedingungen erfasst, welche konjunktiv (UND) verbunden sind. Das bedeutet, nur wenn alle Auslöser erfüllt sind, werden die Aktionen ausgeführt. Sie setzen sich immer aus einer Eigenschaft und einem Wert zusammen. Immer wenn sich eine der angeführten Eigenschaften ändert, wird überprüft, ob eine Regel angewendet werden soll.

Aktionen stellen nun die Ereignisse dar, die in Folge der erfüllten Bedingungen ausgeführt werden. Sie bestehen ebenfalls aus einer Eigenschaft und einem Wert. Wird eine Regel angewandt, werden die Werte in die Eigenschaften übertragen. So können z.B. Steuerelemente, wie eingangs erwähnt, ein- und ausgeblendet werden oder ein Hinweistext könnte angepasst werden.

Auslöser definieren

Zunächst muss ein Element ausgewählt werden, dessen Eigenschaft als Auslöser dienen soll. Dies können Steuerelemente, aber auch kompatible Datenmengen sein.

Wurde ein Steuerelement ausgewählt, werden in der Eigenschaftsliste jene Eigenschaften aufgeführt, welche als Auslöser verwendet werden können. Dies ist von der Art des Steuerelements abhängig.

Wurde eine Datenmenge ausgewählt, kann auf eine Zustandsänderung der Datenmenge reagiert werden oder auf eine Änderung eines Feldwerts. Es werden also vier Zustände aufgeführt: Bearbeiten, Inaktiv, Lesen und Neuanlage. Eine Regel wird überprüft, wenn einer dieser Zustände eintritt. Zusätzlich werden alle Felder der Datenmenge aufgelistet. Ausgelöst wird die Regel dann, wenn der Wert, des gewählten Feldes, sich geändert hat.

Mit Ungleich kann die Bedingung invertiert (umgekehrt) werden. Sie ist also erfüllt, wenn die Eigenschaft ungleich des erfassten Wertes ist.

Bei Wert kann angegeben werden, gegen welchen Wert die Eigenschaft geprüft wird.

Aktion definieren

Aktionen beziehen sich ebenfalls immer auf Steuerelemente. Wenn ein Element ausgewählt wurde, werden alle Eigenschaften aufgelistet, auf die schreibend zugegriffen werden kann. Die Auswahl ist abhängig von der Art des Steuerelements. Der dritte Parameter „Wert“ wird bei Ausführung in die Eigenschaft übertragen.

Beispiel

Zunächst werden 3 Label und eine DataCheckBox auf der Maske platziert:

Wir definieren nun zwei Regeln:

  1. CheckboxChecked

 

  1. CheckboxUnchecked

Wurden die beiden Regeln so nachgebaut sollte die Maske nun wie folgt aussehen:

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Datenmengen

Allgemein

Datenmengen kapseln Daten aus der Datenbank oder auch statische Daten in Form von Objekten. Die Datenmengen lassen sich abhängig von der Art als Referenzliste für ein Steuerelement verwenden oder aber vom Programmierer aus einem Skript heraus ansteuern.

Die beiden Datenmengen „Vertragsdaten“ und „Spartendaten“ sind immer verfügbar. Über „Vertragsdaten“ kann auf den geöffneten Vertrag zugegriffen werden, wohingegen „Spartendaten“ den Zugriff auf die selbstdefinierte Spartentabelle ermöglicht.

Eine Datenmenge besteht im Wesentlichen aus drei Bestand-teilen. Einer Bezeichnung, einer Quelle und Parametern.

Über die Bezeichnung kann auf die Datenmenge zugegriffen werden. Damit der Zugriff auch aus einem Skript heraus erfolgen kann, darf die Bezeichnung keine Sonder- oder Leerzeichen enthalten.

Bei Datenquelle wird die Art der Datenmenge angegeben. Dies hat Einfluss darauf, wo die Daten herkommen, wie die Daten ermittelt werden, wie auf die Daten zugegriffen werden kann und ob ein schreibender oder nur ein lesender Zugriff möglich ist. Die Parameter sind von der Art der Datenmenge abhängig.

Nachschlageliste

Im System sind einige Listen definiert, aus denen der Anwender eine Wahl treffen kann. Dies sind im Kunden z.B. der Beruf Status oder im Vertrag der Status. Manche von ihnen können darüber hinaus durch den Anwender, z.B. der Statusgrund im Vertrag, bearbeitet werden.

Zu diesen Listen können ebenfalls Benutzerdefinierte Domänen hinzugefügt werden.

Diese Listen können nur von Steuerelementen verwendet werden, welche die Eigenschaft “Listendaten” besitzen. Wird dort eine Datenmenge angegeben, bietet das Steuerelement eine Auswahlliste und Autovervollständigung an.

Die Nachschlagelisten benötigen zwei Parameter. Zunächst muss angegeben werden, ob der Anwender die Liste bearbeiten kann. Dies geschieht mit “Editierbar”. Über diese Angabe wird auch ermittelt, welche Listen verwendet werden können. Eine Liste, welche nicht zur Bearbeitung durch den Anwender vorgesehen ist, kann hier ausgewählt werden, wenn “Editierbar” ausgewählt wurde.

Bei dem zweiten Parameter handelt es sich um den Namen der Liste. Nicht immer kann ein statischer Name verwendet werden, da die Auswahl z.B. von anderen Daten abhängig ist. Nehmen wir als Beispiel den Vertragsstatus und den Statusgrund. Der Vertragsstatus stammt aus der nicht editierbaren Liste “vertrag.status”. Zu jedem Eintrag existiert eine eigene, editierbare Liste mit Gründen. Zum Status “EIGEN” gehört z.B. die Liste “status.grund.vertrag.eigen”.

Deshalb kann der Name dynamisch zusammengesetzt werden, indem Referenzen verwendet werden. Über die “Augen”-Schaltfläche, kann eine Eigenschaft eines anderen Elements referenziert werden. So kann beispielsweise auf den ausgewählten Vertragsstatus zugegriffen werden.

Der Listenname, für die Statusgründe, lautet dann wie folgt:
status.grund.vertrag.##cbeVertragsstatus.Text##

Wann immer sich nun der Wert in cbeVertragsstatus.Text ändert, wird die Datenmenge mit den Gründen aktualisiert man erhält also immer die passende Liste.

Verknüpfungen

Verknüpfungen sind Datenmengen, die in Bezug zu bereits definierten Datenmengen stehen. Verträge sind beispielsweise mit einer Gesellschaft verknüpft. Um auf die Gesellschaftsdaten zugreifen zu können, kann eine Datenmenge mit der Art „Verknüpfung“ angelegt werden.

Zu einer bereits definierten Datenmenge werden verknüpfte Daten eines bestimmten Typs bereitgestellt. Verträge, zum Beispiel, sind u.a. mit einer Gesellschaft verknüpft. Um auf die Gesellschaftsdaten zugreifen zu können, kann eine Datenmenge mit der Art „Verknüpfungen“ angelegt werden.

Bei dem Parameter „Verknüpfungen zu“ wird die Datenmenge ausgewählt, zu der Verknüpfungen ermittelt werden sollen. In unserem Beispiel sind es die Vertragsdaten, zu denen Verknüpfungen ermittelt werden sollen. Durch die Auswahl des ersten Parameters wird nun die Liste von möglichen Verknüpfungsarten gefüllt. Bei einem Vertrag ist dies u.a. „Gesellschaften“.

Objekt

SQL

Freie Liste

Indexzahlen

Allgemein

Indexzahlen stellen eine Möglichkeit dar, in Skripten verwendete Werte, von außerhalb, anzupassen. Indexzahlen lassen sich über die ams-Oberfläche für eine Sparte einpflegen und warten. Ein Eintrag kann dabei bis zu 4 Werte enthalten und besteht mindestens aus einer Bezeichnung und einem Stichtag. Der Stichtag fungiert hierbei als Bedingung, an welcher das ams erkennt, welche Indexzahlen für die Berechnung herangezogen werden sollen.

Erstellung

Um Indexzahlen nutzen und erstellen zu können, müssen diese bei einer Sparte aktiviert werden. Dazu werden folgende Zeilen in der Spartenbeschreibung benötigt.

var Descriptor = EventData.GetContext("Descriptor");

//Diese Werte können dann bei Neuanlage eines Indexes definiert werden (max. 4)
Descriptor.IndexBezWert1 = "NameIndex1";
Descriptor.IndexBezWert2 = "NameIndex2";
Descriptor.IndexBezWert3 = "NameIndex3";
Descriptor.IndexBezWert4 = "NameIndex4";
 
//Dies aktiviert die Erstellung von Indexzahlen.
Descriptor.Index = 1;

Sobald die Spartenbeschreibung um diese Zeilen erweitert wurde, sieht man in der Liste aller Sparten (Organisation -> Sparten verwalten) in der Spalte Index bei der entsprechenden Sparte ein „Ja“ als Eintrag:

Wählt man diese Sparte nun aus aktiviert sich im Menüband die Schaltfläche „Indexzahlen“, unter welcher man Indexzahlen erstellen bzw. verwalten kann.

Wählt man nun diese Schaltfläche aus und macht eine Neuanlage, so öffnet sich folgendes Fenster:

Bei NameIndex1 bis NameIndex4 lassen sich nun die gewünschten Indexzahlen eintragen bzw. anpassen.

Der Stichtag stellt das Datum dar, zudem die Anpassung der Indexe stattfinden soll.

Arbeiten mit Indexzahlen

Die neu definierten Indexzahlen lassen sich nun wie folgt im Code ansprechen:

var vtIndex = Runtime.provideAmsObjekt("TIndexZahl");

//SelektionIndexZahlStichtag bekommt als Parameter Sparte, Gesellschaft, Tarif und Stichtag übergeben
vtIndex.SelektionIndexZahlStichtag(Vertrag.FindField("TYP").AsString, 
    Vertrag.FindField("GES").AsString, 
    "",
    Vertrag.FindField("Ablauf").AsString);

//WERT1 bis WERT4 beziehen sich auf IndexBezWert1 bis IndexBezWert4
var ersterIndex = vtIndex.FindField("WERT1").AsCurrency;
var zweiterIndex = vtIndex.FindField("WERT2"). AsCurrency;
var dritterIndex = vtIndex.FindField("WERT3"). AsCurrency;
var vierterIndex = vtIndex.FindField("WERT4"). AsCurrency;

Gruppensparten

Allgemein

Handelt es sich bei einer Sparte um eine Gruppensparte, so ist man in der Lage mehrere Risiken an einem Vertrag zu führen. Visuell bedeutet das, dass zum einen in unserem Vertrag eine neue Schaltfläche erscheint, über welche neue Risiken hinzugefügt werden können oder das zu bearbeitende ausgewählt werden kann

Zum anderen erhalten Sie unter „Spartenteil“ entsprechend Ihrem ausgewählten Risiko, wie gewohnt, Ihre gebaute Maske, allerdings mit den Informationen des ausgewählten Risikos, angezeigt.

Erstellung

Um eine Sparte als Gruppensparte zu deklarieren, sind Anpassungen in der Spartenbeschreibung-Funktion notwendig. Diese werden über das sog. Descriptor-Objekt, welches uns ausschließlich in der Spartenbeschreibung zur Verfügung steht, umgesetzt.

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var Descriptor = EventData.GetContext("Descriptor");

Descriptor.IsGruppenSparte = true;
Descriptor.BezeichnungGruppe = "NameFürDieGruppe";

Arbeiten mit Gruppensparten

Aus technischer Sicht sind diese nahezu identisch mit Nicht-Gruppensparten und erweitern diese lediglich.

Die Erweiterung besteht darin, dass das Spartenobjekt mehrere Einträge besitzt (die einzelnen Risiken). Bei Nicht-Gruppensparten befindet sich folglich nur ein Eintrag im Spartenobjekt.

Darüber hinaus hat das Anlegen mehrerer Risiken auch zur Folge, dass die Vertragsberechnung pro Risiko einmal ausgeführt wird. Das ams geht an dieser Stelle hin und iteriert über das Spartenobjekt und führt die Vertragsberechnung für jede Iteration einmal aus. Da dies beim Programmieren der Vertragsberechnung sehr irritierend sein kann, sollte der Programmierer die Iteration über das Spartenobjekt selbst übernehmen, sodass das ams beim Ausführen der Vertragsberechnung schon auf dem letzten Element des Spartenobjekts steht und die Vertragsberechnung nicht erneut ausgeführt wird. Folgende Grundstruktur sollte deshalb vom Programmierer bei Gruppensparten übernommen werden:

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");

Sparte.First();
while(Sparte.Eof) {
  //Ihre Berechnunglogik, die für jedes Risiko ausgeführt werden soll.
  Sparte.Next();
}

 

Berechnung der Gesamtprämie

Da der Anwender bei Gruppensparten die Möglichkeit besitzt mehrere Risiken anzulegen und diese evtl. Teilprämien haben, aus denen sich eine Gesamtprämie berechnet, sieht auch die Berechnung/Übertragung ein kleines bisschen anders aus. Der Programmierer sollte eine Variable anlegen, in welcher er bei der Aufsummierung der Teilprämien das Ergebnis speichert und anschließend diese an den Vertrag geben.

In folgendem Beispiel hat die Sparte ein Feld „TEST101“, welches eine Prämie beinhaltet. Es wird nun eine Möglichkeit gezeigt dieses Feld über alle Risiken hinweg aufzusummieren und anschließend das Ergebnis an den Vertrag zu geben.

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");

//Variable, um die zu übertragende Gesamtprämie
//zu speichern. ACHTUNG: Sollte Initial auf 0
//gesetzt werden, damit in jedem Fall ein Zahlenwert
//an den Vertrag übergeben wird.
var gesamtPraemie = 0;

Sparte.First();
while(Sparte.Eof) {
  //Ihre Berechnunglogik, die für jedes Risiko ausgeführt werden soll.
  gesamtPraemie = gesamtPraemie + Sparte.FindField("TEST101").AsCurrency;
  Sparte.Next();
}

 
ActionData.SetString("GesamtPraemie", gesamtPraemie);
ActionData.SetString("Berechnet", "JA");
ActionData.SetString("IsJahresPraemie", "JA");

 

Die aus dem Kapitel Arbeiten mit Gruppensparten angegebene Grundstruktur, die auch hier verwendet wird, ist zwingend notwendig, um eine Prämie über mehrere Risiken zu summieren, da Sie sonst früher oder später auf folgendes Problem stoßen könnten:

Bei einer Vertragsberechnung wird das ActionData-Objekt immer neu erzeugt, weshalb jedes Risiko die Gesamtprämie mit seiner Teilprämie überschreibt. Daraus folgt, dass Ihre Gesamtprämie gleich der Teilprämie ihres letzten Risikos ist.

Nutzen Sie deshalb, für eine sichere Berechnung, die oben genannte Grundstruktur.

Informationen aus anderen Risiken

Möchte man Informationen aus einem Risiko zu dem Zeitpunkt haben, zu dem das Spartenobjekt nicht auf dieses Risiko zeigt, so muss man darauf achten, dass nach dieser Informationsbeschaffung der Zeiger des Spartenobjekts wieder auf dem richtigen Risiko landet. Andernfalls könnten Risiken bei der Vertragsberechnung übersprungen werden oder im schlimmsten Fall landet man in einer Endlos-Schleife und das ams stürzt ab.

Ein gutes Beispiel für eine Information, die man bereits vor der Iteration über das Spartenobjekt gebrauchen könnte, wäre die Anzahl der Risiken.

Hier ein Skriptausschnitt, wie eine Funktion aussehen könnte, die uns die Anzahl der Risiken gibt:

function GetAnzahlRisiken(SpartenObjekt)
{
    //Amsidnr wird gemerkt, damit wir nach der Informations-
    //beschaffung wissen, auf welches Risiko wir das Sparten-
    //objekt stellen müssen.
    var merkAmsidnr = SpartenObjekt.FindField("AMSIDNR").AsString;

    //Zähler für die Anzahl der Risiken
    var zaehler = 1;

    //Iteration zur Bestimmung der Anzahl der Risiken
    SpartenObjekt.First();
    while(SpartenObjekt.Eof) {
        zaehler++;
        SpartenObjekt.Next();
    }

    //Spartenobjekt wieder auf das richtige Risiko stellen:
    SpartenObjekt.First();
    while(SpartenObjekt.FindField("AMSIDNR").AsString != merkAmsidnr){
        SpartenObjekt.Next();
    }

    //Rückgabe der Anzahl der Risiken
    return zaehler;
}

 

Dem aufmerksamen Leser wird aufgefallen sein, dass wenn wir diese Information bspw. vor der Hauptschleife in unserer Vertragsberechnung brauchen, wir auch nur ein SpartenObjekt.First() machen könnten. Hier ist dem Programmierer freie Hand überlassen diese Abkürzung zu nehmen oder auch mit Funktionen, wie SpartenObjekt.Prior() zu arbeiten.

Dem Programmierer muss bewusst sein, dass wenn er unabhängig von der Hauptschleife über das Spartenobjekt iteriert, dieses auch wieder auf seine ursprüngliche Position zurücksetzt, sofern die Vertragsberechnung wie geplant fortgesetzt werden soll.

Dokumentation

Spartenmaskendesigner

Ansicht Maske

Menüband

Bearbeiten

  1. Die Maske wird geleert und alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden entfernt. Die Skripte zur Sparte und selbstdefinierte Funktionen bleiben erhalten.

  2. Die Maske inkl. Aller zugehörigen Daten wird in der Datenbank gespeichert. Selbstdefinierte Funktionen werden in die jeweiligen, externen Skriptdateien geschrieben.

  3. Die Maske, alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden in eine Datei auf dem Dateisystem gespeichert.

  4. Eine Maske mit allen Regeln, Datenmengen, Schaltflächen und Maskenskripten wird aus einer Datei auf dem Dateisystem eingelesen.

  5. Hat man eine Komponente in der Zwischenablage kann sie über Einfügen eingefügt werden.

  6. Legt eine Komponente in die Zwischenablage und entfernt diese von der Maske.

  7. Legt eine Komponente in die Zwischenlage.

  8. Markiert alle Steuerelemente

  9. Entfernt alle ausgewählten Steuerelemente von der Maske.

  10. Macht die letzte ausgeführte Aktion rückgängig.

Elemente

Ist die Schaltfläche „Auswählen“ markiert, kann im Designer mit vorhandenen Steuerelementen interagiert werden. Sie können ausgewählt, verschoben und in der Größe geändert werden.

Die weiteren Schaltflächen repräsentieren jeweils ein Steuerelement. Ist eine von diesen markiert, führt ein Klick auf den Maskenbereich dazu, dass ein neues Steuerelement, vom jeweiligen Typ, auf der Maske platziert.

Struktur

Hier findet sich die Hierarchie der auf der Maske befindlichen Komponenten wieder. Komponenten sind entsprechend Ihrer Lage eingerückt.

Wählt man eine Komponente in dieser Ansicht aus, so ist sie automatisch im Editor ausgewählt und der Objektinspektor gibt die Detailinformationen zu der entsprechenden Komponente.

In diesem Beispiel ist auf der ersten Ebene ein PageControl, auf welchem sich mehrere TabSheets befinden. Auf diesen wiederum befindet sich ein Panel, welches die einzelnen Komponenten beherbergt.

 

 

Elemente

In diesem Fenster kann ein Typ ausgewählt werden, von dem ein neues Element auf der Maske platziert werden soll.

Durch Eingabe in das Suchfeld, wird die Liste gefiltert.

  

 

 

 

Objektinspektor

Hier werden, zu dem ausgewählten Steuerelement, alle verfügbaren Eigenschaften und Ereignisse aufgelistet.

Klickt man Rechts von einer Eigenschaft in das Feld lässt sich der Wert verändern.

Im unteren Bereich erhält man eine kurze Erklärung zu der ausgewählten Eigenschaft.

Man kann über den Objektinspektor auch auf die Events, der Komponente, zugreifen, indem man den Tab „Ereignisse“ auswählt.

 

 

 

 

 

 

Regeln

Hier werden alle Regeln einer Maske aufgelistet und es können neue hinzugefügt werden.

Datenmengen

Hier werden alle Datenmengen einer Maske aufgelistet und es können neue hinzugefügt werden.

 

 

 

Editor

Hier wird die eigentliche Maske gebaut. Es können Komponenten hinzugefügt, verschoben und in der Größe verändert werden.

Ansicht Skripte

Menüband

  1. Befindet sich der Einfüge Zeiger auf einem Funktionsaufruf, kann mit dieser Funktion zu der Deklaration der Funktion gesprungen werden. Dabei wird ein Lesezeichen an der aufrufenden Stelle hinterlassen.

  2. Das Neuste, also das zuletzt angelegte, Lesezeichen wird angesprungen. Dabei wird das Lesezeichen entfernt.

  3. Der Inhalt des Skripteditors wird einer Syntaxprüfung unterzogen. Dabei wird der Aufbau des Skripts kontrolliert. Eine erfolgreiche Prüfung bedeutet, dass das Skript ausgeführt werden kann. Das Skript kann jedoch nicht auf Fehlerfreiheit überprüft werden.

  4. Hiermit können einzelne Funktionen getestet werden. Dabei werden an die Funktion ggf. Eingabeparameter übergeben und ein evtl. vorhandener Rückgabewert angezeigt. Diese Funktion ist vor allem dafür geeignet, selbstdefinierte Funktionen zu testen. Masken- und Spartenskripte können hiermit nicht getestet werden, da der Kontext (wie z.B. Vertragsdaten) fehlen.

  5. Hier kann, neben der Bildlaufleiste, eine Miniatur Darstellung des gewählten Skripts, ein- und ausgeblendet werden.

  6. Während der Eingabe bzw. auf Aufforderung durch Betätigen der Tastenkombinationen STRG+SPACE, kann der Editor Vorschläge zur Vervollständigung der Eingabe machen. Mit der Schalfläche „Vorschlaglisten“ kann diese Funktion ein- bzw. ausgeschaltet werden.

  7. Mit der Schaltfläche „Hintergrundparser“ kann gesteuert werden, wann die Vorschlagslisten erstellt werden. Wahlweise in Echtzeit, während der Eingabe oder Zeitversetzt im Hintergrund. Dies kann Auswirkungen auf die Tippgeschwindigkeit haben.

Funktionen

Schaltflächen

Editor

Ansicht Vorschau

Vorschau-Fenster

Die Vorschau kann einen Eindruck davon vermitteln, wie die Maske aussieht und sich verhalten wird. Sie unterliegt aber zwei Einschränkungen. Es stehen keine Vertrags- und Spartendaten zur Verfügung und es werden keinerlei Skripte ausgeführt. Regeln werden angewandt und Datenmengen sind bereitgestellt, soweit diese keine Vertrags- oder Spartendaten referenzieren.

Durch diese Einschränkung ist sichergestellt, dass keine Daten manipuliert werden. Diese Vorschau kann also bedenkenlos genutzt werden.

Vertragsvorschau

Die Vertragsvorschau bietet die Möglichkeit die eigene Maske inkl. Aller Skripte, an einem lebenden Vertrag zu testen.

Sämtliche Änderung an den Daten, auch gelöschte Informationen, wirken sich dauerhaft auf den Datenbestand aus und können nicht rückgängig gemacht werden. Dies gilt sowohl für manuelle Eingaben in der Maske als auch für Aktionen in den Skripten.

Mit der Schaltfläche „Vertrag auswählen“ kann der Vertrag ausgewählt werden, mit dem getestet werden soll. In dem Suchdialog werden nur Verträge angeboten, welche zu der Sparten Produkt Kombination der Maske passen.

Unter „Gewählter Vertrag“ werden einige Informationen, des derzeit ausgewählten Vertrags, aufgeführt.

Mittels der Schaltfläche „Mit Vertrag testen…“, wird der Test gestartet. Sollte noch kein Vertrag ausgewählt sein, öffnet sich zunächst der Suchdialog. Wurde ein Vertrag ausgewählt, öffnet sich ein neues Fenster mit einer Vertragsmaske. Die gesamte Funktionalität der Vertragsverwaltung, steht dem Fenster zur Verfügung. Beendet wird der Test, indem das Fenster geschlossen wird.

Tabellenstruktur

Allgemein

Bei der Tabellenstruktur handelt es sich um die Struktur der zu speichernden Daten. Jeder Eintrag in der späteren Tabelle hat dabei zu jedem Feld, welches in der Tabellenstruktur definiert wird, einen Eintrag (im Zweifel ist das Feld leer).

Ein Eintrag in der Spartentabelle entspricht an der Stelle einem versicherten Risiko. Das heißt Verträge, die keine Gruppensparten sind, haben genau einen Eintrag in der entsprechenden Spartentabelle. Bei Gruppensparten hingegen gibt es endlich viele Spartentabelleneinträge zu einem Vertrag, je nachdem, wie viele Risiken Sie anlegen.

Als Veranschaulichung:

Metainformationen eines Felds

Bitte achten Sie darauf, dass wenn Sie Metainformationen eines Felds eintragen, diese immer in Großbuchstaben und ohne Sonderzeichen angeben (Ausnahme, wenn es in der Dokumentation ausdrücklich erlaubt ist). Dies kann sonst zu Fehlern innerhalb der Datenbankstruktur führen.

Tabelle

Für jedes Feld, das Sie hinzufügen wollen, muss die Spartentabelle angegeben werden. Der Tabellenname muss zwingend mit VT_ beginnen. Wir empfehlen bei der Namensgebung folgende Struktur: VT_<SpartenKürzel>.

Feldname

Jedes Feld braucht einen eindeutigen Feldnamen. Über den Namen, den Sie hier vergeben, greifen Sie von Ihren Skripten bzw. Komponenten auf das Feld zu. Wir empfehlen entweder kurze und vor allem eindeutige Namen oder folgende Struktur: <SpartenKürzel>100, <SpartenKürzel>101, <SpartenKürzel>102, <SpartenKürzel>XXX etc.

Felder dürfen ausdrücklich nicht mit folgenden Namen benannt werden: TYP, XML

Anzeigename

Der Anzeigename eines Felds ist für die Darstellung in Listenansichten innerhalb des ams. Hier können Sonderzeichen und auch Kleinbuchstaben verwendet werden. Nutzen Sie diesen Namen, um das Feld genau zu beschreiben. Lautet Ihr Feldname bsp. TEST101 und stellt eine Versicherungssumme dar, geben Sie als Anzeigenamen „Versicherungssumme“ an.

Relationname

Relationfelder

Domäne

Mithilfe eines systemweit eindeutigem Domänennamen, den Sie selber vergeben, lassen sich z.B. Komboboxen mit einer Nachschlageliste ausstatten. Hierzu ist zu beachten, dass die gewählte Komponente für dieses Feld Nachschlagelisten und Domänen unterstützen muss, damit dessen Werte auch angezeigt werden.

Domäne erforderlich

Über die Auswahl lässt sich definieren, ob der Anwender zwingend einen Wert aus der Nachschlageliste/Domäne auswählen muss, oder ob eigene selbst eingetragene Werte für dieses Feld zulässig sind.

Typ

Hier wird der Datentyp angegeben, also um welche Art von Daten es sich bei diesem Feld handelt. Abhängig davon, ob Sie einen Text, eine Ganzzahl oder einen Betrag speichern wollen, sollten Sie den entsprechenden Datentyp wählen. Eine Auflistung der Datentypen finden sich unter 5.2.3.

Größe

Einige Datentypen brauchen zusätzlich eine Größe. Beispiel ist hier Numerisch/Betrag, bei welchem die Größe die Anzahl an Ziffern angibt. In der Auflistung der Datentypen wird ebenfalls angegeben, welche Datentypen eine Größe brauchen und was diese für diesen Datentyp bedeutet.

Bei Datentypen, die keine Größe benötigen, wird 0 erwartet.

Genauigkeit

Von den Datentypen, die eine Größe benötigen brauchen einige wiederum eine Genauigkeit. Bei Numerisch/Betrag gab die Größe die Anzahl der Ziffern an, die Genauigkeit gibt hier die Anzahl der Nachkommastellen an. Das heißt, wenn bei einem Numerisch/Betrag-Feld eine Größe von 12 und eine Genauigkeit von 2 angegeben wird, dass dann Einträge 10 Stellen vor dem Komma und 2 Stellen nach dem Komma aufweisen können. Auch hierauf wird im Abschnitt der Datentypen genauer eingegangen.

Wichtige Anmerkung

Bei Datentypen, die keine Genauigkeit benötigen, muss zwingend 0 angegeben werden.

Eigenschaften

  • Pflichtfeld

  • Versteckt

  • Nur lesen

  • Benutzerdomäne

  • Berechnet

  • Großschreibung

  • Autoinkrementierung

  • Groß- Kleinschreibung ignorieren

    • Einstellung, ob ein Feld in den Lookup-Dialogen die Groß/Kleinschreibung ignorieren darf. Die Suche unterstützt dabei die Wildcard-Suche mittels Sternchen (*).

  • Eingabe obwohl berechnet

Öffentlicher Name

Über den öffentlichen Namen können die Felder von außen angesprochen werden. Beispielsweise bei der freien Selektion oder aus dem Formularwesen. Wir empfehlen den gleichen Namen wie bei dem Feldnamen zu vergeben.

Zugriff

Formel

Datentypen

Text (Varchar)

Text ist ein Datentyp, um einfache Zeichenketten zu speichern. Es muss eine Größe übergeben werden. Die Größe gibt an, wie viele Zeichen in dem entsprechenden Feld gespeichert werden können.

Wenn eine Eingabe von mehr als 250 Zeichen benötigt wird, sollte der Datentyp Langtext verwendet werden.

Datum

Datum ist ein Datentyp zum Speichern von Datumsangaben in der Form „tt.mm.jjjj“. Es benötigt keiner Größe und keiner Genauigkeit. Wenn ein DataEdit verknüpft wird, wird dieses automatisch zu einem Datums-Eingabe-Feld umgewandelt. Genauere Informationen dazu unter 5.3.

Dieser Typ benötigt keine Größe.

Boolescher Wert

Ein boolescher Wert bildet einen Wahrheitswert ab und kann entweder wahr oder falsch sein. Das beste Szenario für solch einen Wert wäre eine Checkbox, wir empfehlen allerdings Varchar(4) (Für die Werte „Ja“ und „Nein“) zu nehmen.

Dieser Typ benötigt keine Größe.

Numerisch / Betrag

Dieser Typ sollte für die Darstellung von Beträgen genutzt werden. Diesem Typ muss eine Größe zugewiesen werden. Diese Größe gibt die Anzahl der Ziffern an, die eine Zahl haben kann.

Uhrzeit

Datum und Uhrzeit

Realzahl

Binärdaten

Langtext

Dieser Datentyp speichert, wie Text, Zeichenketten. Wird eine Länge von mehr als 250 Zeichen benötigt sollte dieser Datentyp verwendet werden.

Komponenten

Welche Komponente in welcher Situation?

Generell kann man für eine Anforderung immer verschiedene Komponenten nutzen. Allerdings sollte man aufpassen, dass die Komponente nicht eventuell zu wenig Funktionalität bietet oder aber zu viel. Deswegen soll die nachfolgende Auflistung einen groben Überblick geben:

Komponente

Art des Einsatzes

DataEdit

  • Ein einfaches Textfeld, zum Anzeigen oder Einsetzen eines Wertes

DataMemo

Ein großes Textfeld, zum Anzeigen oder Einsetzen eines Textes.

DataComboBox

  1. Ein einfaches Auswahlmenü, welches auf Domänen zugreift.

Label

  1. Ein einfacher Schriftzug, um bspw. Komponenten zu Beschriften.

DataCheckBox

  1. Ein Kästchen zum Angeben eines wahr/falsch-Wertes

Panel

  1. Ein Container zum Platzieren von Komponenten

PageControl

  1. Eine Steuerkomponente zum Verwalten mehrerer Reiter auf einer Spartenmaske

Ihre Maske wird vmtl. zu 90% aus diesen Arten von Informationen bestehen, weswegen Sie, wenn möglich, diese Komponenten nutzen sollten. Die anderen Komponenten, die nachfolgend aufgelistet werden, sollten Sie dementsprechend nur nutzen, wenn Sie deren Funktionalität unbedingt brauchen.

BruttoCalcEdit

Bei dem BruttoCalcEdit handelt es sich um ein Feld zum Erfassen von Zahlenwerten. Er besitzt einen Button am rechten Rand, über welchen sich ein Brutto-Netto-Rechner öffnen lässt. Berechnete Werte lassen sich hierüber direkt übernehmen.

 

Button

Der Button stellt eine Schaltfläche dar, die von einem Anwender gedrückt werden kann.

ComboButtonEdit

 

ComboDateEdit

Dieses Steuerelement bietet zwei Schaltflächen. Mit der Ersten kann ein Kalender geöffnet werden, in dem der Anwender einen Tag auswählen kann. Die Zweite öffnet eine, mit der Eigenschaft „Listendaten“, angegebene Vorschlagsliste. Wird ein Vorschlag ausgewählt, muss dieser in einem Ereignis, z.B. „OnSelectSuggestion“, in einen Datumswert umgewandelt werden.

DataCheckBox

Eine einfache Checkbox, die man zum Anzeigen von Ja/Nein-Werten nutzen kann.

DataComboBox

Ein Dropdownmenü, mit welchem man aus einem Set an Werten auswählen kann. Diese können entweder vordefiniert sein oder durch einen Anwender hinterlegt werden.

DataEdit

Ein Textfeld zum Eingeben/Anzeigen von Werten.

DataMemo

Ein Textfeld zum Eingeben/Anzeigen von längeren Texten.

DomainButtonEdit

Mit diesem Steuerelement wird dem Anwender eine Auswahlliste angeboten. Kann eine Liste durch den Anwender bearbeitet werden, wird eine zusätzliche Schaltfläche angezeigt, mit der ein Bearbeiten-Dialog geöffnet wird. Die Eigenschaften, wie z.B. „DomainName“, können zur Laufzeit aus einem Skript geändert werden.

DropDateEdit

 

FixedSqlButtonEdit

 

GroupBox

Containerkomponente, welche einen Rahmen mit Überschrift bietet. Sinnvoll, um zusammenhängende Komponenten zu gruppieren. Komponenten sollten immer mindestens auf einem Panel oder einer Groupbox liegen. Eine Groupbox sollte der Einheitlichkeit halber allerdings auch immer auf einem Panel liegen.

HtmlPanel

Auf diesem Element kann Text im HTML-Format angezeigt werden. Der HTML Quelltext wird mit der Eigenschaft „HTML“ angegeben. Diese Eigenschaft kann per Skript manipuliert werden. Folgend wird z.B. der Text „FEHLER!“ in roter Schrift ausgegeben:

htmlPanel.Html = ‚<p style=“color: rgb(255, 0, 0)“>FEHLER!</p>‘;

Folgende HTML Tag werden unterstützt:

·         a

·         address

·         blockquote

·         b

·         big

·         body

·         center

·         cite

·         code

·         dd

·         del

·         div

·         dir

·         dl

·         dt

·         em

·         fieldset

·         form

·         head

·         html

·         h1, h2, h3, h4, h5, h6

·         hr

·         i

·         img

·         input

·         ins

·         kbd

·         label

·         legend

·         li

·         menu

·         ol

·         p

·         pre

·         strong

·         samp

·         small

·         sub

·         sup

·         s

·         strike

·         table

·         tr

·         td, th

·         tt

·         u

·         ul

·         var

Innerhalb dieser Tags werden folgende Attribute unterstützt:

·         align

·         cellspacing

·         cellpadding

·         class

·         color

·         colspan

·         family

·         height

·         href

·         id

·         rowspan

·         style

Folgende CSS-Elemente werden untersützt:

·         appearance

·         background

·         backgroundattachment

·         background-color

·         background-image

·         background-origin

·         background-position

·         background-position-x

·         background-position-y

·         background-repeat

·         background-size

·         border

·         border-bottom

·         border-bottom-color

·         contenteditable

·         cursor

·         direction

·         display

·         dominant-baseline

·         draggable

·         fill

·         fill-opacity

·         fill-rule

·         filter

·         flex-direction

·         float

·         font

·         font-family

·         font-size

·         size

·         stop-color

·         stop-opacity

·         stroke

·         stroke-dasharray

·         stroke-dashoffset

·         stroke-linecap

·         stroke-linejoin

·         stroke-opacity

·         stroke-width

·         table-layout

·         text-align

·         text-anchor

·         text-decoration

·         text-decoration-color

·         border -bottom -left - radius

·         border -bottom -right - radius

·         border -bottom -style

·         border -bottom -width

·         border -collapse

·         border -color

·         border -left

·         border -left -color

·         border -left -style

·         border -left -width

·         border -radius

·         border -right

·         border -right -color

·         border -right -style

·         border -right -width

·         border -spacing

·         border -style

·         border -top

·         border -top -color

·         border -top -left -radius

·         border -top -right - radius

·         border -top -style

·         border -top -width

·         border -width

·         bottom

·         box-reflect

·         box-shadow

·         box-sizing

·         clip-path

·         color

·         column-count

·         column-gap

·         column-rule

·         column-width

·         content

·         font -style

·         font -weight

·         height

·         left

·         letter-spacing

·         line-height

·         list-style-type

·         margin

·         margin-bottom

·         margin-left

·         margin-right

·         margin-top

·         max-height

·         max-width

·         min-height

·         min-width

·         opacity

·         overflow

·         overflow-x

·         overflow-y

·         padding

·         padding-bottom

·         padding-left

·         padding-right

·         padding-top

·         page

·         page-break-after

·         page-break-before

·         page-break-inside

·         pointer-events

·         position

·         resize

·         right

·         shape-rendering

·         text -decoratio n -line

·         text -decoration -style

·         text -indent

·         text -overflow

·         text -shadow

·         text -transform

·         top

·         transform

·         transform -origin

·         transition

·         transition -delay

·         unknown

·         vertical-align

·         visibility

·         white-space

·         width

·         word-break

·         word-wrap

·         z-index

·         zoom

·         #

·         :

·         .

·          

·         :pseudoClass

·         !important;

·         hover

·         active

·         link

·         focus

·         before

·         after

·         checked

·          

Image

Eine Komponente, um ein Bild innerhalb einer Spartenmaske anzuzeigen.

Label

Ein einfaches Beschriftungsfeld, welches genutzt werden kann, um die Maske zu strukturieren.

LinkButtonEdit

Dieses Steuerelement ist ähnlich dem LookupButtonEdit. Jedoch wird nicht nur ein Wert übernommen, sondern es wird der, vom Anwender ausgewählte Datensatz, verknüpft.

LookupButtonEdit

Mit diesem Steuerelement erhält der Anwender die Möglichkeit, nach einem Datensatz zu suchen, aus dem ein definierter Feldwert übernommen wird.

PageControl

Genau, wie Panel und Groupbox handelt es sich hierbei ebenfalls um eine Containerkomponente. Das PageControl wird benötigt, wenn man mehrere Reiter auf seiner Spartenmaske haben möchte. Die einzelnen Reiter werden durch TabSheets dargestellt. Auf jedes TabSheet sollte ein Panel gelegt werden.

Panel

Ein Container zum Platzieren von Komponenten. Komponenten sollten immer mindestens auf einem Panel oder einer Groupbox liegen.

PhoneButtonEdit

Ein Feld, um eine Telefonnummer zu hinterlegen. Mit Betätigung der Telefonschaltfläche wird versucht die angegebene Nummer anzurufen.

RadioButton

Eine Komponente, um eine Auswahl zwischen festen Werten darzustellen. Alle Radiobuttons, die auf einem Container sind, gehören derselben Gruppe an. Es kann immer nur ein Radiobutton einer Gruppe ausgewählt sein. Möchte man mehrere Gruppen haben, müssen mehrere Container angelegt werden, auf welchen sich die Radiobuttons befinden.

Scrollbox

Shape

Eine Komponente, um geometrische Figuren darzustellen. Diese kann genutzt werden, um zum einen die Maske aufzuhübschen oder aber, um bestimmte Elemente grafisch hervorzuheben.

Eigenschaften

Eigenschaft

Beschreibung

Komponenten

Align

Bestimmt, wie das Steuerelement innerhalb seines Containers (übergeordneten Komponente) ausgerichtet wird.

Mit Align können Sie ein Steuerelement an der oberen, unteren, linken oder rechten Seite eines Formulars oder einer Tafel ausrichten. Die Komponente bleibt auch dann an dieser Position, wenn sich die Größe ihres Containers ändert. Die Größe des ausgerichteten Steuerelements wird zusammen mit dem übergeordneten Objekt geändert, so dass es sich weiterhin über den oberen, unteren, linken oder rechten Rand des Containers erstreckt.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TPhoneButtonEdit

Alignment

Bestimmt die Textausrichtung des Inhalts der Komponente.

TafnDBMemo; TRadioButton;

THtPanel;

TLabel;

TPanel

AlignWithMargins

Wenn true, wird bei der Ausrichtung ein Abstand zum Rand der übergeordneten Komponente eingehalten.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

AllowGrayed

Gibt an, ob ein dritter Zustand „undefiniert“ akzeptiert wird.

TafnDataCheckBox

Anchors

Das Element hält zu den angegebenen Rändern der übergeordneten Komponente seine relative Position bei.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TPhoneButtonEdit

AutoSize

Gibt an, ob sich die Größe der Komponente, an den Inhalt anpassen soll.

THtPanel;

TScrollBox;

TImage;

TLabel;

TPanel

BevelEdges

Legt fest, welche Seiten des Steuerelements mit einem Rahmen angezeigt werden.

Mit BevelEdges können Sie bestimmen, welche Seiten des Steuerelements mit einem Rahmen versehen werden. Die Eigenschaften BevelInner, BevelOuter und BevelKind bestimmen das Erscheinungsbild der angegebenen Kanten.

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BevelInner

Legt den inneren Rahmen fest.

Mit BevelInner können Sie angeben, ob die innere Abschrägung erhaben, graviert oder flach erscheint.

Die innere Abschrägung wird unmittelbar innerhalb der äußeren Abschrägung angezeigt. Wenn kein äußerer Rahmen vorhanden ist (BevelOuter hat den Wert bvNone), wird der innere Rahmen unmittelbar neben dem Rand angezeigt.

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BevelKind

Bestimmt den Abschrägungsstil des Steuerelements.

Mit BevelKind können Sie das Erscheinungsbild einer Abschrägung ändern. BevelKind bestimmt, wie deutlich die Abschrägung hervorsteht.

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BevelOuter

Legt den äußeren Rahmen fest.

Mit BevelInner können Sie angeben, ob die innere Abschrägung erhaben, graviert oder flach erscheint.

Die äußere Abschrägung wird innerhalb des Rahmens und unmittelbar außerhalb der inneren Abschrägung angezeigt.

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BevelWidth

Gibt die Breite für die innere und die äußere Abschrägung an.

Mit BevelWidth können Sie die Breite der inneren und der äußeren Abschrägung in Pixel angeben.

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BorderStyle

Bestimmt das Aussehen und die Funktionsweise des Formularrahmens.

Mit BorderStyle können Sie Aussehen und die Funktionsweise des Formularrahmens festlegen. 

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel

BorderWidth

Gibt den Abstand zwischen der äußeren und der inneren Schrägkante in Pixel an.

Mit der Eigenschaft BorderWidth legen Sie fest, wie breit der Rahmen um die Tafel sein soll. Der Wert 0 bedeutet, dass kein Rahmen angezeigt wird.

Der Rahmen einer Tafel ist der Bereich zwischen der äußeren und der inneren Schrägkante. Er ist nur sichtbar, wenn die innere Schrägkante erhöht oder abgesenkt wird. Der Rahmen wirkt sich immer auf die Position des Titels in der Tafel aus, auch wenn BevelInner auf byNone gesetzt wird. Wenn Sie für die Eigenschaft Alignment nicht taCenter festlegen, wird der Titel (Eigenschaft Caption) am inneren Rand des Rahmens ausgerichtet. Wenn BevelInner auf byNone gesetzt wird, ist der innere Rand um den in BorderWidth angegeben Pixelbetrag von der äußeren Schrägkante entfernt. Andernfalls ist der innere Rand mit der Innenkante der äußeren Schrägkante identisch.

Der Rahmen der Tafel ist nicht mit der Linie zu verwechseln, die um die Tafel gezeichnet wird. Diese Linie wird durch die Eigenschaft BorderStyle festgelegt.

 

TafnDBMemo;

THtPanel;

TScrollBox;

TPanel;

TTabSheet

Brush

Bestimmt Farbe und Muster zum Zeichnen des Hintergrundes für das Steuerelement.

TShape

Caption

Legt einen Text-String zur Beschriftung des Steuerelements fest.

Mit Caption geben Sie einen Text-String an, der das Steuerelement beschriftet.

Um ein Zeichen in Caption zu unterstreichen, fügen Sie vor dem betreffenden Zeichen ein Ampersand (&) ein. Diese Art von Zeichen wird Tastenkürzel genannt. Der Benutzer kann die Komponente dann durch Drücken der Taste ALT zusammen mit dem unterstrichenen Zeichen auswählen. Um ein Ampersandzeichen in der Beschriftung anzuzeigen, geben Sie zwei Ampersands (&&) an.

TButton;

TRadioButton; TGroupBox;

THtPanel;

TLabel;

TPanel;

TTabSheet

Center

Gibt an, ob die Grafik im Steuerelement zentriert ist.

Ist eine Grafik nicht optimal im Steuerelement ausgerichtet, können Sie mit der Eigenschaft Center die Position der Grafik ändern. Wenn Center true ist, wird die Grafik im Steuerelement zentriert. Andernfalls wird sie an der linken oberen Ecke des Steuerelements ausgerichtet.

TImage

Checked

Gibt an, ob die Schaltfläche markiert ist.

Mit Checked stellen Sie fest, ob eine Schaltfläche markiert ist.

TafnDataCheckBox; TRadioButton

Color

Gibt die Hintergrundfarbe des Steuerelements an.

Mit Color können Sie die Hintergrundfarbe des Steuerelements ermitteln oder ändern.

 

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel; TPhoneButtonEdit

Color_C

 

TafnDataCheckBox; TafnDataComboBox; TafnDataEdit

Cursor

Bestimmt, welche Grafik für den Mauszeiger innerhalb des Steuerelements angezeigt wird.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

Datenfeld

Hier wird der Name des Feldes angegeben, in welches das Steuerelement den erfassten Wert speichert.

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit; TPhoneButtonEdit

Datenmenge

Hier wird die Datenmenge angegeben, in der sich das angegebene Datenfeld befindet.

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit; TPhoneButtonEdit

DisplayFields

Eine Liste mit Feldern, welche in der Vorschlagsliste angezeigt werden.

TFixedSqlButtonEdit

DomainName

Der Name einer Nachschlageliste.

TDomainButtonEdit

Enabled

Steuert, ob das Steuerelement auf Maus-, Tastatur- und Timer-Ereignisse reagiert.

Verwenden Sie Enabled, um die Verfügbarkeit des Steuerelements für den Benutzer zu ändern. Um ein Steuerelement zu deaktivieren, setzen Sie Enabled auf False. Einige deaktivierte Steuerelemente (z.B. Schaltflächen, Kontrollkästchen, Beschriftungen) werden abgedunkelt angezeigt, während andere (z.B. Container-Steuerelemente) ihre Funktionalität verlieren, ohne das Erscheinungsbild geändert zu werden. Wenn Enabled auf False gesetzt ist, ignoriert das Steuerelement die Maus-, Tastatur- und Timer-Ereignisse.

TButton; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TPanel;

TShape;

TPageControl;

TTabSheet

FieldCaptions

Eine Liste mit Beschriftungen, welche in der Vorschlagsliste verwendet werden.

TFixedSqlButtonEdit

Font

Legt die Attribute des Textes fest, der auf oder in dem Steuerelement angezeigt wird.

TButton;

TafnDBMemo; TRadioButton; TGroupBox;

THtPanel;

TScrollBox;

TLabel;

TPanel;

TPageControl;

TTabSheet

HasDropdownBtn

Gibt an, ob die Komponente über eine Schaltfläche zum Ausklappen der Vorschlagsliste verfügt.

TFixedSqlButtonEdit

HasLookupBtn

Gibt an, ob die Komponente über eine Schaltfläche zum Suchen des Wertes verfügt.

TFixedSqlButtonEdit

HasRefreshButton

Gibt an, ob die Komponente über eine Schaltfläche zum Aktualisieren des Wertes verfügt.

TLinkButtonEdit

HasReleaseButton

Gibt an, ob das Element über eine Schaltfläche zum Lösen der Verknüpfung verfügt.

TLinkButtonEdit

Height

Gibt die Höhe des Steuerelements in Pixel an.

Mit Height können Sie die Höhe des Steuerelements abrufen oder ändern.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

HighlightedColor

 

TafnDataCheckBox; TafnDataComboBox; TafnDataEdit

HighlightOnDropDown

Gibt an, ob die farbliche Markierung direkt beim Öffnen, der Vorschlagsliste, gezeigt wird oder erst beim Tippen.

TComboButtonEdit; TComboDateButtonEdit; TDomainButtonEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit

HighlightSearchTerm

Gibt an, ob der Suchbegriff in der Vorschlagsliste farblich markiert wird.

TComboButtonEdit; TComboDateButtonEdit; TDomainButtonEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit

Hint

Hint enthält den String, der angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

Mit der Eigenschaft Hint können Sie einen String zuweisen, der als Hilfehinweis oder an einer bestimmten Position (z.B. Statusleiste) als Hilfetext angezeigt wird.

Ein Hilfehinweis ist ein Feld mit einem Hilfetext. Es wird eingeblendet, wenn sich der Mauszeiger eine kurze Zeit über dem Steuerelement befindet.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TImage;

TLabel;

TLinkButtonEdit;

TLookupButtonEdit; TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

HorzScrollBar

Repräsentiert die horizontale Bildlaufleiste für das fensterorientierte Steuerelement.

Mit HorzScrollBar wird die horizontale Bildlaufleiste ausgeblendet, eingeblendet und im Aussehen verändert.

TScrollBox

HTML

Hier kann der Html-Quelltext erfasst werden, welcher dargestellt werden soll.

THtPanel

IsUserDomain

Gibt an, ob die Liste vom Anwender bearbeitet werden kann.

TDomainButtonEdit

Layout

Legt die vertikale Ausrichtung des Beschriftungstextes fest.

Mit Layout können Sie festlegen, wo der Text im Client-Bereich des Steuerelements angezeigt wird. Layout ist analog zur Eigenschaft Alignment die vertikale Ausrichtung.

TLabel

Left

Gibt die horizontale Koordinate des linken Komponentenrandes relativ zu seinem übergeordneten Objekt in Pixel an.

Mit Left können Sie den linken Rand des Steuerelements ermitteln oder ändern.

Wenn das Steuerelement in einer anderen Komponente enthalten ist, sind die Eigenschaften Left und Top relativ zu ihrem übergeordneten Steuerelement. Ist das Steuerelement direkt einem Formular untergeordnet, sind die Eigenschaftswerte relativ zu diesem Formular. Bei Formularen ist der Wert der Eigenschaft Left relativ zum gesamten Bildschirm.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox;

TafnDataComboBox; TafnDataEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

LinkField

Gibt das Feld an, in welchem der zu speichernde Wert steht.

TFixedSqlButtonEdit

Listendaten

Hier kann eine Datenmenge angegeben werden, die vom Steuerelement als Vorschlagsliste verwendet wird.

TComboButtonEdit; TComboDateButtonEdit; TDomainButtonEdit

LookupEnabled

 

TLinkButtonEdit; TLookupButtonEdit

Margins

Legt die Ränder für das Steuerelement fest.

Mit der Eigenschaft Margins können Sie die Ränder des Steuerelements einstellen.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

MaxLength

Gibt die maximale Anzahl an Zeichen an, die das Element akzeptieren soll.

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit; TPhoneButtonEdit

MinSearchTermLength

Gibt an, wie viele Zeichen mindestens eigegeben werden müssen, bevor eine Vorschlagsliste erzeugt wird. Dieser Wert kann die Performance und die Last auf dem Datenbankserver beeinflussen.

TLinkButtonEdit

Name

Ein eindeutiger Name, mit dem die Komponente identifiziert werden kann.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

OverrideFieldInfo

Gibt an, dass Feldinformationen ignoriert werden sollen und stattdessen die angegebenen Domain Informationen verwendet werden.

TDomainButtonEdit

Pen

Hier können die Eigenschaften des Stifts angepasst werden. Mit dem Stift wird der Rahmen des Elements gezeichnet.

TShape

Picture

Hier wird das darzustellende Bild angegeben.

TImage

Proportional

Gibt an, ob das Bild unter Berücksichtigung seiner Proportionen, an die Größe der Komponente angepasst werden soll.

TImage

ReadOnly

Gibt an, ob der, im Element, angezeigte Wert vom Anwender bearbeitet werden kann.

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TafnDBMemo; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit; TPhoneButtonEdit

Referenzfeld

Wird hier ein Feld aus der Datenmenge angegeben, wird dieses zum Speichern des Identifikationsmerkmals verwendet.

TLinkButtonEdit

Relationsname

Name einer Relation, welche zur Erzeugung der Verknüpfungsdaten verwendet wird.

TLinkButtonEdit; TLookupButtonEdit

ScrollBars

Gibt an, ob und welche Bildlaufleiste angezeigt wird.

TafnDBMemo

SearchFields

Eine Liste mit Feldern, in denen nach dem eingegebenen Wert gesucht wird.

TFixedSqlButtonEdit

Shape

Gibt die Form einer geometrischen Figur an.

Setzen Sie Shape auf eine geometrische Figur, die auf das Formular gezeichnet werden soll.

TShape

ShowButton

 

TBruttoCalcEdit; TComboButtonEdit; TComboDateButtonEdit; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TLinkButtonEdit; TLookupButtonEdit; TPhoneButtonEdit

ShowCaption

Hiermit kann die Darstellung der Beschriftung deaktiviert werden.

THtPanel;

TPanel

ShowHint

Gibt an, ob der Hinweistext bei Bedarf angezeigt werden soll.

TButton;

TafnDBMemo; TRadioButton; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TPanel;

TShape;

TPageControl;

TTabSheet

Sql

 

TFixedSqlButtonEdit

SteuerAusBrutto

 

TBruttoCalcEdit

SteuerSatz

 

TBruttoCalcEdit

Stretch

Gibt an, dass das Bild an die Größe der Komponente angepasst wird.

TImage

Style

Definiert das Aussehen der Komponente.

TButton;

TPageControl

TabOrder

Gibt die Reihenfolge an, in der die Komponenten durch die TAB-Taste iteriert werden.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox; TLinkButtonEdit; TLookupButtonEdit; TPanel;

TPageControl; TPhoneButtonEdit

TabPosition

 

TPageControl

TabStop

Gibt an, ob die Komponente mit der TAB-Taste angesprungen werden kann.

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox; TLinkButtonEdit; TLookupButtonEdit; TPanel;

TPageControl; TPhoneButtonEdit

TabVisible

Gibt an, ob der Reiter des Elements sichtbar ist.

TTabSheet

Top

Gibt die Y-Koordinate der linken oberen Ecke eines Steuerelements relativ zu seinem Container in Pixel an.

Mit Top können Sie den oberen Rand eines Steuerelements ermitteln oder das Steuerelement an eine andere Y-Position verschieben. Die Eigenschaft Top gibt wie Left die Position des Steuerelements relativ zu seinem Container an. Ist das Steuerelement in einer TPanel-Komponente enthalten, sind die Eigenschaften Left und Top relativ zu dieser Tafel. Ist es direkt dem Formular untergeordnet, werden die Koordinaten relativ zu diesem angegeben. Bei Formularen ist der Wert der Eigenschaft Top relativ zum gesamten Bildschirm.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

UJZuschlag

 

TBruttoCalcEdit

Verknüpfungsdaten

Gibt die Datenmenge an, aus der ein Verknüpfungsziel ausgewählt werden kann.

TLinkButtonEdit; TLookupButtonEdit

Verknüpfungsfeld

Der Inhalt dieses Feldes wird aus den Verknüpfungsdaten in das Datenfeld übernommen. Wurden keine Referenzfelder angegeben, dient dieses Feld zusätzlich der Identifizierung des Verknüpfungsziels.

TLinkButtonEdit; TLookupButtonEdit

Verknüpfungsreferenzfeld

Hier kann angegeben werden, welches Feld aus den Verknüpfungsdaten, zur Identifizierung des Verknüpfungsziels verwendet wird.

TLinkButtonEdit

VerticalAlignment

Gibt die vertikale Ausrichtung des Inhalts an.

THtPanel;

TPanel

VertScrollBar

Repräsentiert die vertikale Bildlaufleiste für das fensterorientierte Steuerelement.

Mit VertScrollBar wird die vertikale Bildlaufleiste ausgeblendet, eingeblendet und im Aussehen verändert.

TScrollBox

Visible

Gibt an, ob das Element für den Anwender sichtbar ist.

TButton;

TafnDBMemo; TRadioButton; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TPanel;

TShape;

TPageControl;

TTabSheet

WantReturns

Gibt an, ob die Enter-Taste zu einem Zeilenumbruch führt.

TafnDBMemo

WantTabs

Gibt an, ob die TAB-Taste zum Einrücken des Textes oder zum Verlassen des Elements führt.

TafnDBMemo

Width

Gibt die Breite des Steuerelements oder Formulars in Pixel an.

Mit Width können Sie die Breite des Steuerelements abrufen oder ändern.

 

TBruttoCalcEdit; TButton; TComboButtonEdit; TComboDateButtonEdit; TafnDataCheckBox; TafnDataComboBox; TafnDataEdit; TafnDBMemo; TRadioButton; TDomainButtonEdit; TDropDateEdit; TFixedSqlButtonEdit; TGroupBox;

THtPanel;

TScrollBox;

TImage;

TLabel;

TLinkButtonEdit; TLookupButtonEdit; TPanel;

TShape;

TPageControl; TTabSheet; TPhoneButtonEdit

WordWrap

Legt fest, ob der Beschriftungstext bei Bedarf umbrochen wird.

Der Wert true für WordWrap bewirkt, dass mehrere Textzeilen in der Komponente Platz finden, indem bei Bedarf ein Zeilenumbruch vorgenommen wird.

Wenn WordWrap false ist, wird Text, der nicht in eine einzige Zeile passt, in der Bildschirmdarstellung abgeschnitten.

TButton;

TafnDBMemo; TRadioButton;

TLabel

Events

Globale Events

Event

Auslöser

OnValidate

Wird ausgelöst, bevor ein Vertrag gespeichert wird. Hier können die Eingaben des Anwenders überprüft werden und eine Meldung ausgegeben werden. Wird eine Meldung ausgegeben wird der Vertrag nicht gespeichert. Die Meldung kann über das ActionData-Objekt gesetzt werden, indem das Attribut “Result” mit dem Ausgabetext für den Anwender befüllt wird.

Der Anwender kann auf ein Steuerelement, welches eine fehlerhafte Eingabe beinhaltet, aufmerksam gemacht werden. Dazu kann die Methode SetDataisValid der jeweiligen Komponente aufgerufen werden.

OnSave

Dieses Ereignis wird ausgelöst, sobald der Vertrag gespeichert wird.

OnCancel

Dieses Ereignis wird ausgelöst, sobald der Anwender seine Eingaben verwirft.

OnRefresh

Dieses Ereignis wird ausgelöst, wenn die Daten in der Maske aktualisiert werden. Dies geschieht zum Beispiel nachdem eine Eingabe verworfen wurde oder wenn die Maske geöffnet wird.

DatenValidieren

Dieses Ereignis wird während der Datenerfassung, bei unterschiedlichen Aktionen, ausgelöst. Hier können die Eingaben des Anwenders frühzeitig überprüft werden. Um den Anwender auf ein Problem aufmerksam zu machen stehen u.a. die Methoden „SetDataIsValid“, „MsgBox“ und „EUserException“ zur Verfügung.

SetReadOnly

Dieses Ereignis wird ausgelöst, wenn vom Programm eine Veränderung des Sperrzustands der Maske festgestellt wurde. Das kann beispielsweise der Fall sein, wenn der Vertrag durch einen anderen Benutzer bearbeitet wird. Die Controls auf den anderen Reitern werden dabei einheitlich gesperrt und müssen auch auf der Spartenmaske gesperrt werden.

 

Komponenten-Events

Event

Auslöser

Komponenten

OnChange

Wird ausgelöst, sobald sich der Inhalt der Komponente geändert hat.

BruttoCalcEdit

ComboButtonEdit

ComboDateButtonEdit

DataCheckBox

DataComboBox

DataEdit

DataMemo

DomainButtonEdit

DropDateEdit

FixedSqlButtonEdit

LinkButtonEdit

LookupButtonEdit

PageControl

PhoneButtonEdit

OnEnter

Wird ausgelöst, sobald der Fokus auf die Komponente gesetzt wird.

BruttoCalcEdit

Button

ComboButtonEdit

ComboDateButtonEdit

DataCheckBox

DataComboBox

DataEdit

DataMemo

DomainButtonEdit

DropDateEdit

FixedSqlButtonEdit

GroupBox

HtmlPanel

LinkButtonEdit

LookupButtonEdit

PageControl

TabSheet

Panel

PhoneButtonEdit

RadioButton

ScrollBox

OnExit

Wird ausgelöst, sobald der Fokus von der Komponente entfernt wird.

BruttoCalcEdit

Button

ComboButtonEdit

ComboDateButtonEdit

DataCheckBox

DataComboBox

DataEdit

DataMemo

DomainButtonEdit

DropDateEdit

FixedSqlButtonEdit

GroupBox

HtmlPanel

LinkButtonEdit

LookupButtonEdit

PageControl

TabSheet

Panel

PhoneButtonEdit

RadioButton
ScrollBox

OnReturnResult

 

BruttoCalcEdit

ValidateDataEvent

Wird ausgelöst, sobald die Auswahl bzw. die Eingabe überprüft werden muss.

BruttoCalcEdit

ComboButtonEdit

ComboDateButtonEdit

DomainButtonEdit

DropDateEdit

FixedSqlButtonEdit

LinkButtonEdit

LookupButtonEdit

PhoneButtonEdit

OnClick

Wird ausgelöst, sobald die Komponente angeklickt wird.

Button

DataMemo

GroupBox

HtmlPanel

Image

Label

Panel

RadioButton

ScrollBox

OnSelectSuggestion

Wird ausgelöst, sobald ein Vorschlag ausgewählt wurde.

ComboButtonEdit

ComboDateButtonEdit

DomainButtonEdit

FixedSqlButtonEdit

LinkButtonEdit

LookupButtonEdit

OnDblClick

Wird ausgelöst, sobald die Komponente doppelt angeklickt wird.

DataMemo

GroupBox

HtmlPanel

Image

Label

Panel

RadioButton

ScrollBox

OnLookupClick

Wird ausgelöst, sobald die Referenzsuche gestartet wird.

OnSelectSuggestion

OnClearClick

Wird ausgelöst, sobald die erfassten Daten entfernt werden sollen.

LinkButtonEdit

OnGotoLink

Wird ausgelöst, wenn eine Verknüpfung existiert und man diese anklickt.

LinkButtonEdit

OnLookup

Wird ausgelöst, sobald das Feld mit der Lupe angeklickt wird und eine Referenzsuche gestartet wird.

LinkButtonEdit

LookupButtonEdit

OnNeedLookupContainer

Wird ausgelöst, wenn eine Datenmenge zur Suche benötigt wird.

LinkButtonEdit

OnRefreshClick

Wird ausgelöst, sobald die erfassten Daten aktualisiert werden sollen.

LinkButtonEdit

OnReloadLookupDataset

Wird ausgelöst, wenn ein Vorschlag ausgewählt wurde.

LinkButtonEdit

OnChanging

Wird ausgeführt, wenn eine Änderung durchgeführt wird.

PageControl

Import/Export

Die erstellten Spartenmasken + Sparten können als ams-Dateien exportiert und wieder importiert werden. Hierdurch kann in einer Testumgebung mit den Masken gearbeitet und getestet werden, bevor diese in den produktiven Betrieb aufgenommen werden.

Es gibt drei Versionen des Exports und zwei Versionen des Imports: Ansicht der Spartenmasken, im Detailfenster einer Spartenmaske und im Designer selbst.

Listenansicht der Spartenmasken

Organisation -> Eigene Spartenmasken verwalten

Wird hier die Exportschaltfläche gedrückt werden alle eigendefinierten Sparten, alle Spartenmasken und alles, was dazu gehört (Skripte, Datenmengen, Schaltflächen etc.) exportiert und in eine ams-Datei geschrieben. Eine solche ams-Datei lässt sich nun wieder über die Importschaltfläche, importieren.

Dies ist der Standardimport/Export und sollte immer genutzt werden, Ausnahmen sind weiter unten beschrieben.

Detailfenster Spartenmaske

Organisation -> Eigene Spartenmasken verwalten -> Spartenmaske

In dieser Ansicht lässt sich ebenfalls die Spartenmaske exportieren. Dabei werden hier nur die entsprechende Sparte und die entsprechende Maske exportiert. Allerdings werden die Skripte von allen eigendefinierten Spartenmasken exportiert.

Die ams-Datei, die hierbei entsteht, kann in der Listenansicht der Spartenmasken wieder importiert werden.

Hierbei handelt es sich um eine abgeschwächte Version des Imports/Exports. Da allerdings immer die kompletten Skripte exportiert werden und somit auch wieder importiert werden sollte dieser Export nicht für einzelne Sparten verwendet werden, da sich sonst Änderungen in den Skripten anderer Sparten einschleichen könnten.

Spartenmaskendesigner

Organisation -> Eigene Spartenmasken verwalten -> Spartenmaske -> Maskendefinition bearbeiten

Im Designer wird durch den Export ebenfalls eine ams-Datei erzeugt. Diese enthält allerdings nur Die Maske, alle Regeln, Datenmengen, Schaltflächen und Maskenskripte. Eine so erstellte ams-Datei kann über die Importschaltfläche im Designer wieder importiert werden.

Verwenden Sie diesen Import/Export, wenn Sie die Maskendefinition bspw. für eine andere Sparte ebenfalls nutzen wollen und dafür kopieren wollen.

Programmierung

Objekte

Allgemein

Objekte im Sinne der Spartenmaskenprogrammierung stellen eine Schnittstelle zur Verwendung von Funktionen des ams dar. Dabei lässt sich zwischen 2 Arten unterscheiden. Zum einen die, welche Datenmengen repräsentieren (Spartenobjekt, Vertragsobjekt, Datenmengen) und Funktionalitäten für diese bieten und zum anderen diese, die lediglich Funktionen liefern.

Runtime-Objekt

Dieses Objekt steht in allen Skripten zur Verfügung.

Methoden

Methode

Beschreibung

ExecuteQuery(SQL: String)

Führt die übergebene SQL-Anweisung aus.

ExecuteDirect(SQL: String)

Führt die übergebene SQL-Anweisung aus.

MsgBox(Meldung: String)

Zeigt die übergebene Meldung in einem Dialog an.

UserException(Meldung: String)

Zeigt die übergebene Meldung in einem Dialog an und bricht die laufende Aktion ab.

BriefeFinalisieren(AMSIDNR: String; cGesamt: Integer = 0; cAkt: Integer = 0)

Finalisiert den Brief, dessen Datenbank-Id mit dem Parameter „AMSIDNR“ übereinstimmt. Die Parameter „cGesamt“ und „cAkt“ werden in einer Fortschrittsanzeige ausgegeben.

 

Funktionen

Funktion

Beschreibung

CreateObject(ClassName: String)

Erzeugt ein OLE-Objekt der übergebenen Klasse und gibt dieses zurück.

ProvideQuery

Liefert ein leeres Datenobjekt zurück.

ProvideAmsObjekt(ClassName: String)

Liefert ein leeres Datenobjekt des angegebenen Typs zurück.

ProvideDataSet(SQL: String)

Liefert ein leeres Datenobjekt zurück.

QuerySingleValue(SQL: String)

Führt die übergebene SQL-Anweisung aus und gibt den Wert des ersten Feldes zurück.

QuerySingleValueDefault(SQL: String; Default: Variant)

Siehe QuerySingleValue.

Sollte der Ergebniswert NULL sein, wird der Default-Wert zurückgeliefert.

CurrentUsername

Gibt den Namen des angemeldeten Users.

GetCurrentUser

Gibt das Benutzer Objekt des angemeldeten AMS-Benutzers zurück.

GetAmsIdNr

Erzeugt eine neue Datenbank-Id und gibt dieser zurück.

OpenDialogExecute(Filter: String)

Zeigt einen „Datei Öffnen“-Dialog an und gibt den angegebenen Dateinamen zurück. Mit dem Parameter „Filter“ kann die Auswahl auf bestimmte Dateiendungen eingegrenzt werden. Folgendes Beispiel führt dazu, dass im Dialog zwei Filter angeboten werden. Der Erste mit der Bezeichnung „Text“ zeigt nur Dateien mit der Endung „.txt“ an und der Zweite mit der Endung „Bilder“ zeigt Dateien mit den Endungen „.jpg“ und „.bmp“ an:

Text|*.txt|Bilder|*.jpg;*.bmp

SaveDialogExecute

Zeigt einen „Datei Speichern“-Dialog an und gibt den angegebenen Dateinamen zurück.

HasAccess(RightName: String)

Prüft, ob der Anwender über das angegebene Recht verfügt.

GetRegistryKey(SchluesselPfad : string; SchluesselName: string; UserEntry: Boolean; DefaultWert: variant)

Bietet die Möglichkeit Einträge aus der AMS-Registry abzufragen. Wird UserEntry = True übergeben, so wird der Eintrag des aktuell angemeldeten Benutzers gelesen.

calcIBAN(Bankleitzahl: string; KontoNr: String)

Anhand von Bankleitzahl und Kontonummer wird IBAN, BIC und Bankname ermittelt und als semikolongetrennte Zeichenkette zurückgeliefert.
Aufbau: Iban;Bankname;Bic;Warnungen;Fehler

ValidateIBAN(Iban: string; Bic: string)

Die übergebene Iban und Bic wird validiert und liefert Fehlermeldungen zurück. Bei leerer Rückgabe ist die Prüfung erfolgreich gewesen.

InteractiveSession()

Liefert einen boolischen Wert über die Interaktivität der Sitzung zurück. Hierüber können Funktionen abgesichert werden, die auf eine Oberfläche angewiesen sind.

 

Ams-Objekt

Dieses Objekt steht nur in Maskenfunktionen zur Verfügung.

Methoden

Methode

Beschreibung

MsgBox(Meldung: String)

Zeigt die übergebene Meldung in einem Dialog an.

ExecuteQuery(SQL: String)

Führt die übergebene SQL-Anweisung aus.

SetTabVisible(TabCaption : string; Visible : boolean)

Ermöglicht das Aus-/Einblenden eines PageControl-Reiters.

 

Funktionen

Funktion

Beschreibung

ProvideQuery

Liefert ein leeres Datenobjekt zurück.

ProvideAmsObjekt(ClassName: String)

Liefert ein leeres Datenobjekt des angegebenen Typs zurück.

ProvideDataSet

Liefert ein leeres Datenobjekt zurück.

QuerySingleValue(SQL: String)

Führt die übergebene SQL-Anweisung aus und gibt den Wert des ersten Felds als Variant zurück.

CurrentUsername

Gibt den Namen des angemeldeten AMS Benutzers zurück.

NeuerBrief(VorlageID; EmpfaengerTyp; EmpfaengerID : string)

Legt ein neues Briefeobjekt an und gibt dieses zurück (Siehe TScriptDokument).

NeueMail(EmpfaengerTyp, EmpfaengerID: string)

Legt ein neues Mailobjekt an und gibt dieses zurück (Siehe TScriptMail)

ControlCount

Gibt die Anzahl an Steuerelementen (Komponenten) zurück.

Controls(Name: String)

Ermittelt anhand des Feldnamens oder ControlNamen ein Steuerelement und gibt dieses zurück.

ControlsByFieldName(FieldName: String)

Ermittelt anhand des Feldnamens ein Steuerelement und gibt dieses zurück.

ControlsByControlName(ControlName: String)

Ermittelt anhand des ControlNamen ein Steuerelement und gibt dieses zurück.

ControlsByIndex(Index : Integer)

Ermittelt anhand des übergebenen Index ein Steuerelement und gibt dieses zurück.

UserChoice(Text: String)

Zeigt den Text in einem Dialog mit „Ja“ und „Nein“ Schaltflächen an und liefert die Auswahl zurück.

 

Eigenschaften

Eigenschaft

Beschreibung

Runtime

Liefert das Runtime-Objekt zurück.

Lookup

Liefert das Lookup-Objekt zurück.

 

Daten-Objekte

Datenmengen der arten Verknüpfung, Objekt und Sql (auch über ProvideAmsObjekt oder ProvideDataSet) werden unter Ihrem Namen in den Skripten bereitgestellt.

Methoden

Methode

Beschreibung

First

Springt zum ersten Datensatz.

Last

Springt zum letzten Datensatz.

Next

Geht einen Datensatz weiter.

Prior

Geht einen Datensatz zurück.

Edit

Setzt den Datensatz in den Bearbeiten Modus.

Append

Hängt einen neuen Datensatz an.

Cancel

Verwirft die Änderungen.

Post

Sichert die Änderungen im Arbeitsspeicher.

Delete

Löscht den Datensatz.

Open

Öffnet die Datenmenge.

Close

Schließt die Datenmenge.

ApplyUpdates(MaxErrors: Integer)

Überträgt Änderungen aus dem Arbeitsspeicher in die Datenbank (Sollte im mit 0 übergeben werden).

 

Funktionen

Funktion

Beschreibung

FindField(FieldName: String)

Sucht ein Feld anhand dessen Namen und gibt dieses zurück.

ValueChanged(FieldName: String)

Prüft, ob der Wert des angegebenen Felds geändert wurde.

GetOldValue(FieldName: String)

Gibt den Feldwert vor einer Änderung zurück.

 

Eigenschaften

Eigenschaft

Beschreibung

Eof

Gibt an, ob das DataSet das Ende an Datensätzen erreicht hat (End of File)

Bof

Gibt an, ob das DataSet am Anfang, somit dem ersten Datensatz steht (Beginning of File).

Active

Gibt an, ob die Datenmenge geöffnet ist.

CommandText

Enthält die SQL-Abfrage, auf der die Datenmenge basiert.

InEditMode

Gibt an, ob die Datenmenge bearbeitet wird.

TableName

Gibt den Tabellennamen zurück.

 

Field-Objekt

Mit von Datenmengen mittels der „FindField“ Funktion ermittelte Feldobjekte.

Eigenschaften

Eigenschaft

Beschreibung

AsString

Der Feldinhalt wird als Text interpretiert.

AsInteger

Der Feldinhalt wird als Ganzzahl interpretiert.

AsCurrency

Der Feldinhalt wird als Währungsbetrag interpretiert.

AsVariant

Auf den Feldinhalt wird ohne Interpretation zugegriffen.

AsDateTime

Der Feldinhalt wird als Angabe von Datum und Uhrzeit interpretiert.

Calculated

Gibt an, ob der Feldinhalt aus der Datenbank geladen oder berechnet wurde.

DisplayName

Beinhaltet eine anwenderfreundliche Bezeichnung des Feldes.

IsNull

Gibt an, ob das Feld einen Inhalt hat.

OldValue

Liefert den Feldinhalt, wie er in der Datenbank steht.

Value

Alias für AsVariant.

 

Descriptor-Objekt

Dieses Objekt steht nur in der Spartenfunktion „DescribeSparte_“ bereit. Mit diesem Objekt werden die Eigenschaften der Sparte definiert.

Eigenschaften

Eigenschaft

Beschreibung

Text

Langname der Sparte

Index

Hat die Sparte Indexzahlen?

BedingungsArt

Wird die Bedingung mit Vorschlagsliste (combo1) oder (wahlget) angezeigt?

IndexBedingungDomain

Domainname für Bedingung.

IndexBedingungZusatz

Zusatz für die Bedingung.

IndexBedingungUserDomain

Domain kann vom Anwender bearbeitet werden?

IndexBezWert1

Bezeichnung für Wert1 in der Maske.

IndexBezWert2

Bezeichnung für Wert2 in der Maske.

IndexBezWert3

Bezeichnung für Wert3 in der Maske.

IndexBezWert4

Bezeichnung für Wert4 in der Maske.

Steuer

Vorgabe Steuersatz

Gruppe

Spartengruppe

IsGruppenSparte

Kann es mehrere Spartenteile zu einem Vertrag geben?

BezeichnungGruppe

Bezeichnung der Mitglieder der Gruppe (Default: „Personen“)

SumFields

Summenfelder

DYSelektionString

Wenn dieser Wert gesetzt ist, wird diese Sparte in die Ermittlung von DY-Provisionen einbezogen.

HatStornoreserve

Dieser Wert zeigt an, ob für diese Sparte für AP-Buchungen eine Stornoreserve einbehalten werden soll.

Spartenkategorie

Die Kategorie der Sparte.

 

Lookup-Objekt

Dieses Objekt steht nur in den Maskenfunktionen bereit und bietet die Möglichkeit einen Suchdialog zu steuern.

Methoden

Methode

Beschreibung

SetClearText(Text: String)

Blendet im Dialog eine Schaltfläche zum Entfernen einer Verknüpfung ein und beschriftet diese mit dem angegebenen Text.

SetTable(Name: String)

Setzt den Namen der Tabelle, in der nachgeschlagen werden soll.

SetFilteredTable(Name, Filter: String)

Setzt den Namen der Tabelle, in der Nachgeschlagen werden soll und einen Vorgabefilter.

OpenDetail(Datenbank-Id: String)

Wurde ein Tabellenname gesetzt, wird das mit ID identifizierte Objekt in der entsprechenden Detailmaske geöffnet. Konnte zu der Tabelle kein Detailframe erkannt werden, geschieht nichts.

OpenDetailParams(Parameter: String)

Wurde zu der gesetzten Tabelle ein Detailframe gefunden, wird dieses mit den übergebenen Parametern geöffnet.

OpenFrameByName(FrameName, Parameter: String)

Die Maske mit dem Namen „FrameName“ wird, mit den übergebenen Parametern, geöffnet.

EditUserDomain(Name: String)

Es wird ein Dialog geöffnet, in dem der Anwender die Nachschlageliste, welche mit dem übergebenen Parameter identifiziert wird, bearbeiten werden.

ShowAppendBtn(Anzeigen: Boolean)

Damit kann die „Neuanlage“ Schaltfläche ein- / ausgeblendet werden.

ShowDeleteBtn(Anzeigen: Boolean)

Damit kann die „Löschen“ Schaltfläche ein- / ausgeblendet werden.

 

Funktionen

Funktion

Beschreibung

ShowDialog

Zeigt den Dialog an und liefert true zurück, wenn eine Auswahl getroffen wurde oder die Referenz entfernt werden soll.

ShowDialogFiltered(Feld, Wert: String)

Zeigt den Dialog, mit den vorgefilterten Daten, an und liefert true zurück, wenn eine Auswahl getroffen wurde oder die Referenz entfernt werden soll.

ShowDialogFiltered2(Feld, Wert, PermanentFilterAusdruck, PermanentFilterCaption: String; IstPermanentFilterSchaltflächeFuerAnwenderSichtbar : bool)

Zeigt den Dialog, mit den vorgefilterten Daten, an und liefert true zurück, wenn eine Auswahl getroffen wurde oder die Referenz entfernt werden soll.

Zusätzlich wird der bei Angabe der PermanentFilter-Parameter die Filterung beibehalten, auch wenn der Anwender die Auswahl selbstständig nachfiltert.

Cleared

Kann nach dem Aufruf von ShowDialog ausgewertet werden. Wenn true zurückgegeben wird, dann soll die Referenz entfernt werden.

Result

Beinhaltet eine Datenmenge, in der der ausgewählte Datensatz (die gewünschte Referenz) vorselektiert ist.

DetailFrameAvailable

Kann nach SetTable ausgewertet werden und gibt an, ob zu der ein Detailframe gefunden wurde.

ListFrameAvailable

Kann nach SetTable ausgewertet werden und gibt an, ob zu der Tabelle ein Listeframe gefunden wurde.

LookupResult

Gibt an, über welche Schaltfläche der Dialog geschlossen wurde.

0 = Schließen

1 = Auswahl

2 = Feld leeren

3 = Neuanlage

4 = Löschen

 

Eigenschaften

Eigenschaft

Beschreibung

RelationName

Alternativ zu einem Tabellennamen, kann mit dieser Eigenschaft eine Relation angegeben werden.

 

EventData/ActionData

Diese Objekte sind in allen Skripten verfügbar. Sie dienen dem Austausch von Objekten und Variablen zwischen ams und den Skripten. EventData enthält Daten, die in das Skript übergeben werden und ActionData nimmt Daten auf, welche zurück an ams gegeben werden.

Methoden

Methode

Beschreibung

SetString(Name, Wert: String)

Hiermit kann der Wert einer Variablen gesetzt werden.

 

Funktionen

Funktion

Beschreibung

GetString(Name: String)

Gibt den Wert, der angegebenen Variablen, zurück.

HasString(Name: String)

Prüft, ob die angegebene Variable einen Wert hat.

GetContext(Name: String)

Gibt das angegebene Objekt zurück.

 

Eigenschaften

Eigenschaft

Mögliche Werte

Beschreibung

Berechnet

„JA“, „NEIN“

Gibt an, ob die Prämie berechnet wurde oder das Ergebnis ignoriert werden muss.

GesamtPraemie

Currency

Beinhaltet die errechnete Prämie.

IsJahresPraemie

„JA“, „NEIN“

Gibt an, ob es sich bei der Prämie, um die Jahres- oder die Monatsprämie handelt.

IsBruttoPraemie

„JA“, „NEIN“

Definiert, ob es sich um die Brutto- oder Nettoprämie handelt.

Risiko

String

Eine Beschreibung des Risikos.

SetRisiko

„JA“, „NEIN“

Gibt an, ob eine Risikobeschreibung zurückgeliefert wird.

 

TScriptMail

Dieses Objekt repräsentiert eine neue E-Mail.

Methoden

Methode

Beschreibung

Senden

Die E-Mail wird versendet.

Schlagwort(Schlagwort: String)

Der E-Mail wird das übergebene Schlagwort hinzugefügt.

Anhang(Dateiname: String)

Die angegebene Datei wird der E-Mail als Anhang hinzugefügt.

 

Funktionen

Funktion

Beschreibung

GetId

Gibt die Datenbank-Id der E-Mail zurück.

 

Eigenschaften

Eigenschaft

Beschreibung

AntwortenAn

Gibt die gewünschte Adresse an, an die Antworten gesendet werden sollen.

Empfaenger

Gibt die Empfängeradresse an.

EmpfaengerCC

Gibt die Kopie Empfänger an.

EmpfaengerBCC

Gibt die nicht aufgelisteten Kopie Empfänger an.

Betreff

Gibt den Betreff an.

VorlageId

Gibt die Datenbank-Id der zu verwendenden Vorlage an.

 

TScriptDokument

Dieses Objekt repräsentiert einen neu angelegten Brief und dessen Archivierung.

Methoden

Methode

Beschreibung

Anzeigen

Der Brief wird in einer externen Textverarbeitung geöffnet.

Speichern

Der Brief wird, unter Berücksichtigung der gesetzten Eigenschaften, in der Datenbank gespeichert.

 

Funktionen

Funktion

Beschreibung

SpeichereDatei(Dateiname: String)

Der Brief wird, mit dem übergebenen Dateinamen auf dem Dateisystem gespeichert. Wurde kein Name übergeben, wird einer erzeugt. Der Dateiname wird zurückgegeben. Abhängig von den gesetzten Eigenschaften, wird der Brief im Rtf oder Pdf Format gespeichert.

GetId

Gibt die Datenbank-Id des Briefes zurück.

 

Eigenschaften

Eigenschaft

Beschreibung

Briefpapier

Damit kann das Briefpapier angegeben werden, mit dem der Brief ggf. finalisiert wird.

Dokumententyp

Damit kann der Dokumententyp des Briefs angegeben werden.

VonAn

Damit kann ein VonAn gesetzt werden.

Titel

Damit kann der Titel des Briefs gesetzt werden.

SaveAsPdf

Damit kann gesteuert werden, ob der Brief beim Speichern finalisiert wird.

 

Sender

Dieses Objekt steht in Maskenfunktionen bereit, welche auf ein Standardereignis, also ein Event einer Komponente, reagieren. Sender stellt dann das auslösende Steuerelement dar.

Abhängig von der Art des Steuerelements, stellen diese die nachfolgenden Methoden/Funktionen/Eigenschaften bereit.

Methoden

Methode

Beschreibung

IsLinked(Linked: Boolean)

Hiermit kann angegeben werden, ob der angezeigte Text als Verknüpfung zu einer Referenz dargestellt wird.

SetDataisValid(Valide: Boolean)

Hiermit können fehlerhafte Eingaben markiert werden. Das Steuerelement wird, bei fehlerhafter Eingabe, rot dargestellt.

 

Funktionen

Funktion

Beschreibung

FieldName

Bei Steuerelementen, welche mit einer Datenmenge verbunden sind, liefert diese Funktion das Datenfeld zurück.

HasValue

Gibt an, ob das Steuerelement einen Textwert enthält.

 

Eigenschaften

Eigenschaft

Beschreibung

Enabled

Hiermit wird gesteuert, ob das Steuerelement aktiv ist. Wird es deaktiviert, ist eine Interaktion durch den Anwender nicht mehr möglich.

Visible

Gibt an, ob das Steuerelement sichtbar ist.

Top

Gibt den Abstand zum oberen Rand des Elternelements an.

Left

Gibt den Abstand zum linken Rand des Elternelements an.

Height

Gibt die Höhe des Steuerelements an.

Width

Gibt die Breite des Steuerelements an.

Color

Gibt die Farbe des Steuerelements an.

Cursor

Gibt den Mauszeiger an, welcher dargestellt wird, wenn der Zeiger sich auf dem Steuerelement befindet.

FontSize

Gibt die Schriftgröße an, mit der das Steuerelement Texte ausgibt.

FontColor

Gibt die Schriftfarbe an, mit der das Steuerelement Texte ausgibt.

TabOrder

Definiert die Reihenfolge, in der die Steuerelemente angesprungen werden, wenn der Anwender die TAB-Taste drückt.

TabStop

Gibt an, ob das Steuerelement angesprungen werden kann, wenn der Anwender die TAB-Taste drückt.

IsReadOnly

Gibt an, ob der Anwender die Daten des Steuerelements bearbeiten kann.

Caption

Stellt die Beschriftung eines Steuerelements dar.

Text

Dies ist der Text, welcher vom Steuerelement angezeigt wird. Bei vielen Steuerelementen ist dies auch der Wert, der in der Datenbank gespeichert wird.

Checked

Gibt an, ob das Steuerelement angehakt ist.

ItemIndex

Gibt an, welcher Eintrag eines Steuerelements ausgewählt wurde.

TabVisible

Gibt an, ob der Reiter einer Seite (TabSheet) sichtbar ist.

TabIndex

Gibt an, welche Seite eines PageControl gerade angezeigt wird.

IsUserDomain

Gibt an, ob die hinterlegte Vorschlagsliste durch den Anwender bearbeitet werden kann.

SQL

Enthält das Sql-Statement, welches der verwendeten Datenmenge zugrunde liegt.

Html

Enthält den Html-Quelltext der Html-Seite, die von dem Steuerelement angezeigt wird.

HasRefreshButton

Gibt an, ob die „Aktualisieren“-Schaltfläche des Steuerelements sichtbar ist.

HasReleaseButton

Gibt an, ob die „Verknüpfung lösen“-Schaltfläche des Steuerelements sichtbar ist.

DateAsTime

Enthält das Datum des Steuerelements als Skript kompatiblen Zeitwert.

DomainName

Gibt den Namen, der zu verwendenden Nachschlageliste an.

CurrentPPI

Liefert die Pixel-per-Inch des aktuellen Controls zurück.

Systemseitige Objekte

ActiveXObject

Innerhalb der Skripte kann, je nach Verfügbarkeit, auch auf sog. ActiveX-Objekte zurückgegriffen werden. Darüber lassen sich Systemressourcen einbinden und verwenden. Nähere Informationen entnehmen Sie bitte der verlinkten Dokumentation.

Domänen

Ams Domänen

Domäne

Werte

*KFZ01

<leer>; 

Anhänger; 

Kombi; 

Kraftrad; 

LKW; Oldtimer; Omnibus; PKW; Sonstige

*KFZ02

<leer>; Beförderung von Öl/Benzin; Eigenverwendung; Güterfernverkehr; Güternahverkehr; Kraftdroschke; Mietwagen; Personenverkehr; Privatfahrzeug; Selbstfahrervermietwagen; Sonstige; Werkverkehr

ANREDE

Sehr geehrter Herr \; Sehr geehrte Frau \

adressart

<leer>; privat; geschäftlich

adresse.zuordnung

<leer>; PRIVAT; FIRMA

aufwandstatus

bereits abgerechnet; noch nicht abgerechnet; nicht abrechenbar

bav.janein

<leer>; ja; nein; entfällt

bav113

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

bav114

<leer>

bav116

<leer>; Leistungszusage; beitragsorientierte Leistungszusage (BOLZ); Beitragszusage mit Mindestleistung (BML)

bav120

<leer>; Keine; Linear; BBG GRV

bav135

<leer>; keine; linear; §16 BetrAVG

bav142

<leer>; BU; EU

bav143

<leer>; 25%/75%; 33%/66%; 50%

bav144

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

bav152

<leer>

bav154

<leer>; Absolut; Gehaltsanpassung; Keine; Linear; Progressiv; Sonstiges; Sozialversich.

bav183

<leer>; Ehepartner; Lebensgefährte/in; Kinder; Sonstige

bav198

<leer>

bav199

<leer>

bav200

<leer>

bav216

<leer>

bav224

<leer>; Beitragsfreistellung; Erhöhung; Reduzierung; Wiederinkraftsetzung

bav236

<leer>

bav237

<leer>

bav238

<leer>; Mutterschutz bzw. Elternzeit; Ende der Lohnfortzahlung bei Krankheit; Kündigung der Entgeltumwandlungsvereinbarung; Weiterbildung; sonstigeskap117

bav239

<leer>; laufendes Bruttogehalt; Sonderzahlungen

beratung.ort

<leer>; Telefonisch; Beim Kunden; Beim Makler

beratung.typ

Allgemein; Vertrag

berufsstatus

<leer>; Angestellter; Angestellter (ÖD); Beamter; Freiberufler; Geschäftsführer; Hausmann/Hausfrau; In Ausbildung; Leitend.Angestellter; Nicht erwerbstätig; Pensionär; Praktikant; Rentner; Schüler; Selbständiger; Soldat; Student; Vorruhestand; Vorstand

bet103

<leer>; atyp. stille Beteil.; Flugzeugleasing; Immobilienfonds; Immobilienleasing; Kommunal-Leasing; Medienbeteiligung; Private Equity Fonds; Schiffsbeteiligung; Sonstiges; Windpark

bet104

<leer>; Eigennutzung; Fremdnutzung; Kapitalanlage

beteiligung.vertrag.art

Eigenanteil; Gesellschaft; Produkt

beteiligung.produkt.art

Eigenanteil; Gesellschaft

bezugsgroesse

BW; MC

bezugsgroesse_bonus

Vermittlerprovision; Differenzprovision; Maklercourtage

bonuszahler

Vorgesetzter; Makler; ausgewählter Vermittler

bundesland

<leer>; Baden-Württemberg; Bayern; Berlin; Brandenburg; Bremen; Hamburg; Hessen; Mecklenburg-Vorpommern; Niedersachsen; Nordrhein-Westfalen; Rheinland-Pfalz; Saarland; Sachsen; Sachsen-Anhalt; Schleswig-Holstein; Thüringen

brief.dokumenttyp

ANGEBOT; ANTRAG; BEITRAGSRECHNUNG; BERATUNG; IDENTITÄTSNACHWEIS; KÜNDIGUNG; KÜNDIGUNGSBESTÄTIGUNG; LETZTER_NACHTRAG; MAKLERMANDAT; POLICE; RENTA; SCHADENMELDUNG; SCHADENABSCHLUSSMELDUNG; STÖRFALL; VORABINFORMATIONEN

brief.suche

<Alle>; 10; 50; 100; 500

ClassicDTAUSAustauschart

Rechnungen; Gutschriften; Schadenzahlungen; Schadenbelastungen

CustomFieldType

Text; Ganzzahl; Dezimalzahl; Datum; Checkbox; fester Wertebereich; Vorschlagsliste

dep103

<leer>; Personalausweis; Reisepass

dep112

<leer>; ist beigefügt; nicht erwünscht; wird nachgereicht

dep113

<leer>; Altersversorgung; Finanzierungstilgung; Heirat / Ausbildung; Hinterbliebenenversorgung; Rückdeckung; Sonstiges; Unterstützungskasse; VWL-Anlage

dep179

<leer>; Direktanlage; Entnah.-Plan; Inv.-Konto; Sparplan

dokumententypen.vorgangsaktion

Automatische Ablage; Automatische Ablage mit Wiedervorlage; Automatische Ablage mit Vorgangsbearbeitung; Manuelle Ablage über Dokumenteneingang; Löschen\

druckstatus

<leer>; Rechnung; Gutschrift

ear119

<leer>; extended maintenance; mainten. guarantee; visit maintenance

edv999

<leer>; WERT 3/71

einheitenart

Auszahlung; statistisch

familienstand

<leer>; Geschieden; In Trennung; Ledig; Partner; Unbekannt; Verheiratet; Witwe(r); eingetragener Lebenspartner

faktor

1 min; 15 min; 30 min; 60 min

fec136

<leer>; Gemeiner Wert; Neuwert; Zeitwert

feu141

<leer>; Gemeiner Wert; Neuwert; Zeitwert

fin.baustein

A Bankfinanzierung mit Annuitäten-Tilgung; B Bankfin. mit Tilgungaussetzung gegen LV; C Bankvorfinanzierung für anzusparenden BSV; D Vers.-Darl. mit Tilgungsaussetzung gegen LV; E Bankfinanzierung mit Sonder-/Ratentilgung; F Bauspardarlehen (zugeteilt)

fin113

<leer>; Altersversorgung; Eigenheim; Rückdeckung; Sonstiges

formular.katalog

GESELLSCHAFT; INTERESSENT; KUNDE; SCHADEN; VERMITTLER; VERTRAG; VSPIEGEL; BERATUNG; PROTOKOLL; TERMIN; TERMINLISTE

formular.symbol.allgemein

BENUTZER=Benutzername; BENUTZEREMAIL=E-Mail-Adresse; BENUTZERLANG=Briefname; DatumKurz=Datum (Kurzform); DATUMLANG=Datum (Langform); DFAX=Faxdurchwahl; DWAHL=Durchwahl; DZEICHEN=Diktatzeichen; MAKLERNAME=Maklername

geb349

<leer>; Gemeinschaftsfläche; Komplett

geschlecht

<leer>; Männlich; Weiblich; Divers

gesell.status

AKTIV; INFO

produkt.status

AKTIV; INFO

protokoll.symbol

ANMERK=Interne Anmerkung; BERATUNGSPARTE=Beratungssparte; BERATUNGTARIF=Produkt; BERATUNGORT=Ort des Gesprächs; BERATUNGDATUM=Datum des Gesprächs; BERATUNGUHRZEIT=Uhrzeit des Gesprächs; BERATER=Berater; BERATUNGTEILN=Gesprächsteilnehmer; BERATUNGANLASS=Anlass des Gesprächs; BERATUNGBEDARF=Bedürfnisse; BERATUNGEMPFEHLUNG=Empfehlung; BERATUNGUMFANG=Empfehlungs-Grundlage; BERATUNGUMFANGID=Eingeschr.Empfehlungsgrundlage; BERATUNGKUNDEENTSCHEIDUNG=Kundenentscheidung; BERATUNGKUNDEENTSCHEIDUNGID=Ausgewählte Kundenentscheidung; BERATUNGKUNDEKEINEABSICHERUNG=Ausgeschlossene Risikoabsicherung; BERATUNGKUNDEAWBPRODUKT=Abweichender Produktwunsch; BERATUNGKUNDEAWBPRODUKTGRUND=Kundenbegründung zum Produktwunsch; BERATUNGWUENSCHE=Wünsche; PROTOKOLLTYP=Protokolltyp; WEITEREBERATUNGJANEIN=Weitere Beratung erwünscht Ja/Nein

ggv127

<leer>; 1; 2; 3; 4

ggv129

<leer>; 1; 2; 3

ggv130

<leer>; 1; 2; 3

ggv131

<leer>; 1; 2; 3; 4

ggv132

<leer>; 1; 2; 3; 4; 5

ggv133

<leer>; 1970; 1980; Neuwert

haftungsmodell.monate

24; 60; 72; 96

hpv101

<leer>; Anzahl; Bausumme; Bruttojahresmietwert; Fassungsvermögen ltr; Fläche in ha; Fremdenzimmer; Grundfläche; Krankenbetten; Lohnsumme; Mindestbeitrag; Mitarbeiterzahl; Mitglieder; Ohne Berechnung; Sonstige; Umsatz; Wohnfläche; Zahl Arbeitsmaschine; Zahl der Inhaber; Zahl der ltd. Ärzte; Zahl Hotelbetten; Zahl Hotelzimmer; Zahl Kfz-Stellplätze; Zahl Tankstellen; Zahl Turmdrehkräne; Zahl WE+GE Einheit; Zahl Wohneinheiten

hpv102

Wagnis; PHV

hrv147

<leer>; Gesamtglasfläche; Neubauwert; Pauschal; Wohnfläche

hrv171

<leer>; I; II; III; IV; V; VI

identitaet

<leer>; Passersatzpapier; Personalausweis; Reisepass

imo112

<leer>; DHH; div; EFH; ETW; Geschäftshaus; Lagerhaus; MFH; Supermarkt; Wohn-+Gesch.

imo113

<leer>; Carport; Doppelgarage; Einzelgarage; Keine Garage; Stellplatz; Tiefgarage

imo129

<leer>; Altersversorgung; Eigenheim; Heirat / Ausbildung; Hinterbliebenenversorgung; Rückdeckung; Sonstiges

inkassostatus

RECHNUNG; RÜCKGABE

inv110

<leer>; Personalausweis; Reisepass

inv122

<leer>; Personalausweis; Reisepass

inv129

<leer>; ist beigefügt; nicht erwünscht; wird nachgereicht

inv132

<leer>; Direktanlage; Entnah.-Plan; Inv.-Konto; Sparplan

inv138

<leer>; Altersversorgung; Finanzierungstilgung; Heirat / Ausbildung; Hinterbliebenenversorgung; Riester; Rückdeckung; Sonstiges; Unterstützungskasse; VWL-Anlage

janein

<leer>; Ja; Nein

kap117

Aufwand; Ertrag

kap118

<leer>; Altersversorgung; Finanzierungstilgung; Heirat / Ausbildung; Hinterbliebenenversorgung; Rückdeckung; Sonstiges; Unterstützungskasse

kap119

<leer>; Entnahmeplan; Leibrente; Sparplan; Zeitrente

kcloud.Status

<leer>; Information; Antwort; Antwort mit Datei

kfz112

<leer>; ----; 0; M; S; SF1/2; SF1; SF2; SF3; SF4; SF5; SF6; SF7; SF8; SF9; SF10; SF11; SF12; SF13; SF14; SF15; SF16; SF17; SF18; SF19; SF20; SF21; SF22; SF23; SF24; SF25; SF26; SF27; SF28; SF29; SF30; SF31; SF32; SF33; SF34; SF35; SF36; SF37; SF38; SF39; SF40; SF41; SF42; SF43; SF44; SF45; SF46; SF47; SF48; SF49; SF50

kfz117

<leer>; ----; 0; M; S; SF1/2; SF1; SF2; SF3; SF4; SF5; SF6; SF7; SF8; SF9; SF10; SF11; SF12; SF13; SF14; SF15; SF16; SF17; SF18; SF19; SF20; SF21; SF22; SF23; SF24; SF25; SF26; SF27; SF28; SF29; SF30; SF31; SF32; SF33; SF34; SF35; SF36; SF37; SF38; SF39; SF40; SF41; SF42; SF43; SF44; SF45; SF46; SF47; SF48; SF49; SF50

kfz120

<leer>; 1000 DM; 10000; 1500 DM; 2000 DM; 20000; 300 DM; 5000 DM; 50000; 650 DM; OHNE; VK NEIN

kfz123

<leer>; 100 DM; 1000 DM; 10000; 1500 DM; 2000 DM; 20000; 300 DM; 5000 DM; 50000; 650 DM; OHNE; TK NEIN

kfz147

<leer>; abschließb. Sammelg.; Carport; Carport auf eigenem Grdst.; Doppel; Einzel; Innenhof; Keine; Parkhaus; Parkplatz; Sammel; Sonstige; Strasse; umfriedetes Grdst.

kfz148

<leer>; Gewerblich; Priv/Gew.; Privat; überw.gew.; überw.priv.

kfz149

<leer>; Beliebig; Einzelf.+P.; Einzelfah.; Halter; VN; VN\; VN+Ehefrau; VN+Ehemann; VN+Ehep.; VN+Eltern; VN+festg.F.; VN+Partner; zwei festg.F.

kfz155

<leer>; Schutzbrief Ausland; Schutzbrief Inland

kfz158

<leer>; A; B; F; N; R

kfz175

<leer>; EFH; ETW; MFH; Nein; Sonst.; Fremdgenutztes EFH; RH/DHH

kfz177

<leer>; Ausfuhrkennz.; Behörden; E-Kennzeichen; Grün; histor. Fahrz.; Kurzzeit; Normal; ohne amtl. Kz.; Saison; Sonstige

kfz186

<leer>; keine; nachgerüstet; serienmäßig; vorhanden

kfz213

<leer>; Eigen; Kredit; Leasing; Sonstige

kfz214

<leer>; Benzin; Diesel; Erdgas; LPG; Hybrid-B/E(Benzin); Hybrid-D/E(Diesel); Elektro

kfz221

<leer>; offener Kasten; geschlossener Kasten; Plane/Spriegel; Kipper; Tank/Silo; Festinstalliertes Ladegerät; sonst. Aufbauarten

kfz222

<leer>; Priv.Nutzung - Ausschließlich privat; Priv.Nutzung - Weg zur Arbeit; Priv.Nutzung - Freiberufler; Priv.Nutzung - nur Freizeit; Fahrzeug der Geschäftsleitung; Sonstige gewerbliche Nutzung

kfz223

<leer>; Ehepartner VN; Lebenpartner in häusl.Gem.; Kind des VN; Elternteil des VN; festgel.Fahrer

kfz-vsv102

002 Leichtkrafträder; 003 Krafträder; 112 PKW-Eigenverwendung; 113 Flottengeschäft; 114 Familienversicherung; 127 sonstige Kraftfahrzeuge/Wohnmobile

krv101

BEIHILFE; ERGÄNZNG; PFLEGE; REISE; VOLL; ZUSATZ

kunde.besitz

<leer>; Eigentümer; Leasingnehmer; Mieter/Pächter

kunde.betrieb.lage

<leer>; Industriegebiet; Mischgebiet; Wohngebiet

kunde.zuordnung

FIRMA; PRIVAT

kunde.status

KUNDE; INTERESSENT; MITARBEITER; EX-KUNDE; EX-INTERESSENT; EX-MITARBEITER

kunde.status.selektion

<leer>; KUNDE; INTERESSENT; MITARBEITER; EX-KUNDE; EX-INTERESSENT; EX-MITARBEITER; KUNDE\

kunde.status.selektion.disp

<leer>; Kunde=KUNDE; Interessent=INTERESSENT; Mitarbeiter=MITARBEITER; Ex-Kunde=EX-KUNDE; Ex-Interessent=EX-INTERESSENT; Ex-Mitarbeiter=EX-MITARBEITER; Kunde oder Interessent=KUNDE\

kunde.sel.default

edname; edplz; edTelefon; edmatchcode; chkcbostatus; edVermittler

kunde.sel.viewdef

KUNDE;edname;VNAME;Name;160;get;;;;phonet;kunde.sel.phonet.name;;0;0; KUNDE;edplz;VN_PLZ;PLZ;50;get;;;;;;;0;0; KUNDE;edmatchcode;MATCHCODE;Verbindung;110;combo2;;;;;;;0;0; KUNDE;edTelefon;;Telefon;90;get;kunde.sel.range.telefon;;;;;telNr;0;0; KUNDE;chkcbostatus;STATUS;Status;160;combo1;kunde.status;;;;;;0;0; KUNDE;edVermittler;;Vermittler;110;wahlget;kunde.sel.range.vermittler;VERMITTLER;V_CODE;;;;0;0; KUNDE;edOrt;VN_Ort;Ort;160;get;;;;;;;0;0; KUNDE;chkZuord;ZUORDNUNG;Zuordnung;110;combo1;kunde.zuordnung;;;;;;0;0; KUNDE;ednameVon;VNAME;Name(von-bis);160;get;;;;VonBis;;;0;0; KUNDE;edplzVon;VN_PLZ;PLZ(von-bis);50;get;;;;VonBis;;;0;0; KUNDE;edEinkommenVon;EINKOMMEN;Einkommen(von-bis);80;numeric;;;;VonBis;;rvInteger;0;0; KUNDE;edTelefonVon;;Telefon(von-bis);90;get;kunde.sel.range.telefon;;;VonBis;;telNr;0;0; KUNDE;cboK;KLASSE;Kundenklasse;80;combo1;kunde.klasse;;;;;userDomain;0;0; KUNDE;edBesuchVon;VN_BESUCH;letzter_Besuch(von-bis);100;date;;;;VonBis;;;0;0; KUNDE;edGeburt;VN_GEBURT;Geburtstag(von-bis);42;spin;;;;VonBis;;tagMon;0;0; KUNDE;chkKrit;;Schlagworte;160;combo1;TagsSelektion;;;selTag;;selTags;0;0; KUNDE;edDebitor;DEBITOR;Debitor;90;get;;;;;;;0;0; KUNDE;edcxMandant;;Mandant;160;cxLookup;kunde.sel.mandant;MANDANT;MATCHCODE;;;;0;0; KUNDE;edIntNr;INTERNENR;Interne_Nr;90;get;;;;;;;0;0; KUNDE;edEMAIL;;Email;160;get;kunde.sel.range.email;;;;;selPart;0;0; KUNDE;edTelefax;VN_FAX;Telefax;90;get;;;;;;;0;0

kunde.sel.phonet.name

VNAME_P

kunde.sel.range.telefon

VN_TEL_NORM; VN_TEL2_NORM; VN_AUTO_NORM

kunde.sel.range.email

VN_EMAIL; VN_EMAIL2

kunde.sel.range.vermittler

VM1; VM2; VM3; VM4; VM5; VM6; VM7; VM8; VM9; VM10

kunde.sel.mandant

MANDANT

kunde.vst

Ja; Nein; Anteilig

kvleistart

Ambulant; Beihilfe; Ges. Pflege; Ges. Zuschlag; Pflegezusatz; Sonstiges; Stationär; Tagegeld; Zahnersatz

kvpraemieart

HV; ZV

kwPS

PS; kW

land

<leer>; A; ADN; AFG; AL; AN; AND; AUS; B; BD; BDS; BG; BH; BIS; BM; BOL; BR; BRN; BRU; BS; BUR; C; CAM; CDN; CH; CI; CL; CN; CNB; CO; CR; CU; CY; CZ; D; DK; DOM; DZ; E; EAK; EAT; EAU; EAZ; EC; ES; EST; ET; ETH; F; FIN; FJI; FL; FR; GB; GBA; GBG; GBJ; GBM; GBZ; GCA; GH; GNB; GR; GUS; GUY; H; HK; HKJ; HO; HR; I; IL; IND; IR; IRL; IRQ; IS; J; JA; K; KO; KWT; L; LAO; LAR; LB; LS; LT; LV; M; MA; MAL; MC; MEX; MOC; MOL; MS; MW; MYA; N; NA; NIC; NL; NZ; P; PA; PE; PK; PL; PNG; PR; PY; RA; RB; RC; RCA; RCB; RCH; RDU; RH; RI; RIM; RL; RM; RMM; RN; RO; ROK; RP; RPB; RSM; RU; RWA; S; SA; SD; SF; SGP; SK; SLO; SME; SN; SP; SUD; SWA; SY; SYR; T; TG; TJ; TN; TR; TT; UAE; USA; V; VN; WAG; WAL; WAN; WD; WG; WL; WS; WV; YMN; YU; YV; Z; ZA; ZRE; ZW

landw-iiv121

<leer>; BAK I; BAK II; BAK III; BAK IV; BAK V; FHG 1; FHG 2; FHG 3

lvr113

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

lvr114

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

leben_vz

<leer>; Altersversorgung; AVmG; Basisrente; Direktvers.-Barl; Direktversicherung; Finanzierungstilgung; GRV-Befreiung; GRV-freiwillig; GRV-Mindesb.; GRV-Pflicht; Heirat/Ausbildung; Hinterbliebenen; Key-Man-Police; Pensionsfonds; Pensionskasse; Risikoversicherung; Rückdeckung; Sonstiges; Sterbegeld; Teilauszahler; Unterstützungskasse; VWL-Lebensversich.

lvr120

<leer>; Absolut; Gehaltsanpass.; Keine; Linear; Progressiv; Sonstige; Sozialversich.

lvr129

EINZEL; GRUPPE

lvr132

<leer>; Apotheker; Architekten; Ärzte; Beamte; Flugpersonal; Ingenieure; Juweliere; Kaufmännische Angestellte; Nicht überw. körperl. Tätige; Optiker; Polizisten; Richter; Selbständige Handwerksmeister; Sonstige; Sonstige Akademiker; Steuerberater; Unternehmensberater; Versicherungsvermittler; Wirtschaftsprüfer

lvr133

<leer>; absolut; annuitätisch; degressiv; konstant; linear fallend; linear steigend

lvr139

<leer>; BU; EU

lvr140

<leer>; 25%/75%; 33%/66%; 50%

kontaktstatus

<leer>; KONTAKT; EX-KONTAKT

mas999

<leer>; JA; NEIN

monate

<leer>; 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12

mun110

<leer>; IBERIA; IBERIA H&K; MUNDIAL

neinja

Ja; Nein

plz

<leer>

policeart

Industriepolice; Baupolice

provart

<leer>; AP; APZV; FP; FPZV; DY; VR

prv113

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

prv114

<leer>; Ansammlung; Barauszahlung; Beitragsverrechnung; Bonus Erleben; Bonus Tod; Bonus Tod + Erleben; Fondsansammlung; Laufzeitverkürzung; Lt. Vermög.-Gesetz; Sonstige; Summenerhöhung

prv120

<leer>; Absolut; Gehaltsanpassung; Keine; Linear; Progressiv; Sonstiges; Sozialversich.

prv132

<leer>; Einmalig; Halbj.; Jährlich; Monatl.; Viertlj.

produkttyp

Produkt; Abrechnungsmodell

rechnungsstatus

<leer>; Rechnung; 1. Mahnung; 2. Mahnung; 3. Mahnung; Storno; Rückgabe

rechnungsstatusclassic

RECHNUNG; RÜCKGABE

rechtsform

<leer>; Anstalt döR; AG; AG & Co. KG; AG & Co. KGaA; Behörde; e.G.; e.K.; e.V.; Eingetragener Kaufm/Kauffr; Einzelfirma; GbR; Gemeinnützige AG (gAG); Gemeinnützige Stiftung; Gemeinschaftspraxis; gGmbH; GmbH; GmbH & Co. KG; GmbH & Co. KGaA; Inc.; InvAG; Kammer; KG; KGaA; Körpersch döR; Ltd.; OHG; Öffentl. Recht; Partnerreederei; Partnerschaftsgesellschaft; Praxisgemeinschaft; Stiftung döR; Stiftung dpR; Stiftung & Co. KGaA; UG; Verband; VVaG; WEG

rentebezugsberechtigt

<leer>; Ehepartner; Lebensgefährte/in; Kinder; Sonstige

rentefoerderweg

<leer>; §10a EStG; §10 EStG; §3.63 EStG; §3.66 EStG; §40b EStG

rundenAuf

<leer>; 50; 100; 500; 1000

rsv110

<leer>; Beamte/Öffentlicher Dienst; Familie (Ehe- u Lebenspartner\; mit erweitertem Personenkreis; Normal; Senioren; Single

rsv114

<leer>; Fahrer-RS; Fahrzeug-RS; Fam./Verkehrs-RS; Priv./Berufs/Verk.-RS; Privat/Berufs-RS; Privat-RS; Verkehrs-RS; Mieter-RS; Vermieter-RS

rsv124

<leer>; 2 oder mehr Risiken; Büro; Garage/n; Grundstücke/n; Laden; Praxis; Sonstiges Gew.; Whg./EFH; Wohn/Gew.

rsv125

<leer>; Eigentümer; Mieter/Pächter; Vermieter/Verpächter

rsv149

<leer>; 2 oder mehr Risiken; Ausland; In-/Ausland; Inland

rsv151

<leer>; Ärzte/Heilberufe; Firmen; Freiberufler; Landwirte; Selbständige

selektion.Datumsbereich.Letzer

<leer>; letzter Monat; letzte  2 Monate; letztes Quartal; letztes halbes Jahr; letztes Jahr

sepa

Immer die neueste Version verwenden\; Version 2.5 (pain.001.002.03 bzw. pain.008.002.02) verwenden (gültig seit 01.11.2010); Version 2.7 (pain.001.003.03 bzw. pian.008.003.02) verwenden (gültig ab 04.11.2013); Version 3.0 (pain.001.001.03 bzw. pian.008.001.02) verwenden (gültig ab 20.11.2016); Rulebook 6.0\

schedulerstatus

<leer>; Ausgeführt; Nichts zu tun; Fehler; Läuft; Warten

schedulertype

Nie; Einmalig; Minutenintervall; Täglich; Wöchentlich; Monatlich

schedulertaskinitiation

Immer; AMS-Dienst; Bei Programmstart

sregul_art

Eigenregulierung; Fremdregulierung; VM-Regulierung

sregul_zahlvariante

<leer>; Kasse/Bar; Scheck; Sonstiges

steuerklasse

I; II; III; IV; V; VI; IV/IV; III/V

termin.StandardKategorie

Aufgabe; Kontaktnotiz; Termin; Wiedervorlage; Vorgang

termin.StandardVorgangTyp

Vertrieb; Verwaltung

termin.StandardFortschritt

Terminiert; Planung

termin.StandardStatus

Nicht begonnen; In Bearbeitung; Erledigt; Wartet auf jmd. anderen; Zurückgestellt

termin.StandardPrioritaet

1.Kritisch; 2.Hoch; 3.Normal; 4.Gering; 5.Unbewertet

termin.ZuordArt

keine; Kunde; Vertrag; Gesellschaft; Schaden; Vermittler; Kontakte; Vorgang

szahl_art

EZV; KASSE/BAR; REGRESS; RESERVE; SCHECK; SONSTIGES; ÜBERWEISUNG; VERSICHERER

tage

<leer>; 01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31

trp307

<leer>; Bezüge; Versendungen

trp308

<leer>; Ja; Nein

trp309

<leer>; Ja; Nein

uebereinstimmung

<Alle>; größer als; kleiner als

unf101

EINZEL; GRUPPE

unf120

<leer>; A; B; F; G; H; K; N; S; E

unf159

<leer>; Absolut; Gehaltsanpass.; Keine; Linear; Progressiv; Sonstige; Sozialversich.

user.notifytype

per DMS; per Email; per DMS und Email; keine Benachrichtigung

regeltyp

assfinet Data; Lokale Verarbeitung

vermit.status

VERMITTLER; INTERESSENT; GRUPPE; EX-VERMITTLER

vermit.status.selektion.disp

<leer>; Vermittler=VERMITTLER; Interessent=INTERESSENT; Gruppe=GRUPPE; Ex-Vermittler=EX_VERMITTLER

vertrag.status

ANFRAGE; ANGEBOT; EIGEN; FREMD; FREMDTEIL; GESPERRT; RUHEND; STORNO; INFO

vertrag.filter.selektion

Nur Kunde; Kundenverbindung; Beziehungen; Versicherte Person/mitversichertes Unternehmen; Prämienzahler

vgv-gew102

<leer>; AFB; AFB 94; AFB 99; AGGF; AGGF97; AGGF98; AStB 87; Eigene; FEVB; FEVB 2001; FIMO 2000; GVB 2001; GVB 94; GVB 98; SGlN 79A; SGlN 88; SV-WG97; VGB 2000; VGB 2001; VGB 2002; VGB 2003; VFS 2004; VGB 2005; VGB 2007; VGB 2008; VGB 62; VGB 88; VGB 94; VGB 95; VGB 96; VGB 97; VGB 98; VGB 99; WSGB 98

vgv-gew121

<leer>; BAK I; BAK II; BAK III; BAK IV; BAK V; FHG 1; FHG 2; FHG 3

vzweckart

Kundenrechnung; Kundenprämienrechnung; Kundesammelrechnung; Vermittlerabrechnung; Gesellschaftsabrechnung; Schadensabrechnung

vorvertrag.gekuend

<leer>; VN; VU

vnbeteilart

Kunde; Referenz

waehrung

EUR; SFR; USD; GBP

wgv121

<leer>; BAK I; BAK II; BAK III; BAK IV; BAK V; FHG 1; FHG 2; FHG 3

zahl_art

EZV; manuell; Verrechnung; Saldenübertrag; VM-Inkasso

zahlweise

<leer>; Einmalig; Halbjährlich; Jährlich; Monatlich; Vierteljährlich

zeitraum

heute; bis heute; morgen; gestern; diese Woche; nächste Woche; letzte Woche; heute -30 Tage; heute + 30 Tage; heute +/- 30 Tage; diesen Monat; nächsten Monat; letzten Monat; dieses Jahr; nächstes Jahr; letztes Jahr

seite2feldtyp

get; combo1

seite2feldtyp.disp

Eingabefeld=get; Auswahlbox=combo1

ezv_art

<leer>; DTAUS; SEPA

agentur.inkassoart

<leer>; Maklerinkasso; Zentralinkasso

vermittlerprovisionsmodell.vertrag

Klassisches Modell

provisionteiler

%; ‰

vermittlerprovisionsmodell.vertrag

Erweiterte Berechnung

lookupdefault.direktnein

DEFAULTTABLE/VertragInfoVerschiebenView

smtp_encryption

Nein; SSL; TLS

vermittler.zuordnung

FIRMA; PRIVAT

iodef_typ

Vorbelegung; Importdefinition; Exportdefinition; Importdefinition für geplante Aufgaben; Exportdefinition für geplante Aufgaben

iodef_dateityp

Fixe Länge; Variable Länge

iodef_pos_aktion

Wert übernehmen; SQL ausführen; Script ausführen

iodef_pos_funktion

Datum mit Punkten; Datum ohne Punkte; Invertiertes Datum; Führende Nullen; Führende Leerzeichen

kunde.beschverhael

<leer>; Vollzeit; Teilzeit; Ausbildung; Minijob; Selbstständig; Leiharbeit

 

 

Eigene Domänen erstellen

Um eigene Domänen zu erstellen, muss zunächst eine CSV-Datei in Ihrem ams-Verzeichnis angelegt werden. Der Name der CSV-Datei muss wie folgt sein: <Datenbankmandantenname>_CustomDomain.csv

Den Datenbankmandantennamen finden Sie in der ASSFINETWIN.ini, welche sich ebenfalls im BIN-Ordner befindet. Nach erstellen dieser Csv-Datei muss eine Strukturprüfung durchgeführt werden.

Wenn man alles richtig gemacht hat, wird automatisch eine CDD-Datei im gleichen Verzeichnis erstellt, welche den Namen:<Datenbankmandantenname>_CustomDD.cdd trägt. Hier einmal das Ams neustarten.

In diese Csv-Datei werden nun die einzelnen Domänen eingetragen.

Die erste Zeile der Csv-Datei wird nicht interpretiert, wir schreiben deswegen ein „#“ als Platzhalter. Zum Vordefinieren schreibt man nun lediglich <Domänenname>, <Wert>. Domänenname und Wert müssen durch ein Komma getrennt werden, auch wenn man eine leere Auswahl haben möchte (Zeile 2).

Eine Domäne setzt sich dabei immer aus allen Werten, die zu einer Domäne gehören, zusammen.

Beispiel:

#
Domain1,
Domain1,Wert1
Domain1,Wert2
Domain1,Wert3
Domain2,
Domain2,A
Domain2,B
Domain2,C
Domain3,1
Domain3,2
Domain3,3
Domain3,4

In diesem Beispiel hätten wir nun drei unterschiedliche Domänen angelegt.

Erweitert

Debugger

Skripte, die innerhalb des Spartenmaskendesigners entwickelt wurden, können mithilfe eines Just-In-Time-Debuggers (JIT) debugged werden. Nachfolgend eine beispielhafte Anleitung anhand von Microsoft Visual Studio:

Eine ausführliche Anleitung finden Sie hier.

  1. Visual Studio installieren (Inkl. .NET-Framework & JIT-Debugger)

  2. In der Windows-Registry unter HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows Script\Settings den Schlüssel JITDebug vom Typ REG_DWORD mit dem Wert 0x00000001 (1)

  3. In Visual Studio unter Optionen -> Debugging -> Just-In-Time „Nativ“, „Skript“ und „Verwaltet“ anhaken. image-20240415-105607.png

  4. Nun lässt sich mit dem Schlüsselwort debugger; in dem Skript der Debugger einschalten. Diese Zeile funktioniert dann wie ein Breakpoint.

Falls Sie in Ihrem Skript EUserExceptions werfen, werden diese nicht mehr wie beim Anwender durch eine Fehlermeldung angezeigt, sondern Ihr Just-In-Time-Debugger startet dann.

Performance

Standardmäßig werden die hinterlegten Skripte für die relevanten Ausführungen wie z.B. Vertragsberechnung aus Performancegründen im Cache von AMS vorgehalten. Somit werden Änderungen an den Skriptdateien vom System erst nach einem Neustart geladen. Hierbei sollte auch der Dienst beachtet werden. Dieser dürfte, ohne separaten Eingriff, die neuen Skripte auf Ihren Systemen erst laden, wenn ein Serverneustart oder Update ansteht.

Das Caching-Verhalten kann in den Einstellungen deaktiviert werden, wird jedoch ausschließlich für Entwicklungssysteme empfohlen. Die Einstellung wirkt sich erst nach einem AMS-Neustart aus.

Systemverwaltung → Einstellungen → Reiter “Vertrag” → Skript-Entwicklungsmodus

Anwendungsbeispiele

Events

OnValidate
var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");

var ResVal = "";
// Die Funktion "CheckValidation" soll die Logik für uns ein wenig kapseln,
// damit wir später strukturierter und übersichtlicher die Feldprüfungen
// untereinander schreiben können.
function CheckValidation(ctrl, validationResult, invalidTextMsg) {
  // Wir zeigen das Control im jeweiligen Zustand an, um dem Anwender
  // ein bißchen Hilfestellung zu leisten
  ctrl.SetDataIsValid(validationResult);
  if (!validationResult) {
    // War die Prüfung nicht erfolgreich, dann merken wir uns
    // die Validierungsmeldung und prüfen die restlichen Controls
    // falls noch weitere Werte nicht korrekt eingegeben wurden.
    ResVal += "\r\n" + invalidTextMsg;
  }
}

// Prüfung für Feld Tarif
CheckValidation(afnDataEdit7
  , Sparte.FindField(afnDataEdit7.FieldName).AsString == "Wert ist ok"
  , "- Tarif hat keinen gültigen Wert");

// Prüfung für Feld Betrag
CheckValidation(afnDataEdit43
  , Sparte.FindField(afnDataEdit43.FieldName).AsString >= 0
  , "- Betrag darf nicht negativ sein");

// Prüfung für Feld xxxxx
// Prüfung für Feld yyyyy
// Prüfung für Feld .


// Sollte es Validierungsmeldungen, dann geben wir die aus der Funktion zurück.
// AMS wird den Speicherprozess unterbrechen und dem
if (ResVal && ResVal != "") {
   ActionData.SetString("Result", "Validierungsergebnis:" + ResVal);
}
image-20240708-181111.png

SetReadOnly

Beispielimplementierung mit der namentlichen Aufführung aller relevanten Controls

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");

// Abfragen wie der Sperrzustand von AMS ist.
var AMS = EventData.GetContext("AMS");
var tmpReadOnly = AMS.IsReadOnly();

// hier werden nun alle Felder aufgelistet, die gesperrt werden müssen.
// Da die Routine sowohl die Sperrung, als auch Entsperrung vornehmen muss
// wird mit dem Wert gearbeitet, der von AMS zurückgeliefert wird.
afnMemo1.ReadOnly = tmpReadOnly;
afnDataComboBox7.Enabled = !tmpReadOnly;
afnDataEdit8.Enabled = !tmpReadOnly;

// Führt zur Entsperrung der oberen Panels, sodass die darunter
// liegenden Controls bedient werden können.
ActionData.SetString("Result", "JA");

Beispielimplementierung mit Iteration der Maskencontrols

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var AMS = EventData.GetContext("AMS");

// Abfragen wie der Sperrzustand von AMS ist.
var tmpReadOnly = AMS.IsReadOnly();

function IsLockableClass(classname) {
    // Wir sammeln hier zentral alle Klassen die wir nie sperren wollen.
    classname = classname.toLowerCase();
    return (classname != 'tlabel')
        && (classname != 'tpanel')
        // && (classname != 'xyzzzz')
        ;
}

// ControlCount wird on demand ermittelt, sodass wir etwas Laufzeit sparen, wenn wir das in eine Variable speichern.
var ctrlCount = AMS.ControlCount;
for (var i = 0; i < ctrlCount; i++) {
    // ControlsByIndex wirft Exception, wenn nach Index gefragt wird, der nicht existiert.
    var ctrl = AMS.ControlsByIndex(i);
    if (ctrl && IsLockableClass(ctrl.ClassName)) {
        try {
            // Wir versuchen ReadOnly zu setzen für Controls die das unterstützen
            ctrl.ReadOnly = tmpReadOnly;
        } catch (e) {
            // Wenn ReadOnly nicht unterstützt wird, dann setzen wir enabled/disabled.
            // Kann ebenfalls scheitern, wenn das Control .Enabled nicht unterstützt.
            ctrl.Enabled = !tmpReadOnly;
        }
    }
}

// Führt zur Entsperrung der oberen Panels, sodass die darunter
// liegenden Controls bedient werden können.
ActionData.SetString("Result", "JA");

Schaltflächen

Regeln

Vertragsberechnungen

Vertragsneuanlagen

Vertragsverlängerungen

Kombinationen

ActiveXObjects

Aufruf einer Website im Browser

var shell = new ActiveXObject("WScript.Shell");
shell.run("www.assfinet.de");

Ermittlung der Standort-Geodaten mittels Google-Maps-API

// ************************ VERWENDUNG ************************

var res = GetGoogleApiResult("Max-Planck-Straße 14, 53501 Grafschaft", "EUER_COOLER_API_KEY");
var lng = res.results[0].geometry.location.lng;
var lat = res.results[0].geometry.location.lat;


// ************************ CODE ************************

function GetGoogleApiResult(adresse, apiKey) {
    var URL = 'https://maps.googleapis.com/maps/api/geocode/json?address="$$ADRESSE$$"&key=' + apiKey;
    var url = URL.replace("$$ADRESSE$$", adresse);

    var res = undefined;

    var xmlHttpRequest = new ActiveXObject("MSXML2.ServerXMLHTTP.3.0");
    xmlHttpRequest.open("POST", url, false);

    xmlHttpRequest.onreadystatechange = function () {
        if (xmlHttpRequest.readyState == 4) {
            if (xmlHttpRequest.responseXML.parseError.errorCode != 0) {
                ScriptHost.RaiseUserException(xmlHttpRequest.responseText & " " & xmlHttpRequest.responseXML.parseError.reason);
            } else {
                res = xmlHttpRequest.responseText;
            }
        }
    };

    try {
        xmlHttpRequest.send();
    } catch (err) {
        // What to do on Exception?
    }
    
    return new JsonObject().parse(res);
}

function JsonObject() {
    this.parse = function (str) {
        return new Function("return " + str)();
    };
}

Script pro Sparte aufteilen

Es gibt die Möglichkeit, die Skripte für Vertragsneuanlage, Vertragsberechnung, … etc. auf einzelne Skriptdateien aufzuteilen. Dies kann man zum einen pro Sparte und sogar pro Produkt tun. Hierzu muss man im Ams-Ordner einen Unterordner mit dem Namen “CustomScripts” anlegen. In diesem kann man jetzt die einzelnen Skripte nachfolgendem Format hinterlegen:

Datenbankmandant_Produkt_Sparte.js

Oder, wenn man kein Produkt hat:

Datenbankmandant_Sparte.js

Den Datenbankmandanten entnimmt man hierbei der Assfinetwin.ini. Hat man für eine Produkt-Sparten-Kombination keine spezifische Skriptdatei hinterlegt, wird als Fallback die Datenbankmandant_CustomScript.js-Datei im Hauptverzeichnis genommen.

Skripte außerhalb des AMS-Verzeichnisses ablegen

Über einen Schlüssel in der ASSFINETWin.ini lässt sich ein Pfad außerhalb des Ams-Verzeichnisses für die Customscript-Dateien hinterlegen. Der Schlüssel lautet:

Datenbankmandant.CustomScriptPath=Pfad

Ein Beispiel sähe wie folgt aus:

DB4.CustomScriptPath=C:\work\temp

Der Pfad darf nicht in Anführungszeichen angegeben werden. Den Datenbankmandanten entnimmt man hierbei der Assfinetwin.ini.

Walk-Through

Allgemein

Im Walkthrough soll eine Sparte inkl. Maske gebaut werden, an der sich Neueinsteiger orientieren können. Es werden möglichst viele Features besprochen, um Einsteigern ein allgemeines Verständnis zu geben.

Vorbereitung

In unserem Beispiel haben wir eine Sparte, die aus den folgenden Feldern besteht.

Es handelt sich bei unserer Sparte um eine Gruppensparte und die Gesamtprämie berechnet sich aus der Summe aller Prämien der einzelnen Risiken geteilt durch die Anzahl der Risiken. Ob die Prämie eines Risikos mit einbezogen wird, wird über eine Checkbox angegeben. Standard sollte sein, dass die Prämie mit einbezogen wird, weshalb die Checkbox als angehakt vorbelegt werden soll.

Die Prämie eines einzelnen Risikos ergibt sich aus dem Produkt eines Faktors mit der Versicherungssumme, plus dem Produkt aus Preis pro m² und Fläche in m². Welcher der drei Faktoren mit der Versicherungssumme multipliziert wird, wird durch die Auswahl der Kategorie entschieden. Entsprechend der Auswahl hier soll das entsprechende Feld hervorgehoben werden und bei der Rechnung mit einbezogen werden. Wird Kategorie X ausgewählt, soll die Prämie sich nur aus der Fläche berechnen und die Versicherungssumme wird ignoriert.

Die Länge bei den Zahlen bedeutet die Anzahl der Ziffern vor dem Komma und die Anzahl der Ziffern nach dem Komma. Das heißt die Gesamtanzahl der Ziffern ergibt sich aus der Summe der beiden Zahlen.

Erstellung der Sparte

Zunächst wird die Sparte erstellt, hierzu navigiert man unter Organisation -> Sparten verwalten und erstellt eine neue Sparte.

Nun öffnet sich das folgende Fenster, in welchem wir ein Spartenkürzel und eine Beschreibung definieren und angeben, dass wir eine eigendefinierte Tabelle erstellen wollen.

Nun muss gespeichert werden die und die Detailansicht über die Zurück-Schaltfläche verlassen werden. Anschließend kann mit der Tabellenstruktur begonnen werden.

Nun muss die Pseudotabelle aus der Vorbereitung in die Tabellenstruktur eingefügt werden. Bei den Feldnamen entscheiden wir uns für eine inkrementelle Bezeichnung bestehend aus Spartekürzel und einem Zähler, der bei 100 beginnt.

Die Textfelder und Zahlfelder können quasi direkt übernommen werden. Bei den Zahlfeldern ist jedoch zu beachten, dass die Länge die Summe auf Vorkomma und Nachkomma ist.

Die Zwei Felder, die noch nicht erstellt sind, sind die spätere Checkbox und das Feld für die Beschreibung. Da bei der Beschreibung eine Textangabe von min. 600 Zeichen gefordert ist sollte hier als Datentyp Langtext verwendet werden, da zum einen nicht klar ist, wie viele Zeichen genau gebraucht werden und zum anderen die Länge von 250 für Text überschritten ist.

Bei dem Feld Prämie in Gesamtprämie einbeziehen könnte man jetzt Boolescher Wert nutzen, allerdings sollte anstelle davon lieber der Typ Ganzzahl genutzt werden, da dieser im ams i.d.R. für Wahrheitswerte genutzt wird (1 = true, 0 = false).

WTS105 und WTS112 sollen später DropDown-Menüs werden. Bei beiden soll der Nutzer nicht selbst in das Feld schreiben können, sondern aus einer Auswahl an Werten auswählen, deswegen wird bei beiden „Domäne erforderlich“ angehakt. Die Farbe, also WTS112, soll durch Anwender erweiterbar sein, deswegen erhält dieses Feld noch die Eigenschaft Benutzerdomäne. Die Kategorie wollen wir dem Anwender hingegen aus einer Auswahl von Werten fest vorgeben. Deswegen setzen wir hier auch eine Domäne „WTS.KATEGORIE“. Diese existiert noch nicht und muss noch angelegt werden.

Abschließend muss die Tabelle gespeichert und anschließend neu erzeugt werden, sodass diese in der Datenbank aufgenommen wird.

Erstellung der Domänen

Zunächst erstellen wir eine csv-Datei in unserem ams-Verzeichnis, die den Namen <Datenbankmandant>_CustomDomain.csv erhält. In unserem Fall db1_CustomDomain.csv.

Nun öffnen wir die Csv-Datei mit einem beliebigen Texteditor. Die erste Zeile wird nicht interpretiert in der Csv-Datei, deswegen schreiben wir als Platzhalter ein „#“.

Ein Domänenwert setzt sich nun immer aus dem Domänennamen und dem tatsächlichen Wert zusammen. Für unsere WTS.KATEGORIE sieht die Csv-Datei nun wie folgt aus:

#
WTS.KATEGORIE,
WTS.KATEGORIE,A
WTS.KATEGORIE,B
WTS.KATEGORIE,C
WTS.KATEGORIE,X

Nach einer Strukturprüfung und Neustart des ams ist die Domäne nun im ams verfügbar.

Erstellung der Maske

Nun kann mit dem Bau der Sparte begonnen werden.

Zum Bau der Maske navigieren wir zu Organisation -> Eigene Spartemasken verwalten und führen eine Neuanlage aus.

Folgendes Fenster öffnet sich nun:

Es wird die Sparte, die zuvor erstellt wurde, ausgewählt und es kann optional noch eine Beschreibung hinterlegt werden.

Anschließend öffnet sich der Designer durch Klicken der Schaltfläche „Maskendefinition bearbeiten… (neu).

Die Informationen, die dargestellt werden, sollen in Allgemeine Informationen und Informationen zur Prämienberechnung unterteilt werden. Dafür wird ein PageControl genutzt, welches die beiden Reiter „Allgemein“ und „Detail“ bekommt.

Über die Eigenschaft Align mit dem Wert alClient, wird dafür gesorgt, dass sich das PageControl über den ganzen Reiter zieht.

Nun fügen wir dem PageControl die beiden Pages über einen Rechtsklick hinzu.

Nun sollen den beiden Seiten jeweils eine Überschrift gegeben werden.

Dies lässt sich über die Caption Eigenschaft des einzelnen TabSheets tun.

Nachdem beide Reiter nun eine Überschrift erhalten haben, beginnen wir mit dem Allgemein-Reiter und platzieren ein Panel, auf welchem später die einzelnen Komponenten abgelegt werden können. Dieses wird ebenfalls auf alClient gesetzt.

Die Felder, die auf dem Allgemeinreiter angezeigt werden sollen, sind: Mitversicherte Person, PLZ, Ort, Straße, Beschreibung und Farbe. Da die Felder auch beschriftet werden sollen benötigen wir zu jedem Feld auch ein Label. Wir beginnen mit den Labels und platzieren 6 Stück auf der Maske, mit den Eigenschaften Left und Top können diese adjustiert werden.

Nun sollen die Labels auch einen für sich sprechenden Schriftzug erhalten, das geht über die Eigenschaft Caption.

Nun werden die entsprechenden Beschriftungen eingetragen.

Nun kommen die Eingabekomponenten. Bei der mitversicherten Person handelt es sich um eine Verknüpfung zu einem Kontakt, weswegen wir hier ein LinkButtonEdit nutzen. Für Postleitzahl und Ort benutzen wir ein LookupButtonEdit, damit wir diese aus einer Vorschlagsliste auswählen können. Bei der Farbe nutzen wir ein eine DataComboBox, da hier ein Wert ausgewählt werden soll und die Liste an möglichen Werten durch den Anwender erweiterbar sein soll. Für die Beschreibung wird ein DataMemo genutzt.

Auf die zweite Seite des PageControls kommen nun die übrigen Felder:

Verknüpfung der Komponenten mit der Tabelle

Als nächstes müssen die ganzen Komponenten, abgesehen von den Labels, mit den entsprechenden Feldern in der Datenbank verknüpft werden. Dafür hat jede Komponente zwei Eigenschaften, nämlich die Datenmenge und das Datenfeld. Die Datenmenge definiert die Herkunft der Daten, in unserem Fall Spartendaten. Das Datenfeld bezieht sich auf das Datenbankfeld.

Events

Eine der Anforderungen war es, dass abhängig von der ausgewählten Kategorie der entsprechende Faktor mit einberechnet wird. Diese Anforderung soll auch visuell gelöst werden.

Wir schreiben das OnChange-Event der DropDownBox der Kategorie. Dazu wählen wir die Komponente aus, gehen im Objektinspektor auf Ereignisse und klicken auf das entsprechende Event.

Folgender Code muss nun in das Event eingefügt werden.

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var Ams = EventData.GetContext("AMS");

if (Sparte.InEditMode) {
   switch(Sparte.FindField("WTS105").AsString){
     case "A":
     Ams.Controls("afnDataEdit4").Visible = true;
     Ams.Controls("Label9").Visible = true;
     Ams.Controls("afnDataEdit5").Visible = false;
     Ams.Controls("Label10").Visible = false;
     Ams.Controls("afnDataEdit6").Visible = false;
     Ams.Controls("Label11").Visible = false;
     break;
     case "B":
     Ams.Controls("afnDataEdit5").Visible = true;
     Ams.Controls("Label10").Visible = true;
     Ams.Controls("afnDataEdit6").Visible = false;
     Ams.Controls("Label11").Visible = false;
     Ams.Controls("afnDataEdit4").Visible = false;
     Ams.Controls("Label9").Visible = false;
     break;
     case "C":
     Ams.Controls("afnDataEdit4").Visible = false;
     Ams.Controls("Label9").Visible = false;
     Ams.Controls("afnDataEdit5").Visible = false;
     Ams.Controls("Label10").Visible = false;
     Ams.Controls("afnDataEdit6").Visible = true;
     Ams.Controls("Label11").Visible = true;
     break;
     case "X":
     Ams.Controls("afnDataEdit4").Visible = false;
     Ams.Controls("Label9").Visible = false;
     Ams.Controls("afnDataEdit5").Visible = false;
     Ams.Controls("Label10").Visible = false;
     Ams.Controls("afnDataEdit6").Visible = false;
     Ams.Controls("Label11").Visible = false;
     break;
   }
}

Gruppensparte

Da es sich bei unserer Beispielsparte um eine Gruppensparte handeln soll muss diese als solche deklariert werden. Dafür werden folgende Zeilen in der Spartenbeschreibung benötigt:

var Descriptor = EventData.GetContext("Descriptor");
Descriptor.IsGruppenSparte = true;

Vertragsberechnung

„Die Prämie eines einzelnen Risikos ergibt sich aus dem Produkt eines Faktors mit der Versicherungssumme, plus dem Produkt aus Preis pro m² und Fläche in m².“ – war die Anforderung für die Vertragsberechnung. Diese setzen wir wie folgt um:

var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");

//Variable zum Aufsummieren einer Gesamtprämie
var gesamtPraemie = 0;

//Variablen zum Ziehen einzelner Werte
var aktuellerFaktor = 0;
var Versicherungssumme = 0;
var Flaeche = 0;
var preisFlaeche = 0;
 

//Schleife zum Durchiterieren
Sparte.First;
while(!Sparte.Eof){
   //Auswahl richtiger Faktor
   switch(Sparte.FindField("WTS105").AsString){
     case "A":
     aktuellerFaktor =  Sparte.FindField("WTS100").AsCurrency / 100;
     break;
     case "B":
     aktuellerFaktor =  Sparte.FindField("WTS101").AsCurrency / 100;
     break;
     case "C":
     aktuellerFaktor =  Sparte.FindField("WTS102").AsCurrency / 100;
     break;
     case "X":
     aktuellerFaktor = 1;
     break;
   }
   Versicherungssumme = Sparte.FindField("WTS103").AsCurrency;
   Flaeche = Sparte.FindField("WTS110").AsCurrency;
   preisFlaeche = Sparte.FindField("WTS111").AsCurrency;
 
   //Berechnung der Teilprämie
   Sparte.Edit;
   Sparte.FindField("WTS104").AsCurrency = Versicherungssumme * aktuellerFaktor + Flaeche * preisFlaeche;
   Sparte.Post;
   Sparte.ApplyUpdates(0);

   //Nur wenn Checkbox angehakt ist soll Prämie des Risikos mit einberechnet werden.
   if(Sparte.FindField("WTS113").AsString == "Ja"){
     gesamtPraemie += Sparte.FindField("WTS104").AsCurrency;
   }

   Sparte.Next;
}

ActionData.SetString("Berechnet", "JA");
ActionData.SetString("GesamtPraemie", gesamtPraemie);

 

FAQ

F:  Ist es möglich die im Standard verfügbaren Spartenmasken zu kopieren?
A: Nein, dies ist nicht möglich. Die Designer-Masken unterscheiden sich von der Struktur von den Standardmasken, wodurch ein Kopieren/Erweitern nicht möglich ist.

F: Ich bekomme eine Fehlermeldung wegen meinem Skript, wenn ich entweder einen neuen Vertrag erstelle oder ein Risiko hinzufüge. Woran kann das liegen?
A: Kapitel NeuanlageVorbelegung anschauen und überprüfen, ob man die Datenmenge in den Editiermodus setzt oder versucht den Inhalt selbst in die Datenbank zurückzuschreiben.

F: Ich habe bereits Spartenmasken mit dem alten Spartenmaskendesigner erstellt, was ist zu beachten, wenn ich den neuen Designer nutzen möchte?
A: Zunächst sollte dem Programmierer bewusst sein, dass wenn er einmal die Maske mit dem neuen Designer öffnet, diese nicht mehr mit dem alten Designer bearbeitbar ist. Darüber hinaus müssen keine Voreinstellungen für den Wechsel auf den neuen Designer getroffen werden. ams nimmt diese Anpassungen beim Öffnen des neuen Designers automatisch vor.

F: Ich habe ein LinkDataEdit mit einem OnChange-Event in dem IsLinked bzw. HasValue aufgerufen werden, aber ich bekomme eine Exception, dass das Objekt diese Methode oder Eigenschaft nicht unterstützt.
A: Vermutlich wurde das OnChange-Event, dass Sie für die LinkDataEdit-Komponente geschrieben haben auch bei einer anderen Komponente verwendet. Die IsLinked und HasValue Funktionen sind allerdings auf das LinkDataEdit limitiert, das heißt wenn Sender nicht vom Typ LinkDataEdit ist erhalten Sie die entsprechende Fehlermeldung.

F:  Ich habe auf dem Allgemein Reiter zwischen den einzelnen Panels sehr große Abstände, was kann ich tun?
A: Auf dem Panel können sich “unsichtbare Komponenten” befinden, die also eine width/height = 0 besitzen. Diese können mithilfe der Tab-Taste ausfindig gemacht werden und per Rechtsklick > Löschen entfernt werden.

F:  Beim Versuch eine Spartenmaske zu öffnen erhalte ich die Fehlermeldung “Duplikate nicht zulässig”.
A1: Diese Meldung erscheint, sobald es zwei Mal die gleiche Sparte in der Tabelle SPARTE gibt. Dies kann über Bestand -> Freie Selektion -> Experten Modus mit dem Statement SELECT SPARTE, COUNT(SPARTE) FROM SPARTE GROUP BY SPARTE HAVING COUNT(SPARTE) > 1 verifiziert werden. Dies kann dadurch kommen, wenn beispielsweise in einem Testsystem die Sparte ABC erzeugt wird, in einem anderen Testsystem oder Produktivsystem eine Sparte mit demselben Kürzel erzeugt wird und anschließend von einem System in das andere Importiert wird. In diesem Fall muss sich entschieden werden, welche die richtige Sparte ist und die andere muss entsprechend aus dem System entfernt werden.

A2: Diese Meldung kann ebenfalls erscheinen, wenn zunächst eine Sparte mit dem Namen ABC-DEF erzeugt wurde und anschließend, da Sonderzeichen mit Ausnahme von _ nicht erwünscht sind, dieselbe Sparte mit dem Namen ABC_DEF erzeugt wird. In der Tabelle Sparte ist die Spalte Sparte zwar eindeutig, aber das ams versucht beim Öffnen den Bindestrich durch einen Unterstrich zu ersetzen, wodurch die Sparte vermeintlich doppelt ist. Hier muss die Sparte mit dem Bindestrich entfernt werden.

A3: Ebenfalls kann diese Meldung entstehen, wenn das CustomDD beim Import nicht erneuert werden kann. Dies kann aufgrund von Schreibrechten bspw. Passieren. Hier muss dann die Custom cdd-Datei gelöscht werden und anschließend eine Spartenstrukturprüfung durchgeführt werden.

  • Keine Stichwörter