메뉴 건너뛰기

SAP 한국 커뮤니티

>itab1


>KEY    |   항목    |    항목값  |


>____________________________


>A        |     a1     |      b1       |


>A        |     a2     |      b2       |


>A        |     a3     |       b3      |


> B              :               :


>____________________________            형태를 key 값이 같은 항목과 항목값을



>===>



>itab2


>           |    a1     |       a2     |       a3      |


> ---------------------------------------


>A         |    b1      |      b2     |       b3      |  가로 형태로 채워야합니다.



>B



>둘다 인터널 테이블입니다.



>필드심볼로 루프돌려서 이래저래하는데 잘 안되네요                                                              




 


좀 어려우실 수도 있는데요.


 


아래에 예제를 만들어보았습니다.


key 값을 변경하여 테스트 해보시면 됩니다.(붉은 색 부분)


 


RTTS(Runtime Type Services) 를 사용해보았구요.


dynamic 구조입니다.


 


key 값이 선택되어 진다는 가정하에 구현한 것입니다.


 


그렇지 않고 전체 데이터중에서 항목수가 제일 많은 것을 기준으로 하신다면


제일 항목수가 많은 키값을 선택하여 지정하시면 될 거구요.


 


데이터는 index 나 항목값에 대한 위치를 지정하는 로직을 따로 만드시면 될 거예요.


 


키별로 값이 얼마나 들어올지 모르기 때문에 dynamic 구조로 만드는 것이 유리하겠지만


그렇지 않다면 적정가능한 최대크기의 순서대로 입력하시면 될 거예요.


 


예제를 2개로 만들어 보았습니다.


 


도움이 되시길...


 


1. dynamic 예


 


DATA : BEGIN OF itab OCCURS 0,
         key(2),
         item(3),
         value(10),
       END   OF itab.


DATA components TYPE TABLE OF rstrucinfo WITH HEADER LINE.
DATA key(2)  VALUE 'D'.


DEFINE app_itab.
  clear itab.
  itab-key   = &1.
  itab-item  = &2.
  itab-value = &3.
  append itab.
END-OF-DEFINITION.


app_itab : 'A' 'A1' 'AA',
           'A' 'A2' 'AB',
           'A' 'A3' 'AC',
           'B' 'B1' 'BA',
           'B' 'B2' 'BB',
           'B' 'B3' 'BC',
           'B' 'B4' 'BD',
           'C' 'C1' 'CA',
           'C' 'C2' 'CB',
           'C' 'C3' 'CC',
           'D' 'D1' 'DA'.


LOOP AT itab.
  WRITE / itab.
ENDLOOP.


* Restructure itab by key
* Key 선택 ===>> Key = 'B'


* 구조 생성 : RTTS 사용
DATA: struct_type TYPE REF TO cl_abap_structdescr,
      table_type  TYPE REF TO cl_abap_tabledescr,
      comp_tab    TYPE cl_abap_structdescr=>component_table,
      comp        LIKE LINE OF comp_tab,
      my_table    TYPE REF TO data,
      my_row      TYPE REF TO data,
      my_fname    TYPE lvc_fname.


FIELD-SYMBOLS : <fs_row>   TYPE ANY,
                <fs_table> TYPE ANY TABLE,
                <fs_data>  TYPE ANY.


* itab 의 속성정보
CALL FUNCTION 'GET_COMPONENT_LIST'
  EXPORTING
    program    = sy-repid
    fieldname  = 'ITAB'
  TABLES
    components = components.


* 키필드
comp-name = 'KEY'.


comp-type ?= cl_abap_datadescr=>describe_by_data( 'CHAR1' ).


APPEND comp TO comp_tab.


* 데이터 필드( item으로 필드이름을 value 로 필드 속성을 지정함)
LOOP AT itab WHERE key = key.


* 필드이름
  comp-name = itab-item.


* 필드속성
  READ TABLE components WITH KEY compname = 'VALUE'.
  IF sy-subrc IS INITIAL.
    CASE components-type.
      WHEN 'C'.
        CONCATENATE 'CHAR' components-olen+1(2) INTO my_fname.
      WHEN OTHERS.
    ENDCASE.
  ELSE.
    CONTINUE.
  ENDIF.


  comp-type ?= cl_abap_datadescr=>describe_by_data( my_fname ).


* 필드 추가
  APPEND comp TO comp_tab.


ENDLOOP.


* 구조생성
struct_type = cl_abap_structdescr=>create( comp_tab ).
* 내부테이블 생성
table_type  = cl_abap_tabledescr=>create( p_line_type = struct_type ).


* 핸들러 지정
CREATE DATA my_row   TYPE HANDLE struct_type.
CREATE DATA my_table TYPE HANDLE table_type.


* Assign
ASSIGN : my_row->*   TO <fs_row>,
         my_table->* TO <fs_table>.


SKIP 2.
WRITE /(4) 'Key'.


