[SAP] Data Type

이안·2024년 2월 15일

SAP

목록 보기
1/30
post-thumbnail

1. Predefined ABAP TYPE : 이미 정의된 기본데이터 타입

1) 데이터 타입

(1) Numeric Type (숫자)

  • P(Packed Number) : DECIMALS 명시해야 소수점 인식 가능
DATA : GV_NUM1 TYPE P VALUE '1234'. " 1,234 출력
DATA : GV_NUM2 TYPE P DECIMALS 2 VALUE '12.34'. "12.34 출력
  • I(Integer) : 정수. 필드 길이 지정 안함
DATA : GV_NUM3 TYPE I VALUE 1234.
  • N(Numeric Text Field) : 숫자를 C타입으로 표현. 필드 길이 지정만큼 출력
DATA : GV_NUM4 TYPE N VALUE 1234. "길이 지정을 안하면 길이 1로 자동 지정 -> 1 출력
DATA : GV_NUM5 TYPE N LENGTH 2 VALUE 1234. "길이 2 -> 12 출력
DATA : GV_NUM6 TYPE N LENGTH 4 VALUE 1234. "길이 4 -> 1234 출력

(2) Character Types (문자)

  • C(Text Field) : 문자. 필드 길이 필수 지정
DATA : GV_TEXT1 VALUE 'A'. "A 출력
DATA : GV_TEXT2 LENGTH 3 TYPE C VALUE 'ABC'. "ABC 출력
DATA : GV_TEXT3 (5) TYPE C VALUE 'ABCDE'. "ABCDE 출력

TYPE (X) & LENGTH (X) → TYPE C & LENGTH 1
TYPE (O) & LENGTH (X) → LENGTH 1

  • STRING : 가변 길이를 가지는 Predefined ABAP TYPE
DATA : GV_TEXT4 TYPE STRING VALUE 'ABCDE'. "ABCDE 출력
  • D(Date Field) : 날짜. 필드 길이 지정 안함
DATA : GV_DATE TYPE D.
GV_DATE = SY-DATUM. "20231107 출력
  • T(Time Field) : 시간. 필드 길이 지정 안함
DATA : GV_TIME TYPE T.
GV_TIME = SY-UZEIT. "201551 출력

필드 길이 지정 (C, N, P)

  • 문자 길이 반환 : STRLEN (괄호 안에 공백 주의)
DATA : GV_LEN TYPE I.
GV_LEN = STRLEN( GV_TEXT ). "GV_TEXT길이 출력

2) 실습

  • FIND : TEXT 내에서 특정 TEXT 존재 여부 확인
DATA : TEXT1 TYPE STRING,
	   TEXT2(4) TYPE C.

TEXT1 = 'ABAP'.
TEXT2 = 'B'.

FIND TEXT2 IN TEXT1.

IF SY-SUBRC = 0. "정상 실행 되었을 경우
	WRITE TEXT2. "B 출력
ENDIF.
  • REPLACE : TEXT 대치
DATA : TEXT1 TYPE STRING,
	   TEXT2(4) TYPE C.

TEXT1 = 'ABAP'.
TEXT2 = 'BBAP'.

REPLACE TEXT1 IN TEXT1 WITH TEXT2
WRITE : TEXT1. "BBAP 출력
  • TRANSLATE : 변환하기
DATA : TEXT1 TYPE STRING,
	   TEXT2(4) TYPE C.

TEXT1 = 'ABAP'.
TEXT2 = 'abap'.

TRANSLATE TEXT1 TO LOWER CASE.
TRANSLATE TEXT2 TO UPPER CASE.
WRITE :/ TEXT1. "abap 출력
WRITE :/ TEXT2. "ABAP 출력
  • SHIFT : 왼쪽으로 한칸 이동
DATA : TEXT1 TYPE STRING,
	   TEXT2(5) TYPE C.

TEXT1 = ' ABAP'.
TEXT2 = ' ABAP'.

SHIFT TEXT1.
WRITE :/ TEXT1. "ABAP 출력 (왼쪽으로 한 칸 이동 후)
WRITE :/ TEXT2. " ABAP 출력
  • CONDENSE : 공백제거
DATA : TEXT1 TYPE STRING,
	   TEXT2(8) TYPE C,
	   TEXT3(8) TYPE C.

TEXT1 = 'AB  AP'.
TEXT2 = 'AB  AP'.
TEXT3 = 'AB  AP'.

CONDENSE TEXT1.
CONDENSE TEXT2 NO-GAPS. "모든 공백 제거

WRITE :/ TEXT1. "AB AP 출력 (공백 한개 제거)
WRITE :/ TEXT2. "ABAP 출력 (공백 모두 제거)
WRITE :/ TEXT3. "AB  AP 출력
  • OVERLAY : 공백에 문자 합치기
DATA : TEXT1 TYPE STRING,
	   TEXT2(8) TYPE C.

TEXT1 = ' B P'.
TEXT2 = 'AAAA'.

OVERLAY TEXT1 WITH TEXT2. "TEXT1의 공백 위치에 맞게 TEXT2 합치기

