SAP

자주 쓰는 FUNCTION 모음

selectall 2025. 12. 8. 10:44

CONVERSION_EXIT_ALPHA_OUTPUT

: 변수 값 ALPH CONVERSION 함수.

**진짜 많이 쓰임- 오더 번호 데이터 타입, 길이가 각 회사마다 다를 수 있기 때문**

: 데이터 값의 0을 빼거나 추가해주는 함수.

DATA LV_NUM TYPE N LENGTH 5.
DATA LV_CHAR TYPE C LENGTH 5.

LV_NUM = 5.     "00005" 
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_NUM     "00005" 
IMPORTING
OUTPUT = LV_CHAR.     "5" 
CL_DEMO_OUTPUT=>DISPLAY( LV_CHAR ).

"같은 의미의 신문법 사용"
LV_CHAR = |{ LV_NUM ALPHA = OUT }|.
CL_DEMO_OUTPUT=>DISPLAY( LV_CHAR ).
 

 

CONVERSION_EXIT_ALPHA_INPUT

DATA LV_CHAR TYPE C LENGTH 5.

LV_CHAR = 5.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_CHAR        "5"
IMPORTING
OUTPUT = LV_CHAR.    "00005"

CL_DEMO_OUTPUT=>DISPLAY( LV_CHAR ).

"신문법"
LV_CHAR = |{ LV_CHAR ALPHA = IN }|.
CL_DEMO_OUTPUT=>DISPLAY( LV_CHAR ).

 


FI_ALPHA_CONVERT

DATA: GV_MATNR(18),
      TMP_MATNR LIKE MARA-MATNR.

GV_MATNR = '100060001'.

CALL FUNCTION 'FI_ALPHA_CONVERT'
       EXPORTING
         I_STRING       = GV_MATNR
       IMPORTING
         E_STRING       = TMP_MATNR.

IF SY-SUBRC EQ 0.

  WRITE: 'TMP_MATNR: ', TMP_MATNR.

ENDIF.
 

 

END_OF_MONTH_DETERMINE

: 특정일자의 해당월의 마지막 일을 가져오는 함수.

DATA TMP_LASTDAY(2).

CALL FUNCTION 'END_OF_MONTH_DETERMINE'
    EXPORTING
      DATUM = SY-DATUM         "기준이 되는 일자
    IMPORTING
      TT = TMP_LASTDAY         "해당월의 마지막 일(28,29,30,31)
    EXCEPTIONS
      OTHERS = 1.

 IF SY-SUBRC = 0.

   WRITE: '해당 월의 마지막 일: ', TMP_LASTDAY.

 ENDIF.
 

 

 


RH_PM_CONVERT_DATE_TO_MONTH

: 두 일자 사이의 개월 수를 계산하는 함수.

DATA: GV_BEGDA      TYPE P1000-BEGDA,
      GV_ENDDA      TYPE P1000-BEGDA VALUE '20230506',
      ACT_MONTHS(2) TYPE N.

GV_BEGDA = SY-DATUM.

CALL FUNCTION 'RH_PM_CONVERT_DATE_TO_MONTH'
  EXPORTING
    BEGDA  = GV_BEGDA      "시작일자
    ENDDA  = GV_ENDDA      "종료일자
  IMPORTING
    MONTHS = ACT_MONTHS    "개월수
* EXCEPTIONS
*   INVALID_BEGDA       = 1
*   OTHERS = 2
  .
IF SY-SUBRC EQ 0.

  WRITE: '정규직 전환까지...', ACT_MONTHS, '개월 남았다.'.

ENDIF.
 


CLOI_PUT_SIGN_IN_FRONT

: 뒤에 붙은 '-' 부호를 앞으로 빼주는 함수.

DATA GV_VALUE(5).

GV_VALUE = '1234-'.

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
  CHANGING
    VALUE         = GV_VALUE.

IF SY-SUBRC = 0.

  WRITE: '결과: ', GV_VALUE.

ENDIF.
 

STRING_REPLACE

: 문자열에서 특정문자(열)변경 및 삭제 함수.

**핸드폰번호 010-1234-5678 에서 '-' 없애기**

DATA: T_TEXT(30) VALUE '031-370-9164',
      NO_DASH(30).

CALL FUNCTION 'STRING_REPLACE'
  EXPORTING
    PATTERN             = '-'   " 변경할 문자열
    SUBSTITUTE          = ''    " 변경될 문자열
