CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = GT_FCAT
IMPORTING
EP_TABLE = GT_EP_TABLE.
ASSIGN GT_EP_TABLE->* TO <GFS_TABLE01>.
위와 같이 인터날테이블을 생성한 후에 <GFS_TABLE01> 을 LOOP 돌리면서 필드의 값을 변경하고 싶습니다.
싶습니다.
어떻게 해야 하나요?
댓글 3
-
버미!
2009.12.05 00:34
-
요요
2009.12.05 02:56
dynamic 테이블 생성이 다 좋은데 component 를 직접 지정할 수 없다는 점에 어려워
컨트롤하기가 까다로운 단점이 있습니다.
버미님 말씀처럼 하시는데 gt_fcat 에 필드이름이 다 있기 때문에
해당 필드카탈로그의 필드이름을 참조하면 될 거예요.
그리고 딴지 같긴하지만... 버미! 님 internal table 을 assigning 하시면
value reference가 되었기 때문에 modify 를 또 쓰실 필요는 없어요. ^^
assing 의 장점중에 하나입니다.
대충 아래처럼 제어하시면 될 거예요.
DATA gt_fcat TYPE lvc_t_fcat.
FIELD-SYMBOLS : <fs_line> TYPE ANY,
<fs_field> TYPE ANY,
<fs_fcat> TYPE lvc_s_fcat,
<gfs_table01> TYPE table.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fcat
IMPORTING
ep_table = gt_ep_table.
ASSIGN gt_ep_table->* TO <gfs_table01>.
LOOP AT <gfs_table01> ASSIGNING <fs_line>.
LOOP AT gt_fcat ASSIGNING <fs_fcat>.
ASSIGN COMPONENT <fs_fcat>-fieldname " <fs_line> 의 필드이름으로 대상을 참조
OF STRUCTURE <fs_line>
TO <fs_field>.
CHECK <fs_field> IS ASSIGNED.
"" Processing block.
CASE <fs_fcat>-fieldname.
WHEN 'FIELD'.
* <fs_field> = value
WHEN OTHERS.
ENDCASE.
UNASSIGN <fs_field>.
ENDLOOP.
ENDLOOP.
-
아밥
2009.12.07 06:44
두분 답변 넘 감사합니다.
많은 도움되었습니다. 감사합니다.
DATA: new_line TYPE REF TO data.
FIELD-SYMBOLS: <l_line> TYPE ANY,
<l_field> TYPE ANY.
CREATE DATA new_line LIKE LINE OF <GFS_TABLE01>.
ASSIGN new_line->* TO <l_line>.
loop at <GFS_TABLE01> into <l_line>.
* 필드 할당
ASSIGN COMPONENT 'FieldName' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = 'AAA'.
modify <GFS_TABLE01> from <l_line>.
endloop.
대략 이런식으로 값 할당을 하시면 되겠네요