Der Gedankenfehler liegt in folgendem begründet:

CTDATA
The CTDATA keyword indicates that the array or table is loaded using compile-time data. The data is
specified at the end of the program following the ** or **CTDATA(array/table name) specification.

Der Unterschied zwischen Array und Table liegt im Namen:
Alle Arrays, die mit "TAB" anfangen sind eine Table:

Table Names
The following additional rules apply to table names:
v A table name can contain from 3 to 10 characters.
v A table name must begin with the letters TAB.
v A table cannot be defined in a subprocedure.

Tables
The explanation of arrays applies to tables except for the following differences:
Activity
Differences
Defining
A table name must be a unique symbolic name that begins with the letters TAB.
Loading
Tables can be loaded only at compilation time and prerun-time.
Using and Modifying table elements
Only one element of a table is active at one time. The table name is used to refer to the active
element. An index cannot be specified for a table.
Searching
The LOOKUP operation is specified differently for tables. Different built-in functions are used for
searching tables.

Daher erklärt sich auch, dass Tabelle eben per TLOOKUP bedient werden muss und ein Array-Indexzugriff "Tabelle1(I)" nicht möglich ist.
Benennst du die Tabelle um "Zeichen", dann gilt wieder %lookup und Arrayindex.