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.
抓异常,分异常类型报错
先写这些,后面持续更新。
本文介绍了SAP ABAP编程中的一些高效技巧,包括使用DATA读取指定行、LINE_EXISTS判断条件、SELECT内表操作、前导零处理、使用VALUE快速赋值、GROUP BY分组循环、字符串替换、异常处理以及数据转换方法。这些技巧能够提升代码的简洁性和效率。

3126

被折叠的 条评论
为什么被折叠?



