1. 程式人生 > 其它 >ABAP學習(35):常用Function

ABAP學習(35):常用Function

ABAP Function

ABAP Coding過程中比較好用的Function整理。

1.獲取Domain資訊

程式碼例項:

"********************************獲取domain
FORM f_get_domain.
  DATA:fs_taba TYPE dd07v.
  DATA:it_taba TYPE STANDARD TABLE OF dd07v.
  DATA:it_tabb TYPE STANDARD TABLE OF dd07v.

  CALL FUNCTION 'DD_DOMA_GET'
    EXPORTING
      DOMAIN_NAME   
'XXX'       LANGU         = SY-LANGU       WITHTEXT      'X'     TABLES       DD07V_TAB_A   = it_taba       DD07V_TAB_N   = it_tabb     EXCEPTIONS       ILLEGAL_VALUE 1       OP_FAILURE    2       OTHERS        3.   IF SY-SUBRC = 0.     LOOP AT  it_taba INTO fs_taba.       WRITE:/ sy-tabix,fs_taba-domvalue_l,fs_taba-ddtext.     
ENDLOOP.     LOOP AT it_tabb INTO fs_taba.       WRITE:/ sy-tabix,fs_taba-domvalue_l,fs_taba-ddtext.     ENDLOOP.   ENDIF. ENDFORM.

2.非金額單位資料轉換

程式碼例項:

"*************************單位資料轉換
FORM f_change_unit.
  DATA:v_out TYPE P DECIMALS 1.
  DATA:v_in TYPE P DECIMALS 1 VALUE 1000.
  CALL FUNCTION 'UNIT_CONVERSION_SIMPLE
'     EXPORTING       INPUT                      = v_in *     NO_TYPE_CHECK              = 'X' *     ROUND_SIGN                 = ' '       UNIT_IN                    = 'G'       UNIT_OUT                   'KG'     IMPORTING       OUTPUT                     = v_in.   IF SY-SUBRC <> 0.     MESSAGE s000 WITH 'error'.   ELSE.     MESSAGE s000 WITH v_in. *  Implement suitable error handling here   ENDIF. ENDFORM.

3.獲取金額轉換匯率

程式碼例項:

"獲取匯率轉換匯率
FORM f_get_rate.
  DATA:lv_type TYPE tcurr-kurst.
  DATA:lv_rate TYPE P LENGTH 15 DECIMALS 2.
  DATA:lv_msg TYPE string.
  lv_type 'AVTW'.
  "獲取匯率
  CALL FUNCTION 'READ_EXCHANGE_RATE'
    EXPORTING
      CLIENT           = sy-mandt
      DATE             = sy-datum
      FOREIGN_CURRENCY 'RMB'
      LOCAL_CURRENCY   'USD'
      TYPE_OF_RATE     = lv_type
    IMPORTING
      EXCHANGE_RATE    = lv_rate
    EXCEPTIONS
      NO_RATE_FOUND 1
      NO_FACTORS_FOUND 2
      NO_SPREAD_FOUND 3
      DERIVED_2_TIMES 4
      OVERFLOW 5
      ZERO_RATE 6.
  IF sy-subrc <> 0.
    lv_msg 'Get exchange rate failed!'.
    MESSAGE lv_msg TYPE 'E'.
  ELSE.
    lv_msg 'Translate RMB TO USD Rate:' && lv_rate.
    MESSAGE lv_msg TYPE 'S'.
  ENDIF.
ENDFORM.

4.字串轉換到字串內表

Function Group:SCMS_CONV

字串轉換到字串內表:SCMS_STRING_TO_FTEXT

字串轉換成Xstring: SCMS_STRING_TO_XSTRING

字串內錶轉換Xstring: SCMS_FTEXT_TO_XSTRING

字串內錶轉換String: SCMS_FTEXT_TO_STRING

程式碼例項:

"***********************字串轉換為字串內表
FORM f_trans_strtoitab.
  TYPES:BEGIN OF t_str,
        str(255TYPE C,
        END OF t_str.
  DATA:lt_str TYPE TABLE OF t_str.
  DATA:ls_str LIKE LINE OF lt_str.
  DATA:lv_length TYPE i.
  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
    EXPORTING
      TEXT            = 'hello world懶得看繳費對的看法角度abcdef'
    IMPORTING
      LENGTH          = lv_length
    TABLES
      FTEXT_TAB       = lt_str.
  WRITE:/ lv_length.
  LOOP AT lt_str INTO ls_str.
    WRITE:/ ls_str-str.
  ENDLOOP.
ENDFORM.

5.根據字串公式計算值

程式碼例項:

"******************通過公式計算分數
TYPES:t_p TYPE p LENGTH 15 DECIMALS 2.
FORM f_calculate_formula
  USING iv_formula TYPE string
  CHANGING ev_result TYPE t_p.
  DATA:lv_qsollwerte TYPE qsollwerte.
  DATA:lv_float TYPE float.

  CALL FUNCTION 'EVAL_FORMULA'
    EXPORTING
      formula = iv_formula
    IMPORTING
      value = lv_float.

  ev_result = lv_float.
ENDFORM.
FORM f_test_cal.
  DATA:lv_formula TYPE string.
  DATA:lv_res TYPE P LENGTH 15 DECIMALS 2.

  lv_formula '1000/200+20*(0.25/1.2)*10'.
  PERFORM f_calculate_formula USING lv_formula CHANGING lv_res.
  lv_res = lv_res.
  WRITE:/ lv_res.
ENDFORM.

6.字串前導0的新增與刪除

程式碼例項:

"******************字串前補0,刪除前導0
FORM f_numb_0.
  "*******************************************數字符串前補0
  WRITE:/'數字字串前補0'.
  DATA: input_p(3) type N value '344'.
  DATA: output_p(20) type N.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT         = input_p
   IMPORTING
     OUTPUT        = output_p
            .
  WRITE:/ input_p,'----', output_p.

  "*****************************************消除數字符串前0
  DATA: input_p1(10) type N value '00034'.
  DATA: output_p1(3) type N .
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT         = input_p1
   IMPORTING
     OUTPUT        = output_p1
     .
  WRITE:/ input_p1,'----',output_p1.
ENDFORM.

7.全形半形轉換

程式碼例項:

"*******************************全形半形轉換
FORM f_change_quanjiao.
  DATA:lv_c TYPE C  LENGTH 20.
  lv_c '  hello自大'.

  "全形轉換半形
  CALL FUNCTION 'SJIS_DBC_TO_SBC'
    EXPORTING
      ALL 'X'
  CHANGING
    TEXT = lv_c.
  IF SY-SUBRC <> 0.

  ELSE.
    WRITE:/ lv_c.
    CONDENSE lv_c NO-GAPS.
    WRITE:/ lv_c.
  ENDIF.

  "半形轉換全形
  CALL FUNCTION 'SJIS_SBC_TO_DBC'
    EXPORTING
      ALL   'X'
*   IMPORTING
*     CONVERTED              =
*     HIT                    =
    CHANGING
      TEXT  = lv_c
    EXCEPTIONS
      OVERFLOW               1
      OTHERS                 2.
  IF SY-SUBRC <> 0.
    MESSAGE 'error' TYPE 'E'.
  ELSE.
    WRITE:/ lv_c.
  ENDIF.
ENDFORM.