SAP·ABAP/ABAP

ABAP 신문법 - 데이터선언, ALPHA Conversion, Currency, SIGN, VALUE #구문,

SEO_Joon 2025. 11. 5. 09:58

*&---------------------------------------------------------------------*
*& 데이터 선언
*&
*& 변수를 선언함과 동시에 값을 입력하며,
*&          변수의 타입이 입력 값에 의해 자동으로 결정됩니다.
*&---------------------------------------------------------------------*
" 기존 문법
*DATA : LV_CHAR TYPE C LENGTH 4.
*
*LV_CHAR = 'CHAR'.

"신규 문법
DATA(LV_CHAR) = 'CHAR'.
LV_CHAR = 'CHACHACHA'.   "<= WRITE 하면 CHAC 출력됨.

"신규 문법 사용시,
"LV_CHAR은 길이 4로 정해져 있어서, 길게쓰면 데이터 안들어감.

WRITE / : LV_CHAR.
"CHEAR 문자 / STRING 문자열

**********************************************************************
" INT 선언(정수형)
DATA(LV_INT) = 1234.

LV_INT = 123411111. "10자리 넘어가면 덤프

WRITE / : LV_INT.

**********************************************************************
"STRING TYPE 선언(문자열, 길이제한X)
DATA(LV_STRING) = |HELLO WORD|.

WRITE / : LV_STRING.

*&---------------------------------------------------------------------*
*& 문자열 표현
*& ABAP 에 String Template 이 도입되면서 간단히 문자열을 조작하는 기능 추가
*& 문자열을 조작할 수 있는 18 개의 신규 명령어 존재
*& ALPHA CONVERSION, CURRENCY , SIGN
*&---------------------------------------------------------------------

*--------------------------------------------------------------------*
* ALPHA CONVERSION
*--------------------------------------------------------------------*
"기존문법
DATA : LV_ALPHA_1 TYPE STRING VALUE '000012345',
       LV_ALPHA_2 TYPE STRING VALUE '333'.

DATA   LV_ALPHA_C TYPE C LENGTH 10.
DATA   LV_ALPHA_S TYPE STRING .

* STRING은 가변길이 타입이라 입력값으로 길이가 정해짐


" <0제거 FUNCTION>
*CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*  EXPORTING
*    INPUT  = LV_ALPHA_1
*  IMPORTING
*    OUTPUT = LV_ALPHA_1.
"결과 => 12345

" <0 더하기 FUNCTION>
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  EXPORTING
    INPUT  = LV_ALPHA_2 "TYPE STRING VALUE '333'
  IMPORTING
    OUTPUT = LV_ALPHA_C. "TYPE C LENGTH 10.
"결과 => 0000000333

*CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*  EXPORTING
*    INPUT  = LV_ALPHA_2 "TYPE STRING VALUE '333'
*  IMPORTING
*    OUTPUT = LV_ALPHA_S. "TYPE STRING
"결과 => 333

"신규문법
DATA : LV_ALPHA_O(10) TYPE C.
LV_ALPHA_O = '0000012345'.

DATA : LV_AHPHA_I TYPE C.
LV_AHPHA_I = '12345'.

DATA : LV_AHPHA_D TYPE C.
LV_AHPHA_D = '3'.

*LV_ALPHA_O = |{ LV_ALPHA_O ALPHA = OUT }|. " 0제거
LV_ALPHA_O = |{ LV_AHPHA_D ALPHA = IN  }|.  " 0 추가

*--------------------------------------------------------------------*
* CURRENCY
*--------------------------------------------------------------------*

DATA : LV_WRBTR   TYPE BSEG-WRBTR,
       LV_CUR(15) TYPE C.

CLEAR : LV_WRBTR.

LV_WRBTR = '100'.

WRITE / : LV_WRBTR. "초기값 100.00
"신규문법
LV_WRBTR = |{ LV_WRBTR CURRENCY = 'KRW' }|.
"결과 => 10000.00

*LV_CUR = |{ LV_NUM CURRENCY = 'KRW' }|.

WRITE / : LV_WRBTR.

*--------------------------------------------------------------------*
* SIGN
*--------------------------------------------------------------------*
DATA : LV_NUM TYPE I.
LV_NUM = '30'.

*DATA(LV_SIGN) = |{ LV_NUM SIGN = LEFTPLUS }|. "결과 => +30
*DATA(LV_SIGN) = |{ LV_NUM SIGN = RIGHTPLUS }|. "결과 => 30+
*DATA(LV_SIGN) = |{ LV_NUM SIGN = LEFT }|.
DATA(LV_SIGN) = |{ LV_NUM SIGN = LEFTSPACE }|. "결과 => 한칸띄고 30
WRITE / : LV_SIGN.


*&---------------------------------------------------------------------*
*& VALUE 키워드
*&
*& 스트럭쳐나 인터널 테이블에 VALUE 키워드로 값을 구성하여 직접 입력함.
*& 스트럭쳐를 일일이 테이블에 APPEND 해주던 방식이 아닌,
*& 값을 직접 입력하는 방식을 활용할 수 있습니다.
*& 기존에 값이 있는 ITAB 에 APPEND 를 하려면 BASE 키워드를 이용합니다.
*&---------------------------------------------------------------------*

TYPES : BEGIN OF T_S_DATA,
          ID       TYPE CHAR4,
          NAME     TYPE CHAR4,
          VALUE(5) TYPE I,
        END OF T_S_DATA.

DATA : LT_USER TYPE TABLE OF T_S_DATA,
       LS_USER TYPE T_S_DATA.

"기존 문법
*CLEAR : LS_USER.
*LS_USER-ID    = '1111'.
*LS_USER-NAME  = 'LJH'.
*LS_USER-VALUE = 1000.
*APPEND LS_USER TO LT_USER.
*
*
*CLEAR : LS_USER.
*LS_USER-ID    = '2222'.
*LS_USER-NAME  = 'HSY'.
*LS_USER-VALUE = 2000.
*APPEND LS_USER TO LT_USER.
*
*
*CLEAR : LS_USER.
*LS_USER-ID    = '3333'.
*LS_USER-NAME  = 'HSY'.
*LS_USER-VALUE = 3000.
*APPEND LS_USER TO LT_USER.

"신규 문법
"1. ITAB에 값이 없을때, APPEND 하기
LT_USER = VALUE #(
                    ( ID = '4444' NAME = 'AAA' VALUE = 4000 )
                    ( ID = '5555' NAME = 'BBB' VALUE = 5000 )
                    ( ID = '6666' NAME = 'CCC' VALUE = 6000 ) ).

"2. ITAB에 값이 있는경우, APPEND 하기 => BASE 키워드 이용

LT_USER = VALUE #(
                    BASE LT_USER
                    ( ID = '7777' NAME = 'DDD' VALUE = 7000 )
                    ( ID = '8888' NAME = 'EEE' VALUE = 8000 ) ).

'SAP·ABAP > ABAP' 카테고리의 다른 글

ABAP 신문법 - Reduce  (0) 2025.11.05
ABAP 신문법 - Move  (0) 2025.11.05
ABAP 신문법 - for in 예시  (0) 2025.11.05
RTTS 필드카탈로그 만들기 예시코드  (0) 2025.11.05
Eclipse ABAP 개발 툴 설치 가이드  (0) 2025.11.05