Wer sich mit MEMTABS intensiver auseinander gesetzt hat, wird irgendwann an die Stelle kommen, wo Daten kalkuliert werden müssen und nachträglich wiederum Datensätze gelöscht werden müssen.
Wenn man sich die MEMTAB in ein Workflow-Tabelle lädt, so kann man sich diese ganz bequem über das Event-Script „Sätze einfügen“ in die Tabelle laden und hierrüber die Inhalte weiter kalkulieren und filtern.
Wer versucht das ganze in ein und derselben MEMTAB zu filtern, wird schnell merken, dass die Funktion START_TOOl[1006] „lösche Zeile“ oder GET_RELATION[1652!TabName!PIndex] allesamt in vielen Fällen nicht zu gebrauchen sind.
Warum sind diese in vielen Fällen nicht zu gebrauchen?
Ein Beispiel:
Es wurde eine MEMTAB mit der Basis „Artikeldaten“ erstellt:
Die ersten 3 Artikel sind die folgenden:
1. Artikel: $PREISAENDERUNGHSL
2. Artikel: Artikel19Prozent
3. Artikel: Artikel7Prozent
Im Tool „Alle Datensätze bearbeiten“ (START_TOOL[1004]) ist definiert, dass der erste und der zweite Datensatz gelöscht werden soll.
Vom Prinzip her hätte man erwarten können, dass hierdurch der 1. Artikel „$PREISAENDERUNGHSL“ und der 2. Artikel „Artikel19Prozent“ aus der Tabelle verschwinden.
Stattdessen ist aber folgendes passiert:
Der erste Datensatz mit dem Primärindex „$PREISAENDERUNGHSL“ wurde gelöscht,
Durch das Löschen des ersten Datensatzes hat sich die ganze MEMTAB um einen Datensatz verringert.
Allerdings hat sich das Tool „MEMTAB durchlaufen“ (Tool 1004) nicht gemerkt, was der letzte Datensatz gewesen ist, der durchlaufen wurde. Der Pointer ist also verrutscht!
Also anstatt den 2. Datensatz mit „Artikel19Prozent“ zu löschen, löscht die MEMTAB den Datensatz „Artikel7Prozent“, weil dieser jetzt an der zweiten Stelle steht.
Der Artikel „Artikel19Prozent“ bleibt also übrig (obwohl dieser eigentlich gelöscht werden sollte).
Wie mache ich es richtig?
Grundsätzlich ist es richtig die MEMTAB mit „Alle Datensätze bearbeiten“ (START_TOOL[1004]) zu durchlaufen.
Bei den Datensätzen, die gelöscht werden sollen, macht es Sinn das Flag „markiert“ auf „J“ zu setzen. (Achtung: Hierzu nicht das Tool „START_TOOL[1001] verwenden), da es auch nicht funktioniert, sondern lieber in der Satzbeschreibung nachgucken, wie der korrekte Offset lautet und hierrüber dann die „MT_XXX_1 -Variable auf „J“ setzten.
Achtung: Vereinzelt gibt es Versionen, wo die Markierspalte „verschwunden ist“ (zuletzt REV 75710). Grundsätzlich ist die „markiert“-Spalte aber immer das letzte Feld in der Satzbeschreibung.
Nachdem also der „Tabellenlauf“ durchgeführt wurde, kann man mithilfe der GET_RELATION[1666!MTR_0_6!markiert=“J“] alle markierten Datensätze mit einem Schlag aus der MEMTAB entfernen.
Anmerkung: Ja, die Spalte „markiert“ wird nicht mit „S“ (Primärindex) oder „A2“ (alphanummerische Spalte 2), sondern mit „markiert“ angegeben und auch so abgefragt.
Damit man die Änderungen sich auch noch anzeigen lassen kann, ist es notwendig, das anschließend mit (z.B.) MTR_790_50=“48″ der jeweilige Tabellenrahmen nach Ablauf der Kalkulation aktualisiert wird.