*Dynamic Internal Table
DATA : D_TAB TYPE REF TO DATA,
D_LINE TYPE REF TO DATA,
LT_FCAT TYPE TABLE OF LVC_S_FCAT,
LS_FCAT LIKE LINE OF LT_FCAT,
NAMETAB LIKE DNTAB OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS : <NEW_TAB> TYPE TABLE,
<NEW_LINE> TYPE ANY.
PARAMETERS : P_TNAME LIKE DD03L-TABNAME.
* Field catalog get
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
LANGU = SY-LANGU
TABNAME = P_TNAME
TABLES
NAMETAB = NAMETAB
EXCEPTIONS
NO_TEXTS_FOUND = 1.
SORT NAMETAB BY POSITION.
CLEAR : LT_FCAT[].
LOOP AT NAMETAB.
* Internal table
IF SY-SUBRC = 0.
LS_FCAT-FIELDNAME = NAMETAB-FIELDNAME.
LS_FCAT-REF_TABLE = P_TNAME.
LS_FCAT-REF_FIELD = NAMETAB-FIELDNAME.
APPEND LS_FCAT TO LT_FCAT.
ENDIF.
ENDLOOP.
IF LT_FCAT[] IS INITIAL.
STOP.
ENDIF.
* Internal table create
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = LT_FCAT
IMPORTING
EP_TABLE = D_TAB.
ASSIGN D_TAB->* TO <NEW_TAB>.
CREATE DATA D_LINE LIKE LINE OF <NEW_TAB>.
ASSIGN D_LINE->* TO <NEW_LINE>.
BREAK-POINT.
위 소스는 일반적인 동적 인터널 테이블을 선언할때 쓰이는 방법중 하나이다.
리포트를 만들어서 그대로 써 넣으면 마지막 BREAK-POINT.을 타고 디버깅하면
<NEW_TAB>이 PARAMETER값에 입력한 테이블로 바뀌어 있다.
(테이블 유효성 체크 로직이 없는데 써 넣으면 된다.)
'SAP > ABAP' 카테고리의 다른 글
SMW0 (0) | 2014.08.25 |
---|---|
= '' 와 = ' '가 같다? (0) | 2010.07.19 |
message 띄우기.. (0) | 2010.07.19 |
테이블 Lock걸렸을때 (0) | 2010.07.19 |
ABAP 시스템 변수 (0) | 2008.05.08 |