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.