SAP/ABAP

테이블 90도 뒤집기(가로배열을 세로배열로)

znoflo 2013. 4. 19. 16:20

 

술병을 눕혀보자!

 

 

 

*&---------------------------------------------------------------------*
*& Report  ZSSTEST                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZSSTEST.

" 소스 테이블
DATABEGIN OF GT_SRC_ITAB OCCURS 0,
        A,
        B,
        C,
        D,
        E,
        F,
      END OF GT_SRC_ITAB.

" 타겟 테이블
DATABEGIN OF GT_TRG_ITAB OCCURS 0,
        M01,
        M02,
        M03,
        M04,
        M05,
        M06,
        M07,
        M08,
        M09,
        M10,
        M11,
        M12,
      END OF GT_TRG_ITAB.

DATA GV_VAL.
DATA GV_TABIX(2TYPE N.
DATA GV_FNAME    TYPE STRING.
FIELD-SYMBOLS <FS_FIELD> TYPE ANY.

" 샘플데이터 만들기
DEFINE ADD_SRC.
  CLEAR GT_SRC_ITAB.
  GT_SRC_ITAB-&1.
  GT_SRC_ITAB-&2.
  GT_SRC_ITAB-&3.
  GT_SRC_ITAB-&4.
  GT_SRC_ITAB-&5.
  GT_SRC_ITAB-&6.
  APPEND GT_SRC_ITAB.
END-OF-DEFINITION.

ADD_SRC ' ' 'X' 'X' 'X' 'X' ' '.
ADD_SRC ' ' ' ' 'X' 'X' ' ' ' '.
ADD_SRC ' ' ' ' 'X' 'X' ' ' ' '.
ADD_SRC ' ' ' ' 'X' 'X' ' ' ' '.
ADD_SRC ' ' ' ' 'X' 'X' ' ' ' '.
ADD_SRC 'X' 'X' 'X' 'X' 'X' 'X'.
ADD_SRC 'X' ' ' ' ' ' ' ' ' 'X'.
ADD_SRC 'X' ' ' ' ' ' ' ' ' 'X'.
ADD_SRC 'X' ' ' ' ' ' ' ' ' 'X'.
ADD_SRC 'X' ' ' ' ' ' ' ' ' 'X'.
ADD_SRC 'X' ' ' ' ' ' ' ' ' 'X'.
ADD_SRC 'X' 'X' 'X' 'X' 'X' 'X'.


WRITE /'1. 소스데이터 출력'.
WRITE /.
LOOP AT GT_SRC_ITAB.
  WRITE /1 GT_SRC_ITAB-AGT_SRC_ITAB-B,  GT_SRC_ITAB-C,
           GT_SRC_ITAB-DGT_SRC_ITAB-E10 GT_SRC_ITAB-F.
ENDLOOP.

" 변환
LOOP AT GT_SRC_ITAB.

  GV_TABIX SY-TABIX.
  CONCATENATE 'GT_TRG_ITAB-M' GV_TABIX INTO GV_FNAME.
  ASSIGN (GV_FNAMETO <FS_FIELD>.

  CHECK <FS_FIELD> IS ASSIGNED.
  DO TIMES VARYING GV_VAL FROM GT_SRC_ITAB-NEXT GT_SRC_ITAB-B.

    IF GV_TABIX EQ 1.
      <FS_FIELD> GV_VAL.
      APPEND GT_TRG_ITAB.
    ELSE.
      READ TABLE GT_TRG_ITAB INDEX SY-INDEX.
      <FS_FIELD> GV_VAL.
      MODIFY GT_TRG_ITAB INDEX SY-INDEX.
    ENDIF.
    CLEAR  GT_TRG_ITAB.
    
  ENDDO.
  
ENDLOOP.

WRITE /.
WRITE /'2. 변환데이터 출력'.
WRITE /.
LOOP AT GT_TRG_ITAB.
  WRITE /1 GT_TRG_ITAB-M01,
           GT_TRG_ITAB-M02,
           GT_TRG_ITAB-M03,
           GT_TRG_ITAB-M04,
           GT_TRG_ITAB-M05,
          11 GT_TRG_ITAB-M06,
          13 GT_TRG_ITAB-M07,
          15 GT_TRG_ITAB-M08,
          17 GT_TRG_ITAB-M09,
          19 GT_TRG_ITAB-M10,
          21 GT_TRG_ITAB-M11,
          23 GT_TRG_ITAB-M12.
ENDLOOP.

 

1~12월까지 있는 필드에 값을 넣는 다던지 통계 낼 때 가끔 쓰던 것 같은데 누가 궁금해하길래 내 방식대로 함 짜봤다.

수행하면 서있는 술병 형태의 소스데이터가 엎어진 술병이 된다.