안녕하세요~
썼던글이 다날라갔군요;
현재의 상황은 날짜 기간을 입력받을시
그기간에 맞게 필드가 구성되어 결과를 보여야 하는 상황입니다.
간단히 예를 들면
day(필드)
-----------------
1
2
3
4
5
6
요상태의 인터널테이블을
1 2 3 4 5 6(필드)
------------------
row값을 가지고 필드화하여 인터널 테이블을 구성할수있을지요?
현재 만들고있는것이 날짜가 최대 6달까지 가능하게 되어있어
하드코딩한다면 필드를 최소 190개정도를 적어야합니다.
이렇게 쓴뒤 안쓰는 곳은 tech를 시키는등의 수고가 필요하게되어 질문드립니다.
선배님들의 고견 기다리겠습니다^^
댓글 8
-
낙천
2009.04.23 20:08
-
정군
2009.04.23 21:17
가변 스트럭쳐 관련 자료들이 인터넷에 꽤 있습니다.
실제로 설계를 해서 개발(은 후배가;;)한 적도 있습니다.
자료가 이해는 어렵지만..
자료실에 올려두겠습니다.
덧. ALV 등으로 뿌려야해서 필드명이 필요한게 아니라면
그냥 itab을 포함하는 deep strucuture를 구성하고
그걸 나중에 옆으로 쫙 뿌려주기만 하는게 낫지 않을까 싶습니다.
-
123456
2009.04.23 22:15
CALL METHOD cl_alv_table_create=>create_dynamic_table 사용하시면 될거 같은데요
정군님 말처럼 구글에서 찾아봐도 예제가 꽤 나옵니다. -
Bizzard.Chul
2009.04.24 00:35
DATA: BEGIN OF ITAB OCCURS 0,
PLANT(8) TYPE C,
M1 TYPE I,
M2 TYPE I,
M3 TYPE I,
M4 TYPE I,
M5 TYPE I,
M6 TYPE I,
END OF ITAB.
DATA: BEGIN OF IT OCCURS 0,
MONTH TYPE I,
PLANT(8) TYPE C,
AMOUNT TYPE I,
END OF IT.
DATA MONTH TYPE C.
DATA ETAB LIKE ITAB OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS: <FS1>. "클레임 상세내용
DATA: W_MONTH TYPE STRING. "목표 필드이름
IT-MONTH = 1.
IT-AMOUNT = 20.
IT-PLANT = '서울'.
APPEND IT.
IT-MONTH = 2.
IT-AMOUNT = 20.
IT-PLANT = '서울'.
APPEND IT.
IT-MONTH = 3.
IT-AMOUNT = 20.
IT-PLANT = '부산'.
APPEND IT.
IT-MONTH = 4.
IT-AMOUNT = 20.
IT-PLANT = '인천'.
APPEND IT.
IT-MONTH = 5.
IT-AMOUNT = 20.
IT-PLANT = '서울'.
APPEND IT.
IT-MONTH = 6.
IT-AMOUNT = 20.
IT-PLANT = '서울'.
APPEND IT.
LOOP AT IT.
MONTH = IT-MONTH.
CONCATENATE 'itab-m' MONTH INTO W_MONTH.
ASSIGN (W_MONTH) TO <FS1>. " 필드 지정해준다.
<FS1> = IT-AMOUNT .
ITAB-PLANT = IT-PLANT.
COLLECT ITAB .
CLEAR ITAB.
ENDLOOP.
LOOP AT ITAB.
WRITE:/ ITAB-PLANT,ITAB-M1,ITAB-M2,ITAB-M3,ITAB-M4,ITAB-M5,ITAB-M6.
ENDLOOP.
시간이 돼서 한번 해봤는데
디버깅해보세요..
-
안규
2009.04.24 03:28
REPORT z_test_field_sy.
DATA: BEGIN OF lt_ori OCCURS 0, "초기 값 입력 테이블
field(2) TYPE c,
END OF lt_ori.
DATA: d_tab TYPE REF TO data,
lt_fcat TYPE TABLE OF lvc_s_fcat,
ls_fcat LIKE LINE OF lt_fcat,
ls_ori LIKE LINE OF lt_ori,
lv_time(2) TYPE c,
lv_line(2) TYPE c.
FIELD-SYMBOLS : <new_tab> TYPE table.
lv_time = 1.
*-- 초기 필드명 세로로 입력
DO 6 TIMES.
lt_ori-field = lv_time.
APPEND lt_ori.
lv_time = lv_time + 1.
ENDDO.
*-- 다시 쓰기위해 1로 초기화
lv_time = 1.
DESCRIBE TABLE lt_ori LINES lv_line.
DO lv_line TIMES.
*-- 필드명 세팅 및, 필드 타입 세팅 부분
READ TABLE lt_ori INDEX lv_time INTO ls_ori.
ls_fcat-fieldname = ls_ori-field.
ls_fcat-ref_table = 'DRAD'.
ls_fcat-ref_field = 'OBJKY'.
APPEND ls_fcat TO lt_fcat.
lv_time = lv_time + 1.
ENDDO.
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 field symbol
ASSIGN d_tab->* TO <new_tab>.
IF <new_tab> IS NOT INITIAL.
ENDIF.
교육자료로 만들었던 건데 보시고 도움이 되셨으면 좋겠네요 ^^;;
-
낙천
2009.04.25 01:29
선배님들의 고견 감사드립니다(__)
가변스트럭쳐에 대해서 알아봐야겠군요.
해결후에 글달아 두겠습니다^^
-
낙천
2009.04.25 01:33
//블리자드.철님
값을 단지 옆으로 보여주기위한것은 아닙니다~
혹시나 저와 같은 문제로 고민하실 분이 계실까해서 안 헷갈리시도록 글남겨둡니다.
답변 감사드립니다^^
-
낙천
2009.04.28 22:24
create_dynamic_table을 사용하여 완료하였습니다
답변주신 선배님들 감사합니다^^
위의 기능을 가지는 펑션이나 방법이 있을지요 음;