自建函式移除數字串左邊的0(SAP/R3 ABAP) (轉)
自建移除數字串左邊的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sap abap好用的函式函式
- SAP ABAP 函式總結 常用函式解釋函式
- 取字串左邊指定長度的子字串字串
- SAP ABAP FB05 清賬函式函式
- 將數值轉換為字串的函式字串函式
- 浮點數轉換成字串函式字串函式
- ABAP數學函式匯總函式
- mysql 字串和數字比,字串會隱式轉換為數字0MySql字串
- oracle字串函式(轉)Oracle字串函式
- Oracle字串函式--轉Oracle字串函式
- 〔轉載〕ABAP常用函式集錦函式
- 轉 Lua標準庫: table函式, 數學函式, 字串函式/格式化/配對,函式字串
- ABAP日期函式函式
- shell裡邊子函式與主函式的例項(轉)函式
- mysql和oracle字串編碼轉換函式,字串轉位元組函式例子MySqlOracle字串編碼函式
- (轉)ABAP--ALV_BLOCK_LIAST的函式使用BloCAST函式
- MySQL字串函式 字串大小寫轉換MySql字串函式
- js利用Number()函式將字串轉換為數字JS函式字串
- 抽取字串中數字的函式字串函式
- 陣列左邊減去右邊數值的最大差值陣列
- 移除函式呼叫能有更好的效能函式
- strtol() 字串轉長整型函式字串函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- strcmp()函式,如果兩個字串引數相同,該函式就返回0,否則返回非零值函式字串
- SAP ABAP 字串內數字去前導零的兩種方法(正則/拼接)字串
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- SAP ABAP 解析 excel 檔案的函式 TEXT_CONVERT_XLS_TO_SAP 單步執行分析Excel函式
- 數字格式字串轉數字保留後面0字串
- 如何在 SAP BTP ABAP 程式設計環境裡直接呼叫 ABAP On-Premises 系統的 RFC 函式程式設計REM函式
- numtoyminterval函式——數字轉換函式函式
- 關於字串的幾個有用函式 (轉)字串函式
- 枕邊的函式“氏”函式
- SAP ABAP 處理 Excel 的標準函式 TEXT_CONVERT_XLS_TO_SAP 介紹試讀版Excel函式
- 使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式JavaCloudREM函式
- sap 函式函式
- SAP ABAP 常用FUNCTION集錦(轉)Function
- C語言atoi()函式:將字串轉換成int(整數)C語言函式字串
- Excel函式應用教程:函式的引數(轉)Excel函式