본문 바로가기

ABAP

ABAP 에서 사용되는 유용한 Function

SAP 를 하면서 ABAP 란 언어를 처음 배웠습니다.정말 패쇄적이란 단어가 딱 맞더라고요! 아무데서나 사용해 볼수 잇는 환경도 없고.무조건 회사에서만 하게 되어서 고생을 많이 했습니다.!그러나 하면할수록 정말 잘 만들었구나...누구나 할수 잇겠구나..라는 생각이 많이 들었어요~! 그 와중에 저 스스로 여기저기 인터넷에서 찾은 자료를 정리해 봅니다.!혹시 저작권이란 문제가 발생되면 말씀해 주세요..삭제하게..^^ (이렇게 되면 또 패쇄적이란 단어를 쓸수 있나요?ㅎㅎㅎ)여하튼 노력하는 사람이 금광을 찾는것입니다.! 노력하십시요!

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

 

DATA: IT_HOLI LIKE ISCAL_DAY OCCURS 0 WITH HEADER LINE.

 

LV_ALTIME = DATE_TO – DATE_FROM.

CALL FUNCTION 'HOLIDAY_GET'

        EXPORTING

             HOLIDAY_CALENDAR           = 'E3'    “회사달력지정

             FACTORY_CALENDAR           = 'E3'    “회사달력지정

             DATE_FROM                  = DATE_FROM  “FROM DATE

             DATE_TO                    = DATE_TO    “TO DATE

*    IMPORTING

*         YEAR_OF_VALID_FROM         =

*         YEAR_OF_VALID_TO           =

*         RETURNCODE                 =

         TABLES

              HOLIDAYS                   = IT_HOLI.  “공휴일만 저장된 ITAB.

*    EXCEPTIONS

*         FACTORY_CALENDAR_NOT_FOUND = 1

*         HOLIDAY_CALENDAR_NOT_FOUND = 2

*         DATE_HAS_INVALID_FORMAT    = 3

*         DATE_INCONSISTENCY         = 4

*         OTHERS                     = 5

 

    IF SY-SUBRC <>0.

*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ELSE.

      DESCRIBE TABLE IT_HOLI LINES LINE.      “LINE = 공휴일수

      IF LINE <>0.

        LV_ALTIME = LV_ALTIME - LINE.     “휴무일을 뺀 순수 작업일수

      ENDIF.

    ENDIF.

 

※ FROM DATE = TO DATE 인 경우 해당일자가 휴무일인지를 체크 할 수 있다.

 

특정일자의 달(月)의 마지막 일자를 가져오는 함수.

 

DATA LAST_DATE LIKE SY-DATUM.

 

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

  EXPORTING

    DAY_IN                  = SY-DATUM       “기준이 되는 임의의 일자

IMPORTING

LAST_DAY_OF_MONTH       = LAST_DATE      “해당월의 마지막 일자

* EXCEPTIONS

*   DAY_IN_NO_DATE          = 1

*   OTHERS                  = 2

          .

IF SY-SUBRC <>0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 변수값 ALPHA CONVERSION 함수.

 

DATA: GV_MATNR(18),

TMP_MATNR LIKE MARA-MATNR.

 

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

       EXPORTING

            INPUT  = TMP_MATNR        “ALPHA CONVERSION이 된 변수값

       IMPORTING

            OUTPUT = GV_MATNR.      “ALPHA CONVERSION이 안된 변수값

 

AND

 

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

       EXPORTING

            INPUT  = GV_MATNR        “ALPHA CONVERSION이 안된 변수값

       IMPORTING

            OUTPUT = TMP_MATNR.      “ALPHA CONVERSION이 된 변수값

 

OR

 

CALL FUNCTION 'FI_ALPHA_CONVERT'

       EXPORTING

         I_STRING       = GV_MATNR

       IMPORTING

         E_STRING       = TMP_MATNR.

 

 

GV_MATNR = ‘100060001’.

TMP_MATNR = ‘000000000100060001’.

 

 

INTERNAL TABLE을 TEXT FILE로 내리는 함수.

 

DATA ERFILE  LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\SPEC.TXT'.

 

CALL FUNCTION 'WS_DOWNLOAD'

       EXPORTING

            FILENAME = ERFILE       “PC로 내려오는 파일 이름

            FILETYPE = 'DAT'        “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.        “텍스트로 내릴 ITAB.

 

OR

 

CALL FUNCTION 'DOWNLOAD'

       EXPORTING

            FILENAME = ERFILE       “PC로 내려오는 파일 이름

            FILETYPE = 'DAT'        “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.        “텍스트로 내릴 ITAB.

 

 

PC에 있는 텍스트 파일을 INTERNAL TABLE로 가져오는 함수

 

DATA: ED_FNAME LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\OUT.TXT',

      ED_FTYPE LIKE RLGRAP-FILETYPE VALUE 'DAT'.

 

