добавлю - а чтобы имя типа (структуры) не хранить в текстовках, можно пользовать RTTI
form ShowGrid
tables grid. "без указания типа
CLEAR: fieldcat, fieldcat[].
data:
gridtype like DD02L-TABNAME,
fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
perform TypeOf(ZRX_FORMPOOL)
using grid2 changing gridtype. "имя типа (структуры)
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = gridtype
I_BYPASSING_BUFFER = 'X' "иначе лепит горбатого
CHANGING
ct_fieldcat = fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
TABLES
t_outtab = grid
...
тут я в модулёк ZRX_FORMPOOL вынес RTTI-примитивы
*через RTTI определяет имя типа данных ================================
form TypeOf
using
Field
changing
FieldType
.
data:
descr_ref TYPE ref to cl_abap_typedescr. "класс для вызовов RTTI
descr_ref = cl_abap_typedescr=>describe_by_data( Field ).
FieldType = descr_ref->absolute_name+6.
* WRITE: / 'Typename:', descr_ref->absolute_name.
* WRITE: / 'Kind :', descr_ref->type_kind.
* WRITE: / 'Length :', descr_ref->length.
* WRITE: / 'Decimals:', descr_ref->decimals.
endform.
form TypeOfEx
using
Field
changing
FieldType
TypeLen "размер типа
TypeDec "число десятичных знаков
.
data:
descr_ref TYPE ref to cl_abap_typedescr. "класс для вызовов RTTI
descr_ref = cl_abap_typedescr=>describe_by_data( Field ).
FieldType = descr_ref->absolute_name+6.
TypeLen = descr_ref->length.
TypeDec = descr_ref->decimals.
endform.
...
так удобнее получается - не нужно думать, где какой тип данных, можно запросить его у системы через TypeOf, и потом клепать универсальные процедуры обработки