ABAP常用函数

ABAP常用函数

一、基本计量单位文本计算函数

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
  EXPORTING
    INPUT                = ITAB1-ZIEME
*   LANGUAGE             = SY-LANGU
  IMPORTING
*   LONG_TEXT            =
    OUTPUT               = ITAB1-ZIEME
*   SHORT_TEXT           =
  EXCEPTIONS
    UNIT_NOT_FOUND       = 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 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT         = INVALUE
    IMPORTING
      OUTPUT        = OUTVALUE
            .

说明:输入纯数字,输出补全零的数字。

在外部数据存到SAP里面的时候,转换格式使用的。

ABAP中,常用函数分为**字符串处理**、**日期时间处理**、**数学计算**、**内表操作**、**类型转换**和**系统信息获取**等类别。以下是详细分类及示例: --- ## **1. 字符串处理函数** ### **1.1 `CONCATENATE_TEXT`(字符串拼接)** - **功能**:将多个字符串拼接成一个(支持分隔符)。 - **替代方案**:直接使用 `CONCATENATE` 语句或 `&&` 运算符。 ```abap DATA(lv_result) = |{ 'Hello' } { 'World' }|. " ABAP 7.4+ 模板字符串 ``` ### **1.2 `SUBSTRING`(截取子串)** - **功能**:从字符串中提取指定位置的子串。 ```abap DATA(lv_text) = 'ABAP Programming'. DATA(lv_sub) = lv_text+6(11). " 从第6位开始取11个字符 WRITE: / lv_sub. " 输出: Programming ``` ### **1.3 `STRLEN`(获取字符串长度)** ```abap DATA(lv_len) = strlen( 'ABAP' ). " 返回4 ``` ### **1.4 `TO_UPPER` / `TO_LOWER`(大小写转换)** ```abap DATA(lv_upper) = to_upper( 'abap' ). " 返回'ABAP' DATA(lv_lower) = to_lower( 'ABAP' ). " 返回'abap' ``` ### **1.5 `REPLACE`(字符串替换)** ```abap DATA(lv_text) = 'ABAP is great'. REPLACE 'great' WITH 'awesome' IN lv_text. WRITE: / lv_text. " 输出: ABAP is awesome ``` --- ## **2. 日期时间处理函数** ### **2.1 `SY-DATUM` / `SY-UZEIT`(系统日期时间)** - **功能**:获取当前系统日期和时间。 ```abap WRITE: / 'Today is:', sy-datum, 'Time:', sy-uzeit. ``` ### **2.2 `CONVERT_DATE_TO_INTERNAL` / `CONVERT_DATE_TO_EXTERNAL`** - **功能**:在内部格式(YYYYMMDD)和外部格式(DD.MM.YYYY)间转换。 ```abap DATA(lv_ext_date) = '25.12.2023'. DATA(lv_int_date) TYPE d. CONVERT DATE lv_ext_date INTO INTERNAL DATE lv_int_date. WRITE: / lv_int_date. " 输出: 20231225 ``` ### **2.3 `CL_ABAP_TSTMP`(时间戳操作)** - **功能**:处理高精度时间戳(如UTC时间)。 ```abap DATA(lo_tstmp) = cl_abap_tstmp=>utc_now( ). WRITE: / lo_tstmp->get_time( ). ``` ### **2.4 `ADD_DAYS` / `SUBTRACT_DAYS`(日期加减)** ```abap DATA(lv_date) = sy-datum. ADD 7 DAYS TO lv_date. " 加7天 WRITE: / 'Next week:', lv_date. ``` --- ## **3. 数学计算函数** ### **3.1 `ABS`(绝对值)** ```abap DATA(lv_abs) = abs( -10 ). " 返回10 ``` ### **3.2 `ROUND` / `TRUNC`(四舍五入/截断)** ```abap DATA(lv_round) = round( 3.14159, 2 ). " 返回3.14 DATA(lv_trunc) = trunc( 3.14159, 1 ). " 返回3.1 ``` ### **3.3 `SQRT` / `POW`(平方根/幂运算)** ```abap DATA(lv_sqrt) = sqrt( 16 ). " 返回4 DATA(lv_pow) = pow( 2, 3 ). " 返回8(2^3) ``` ### **3.4 `NUMCHECK`(数字格式校验)** ```abap IF numcheck( '123.45' ) = 0. WRITE: / 'Valid number'. ELSE. WRITE: / 'Invalid number'. ENDIF. ``` --- ## **4. 内表操作函数** ### **4.1 `LINES`(获取内表行数)** ```abap DATA: gt_data TYPE TABLE OF string. gt_data = VALUE #( ('A') ('B') ('C') ). WRITE: / 'Table has', lines( gt_data ), 'rows'. " 输出3 ``` ### **4.2 `LINE_EXISTS`(检查行是否存在)** ```abap READ TABLE gt_data WITH KEY table_line = 'B' TRANSPORTING NO FIELDS. IF sy-subrc = 0. WRITE: / 'Row exists'. ENDIF. ``` ### **4.3 `SORT`(内表排序)** ```abap SORT gt_data BY table_line DESCENDING. " 降序排序 ``` ### **4.4 `DELETE_ADJACENT_DUPLICATES`(去重)** ```abap gt_data = VALUE #( ('A') ('A') ('B') ). DELETE ADJACENT DUPLICATES FROM gt_data COMPARING table_line. " 结果: ('A'), ('B') ``` --- ## **5. 类型转换函数** ### **5.1 `CONVERT_STRING_TO_NUMBER`(字符串转数字)** ```abap DATA(lv_num) TYPE i. CONVERT STRING '123' TO NUMBER lv_num. WRITE: / lv_num. " 输出123 ``` ### **5.2 `MOVE_CORRESPONDING`(结构字段映射)** ```abap TYPES: BEGIN OF ty_source, id TYPE i, name TYPE string, END OF ty_source, BEGIN OF ty_target, id TYPE i, desc TYPE string, END OF ty_target. DATA: ls_source TYPE ty_source, ls_target TYPE ty_target. ls_source-id = 1. ls_source-name = 'Test'. MOVE-CORRESPONDING ls_source TO ls_target. " 仅复制同名字段 ``` ### **5.3 `CASTING`(类型强制转换)** ```abap DATA(lv_text) = '42'. DATA(lv_num) = CAST i( lv_text ). " 需确保字符串可转换 ``` --- ## **6. 系统信息函数** ### **6.1 `SY-UNAME`(当前用户名)** ```abap WRITE: / 'Current user:', sy-uname. ``` ### **6.2 `SY-SYSID`(系统ID)** ```abap WRITE: / 'System ID:', sy-sysid. ``` ### **6.3 `CL_GUI_FRONTEND_SERVICES`(前端服务)** - **功能**:获取客户端信息(如屏幕分辨率)。 ```abap DATA: lv_width TYPE i, lv_height TYPE i. cl_gui_frontend_services=>get_screen_size( EXPORTING display_type = cl_gui_frontend_services=>display_type_main IMPORTING width = lv_width height = lv_height ). ``` --- ## **7. 实用工具函数** ### **7.1 `CL_ABAP_RANDOM`(随机数生成)** ```abap DATA(lo_rand) = cl_abap_random=>create( seed = sy-uzeit ). DATA(lv_rand) = lo_rand->intin_range( low = 1 high = 100 ). WRITE: / 'Random number:', lv_rand. ``` ### **7.2 `CL_ABAP_EXCEPTION`(异常处理)** ```abap TRY. DATA(lv_div) = 1 / 0. " 触发除零异常 CATCH cx_sy_zerodivide INTO DATA(lx_error). WRITE: / 'Error:', lx_error->get_text( ). ENDTRY. ``` ### **7.3 `CL_ABAP_CONV_IN_CE`(编码转换)** ```abap DATA(lv_utf8) = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' )->convert( '中文' ). ``` --- ## **8. 完整示例** ```abap REPORT z_abap_functions_demo. " 字符串处理 DATA(lv_name) = 'John'. DATA(lv_greeting) = |Hello, { to_upper( lv_name ) }!|. WRITE: / lv_greeting. " 输出: Hello, JOHN! " 日期计算 DATA(lv_today) = sy-datum. ADD 30 DAYS TO lv_today. WRITE: / '30 days later:', lv_today. " 数学计算 DATA(lv_pi) = round( 3.1415926, 3 ). WRITE: / 'PI:', lv_pi. " 输出: 3.142 " 内表操作 TYPES: BEGIN OF ty_employee, id TYPE i, name TYPE string, END OF ty_employee. DATA: gt_employees TYPE TABLE OF ty_employee, gs_employee TYPE ty_employee. gt_employees = VALUE #( ( id = 1 name = 'Alice' ) ( id = 2 name = 'Bob' ) ). LOOP AT gt_employees INTO gs_employee. WRITE: / 'Employee:', gs_employee-id, gs_employee-name. ENDLOOP. ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值