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:
Ein eindeutiges Kürzel, über welches die Maske identifiziert werden kann
Kurze Beschreibung der Sparte
Steuert die Möglichkeit zu dieser Sparte neue Verträge anzulegen
Entscheidet, ob diese Sparte für Sammelverträge genutzt werden kann.
Wurde Punkt 4 ausgewählt kann hier entschieden werden, ob die Sparte abgerechnet werden kann.
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.
In der Tabellenansicht lassen sich die einzelnen Metainformationen von Feldern über eine grafische Benutzeroberfläche hinzufügen.
In der Textansicht wird die Tabelle als Csv-Datei dargestellt, mit einem Komma als Separator
Eine Auflistung der einzelnen Felder, die Sie Ihrer Tabelle hinzufügen
Über diese Schaltfläche lassen sich neue Felder zu der Tabelle hinzufügen
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.
Anpassungen an der Tabellenstruktur müssen gespeichert und mittels Strukturprüfung angewendet werden, damit diese sich auswirken.
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:
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.
Hier können Sie noch ein Produkt angeben, wenn Ihre Maske nur für eine spezielle Sparten/Produkt-Kombination gebaut werden soll.
Hier können Sie eine Beschreibung für Ihre Maske erfassen.
Hier findet sich der alte Designer, auf den in diesem Handbuch nicht näher eingegangen wird.
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.
Das Datenfeld ist im Namen des Labels enthalten:
Das Datenfeld ist im Namen des Labels nicht enthalten:
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.
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:
CheckboxChecked
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
Die Maske wird geleert und alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden entfernt. Die Skripte zur Sparte und selbstdefinierte Funktionen bleiben erhalten.
Die Maske inkl. Aller zugehörigen Daten wird in der Datenbank gespeichert. Selbstdefinierte Funktionen werden in die jeweiligen, externen Skriptdateien geschrieben.
Die Maske, alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden in eine Datei auf dem Dateisystem gespeichert.
Eine Maske mit allen Regeln, Datenmengen, Schaltflächen und Maskenskripten wird aus einer Datei auf dem Dateisystem eingelesen.
Hat man eine Komponente in der Zwischenablage kann sie über Einfügen eingefügt werden.
Legt eine Komponente in die Zwischenablage und entfernt diese von der Maske.
Legt eine Komponente in die Zwischenlage.
Markiert alle Steuerelemente
Entfernt alle ausgewählten Steuerelemente von der Maske.
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
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.
Das Neuste, also das zuletzt angelegte, Lesezeichen wird angesprungen. Dabei wird das Lesezeichen entfernt.
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.
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.
Hier kann, neben der Bildlaufleiste, eine Miniatur Darstellung des gewählten Skripts, ein- und ausgeblendet werden.
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.
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 |
|
DataMemo | Ein großes Textfeld, zum Anzeigen oder Einsetzen eines Textes. |
DataComboBox |
|
Label |
|
DataCheckBox |
|
Panel |
|
PageControl |
|
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 |
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. |
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(FieldName: String) | Ermittelt anhand des Feldnamens 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. |
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. |
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.
Visual Studio installieren (Inkl. .NET-Framework & JIT-Debugger)
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)
In Visual Studio unter Optionen -> Debugging -> Just-In-Time „Nativ“, „Skript“ und „Verwaltet“ anhaken.
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); }
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)(); }; }
Eigene Tabellen erzeugen
Wie mehrfach erwähnt stellt eine Sparte eine Datenbanktabelle dar. Wenn Sie nun eigene Daten haben, die Sie zum einen Speichern wollen und zum anderen aus Ihren Spartenmasken heraus aufrufen/abfragen wollen, können Sie für diese Daten ebenfalls eine eigene Tabelle erstellen.
Es wird empfohlen die Sparten zu deaktivieren, sodass diese nicht mehr in der Spartenauswahl angezeigt wird.
Hierbei handelt es sich um einen Workaround. Bitte überlegen Sie, ob diese Art der Umsetzung Sinn in Ihrer Situation ergibt oder ob Ihre Anforderung auch mit Standardverfahren im ams umsetzbar ist.
Nützliche Links
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.