Salas написал(а):
У меня версия 4.6 C.
А с ней чо можно крутого, кроме WRITE, сделать ?

попробуй так:
TYPE-POOLS: SLIS.
TABLES: DD02L.
DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LF TYPE LVC_T_FCAT,
VR TYPE REF TO DATA,
FC LIKE LINE OF LT_FIELDCAT,
LFC LIKE LINE OF LF.
DATA: G_EXIT_CAUSED_BY_CALLER,
GS_EXIT_CAUSED_BY_USER TYPE SLIS_EXIT_BY_USER.
FIELD-SYMBOLS: <P> TYPE STANDARD TABLE.
PARAMETERS: TABN LIKE DD02L-TABNAME.
CLEAR DD02L.
SELECT SINGLE * FROM DD02L WHERE TABNAME = TABN.
IF NOT DD02L-TABNAME IS INITIAL.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = TABN
CHANGING
CT_FIELDCAT = LT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2.
LOOP AT LT_FIELDCAT INTO FC.
MOVE-CORRESPONDING FC TO LFC.
APPEND LFC TO LF.
ENDLOOP.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING IT_FIELDCATALOG = LF
IMPORTING EP_TABLE = VR.
ASSIGN VR->* TO <P>.
SELECT * FROM (TABN) APPENDING TABLE <P>.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = TABN
I_SAVE = 'X'
IMPORTING
E_EXIT_CAUSED_BY_CALLER = G_EXIT_CAUSED_BY_CALLER
ES_EXIT_CAUSED_BY_USER = GS_EXIT_CAUSED_BY_USER
TABLES
T_OUTTAB = <P>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ELSE.
WRITE:/ 'Неправильное имя таблицы'.
ENDIF.