WRITE :/ TEXT1. "ABAP 출력 (문자 합쳐진 후)
WRITE :/ TEXT2. "AAAA 출력
  • CONCATENATE : 문자 합치기
DATA : TEXT1 TYPE STRING,
	   TEXT2(4) TYPE C,
	   TEXT3(4) TYPE C.

TEXT1 = 'AB'.
TEXT2 = 'AP'.

CONCATENATE TEXT1 TEXT2 INTO TEXT3. "TEXT3에 TEXT1 + TEXT2 합치기

WRITE :/ TEXT1. "AB 출력
WRITE :/ TEXT2. "AP 출력
WRITE :/ TEXT3. "ABAP 출력
  • SPLIT : 문자 쪼개기
DATA : TEXT1 TYPE STRING,
	   TEXT2(4) TYPE C,
	   TEXT3(4) TYPE C.

TEXT1 = 'AB+AP'.
SPLIT TEXT1 AT '+' INTO TEXT2 TEXT3.

WRITE :/ TEXT1. "AB+AP 출력
WRITE :/ TEXT2. "AB 출력
WRITE :/ TEXT3. "AP 출력
  • 연산자
    +: 더하기
    -: 빼기
    *: 곱하기
    /: 나누기
    DIV: INTEGER 나누기
    MOD: INTEGER 나누기의 나머지
    **: 제곱

2. Local Data Type in program : ABAP 프로그램 내에서 Predefined ABAP TYPE을 이용하여 Local Type 생성

1) TYPE 선언

TYPE T_HELLO(20) TYPE C. "TYPE 선언
DATA : GV_TEXT1 TYPE T_HELLO. "변수 선언
DATA : GV_TEXT2 LIKE GV_TEXT1.

2) Structured TYPE 선언

(1) 구조체 타입 선언 → 변수 선언

  • 구조체 TYPE 선언

    TYPES : BEGIN OF T_ZEDT05,
        ZCODE TYPE C LENGTH 10,
        ZKNAME TYPE C LENGTH 20,
        ZENAME TYPE C LENGTH 20,
    END OF Z_ZEDT05.
  • 구조체 변수 선언

    DATA : GS_ZEDT05 TYPE T_ZEDT05.
    
    GS_ZEDT05-ZCODE = 'CODE-01'.
    GS_ZEDT05-ZKNAME = '차은우'.
    GS_ZEDT05-ENAME = 'CHA'.

(2) 구조체 TYPE, Nested TYPE선언 → 구조체 변수 선언

  • 구조체 TYPE 선언

    TYPES : BEGIN OF T_ZEDT05, "학생정보 마스터
        ZCODE TYPE C LENGTH 10,
        ZKNAME TYPE C LENGTH 20,
        ZENAME TYPE C LENGTH 20,
    END OF Z_ZEDT05.
    
    TYPES : BEGIN OF T_ZEDT05_2. "학생정보 마스터 + 추가정보
        INCLUDE TYPE T_ZEDT05.
        TYPES : ZTITLE TYPE C LENGTH 10,
                      ZGRADE TYPE C LENGTH 1,
    END OF T_ZEDT05_02.
  • 구조체 변수 선언

    DATA : GS_ZEDT05 TYPE T_ZEDT05_2.
    
    GS_ZEDT05-ZCODE = 'CODE-01'.
    GS_ZEDT05-ZKNAME = '차은우'.
    GS_ZEDT05-ENAME = 'CHA'.
    GS_ZEDT05-ZTITLE = '컴퓨터공학과'.
    GS_ZEDT05-ZGRADE = '4'.

(3) DATA BEGIN OF ~ END OF

  • DATA 변수 선언 (타입 + 변수 선언)

    DATA : BEGIN OF GS_ZEDT05, "학생정보 마스터
        ZCODE TYPE C LENGTH 10,
        ZKNAME TYPE C LENGTH 20,
        ZENAME TYPE C LENGTH 20,
    END OF GS_ZEDT05.
    
    GS_ZEDT05-ZCODE = 'CODE-01'.
    GS_ZEDT05-ZKNAME = '차은우'.
    GS_ZEDT05-ENAME = 'CHA'.

(4) BEGIN OF, Nested TYPE 선언 ~ END OF

  • DATA 변수 선언 (타입 + 변수 선언)

    DATA : BEGIN OF GS_ZEDT05, "학생정보 마스터
        ZCODE TYPE C LENGTH 10,
        ZKNAME TYPE C LENGTH 20,
        ZENAME TYPE C LENGTH 20,
    END OF GS_ZEDT05.
    
    DATA : BEGIN OF GS_ZEDT05_2. "학생정보 마스터 + 추가정보
        INCLUDE STRUCTURE GS_ZEDT05.
        TYPES : ZTITLE TYPE C LENGTH 10,
                ZGRADE TYPE C LENGTH 1,
    END OF GS_ZEDT05_02.
    
    GS_ZEDT05-ZCODE = 'CODE-01'.
    GS_ZEDT05-ZKNAME = '차은우'.
    GS_ZEDT05-ENAME = 'CHA'.
    GS_ZEDT05-ZTITLE = '컴퓨터공학과'.
    GS_ZEDT05-ZGRADE = '4'.
    GS_ZEDT05-ZGRADE = GS_ZEDT05-ZGRADE && '학년'. "4학년 출력 (ZGRADE 길이조정 필요)

