Stolpersteine in Bezug auf MEMTABs oder „nice to know“: Alles was man wissen sollte, wenn man sich mit MEMTABS intensiver beschäftigt (Teil 1)

MT_FUELLEN[ ] hat nicht immer die beste Performance

Bei Wahl des Datenbereiches „3- Belege“ oder „9 – Belegpositionen“ sollte standardmäßig die Funktion „MT_FUELLENBEL[ ]“ (bei Belegen) oder „MT_FUELLENBELPOS[ ]“ verwendet werden, weil dies die Performance DEUTLICH verbessert!

MT_FUELLENBEL[] oder MT_FUELLEN BELPOS[ ] – Einschränkung der Datenquelle geht hier nicht

Wird die Funktion „MT_FUELLENBEL[ ]“ (bei Belegen) oder „MT_FUELLENBELPOS[ ] verwendet, so ist auch die Möglichkeit gegeben eine „Einschränkung der Datenquelle“ einzugeben. Das diese Funktion hierbei jedoch nicht funktioniert (weil MEMTABs ja dann auch mit MT_FUELLENBELPOS[ ] in der BETA vorbelegt werden) muss man wissen! –> Hier muss man dann das „Eventskript MT_FUELLEN“ zum Filtern der Datensätze verwenden.

Das Eventskript „MT_FUELLEN“

Das Eventskript „MT_FUELLEN“ ist NICHT dasselbe wie „Sätze einfügen“ im Objektgenerator. Einerseits kann man hier beim Einfügen keine Werte innerhalb der Tabelle kalkulieren und während im Objekgenerator (Workflowdesigner) beim „Sätze einfügen“ pro Datensatz der Wert „Satz nicht einfügen J / N“ standardmäßig mit „N“ für „Ja, dieser Satz wird eingefügt“ initialisiert wird, so muss man lediglich nur diese Sätze auf „N“ setzen, die man nicht in der Tabelle haben möchte (d.h. sofern es nur eine zusätzliche Bedingung gibt, reicht im Objektgenerator  lediglich eine Zeile aus. Im Eventskript MT_FUELLEN ist das anders. Sofern nur eine einzige (z.B. Kommentar-)Zeile in diesem Skript vorhanden ist, werden ALLE Datensätze gefiltert, sofern der Laufzeit-Parameter MTR_840_1 nicht verwendet wurde. Am Besten sollte dieser Laufzeit-Wert immer bei der Anlage mit „J“ initialisiert werden. Ein böser Stolperstein.

Datensätze aus einer MEMTAB löschen

Wenn man Datensätze über einen Tabellenlauf filtern möchte, könnte man annehmen, das man ja einfach im Tabellenlauf (Tool [1004 ] ) die Funktion zum Löschen eines Datensatzes verwenden kann. Aber ACHTUNG: Der Datensatz wird zwar dann unmittelbar im Tabellenlauf gelöscht, ABER der Pointer des Tabellenlaufes bleibt an der gleichen Stelle, während sich jedoch die MEMTAB verschiebt. Ergebnis: Beim Tabellenlauf werden Datensätze „übersprungen“, wenn ein Datensatz zuvor gelöscht wurde. -> Ein Bug/Fehler meines Erachtens, der unbedingt behoben werden sollte. Workaround siehe: https://wiki.softengine.de/29252/MEMTAB – Zeilen löschen

MEMTAB_TABLOESCHEN

MEMTAB_TABLOESCHEN enthält einen Bug, so dass es unter Umständen vorkommen kann, dass ein einziger Datensatz in der MEMTAB verbleibt. Auch hier sollte dann lieber die GET_RELATION[1666] (hier: ohne zusätzliche Bedingung) verwendet werden. Damit werden auch alle Datensätze gelöscht (Getestet in NB BETA 6.01.402.73908).

GET_RELATION[1662] Ermitteln eines Wertes über einen Bereich von Zeilen liefert falsche Ergebnisse

Soll über einen Bereich von mehreren Zeilen ein Wert ermittelt werden, so scheint es erstmal zu funktionieren, wer aber testet wird merken, dass die Ergebnisse unter bestimmten Umständen falsch sind. So kann sich ein komisches Bild im Debugger abzeichnen. Bedingungen treffen hier zu, die eigentlich gar nicht zutreffen sollten:

Lösung: Um Variableninhalte wie „![]“ an Funktionen wie GET-/PUT_RELATIONs zu übergeben müssen Sie Globale MEM-Pointer (MEM Variablen) nutzen. Ansonsten werden die Variableninhalte bereits vorher aufgelöst, was dann bei oben genannten Sonderzeichen zu Parameterverschiebungen oder Ungültigkeit in den Funktionen führt.

Siehe: https://wiki.softengine.de/4845/

GET 1662 liefert falsche Ergebnisse

GET 1662 liefert falsche Ergebnisse

Viele Tabellen in einer MEMTAB

Mehrere Rahmen in einem MEMTAB-Skript siehe https://wiki.softengine.de/20397/. Problem: Wenn man mehrere MEMTAB-Rahmen darstellen möchte, wird in der Rahmenauswahl nur der Rahmen 931 angezeigt, obwohl man auch noch 931 bis 939 verwenden kann. Der Hinweise „MEMTAB anzeigen (nur MTG;Scriptnummer im Text)“ ist nicht besonders aussagekräftig, bzw. Neueinsteiger wissen oft nicht, was damit gemeint ist.  Vorschlag wie man’s besser machen kann siehe Screenshot :PS: Ein Link zum Wiki-Beitrag wäre wahrscheinlich ebenfalls hilfreich. Ich würde mir wünschen, dass man in der Rahmenauswahl noch einen extra Ast mit dem Titel „MEMTAB“ anzeigt, wo man entsprechend auch alle Rahmen wiederfindet.

Einschränkung der Datenquelle

Bei der Selektion, bzw. bei der Einschränkung der Datenquelle gibt es einiges zu beachten, damit die MEMTAB auch „schnell“ bleibt. Wenn man diese Tipps ignoriert, so ist es auch kein Wunder, wenn die Performance drunter leidet. Siehe: https://wiki.softengine.de/28664/

Datenbankfelder verknüpfen – kalkulierte Werte

Wer in der MEMTAB einen kalkulierten Wert einfügen möchte, der muss beachten, dass man hier nicht mit den „A“, „N“ oder „D“-Spalten arbeitet, sondern man hat hier Zugriff auf den jeweiligen Datenbereich. Die Eingabe sollte dann vorzugsweise als „FELD_999_25“ erfolgen. Mit „FELD“ kann man dann auch Felder aus bspw. IDB Datenbanken drauf zugreifen. Anbei ein Beispiel wie das geht:

 

 

Ähnliche Artikel

LEAVE A COMMENT