FUNCTION SHIFTZERO.
*"----------------------------------------------------------------------
*"*"本地接口:
*" CHANGING
*" VALUE(STR) DEFAULT SPACE
*"----------------------------------------------------------------------
IF STR NE SPACE.
DATA: STRTEMP(50) TYPE C, LENGTH TYPE I, LENINFACT TYPE I.
LENGTH = STRLEN( STR ).
STRTEMP = STR. " Because the function para can't be +0(1)
LENINFACT = LENGTH.
DO LENGTH TIMES.
IF STRTEMP+0(1) EQ '0'.
LENINFACT = LENINFACT - 1.
STRTEMP = STRTEMP+1(LENINFACT).
ELSE.
EXIT.
ENDIF.
ENDDO.
STR = STRTEMP.
ENDIF.
ENDFUNCTION.
REPORT ZTEST1_FQ NO STANDARD PAGE HEADING LINE-SIZE 100 MESSAGE-ID S1.
*&--------------------------------------------------------------
*& ABAP4 testing 主程序
*
*&--------------------------------------------------------------
DATA: STR(10) TYPE C. STR = '0001454578'.
CALL FUNCTION 'SHIFTZERO'
CHANGING
STR = STR.
WRITE: / STR.
通过运行程序,你可以看到SHIFTZERO函数完全达到了我要求。最后要注意的是,如果你是在DEV开发系统中写的函数,务必要在测试完成后,在SE09事务中释放它,然后通知Administrator传入PRD生产系统。
补充:ERPHome的ai2ming朋友提到可以用SHIFT str LEFT DELETING LEADING '0'.同样的功能,我测试了一下,完成可行。查看ABAP4平台的F1帮助,发现SHIFT命令有两个很有用的用法:
1、SHIFT c LEFT DELETING LEADING c1. "从字串c的左边移去所有的连续字串c1
2、SHIFT c RIGHT DELETING TRAILING c1. "从字串c的右边移去所有的连续字串c1
由此看来,这篇文件介绍的方法有些走弯路了,那就当做是介绍自建函数的一个教学例子吧。