*   MAX_REPLACES        = 0 *
  IMPORTING
    NUMBER_OF_REPLACES  = NO_DASH
  CHANGING
    TEXT                = T_TEXT    " 문자열이 들어있는 문장
  EXCEPTIONS
    WRONG_STRING_LENGTH = 1
    OTHERS              = 2.

IF SY-SUBRC = 0.

  WRITE: '결과: ', T_TEXT.
ENDIF.
 

EVAL_FORMULA

: 문자열로된 계산식의 계산값을 RETURN 하는 함수

DATA: AAA TYPE P.

CALL FUNCTION 'EVAL_FORMULA'
  EXPORTING
    FORMULA = '(10+10)*10/10-7*(5+3)/7'
  IMPORTING
    VALUE   = AAA.

IF SY-SUBRC = 0.

  WRITE: 'RESULT: ', AAA.

ENDIF.
 

NUMERIC_CHECK

: 문자열에 있는 값이 숫자만으로 되어있는지 문자가 포함됐는지 체크하는 함수

DATA: STRING_1(20) TYPE C, STRING_1_TYPE(4) TYPE C,
      STRING_2(20) TYPE C, STRING_2_TYPE(4) TYPE C,
      STRING_3(20) TYPE C, STRING_3_TYPE(4) TYPE C.

STRING_1 = '12345678901234567890'.
STRING_2 = 'abcdefg우리나라만세z'.
STRING_3 = 'abcdAAA34557azzidfll'.

CALL FUNCTION 'NUMERIC_CHECK'
     EXPORTING
          STRING_IN = STRING_1
     IMPORTING
          HTYPE     = STRING_1_TYPE.

CALL FUNCTION 'NUMERIC_CHECK'
     EXPORTING
          STRING_IN = STRING_2
     IMPORTING
          HTYPE     = STRING_2_TYPE.

CALL FUNCTION 'NUMERIC_CHECK'
     EXPORTING
          STRING_IN = STRING_3
     IMPORTING
          HTYPE     = STRING_3_TYPE.

 IF SY-SUBRC = 0.

 WRITE: 'STRING_1: ', STRING_1_TYPE,/
        'STRING_2: ', STRING_2_TYPE,/
        'STRING_3: ', STRING_1_TYPE.

 ENDIF.
 

FIMA_NUMERICAL_VALUE_ROUND

: 반올림, 올림, 버림을 쉽게 할 수 있는 함수

DATA: INPUT TYPE F,
      OUTPUT TYPE F,
      OUTPUT_N(5) TYPE N.

INPUT = '1276.65'.

CALL FUNCTION 'FIMA_NUMERICAL_VALUE_ROUND'
   EXPORTING
*        I_RTYPE = ' '  "반올림        "3개의 값 중 하나 EXPORTING"
        I_RTYPE = '+'  "올림
*        I_RTYPE = '-'  "버림
        I_RUNIT = '1'   "기준자리 수
        I_VALUE = INPUT
   IMPORTING
        E_VALUE_RND = OUTPUT.

OUTPUT_N = OUTPUT.          "정확한 길이 필요. 없다면 뒤에 계속 0임"

IF SY-SUBRC = 0.

  WRITE: 'OUTPUT: ', OUTPUT_N.

ENDIF.
 

HOLIDAY_GET

: 회사달력의 공휴일만 가져오는 함수.

DATA: IT_HOLI   LIKE TABLE OF ISCAL_DAY,
      LV_TO     TYPE SCAL-DATE,
      LV_FROM   TYPE SCAL-DATE.

LV_FROM = '20250101'.
LV_TO   = SY-DATUM.

CALL FUNCTION 'HOLIDAY_GET'
  EXPORTING
    HOLIDAY_CALENDAR = 'KR'        " 회사달력지정
    FACTORY_CALENDAR = 'KR'        " 회사달력지정
    DATE_FROM        = LV_FROM     " FROM DATE
    DATE_TO          = LV_TO       " TO DATE
  TABLES
    HOLIDAYS         = IT_HOLI.    " 공휴일만 저장된 ITAB.

IF SY-SUBRC EQ 0.
  CL_DEMO_OUTPUT=>DISPLAY( IT_HOLI ).
ENDIF.
 

SAPGUI_PROGRESS_INDICATOR

