自建函式移除數字串左邊的0(SAP/R3 ABAP) (轉)

worldblog發表於2008-01-07
自建函式移除數字串左邊的0(SAP/R3 ABAP) (轉)[@more@]

         自建移除數字串左邊的0(SAP/R3 ABAP)

                     作者:馮強 .04.19


   在R/3中,如果一個欄位內容是數字串(由0~9的數字組成),放入表欄位時,系統將根據欄位寬度在前面加0,比如物料11234547957,在matnr欄位中被儲存為000000011234547957。在開發報表和介面時,常常需要將前面的0去除,而ABAP平臺並未提供類似的函式。我們可以自己寫一個函式,放入函式組中來解決。下面,我將詳細介紹操作流程。

  首先,用事務SE37建立函式模組,例如函式名為SHIFTZERO,函式組為ZFQTEST。在函式建立後,進入的“介面”檢視,在“更改”欄的“IMPORT引數”中輸入STR,建議值輸入SPACE。補充說明一下,之所有選“更改”,是因為變數STR除了要帶值進入函式,還要返回值,這有點類似於變參的概念。在“文件”檢視,可以為STR引數加上文字描述,方便其他開發者的使用。

  然後,在SE37初始介面進入函式的原始碼修改。詳細程式碼如下:

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.

 

  完成後,你可以使用SE37的“單個測試”功能,看看函式是否執行正確。如果沒有問題,將函式啟用。

  下面,我們用SE38事務進入ABAP編輯器,寫一個小程式驗證一下我們的函式。以後在其它程式中引用該函式,也是類似的格式。程式清單如下:

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

  由此看來,這篇介紹的方法有些走彎路了,那就當做是介紹自建函式的一個教學例子吧。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996829/,如需轉載,請註明出處,否則將追究法律責任。

相關文章