Einfügen neuer Felder in eine bestehende Maske

Feld ohne Datenbankbezug

Beispiel 7: ein berechnetes Feld soll in der Maske ARTIKEL hinzugefügt werden. Das Feld hat für die Maske keine datenbanktechnischen Auswirkungen und beinhaltet den doppelten Einzelpreis. Der berechnete Wert wird nur in der Maske angezeigt und in keine Tabelle gespeichert.

Zuerst kann, wie in dem Kapitel „4.2.5 Feldhilfe ändern“ beschrieben, der Hilfetext zum neuen Feld definiert werden. Das Feld soll DEZPR_ARTI genannt werden, und in der Datei 'mod_beispiel' im Verzeichnis help muss der folgende Eintrag gemacht werden:

 /* Code-Ausschnitt: mod_beispiel */
 @@D@DEZPR_ARTI
 berechneter doppelter Einzelpreis
 @
 /* Ausschnitt-ENDE */

Danach muss eine Nummer mit einer Zeichenkette definiert werden, die als Beschriftung für das neue Feld dienen soll. String-Definitionen erfolgen immer im Verzeichnis maskedef in der Datei mxlang.mod_beispiel:

 /* Code-Ausschnitt: mxlang.mod_beispiel */
 100002@D@2xEZ-Preis@doppelter Einzel-Preis@
 /* Ausschnitt-ENDE */
  • EZ-Preis = Feldtitel
  • doppelter Einzel-Preis = Tooltip-Text

Die Definition des Feldes findet in der Datei 'mod_beispiel.def' statt und muss von einem Update des zugehörigen Frames, in dem die Position des Feldes festgelegt wird, gefolgt sein:

 /* Code-Ausschnitt: mod_beispiel.def */
 OS_CURRENCY DEZPR_ARTI [10 * FONTWIDTH, 10 ] OS_READ {
    OS_TITLE 100002 OS_TITLEPOS OS_PLEFT;
    OS_TITLELEN 14 * FONTWIDTH;
    OS_DEFAULT "0.00";
 }
 OS_UPDATEFRAME ARTI_BUCH [0, 0] {
    OS_MFIELDLIST {
       OS_ADD DEZPR_ARTI [FXPOS(35), FYPOS(2)];
    }
 }
 /* Ausschnitt-ENDE */
  • OS_CURRENCY Datentyp des Feldes;
  • DEZPR_ARTI Name des Feldes,
    • DEZPR der Namensteil ist frei definierbar (hier für Doppelter Einzelpreis)
    • ARTI der Namensteil muss wie die Maske heißen;
  • OS_READ die Eigenschaft sagt aus, dass das Feld schreibgeschützt ist;
  • OS_TITLE <zahl> mit der Definition der <Zahl> wird die Beschriftung des Feldes bestimmt (String, der in mxlang_mod_beispiel für die Zahl definiert ist);
  • OS_TITLEPOS OS_PLEFT die Beschriftung wird links vom Feld angezeigt;
  • OS_DEFAULT als Standard-Vorgabe wird der Wert „0,00“ angezeigt.

Mehr Information zur Felddefinition kann man im Programmierhandbuch finden. Nach dem Compilieren und dem Neustarten des mxsd-Prozesses wird das neue Feld in der Maske ARTIKEL angezeigt.

Um den Wert des Feldes auszurechnen, muss das Maskenformular erweitert werden. Wie schon in Kapitel 5 beschrieben muss die Datei 'arti.ssr' in das Verzeichnis 'formular' kopiert und in 'arti_beispiel.ssr' umbenannt werden. Die Datei wird mit dem folgendem Code erweitert:

 /* Code-Ausschnitt: arti_beispiel.ssr */
 if (!ret) {
    if (arti.EZPR_ARTI_ARTI.m != 0.00) {
       arti.DEZPR_ARTI.m = arti.EZPR_ARTI_ARTI.m * 2;
    } else {
       arti.DEZPR_ARTI.m = 0.00;
    }
    setcurfieldcont (arti.DEZPR_ARTI); // aktualisieren des Feldes !
 }
 /* Ausschnitt-ENDE */

Das neue Maskenformular muss in die Datei formular_p.ppi eingetragen werden. In der Datei mod_beispiel.def wird das Maskenformular für die Maske neu deklariert:

 /* Code-Ausschnitt: mod_beispiel.def */
 OS_UPDATEFORMSCRIPT arti OS_MASK arti_beispiel OS_REPLACE arti
 /* Ausschnitt-ENDE */

Nach dem Compilieren und dem Neustarten der mxsd-Prozesse sind die Änderungen in der Maske zu sehen.

Feld mit DB-Bezug