CALL FUNCTION 'WS_UPLOAD'

       EXPORTING

            FILENAME = ED_FNAME

            FILETYPE = ED_FTYPE    “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.     “텍스트파일의 내용을 가져오는 INTERNAL TABLE

 

OR

 

CALL FUNCTION 'UPLOAD'

       EXPORTING

            FILENAME = ED_FNAME

            FILETYPE = ED_FTYPE    “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.     “텍스트파일의 내용을 가져오는 INTERNAL TABLE

 

 

 

응용 프로그램 실행하는 함수.

 

CALL FUNCTION 'WS_EXECUTE'

       EXPORTING

            PROGRAM = 'C:\SAPPROD\PRT3000.EXE'.     “실행할 응용 프로그램

 

 

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

 

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.

 

 

PC에 있는 파일을 선택할 수 있는 파일선택 창 띄우는 함수

 

DATA: FILENAME(128).

 

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

  EXPORTING

    PROGRAM_NAME        = SYST-REPID

    DYNPRO_NUMBER       = SYST-DYNNR

*   FIELD_NAME          = ' '

*   STATIC              = ' '

*   MASK                = ' '

  CHANGING

    FILE_NAME           = FILENAME      “경로와 파일명이 들어가는 변수

* EXCEPTIONS

*   MASK_TOO_LONG       = 1

*   OTHERS              = 2

          .

IF SY-SUBRC <>0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

 

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

 

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

       EXPORTING

            PERCENTAGE = SY-INDEX

            TEXT       = '데이터를 가져오는 중입니다…'.

 

LOOP문과 함께 사용하면 진행현황을 % 로 표시할 수 있다.

 

 

SAP 오피스의 메일박스에 메일 전송하는 함수

 

DATA : BEGIN OF MS_MAILOBJECT_CONT OCCURS 0.

          INCLUDE STRUCTURE MCMAILOBJ.

DATA : END OF MS_MAILOBJECT_CONT.

 

CLEAR : MS_MAILOBJECT_CONT.

REFRESH : MS_MAILOBJECT_CONT.

 

CONCATENATE '플랜트' WERKS ' 자재코드 ' MATNR

         ' 원가 생성작업을 해 주세요.'

         INTO MS_MAILOBJECT_CONT-OBJLINE.

 

  MOVE : '1' TO MS_MAILOBJECT_CONT-OBJNR,

         '1' TO MS_MAILOBJECT_CONT-OBJLEVEL,

         'RAW' TO MS_MAILOBJECT_CONT-OBJTYPE,

         '원가생성 요청' TO MS_MAILOBJECT_CONT-OBJNAM,

         '원가생성 요청' TO MS_MAILOBJECT_CONT-OBJDES.

  APPEND MS_MAILOBJECT_CONT.

 

  CALL FUNCTION 'MC_SEND_MAIL'

    EXPORTING

      MS_MAIL_SENDMODE         = 'B'

      MS_MAIL_TITLE            = '원가생성요청'

      MS_MAIL_DESCRIPTION      = '원가생성작업을 해주세요'

      MS_MAIL_RECEIVER         = 'ED03'

      MS_MAIL_EXPRESS          = ''      “ X=고속(받는사람의 작업화면에 창이 뜸)

TABLES

      MS_MAIL_CONT              = MS_MAILOBJECT_CONT

.

  IF SY-SUBRC <>0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

 

 

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

 

DATA ANSWER(1).

DATA VALUE1 LIKE SPOP-VARVALUE1.

 

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'

    EXPORTING

      TEXTLINE1            = '서천 외주단가를 입력하세요.'

      TEXTLINE2            = '단가 입력후 계속을 클릭하면 입력.'

      TEXTLINE3            = '취소를 클릭하면 단가입력 취소.'

      TITEL                = '외주단가 입력'

      VALUELENGTH          = 10       “입력받을 길이

   IMPORTING

     ANSWER               = ANSWER     “선택버튼 종류

     VALUE1               = VALUE1.    “입력된 값

*  EXCEPTIONS

*    TITEL_TOO_LONG       = 1

*    OTHERS               = 2

   

사원번호를 가지고 해당 사원명 가져오는 함수

CALL FUNCTION 'RP_CHECK_PERNR'       EXPORTING            BEG    = SY-DATUM              "오늘날짜            PNR    = GV_PERNR              "사원번호       IMPORTING            NAME   = GV_NAME               "사원명       EXCEPTIONS            OTHERS = 1.

문자열에서 특정문자(열) 변경 및 삭제

 

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

 

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

 

T_TEXT : ‘0313709164’

 

 

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

 

DATA: GV_TEXT(10),

GV_DECIMAL(10) TYPE P DECIMALS 3.

 

CALL FUNCTION 'CHAR_FLTP_CONVERSION'

EXPORTING

 STRING     = GV_TEXT        "CHAR 변수

        IMPORTING

          FLSTR     = GV_DECIMAL .    "DEC 변수

 

GV_TEXT : ‘2345.678’

GV_DECIMAL : 2345.678

 

 

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

 

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 <>0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

 

그래픽 구현

 

DATA: BEGIN OF ITAB_DATA OCCURS 0,

           DATANAME(15),

           QUANTITY1 TYPE I,

           QUANTITY2 TYPE I,

           QUANTITY3 TYPE I,

      END OF ITAB_DATA,

      BEGIN OF ITAB_OPTIONS OCCURS 0,

           OPTION(20),

      END OF ITAB_OPTIONS.

 

ITAB_DATA-DATANAME = '국내석건'.

ITAB_DATA-QUANTITY1 = 55.

ITAB_DATA-QUANTITY2 = 62.

ITAB_DATA-QUANTITY3 = 59.

APPEND ITAB_DATA.

ITAB_DATA-DATANAME = '산공생산'.

ITAB_DATA-QUANTITY1 = 35.

ITAB_DATA-QUANTITY2 = 52.

ITAB_DATA-QUANTITY3 = 44.

APPEND ITAB_DATA.

ITAB_DATA-DATANAME = '수출생산'.

ITAB_DATA-QUANTITY1 = 68.

ITAB_DATA-QUANTITY2 = 52.

ITAB_DATA-QUANTITY3 = 79.

APPEND ITAB_DATA.

 

CALL FUNCTION 'GRAPH_MATRIX_3D'

     EXPORTING

          COL1        = '1월'

          COL2        = '2월'

          COL3        = '3월'

          TITL        = '매출금액'

     TABLES

          DATA        = ITAB_DATA

          OPTS        = ITAB_OPTIONS

     EXCEPTIONS

          OTHERS      = 1.

 

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

 

DATA GV_VALUE(5).

GV_VALUE = '1234-'.

 

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'

  CHANGING

    VALUE         = GV_VALUE.

 

GV_VALUE “ ‘-1234’

 

 

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 – 입력값을 받을 수 있는 입력 필드가 생긴다.

 

 

 

문자열 자를 때 자르는 위치에 2BYTE문자가 있는지를 체크하는 함수

 

DATA: LV_LENGTH TYPE I.

 

CALL FUNCTION 'TRUNCATE_MULTIPLE_BYTE_STRING'

  EXPORTING

    STRING              = 'ABDC가1234'

    TARGET_LENGTH       = '5'

  IMPORTING

    USE_LENGTH          = LV_LENGTH

          .

LV_LENGTH 와 TARGET_LENGTH 에서 입력한 값이 일치하면 문제가 없고,

1이 작은 경우 2BYTE 문자가 걸림.

자르는 위치를 LV_LENGTH로 하면 문자가 깨지는 문제가 발생하지 않음.

 

OR

DATA: LV_O_STR(10).

 

CALL FUNCTION 'CUT_2BYTES_STRINGS'

  EXPORTING

    I_STR         = 'AB가나1234'

    I_LEN         = '5'

  IMPORTING

    O_STR         = LV_O_STR

          .

LV_O_STR : ‘AB가’

 

 

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

 

DATA: INPUT TYPE F,

      OUTPUT TYPE F,

      OUTPUT_N(5) TYPE N.

 

INPUT = '1276.65'.

 

CALL FUNCTION 'FIMA_NUMERICAL_VALUE_ROUND'

   EXPORTING

        I_RTYPE = ' '  "반올림

*        I_RTYPE = '+'  "올림

*        I_RTYPE = '-'  "버림

        I_RUNIT = '1'   “기준자리 수

        I_VALUE = INPUT

   IMPORTING

        E_VALUE_RND = OUTPUT.

 

OUTPUT_N = OUTPUT.

 

OUTPUT_N : ‘01277’

 

 

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

 

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.

 

STRING_1_TYPE : NUMC

STRING_2_TYPE : CHAR

STRING_3_TYPE : CHAR

 

 

클립보드에 들어있는 내용을 가져오는 함수

 

DATA: BEGIN OF TAB OCCURS 1,

          TEXT(20) TYPE C,

      END OF TAB.

DATA  EMPTY(1).

 

CLEAR EMPTY.

REFRESH TAB.

FREE TAB.

 

CALL FUNCTION 'CLPB_IMPORT'

       IMPORTING

            EMPTY      = EMPTY

       TABLES

            DATA_TAB   = TAB

       EXCEPTIONS

            CLPB_ERROR = 01.

 

 

 

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

 

DATA: AAA TYPE P.

 

CALL FUNCTION 'EVAL_FORMULA'

  EXPORTING

    FORMULA        = '(10+10)*10/10-7*(5+3)/7'

 IMPORTING

  VALUE          = AAA

          .

 

WRITE AAA.  => ‘12’