ABAP新语法

本文介绍了SAP ABAP编程中的一些高效技巧,包括使用DATA读取指定行、LINE_EXISTS判断条件、SELECT内表操作、前导零处理、使用VALUE快速赋值、GROUP BY分组循环、字符串替换、异常处理以及数据转换方法。这些技巧能够提升代码的简洁性和效率。

1.DATA(ls_data) = gt_data[ index ].

   使用此语法可以省去READ,直接读取指定行号的数据, 但需要判断gt_data是否有指定index行, 需要CATCH异常CX_SY_ITAB_LINE_NOT_FOUND异常, 会直接DUMP.

2.LINE_EXISTS

IF line_exists( gt_data[ field1 = '' field2 = '' ] ).

....

ENDIF.

使用此语法可以判断内表行是否有满足条件的,无需LOOP判断,省去好多代码。

3.SELECT内表

SELECT内表可以对内表使用SQL的语法,例如,取内表某一列的最大值,就可以直接MAX,无需排序后, 读第一行,需要APPEND itab_a表 TO itab_b表时,单a表字段与b表字段数量不一致时,可以使用

SELECT FROM @itab_a表 AS a

     FIELDS field1

     APPENDING CORRESPONDING FIELDS OF TABLE @itab_b表.

4.前导零

lv_field = |{ lv_field ALPHA = OUT }|.        " 去前导0

lv_field =  |{ lv_field ALPHA = IN }|.        " 补前导0

5.VALUE

lr_data[] = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 2 )

                                                                     ( low = 3 high = 4 )

                                                                      ( low = 4 high = 5 )

                                                 option = 'EQ' ( low = 6 ) ).

对RANGE表赋值非常简便。

lt_data[] = VALUE #( FOR wa IN gt_data WHERE ( filed1 = '01' and field2 = '02' ) ( wa ) ).

赋值指定条件的数据。

6. GROUP分组循环

LOOP AT lt_data INTO DATA(ls_data) GROUP BY ( field = ls_data-field )

                                                              ASCENDING ASSIGNING FIELD-SYMBOL(<fs_group>).

   LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<fs>).

   ENDLOOP.

ENDLOOP.

分组处理,不像AT END OF那样需要调整字段顺序。

7.REPLACE

lv_string1 = 'statements'.

lv_string1 = 'asffasfa'.

WRITE: REPLACE( VAL = lv_string1

                                 SUB = 'sta'

                                 CASE = ABAP_TRUE

                                 WITH = TO_UPPER( lv_string2 )         " 如果发现sta,用lv_char2的大写替换

                                  OCC = 2 ).      " 如果OCC为正,则从左边开始计数,如果OCC为负,则从右数。值1,2,...表示第一,第二,事件。-1,-2,...表示最后一个,倒数第二个,...。

8.CONV

WRITE: |Converte Date:{ CONV d( sy-datum + 7 ) DATE = USER }|. " CONV conversion data type

转换为当前用户的日期格式

9.CASE

TRY.

  CATCH cx_root INTO DATA(exc).

    CASE TYPE OF exc.

       WHEN TYPE OF cx_sy_arithmetic_error.

         out->display( 'Arithmetic error' ).

       WHEN TYPE cx_sy_conversion_error.

          out->display( 'Conversion error' ).

       WHEN OTHERS.

          out->display( 'Other error' ).

    ENDCASE.

ENDTRY.       

抓异常,分异常类型报错

先写这些,后面持续更新。                                

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值