* 생성된 구조에 데이터 생성
LOOP AT itab WHERE key = key.
  ASSIGN COMPONENT 'KEY' OF STRUCTURE <fs_row> TO <fs_data>.
  <fs_data> = itab-key.


  ASSIGN COMPONENT itab-item OF STRUCTURE <fs_row> TO <fs_data>.
  IF sy-subrc IS INITIAL.
    <fs_data> = itab-value.
  ENDIF.


  WRITE (5) itab-item.
ENDLOOP.


ULINE.
INSERT <fs_row> INTO TABLE <fs_table>.



LOOP AT <fs_table> ASSIGNING <fs_data>.
  WRITE / <fs_data>.
ENDLOOP.


 


2. 최대크기 구조생성 후 데이터 생성 예.


 


DATA : BEGIN OF itab OCCURS 0,
         key(2),
         item(3),
         value(10),
       END   OF itab.
DATA : BEGIN OF itab2 OCCURS 0,
         key(2),
         f1(10),
         f2(10),
         f3(10),
         f4(10),
         f5(10),
       END   OF itab2.


 


DATA index TYPE i.


FIELD-SYMBOLS : <fs_target>.


DEFINE app_itab.
  clear itab.
  itab-key   = &1.
  itab-item  = &2.
  itab-value = &3.
  append itab.
END-OF-DEFINITION.


app_itab : 'A' 'A1' 'AA',
           'A' 'A2' 'AB',
           'A' 'A3' 'AC',
           'B' 'B1' 'BA',
           'B' 'B2' 'BB',
           'B' 'B3' 'BC',
           'B' 'B4' 'BD',
           'C' 'C1' 'CA',
           'C' 'C2' 'CB',
           'C' 'C3' 'CC',
           'D' 'D1' 'DA'.


CLEAR index.
LOOP AT itab.
  AT NEW key.
    ADD 1 TO index.
    itab2-key = itab-key.
  ENDAT.
  ADD 1 TO index.
  ASSIGN COMPONENT index OF STRUCTURE itab2 TO <fs_target>.
  <fs_target> = itab-value.


  AT END OF key.
    APPEND itab2.
    CLEAR: itab2, index.
  ENDAT.


ENDLOOP.

번호 제목 글쓴이 날짜 조회 수
4185 <img src=2.gif>혹시 as/400 db데이터를 sap으로 가지고 오는 방법 아시는분 계신가요 [2] 처서련 2009.11.10 1053
4184 <img src=2.gif>프로그램 실행시 'CNDP' 덤프가 나는데 이유를 잘 모르겠습니다 원인과 해결책을 부탁드립니다. [2] file rune 2009.11.10 2283
4183 <img src=3.gif>0을 값으로 나눌때 생기는 에러 해결 어떻게 해야 하나요 ??? [8] 마늘맛쿨피스 2009.11.10 1608
4182 <img src=2.gif>[T-CODE]T-CODE의 변경일 생성일을 알수 있는 테이블이 어케 되나요? [2] 드라곤 2009.11.10 1292
4181 <img src=2.gif>[User-exit] BOM ( check bom data before saving ) [3] 찬호사랑 2009.11.10 2267
4180 <img src=2.gif>bom/routing BAPI 질문드립니다. [4] 신수도 2009.11.09 1746
4179 <img src=2.gif>코멘트가 있어 삭제가 안되네.. [1] 버미! 2009.11.09 974
4178 <img src=3.gif>소수점 이하 0 지우기 (소수점 값이 없는 부분만 ) [5] 짭군 2009.11.09 7271
4177 [re] <img src=2.gif>소수점 이하 0 지우기 (소수점 값이 없는 부분만 ) kkamui 2009.11.09 3765
4176 [BW] AT SELECTION-SCREEN 기능관련해서 문의드립니다.. [3] BW궁금 2009.07.27 982
4175 <img src=2.gif>유지보수뷰에서 통화키 파서블엔트리로 어떻게 띄우나요? [2] 99avenue 2009.11.06 2581
4174 <img src=3.gif>특수문자 입력하는 방법이 있습니까? [3] 삼색볼펜 2009.11.06 1627
4173 <img src=2.gif>webdynpro에서 word 파일 출력시 한글 깨짐 현상 오류 [1] 규리 2009.11.06 1873
4172 <img src=3.gif>PARAMETERS 구문으로 LISTBOX만들기.. [6] 와퍼 2009.11.05 2573
4171 <img src=3.gif>값이 있는 항목만 유동적으로 나타내기 [2] hogun 2009.11.05 1008
4170 <img src=3.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [3] hogun 2009.11.05 1223
4169 [re] <img src=2.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [1] kkamui 2009.11.06 1277
» [re] <img src=2.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [2] 요요 2009.11.05 1759
4167 <img src=3.gif>ABAP에서 BADI와 BTE에 대해서 자세하게 설명 좀 해주세요~~ [3] 권장원 2009.11.04 1841
4166 <img src=2.gif>BDC로 입력 시 , 테이블 컨트롤 page down하는 방법 [7] file 에비앙 2009.11.04 1392