메뉴 건너뛰기

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.

번호 제목 글쓴이 날짜 조회 수
4172 <img src=3.gif>PARAMETERS 구문으로 LISTBOX만들기.. [6] 와퍼 2009.11.06 2752
4171 <img src=3.gif>값이 있는 항목만 유동적으로 나타내기 [2] hogun 2009.11.05 1115
4170 <img src=3.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [3] hogun 2009.11.05 1223
4169 [re] <img src=2.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [1] kkamui 2009.11.07 1278
» [re] <img src=2.gif>종렬로 되어있는 데이터를 인터널테이블에 횡렬로 채우기 [2] 요요 2009.11.05 1759
4167 <img src=3.gif>ABAP에서 BADI와 BTE에 대해서 자세하게 설명 좀 해주세요~~ [3] 권장원 2009.11.05 1841
4166 <img src=2.gif>BDC로 입력 시 , 테이블 컨트롤 page down하는 방법 [7] file 에비앙 2009.11.05 1450
4165 <img src=3.gif>field exit 관한 질문입니다..보고 검토 쫌 부탁드립니다. [2] 아밥고지를 찾아서 2009.11.04 1323
4164 <img src=3.gif>구구단 코딩에서 잘 모르겠는 부분이 있어서 알려주세요 [3] 나도sap 2009.11.04 1775
4163 <img src=1.gif>ALV 컬럼텍스트 길이에 대해서 질문이 있습니다. file rune 2009.11.04 1790
4162 <img src=2.gif>salv관련 F4뜨게 하는것 관련 질문입니다. [2] 야생수컷 2009.11.04 1786
4161 <img src=3.gif>mk03을 call transaction하려고 합니다. [4] 토니 2009.11.04 1950
4160 <img src=2.gif>배치 job으로 조회된 데이타 text 로 지정한 디렉토리로 다운로드 하는 프로그램 아시는분 [2] 2009.11.04 1235
4159 <img src=2.gif>BAPI PR Release 시 Lock 걸리는 문제 [2] 비와바람 2009.11.03 1344
4158 <img src=2.gif>SELECT문에 대한 질문입니다. ㅠㅜ [3] 마늘맛쿨피스 2009.11.03 1220
4157 <img src=2.gif>[요청]sap화면에서 브라우저를 띄울수 있는 방법 좀 부탁드립니다. [2] 원니컴 2009.11.03 1805
4156 <img src=3.gif>인터널 테이블 간단히 아래로 복사하는 방법없을까요? [2] 아밥고지를 찾아서 2009.11.03 905
4155 SAP ECC 6.0에서 타시스템의 WEB Service 호출하는 방법 및 사례를 구합니다. SkyDream 2009.11.03 2354
4154 <img src=3.gif>레이아웃(스크린) 버튼 클릭시 에러가 납니다. [5] file 도움이 2009.11.03 1298
4153 <img src=3.gif>Web Dynpro for JAVA를 하기 위해서는? [6] 대장군 2009.11.02 1209