Beispiel 8:
Zur Maske ARTIKEL soll noch ein Feld hinzugefügt werden, das eine Verknüpfung beinhaltet. Das neue Feld soll BEZ1_ABGP_ARTI heißen und die entsprechende Bezeichnung zur Buchungsgruppe, die in der Tabelle BUCHUNGSGRUPPE hinterlegt ist, anzeigen. Der Wert des Feldes soll aber nicht in der Tabelle ARTIKEL (ARTI ) gespeichert, sondern über die Verknüpfung mit dem bestehenden Feld Buchungsgruppe (ABNR_ARTI_ARTI ) aus der Maske BUCHUNGSGRUPPE ( ABGP ) geholt, und in der Maske ARTIKEL lediglich angezeigt werden.

Beziehung Feldname - Datenbank:

BEZ1_ABGP_ARTI

  • Bez1 - Db-Spalte
  • ABGP - Db-Tabelle Maske
  • ARTI - auf der das Feld dargestellt werden soll.

Der Wert des Feldes Buchungsgruppe wird ebenfalls aus dieser Maske übernommen und, im Unterschied zu unserem neuen Feld, in der Tabelle ARTIKEL (ARTI) abgespeichert.

1. Die Definition und das Hinzufügen des Feldes 'BEZ1_ABGP_ARTI' ist ähnlich wie im Beisp. 7:

 /* Code-Ausschnitt: mod_beispiel.def */
 OS_TEXT BEZ1_ABGP_ARTI [20 * FONTWIDTH, 230] OS_READ {
 OS_DBINFO ABGP, BEZ1;
 OS_TITLE 100003 OS_TITLEPOS OS_PLEFT;
 OS_TITLELEN 10 * FONTWIDTH;
 OS_JOINFIELD ABNR_ARTI_ARTI;
 }
 OS_UPDATEFRAME ARTI_BUCH [0, 0] {
    OS_MFIELDLIST {
       OS_ADD BEZ1_ABGP_ARTI [FXPOS(35), FYPOS(1)];
    }
 }
 /* Ausschnitt-ENDE */

der Feldname besteht aus drei Teilen

  • BEZ1 - der Namensteil ist frei definierbar;
  • ABGP - die Tabelle, zu der das Feld gehört;
  • ARTI - die Maske, in der das Feld angezeigt wird.
  • OS_TEXT ….. [ , ] die erste Zahl definiert die Größe des Feldes auf der Datenbank, die zweite Zahl die Feldgröße auf der Maske .
  • OS_DBINFO <tabellename>, <feldname>; der Datenbank wird das Feld 'BEZ1' zur Tabelle 'ABGP' gehörend, bekannt gemacht.
  • OS_JOINFIELD <feldname> gibt an, über welches Feld die Verknüpfung zur Tabelle ABGP hergestellt wird.

2. Wie in Beispiel 7 muss der Hilfetext und die Feldbeschriftung noch definiert werden!

3. Der Wert des verknüpften Feldes 'BEZ1_ABGP_ARTI' wird nicht gleich nach dem Ausfüllen des Verknüpfungsfeldes 'ABNR_ARTI_ARTI' angezeigt.

Der aktuelle Datensatz muss zuerst abgespeichert werden.

Um das Feld gleich anzuzeigen, muss eine Aktualisierung (OS_UPDATEFIELD) für das Feld ABNR_ARTI_ARTI' gemacht werden.

Diese sieht wie folgt aus:

 /* Code-Ausschnitt: mod_beispiel.def */
 OS_UPDATEFIELD ABNR_ARTI_ARTI {
    OS_TAKEFIELDLIST {
       BEZ1_ABGP_ABGP, BEZ1_ABGP_ARTI;
    }
 }
 /* Ausschnitt-ENDE */
  • OS_TAKEFIELDLIST{ } - bewirkt, dass die Wertübernahme des Feldes BEZ1_ABGP_ABGP ins Feld BEZ1_ABGP_ARTI parallel zur Wertübernahme des Feldes ABNR_ABGP_ABGP ins Feld ABNR_ARTI_ARTI passiert.

4. Vor dem Compilieren muss nun eine Sicherung der mxmask.msk erfolgen! Nach dem erfolgreichen Compilieren müssen die Datenbankprozesse gestoppt werden. Anschließend wird wie unter 1.4 beschrieben, die Datenbankstruktur mit dem Befehl 'reltool' aktualisiert und die Datenbankprozesse werden wieder gestartet.

Die Änderungen in der Maske sind nun vollzogen.

programmierung/masken/feldanlegen.txt · Zuletzt geändert: 01.03.2020 08:25 (Externe Bearbeitung)
 

mercaware ist eine ERP-Software der All for Accounting GmbH

ERP für Ihr einzigartiges Unternehmen

Auberlenstr. 13
70736 Fellbach
Tel.: +49 711 90 65 79 71
E-Mail: