Drunken Lion

유용한 SAP Standard Function 본문

SAP/ABAP

유용한 SAP Standard Function

DrkLion 2007. 10. 1. 17:50

 

회사달력의 져오는 함수.

 

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 'Z_BAPI_CA_READ_EXCHANGE_RATE'

      EXPORTING

        DATE = T_ERDAT  "레코드생성일자(가격결정일)

        SOURCE_CURRENCY  = T_WAERK  "원시화폐

      TARGET_CURRENCY  = 'USD'

        COMPANY_CURRENCY = 'KRW'

        TYPE_OF_RATE     = 'M'

        SOURCE_AMOUNT    = LV_ZZAMT  "원시화폐금액

      IMPORTING

        TARGET_AMOUNT    = LV_ZZUSD.  "변환된USD금액

 

 

 

 

 

 

사원번호를 가지 가져오는 함수

 

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              = 'ABDC1234'

    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

 

 
* Origin of an input help 조회
  CALL FUNCTION 'DDIF_TABL_GET'
    EXPORTING
      NAME                = pi_table
      STATE               = c_A
*     LANGU               = ' '
*   IMPORTING
*     GOTSTATE            =
*     DD02V_WA            =
*     DD09L_WA            =
    TABLES
      DD03P_TAB           = lt_dd03p_tab
*     DD05M_TAB           =
*     DD08V_TAB           =
*     DD12V_TAB           =
*     DD17V_TAB           =
      DD35V_TAB           = lt_dd35v_tab
*     DD36M_TAB           =
    EXCEPTIONS
      ILLEGAL_INPUT       = 1
      OTHERS              = 2.


* Value Request 값 추출

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = pi_table
      FIELDNAME                 = pi_field
*     SEARCHHELP                = ' '
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
*     DYNPROFIELD               = ' '
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
      SUPPRESS_RECORDLIST       = c_X
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
    TABLES
      RETURN_TAB                = lt_return_tab
    EXCEPTIONS
      FIELD_NOT_FOUND           = 1
      NO_HELP_FOR_FIELD         = 2
      INCONSISTENT_HELP         = 3
      NO_VALUES_FOUND           = 4
      OTHERS                    = 5.