: 하단의 상태바에 특정문자열을 표시해 주는 함수.

 " 조회조건 자재 추출 
 SELECT MATNR, '        ' AS INDEX
    FROM MARA
   WHERE MATNR IN @S_MATNR
    ORDER BY MATNR
    INTO TABLE @DATA(LT_MARA).

" 총 ITAB 라인 ㅅ
  DESCRIBE TABLE LT_MARA LINES DATA(LV_LINES).

" 데이터 가공 진행 상태 표시
  LOOP AT LT_MARA ASSIGNING FIELD-SYMBOL(<FS_MARA>).

    DATA(LV_INDEX)     = SY-TABIX.      " N 번째
    <FS_MARA>-INDEX    = SY-TABIX.
    DATA(LV_PROGRESSS) = LV_INDEX * 100 / LV_LINES.    " 총 N개의 ITAB 라인중 N 퍼센트

    " PROGRESS INDICATOR - +10%마다 진행 상태 표시
    IF LV_PROGRESSS MOD 10 EQ 0.
      TRY.
          CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
            EXPORTING
              PERCENTAGE = LV_PROGRESSS
              TEXT       = |처리 중... { LV_PROGRESSS }% ( { LV_INDEX } / { LV_LINES } )|.
        CATCH CX_ROOT.
      ENDTRY.
    ENDIF.

  ENDLOOP.

  CL_DEMO_OUTPUT=>DISPLAY( LT_MARA ).


POPUP_TO_GET_ONE_VALUE

: 하나의 입력값을 받는 POPUP창 띄우는 함수

DATA: LV_ANSWER(1),
      LV_VALUE1 LIKE SPOP-VARVALUE1.

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'
  EXPORTING
    TEXTLINE1      = '이름을 입력하세요'
    TEXTLINE2      = '이름 입력 후 Continue 클릭하면 입력됩니다'
    TEXTLINE3      = 'Cancel 클릭하면 이름 입력 취소됩니다'
    TITEL          = '팝업창'
    VALUELENGTH    = 10  		   “입력받을 길이
  IMPORTING
    ANSWER         = LV_ANSWER     “ 선택버튼 종류  " 계속 = 'J', 취소 = 'A'
    VALUE1         = LV_VALUE1.    “ 입력된 값
 

POPUP 관련 함수들

POPUP_TO_CONFIRM_LOSS_OF_DATA - user가 delete명령같은 것을 실행할 때 dialog box생성한다.
POPUP_TO_CONFIRM_STEP - user가 다음 단계로 실행을 원할 때 dialog box 를 생성한다.
POPUP_TO_CONFIRM_WITH_MESSAGE - user가 수행중 어떤 특정한 결정을 내리는 부분에 있을 때, 정보제공 dialog box를 생성한다.
POPUP_TO_CONFIRM_WITH_VALUE - user가 특정한 object로 작업을 수행하기를 원할 때 question box를 생성한다.
POPUP_TO_DECIDE - user에게 radio button을 제공하여 결정하게 한다.
POPUP_TO_DECIDE_WITH_MESSAGE -  user에게 분류된 text를 제공함으로써 결정하게 하는 dialog box를 생성한다.
POPUP_TO_DISPLAY_TEXT - 두 줄로 된 dialog box를 생성한다.POPUP_TO_SELECT_MONTH - 달을 선택하게 한다.
POPUP_WITH_TABLE_DISPLAY - 유저에게 선택한 table을 table line값과 함께 보여준다.
POPUP_TO_FILL_COMMAND_LINE – 입력값을 받을 수 있는 입력 필드가 생긴다.
 
 

CHAR_FLTP_CONVERSION

: 소수점이 있는 문자열을 DECIMAL TYPE으로 변환하는 함수

DATA: GV_TEXT(10)    VALUE '2345.6708',
      GV_DECIMAL(10) TYPE P DECIMALS 3.

CALL FUNCTION 'CHAR_FLTP_CONVERSION'
  EXPORTING
    STRING = GV_TEXT        "CHAR 변수
  IMPORTING
    FLSTR  = GV_DECIMAL.    "DEC 변수
 

'SAP' 카테고리의 다른 글

원하는 CELL 시작 위치 설정 [ SET_CURRENT_CELL_BASE ]  (0) 2025.12.09
Field Catalog NO_OUT  (0) 2025.12.08
NEW SYNTAX  (0) 2025.12.05
Field Catalog / Layout / Sort  (0) 2025.12.05
Hotspot_click 핫해 핫해  (0) 2025.12.05