3. Global Data Type in ABAP Dictionary : 모든 프로그램에서 사용 할 수 있는 Global Data Type

1) Table, View를 이용한 TYPE 선언

  • ABAP Dictionary Table을 통한 구조체 선언
*ABAP Dictionary TABLE 참고하여 구조체 + 변수 선언
DATA : GS_ZEDT05 TYPE ZEDT05_001. 
    
GS_ZEDT05-ZCODE = 'CODE-01'.
GS_ZEDT05-ZKNAME = '차은우'.
GS_ZEDT05-ENAME = 'CHAE'.
GS_ZEDT05-ZGENDER = 'M'.
GS_ZEDT05-ZTEL = '01012345678'.
  • ABAP Dictionary Table 개별 필드를 통한 변수 선언 (90%이상 사용 방법)
*ABAP Dictionary TABLE 참고하여 Table개별 필드 참고하여 변수 선언
DATA : BEGIN OF GS_ZEDT05,
    	ZCODE TYPE ZEDT05_001-ZCODE,
    	ZKNAME TYPE ZEDT05_001-ZKNAME,
    	ZENAME TYPE ZEDT05_001-ZENAME,
    	ZGENDER TYPE ZEDT05_001-ZGENDER,
    	ZTEL TYPE ZEDT05_001-ZTEL,
END OF GS_ZEDT05.
    
GS_ZEDT05-ZCODE = 'CODE-01'.
GS_ZEDT05-ZKNAME = '차은우'.
GS_ZEDT05-ENAME = 'CHA'.
GS_ZEDT05-ZGENDER = 'M'.
GS_ZEDT05-ZTEL = '01012345678'.

2) DATA TYPE을 이용한 TYPE 선언

  • DATA Element
*DATA ELEMENT참고하여 TYPE + 변수 선언
DATA : BEGIN OF GS_ZEDT05,
    	ZCODE TYPE ZCODE05,
    	ZKNAME TYPE KNAME05,
    	ZENAME TYPE ZENAME05,
    	ZGENDER TYPE ZGENDER05,
    	ZTEL TYPE ZTEL05,
END OF GS_ZEDT05.
    
GS_ZEDT05-ZCODE = 'CODE-01'.
GS_ZEDT05-ZKNAME = '차은우'.
GS_ZEDT05-ENAME = 'CHA'.
GS_ZEDT05-ZGENDER = 'M'.
GS_ZEDT05-ZTEL = '01012345678'.
  • STRUCTURE를 이용한 TYPE 선언
*ABAP Dictionary Structure참고 하여 TYPE + 변수 선언
DATA : GS_ZEDS05 TYPE ZEDS05_001.
    
GS_ZEDS05-ZCODE = 'CODE-01'.
GS_ZEDS05-ZKNAME = '차은우'.
GS_ZEDS05-ENAME = 'CHA'.
GS_ZEDS05-ZGENDER = 'M'.
GS_ZEDS05-ZTEL = '01012345678'.
  • TYPE Group을 이용한 TYPE 선언 (TYPE Group 생성하기)
TYPE-POOL ZTG05.
        
TYPES : BEGIN OF ZTG05_ZED05,
  ZCODE(10) TYPE C,
  ZKNAME(10) TYPE C,
  ZENAME(10) TYPE C,
  ZGENDER(1) TYPE C,
  ZTEL(16) TYPE C,
END OF ZTG05_ZED05.
        
TYPES ZTG05_ZTITLE(10) TYPE C.
  • 프로그램 내에서 TYPE 선언
*TYPE GROUP 참고하여 TYPE + 변수 선언
DATA : GS_ZEDG05 TYPE ZTG05_ZED05.
DATA : GV_ZTITLE TYPE ZTG05_ZTITLE.
        
GS_ZEGS05-ZCODE = 'CODE-01'.
GS_ZEGS05-ZKNAME = '차은우'.
GS_ZEGS05-ENAME = 'CHA'.
GS_ZEGS05-ZGENDER = 'M'.
GS_ZEGS05-ZTEL = '01012345678'.
GV_ZTITLE = '컴퓨터학부'.

참고사항

  • TYPE 뒤에 ELEMENT가 올 경우 앞은 변수가 됨.
DATA : GV_ZCODE1 TYPE ZCODE05.
DATA : GV_ZCODE2 TYPE ZEDT05_001-ZCODE.
  • TYPE 뒤에 TABLE이 올 경우 앞에는 STRUCTURE가 됨
DATA : GS_ZEDT05 TYPE ZEDT05_001.
  • 구조체가 아닌 테이블이 필요할 경우 (TYPE TABLE OF)
DATA : GT_ZEDT05 TYPE TABLE OF ZEDT05_001.

0개의 댓글