1、LINE-SELECTION的使用注意
在使用 AT LINE-SELECTION的HIDE功能是,HIDE语句传递的变量必须与其对应的行在同一行,否则变量值不能被正确传递。
错误:Hide在ULINE语句下,和相关变量不在同一行!
(4) REC_LFA1-LIFNR,
(40) REC_LFA1-NAME1.
ULINE.
HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.
正确:
WRITE:/1 SY-VLINE NO-GAP,
(4) REC_LFA1-LIFNR,
(40) REC_LFA1-NAME1.
HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.
ULINE.
2、Do循环一种比较有趣的用法
abap中的do循环可以做一种比较有趣的循环,因为在一个HR的程序中用到了这个功能,趁还记得赶紧整理出来。
2、Do循环一种比较有趣的用法
abap中的do循环可以做一种比较有趣的循环,因为在一个HR的程序中用到了这个功能,趁还记得赶紧整理出来。
DATA: BEGIN OF TEXT,
WORD1( 4 ) VALUE ' This ' ,
WORD2( 4 ) VALUE ' is ' ,
WORD3( 4 ) VALUE ' a ' ,
WORD4( 4 ) VALUE ' loop ' ,
WORD5( 4 ) VALUE ' That ' ,
WORD6( 4 ) VALUE ' is ' ,
WORD7( 4 ) VALUE ' a ' ,
WORD8( 4 ) VALUE ' loop ' ,
END OF TEXT.
DATA: STRING1( 4 ), STRING2( 4 ).
DO 8 TIMES VARYING STRING1 FROM TEXT - WORD1 NEXT TEXT - WORD2.
WRITE STRING1.
IF STRING1 = ' is ' .
STRING1 = ' was ' .
ENDIF.
ENDDO.
SKIP.
DO 4 TIMES VARYING STRING1 FROM TEXT - WORD1 NEXT TEXT - WORD3
VARYING STRING2 FROM TEXT - WORD2 NEXT TEXT - WORD4.
WRITE: STRING1, STRING2.
ENDDO.
WORD1( 4 ) VALUE ' This ' ,
WORD2( 4 ) VALUE ' is ' ,
WORD3( 4 ) VALUE ' a ' ,
WORD4( 4 ) VALUE ' loop ' ,
WORD5( 4 ) VALUE ' That ' ,
WORD6( 4 ) VALUE ' is ' ,
WORD7( 4 ) VALUE ' a ' ,
WORD8( 4 ) VALUE ' loop ' ,
END OF TEXT.
DATA: STRING1( 4 ), STRING2( 4 ).
DO 8 TIMES VARYING STRING1 FROM TEXT - WORD1 NEXT TEXT - WORD2.
WRITE STRING1.
IF STRING1 = ' is ' .
STRING1 = ' was ' .
ENDIF.
ENDDO.
SKIP.
DO 4 TIMES VARYING STRING1 FROM TEXT - WORD1 NEXT TEXT - WORD3
VARYING STRING2 FROM TEXT - WORD2 NEXT TEXT - WORD4.
WRITE: STRING1, STRING2.
ENDDO.
输出如以下所示:
This
is
a loop That
is
a loop
This was a loop That was a loop
This was a loop That was a loop
以上代码是修改了一下abap中文帮助的一个小示例得来得。可以看到do在这种循环方式下,循环中可以修改所传入的字段串中组件的值,并且循环的step由 FROM ...(组件) NEXT ...(组件) 中的step决定。
3、去除字段或者变量的前导0
去前导0:SHIFT REC_PER-NO LEFT DELETING LEADING '0'.
在普通输出或者smartforms中可以使用:字段名(C)
也可以使用一个FM:CONVERSION_EXIT_ALPHA_OUTPUT
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT =
* IMPORTING
* OUTPUT = .
4、判断内表中是否有数据行
一是使用LINES语法,如下
IF LINES( TAB_BKPF ) < 1.
MESSAGE ID 'ZFI001' TYPE 'I' NUMBER 004.
RETURN.
ELSE.
SORT TAB_BKPF BY BUKRS BELNR BLART.
ENDIF.
二是使用DESCRIBES,如下
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
5、字串操作注意事项
MESSAGE ID 'ZFI001' TYPE 'I' NUMBER 004.
RETURN.
ELSE.
SORT TAB_BKPF BY BUKRS BELNR BLART.
ENDIF.
二是使用DESCRIBES,如下
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
5、字串操作注意事项
连接字串:CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].
使用CONCATENATE连接字符串是,为了防止生成的数据被截断,最好将输出到的变量定义为String类型。
并且该命令忽略被连接的各个字符串的尾部空格
拆分字串: SPLIT <c> AT <del> INTO <c1> ... <cn>.
使用SPLIT拆分字串时,如果源字串能够拆分的字串多过指定的数目,则源字串的最后剩余部分将写入最后一个字串,为了避免这种情况,最好使用内表进行操作:
SPLIT S_SOURCE AT sep INTO TABLE itab. 这样源字串会生成N行的内表。
6、
ABAP中的转义符 #
ABAP程序中在对某些特别字符进行处理时要用到转义符 #.
如在字符串比较关键字 CP 和 NP 中,可以使用通配符进行匹配,但是如果要匹配通配符本身、转义符本身以及大小写和空格等特殊字符时,可用#实现:
如在字符串比较关键字 CP 和 NP 中,可以使用通配符进行匹配,但是如果要匹配通配符本身、转义符本身以及大小写和空格等特殊字符时,可用#实现:
'ABC' CP '*#b*' 本例返回值为假,因为 #b 限定了匹配小写的字符b,同样如 #* 将通配符 * 转回原意, #+ 也将通配符 + 转回原意, ## 将转移字符本身转回原意, # 用于匹配结尾空格,空格数自定。