一般我們在alv上展示的金額如果是負數,預設是這樣顯示的:
在有的開發中,客戶可能要求負號提前,實現這樣的效果:
為了實現這樣的效果,這裡給大家介紹三種方法,第一和第二種是來自網上常見的方法。
第一種:使用函式cloi_put_sign_in_front
report zgy_test.
tables : bseg.
data : e_dmbtr type string.
e_dmbtr = '100-'.
call function 'cloi_put_sign_in_front'
changing
value = e_dmbtr.
write : e_dmbtr.
這個的侷限是只能用字元型別進行操作,這樣就不是金額這樣的數字型別了,對於對齊等也都和金額型別不同,同時會導致千分位符號丟失。
用write to語句把負數取絕對值,然後把數字型寫入字元型可以保留千位符,再判斷正負數,在輸出的時候添上負號。
form asset_front_minus changing value1.
value2 = abs( value1 ).
write value2 to string1.
condense string1.
if value1 < 0.
write: '-', string1 left-justified no-gap no-zero.
else.
write: string1 left-justified no-gap no-zero.
endif.
endform.
第二種:
這種方法手動新增千分位符號,以下是來自網上的實現方法:
手動把字元型加千位符的,取整,判斷長度,除3以後迴圈mask」_,」格式,分割,再處理頭3位。
form numtostr using value(znum) changing value(zstr).
data : zclen type i,
n type i,
zcstr(20) type c,
zcstr2(20) type c,
zctemp(3) type c,
zflag(1) type c value '.',
zflag2 type i value 0,
zcdec(20) type c.
"記錄小數部分
zstr = ''.
check znum <> 0.
if znum <= -1000.
zflag2 = 1.
znum = abs( znum ).
endif.
if znum >= 1000.
zcstr = znum.
* 壓縮字串,去除前面的空格。
condense zcstr no-gaps.
* 分離整數與小數,好單獨處理整數。
split zcstr at zflag into zcstr zcdec.
zclen = strlen( zcstr ).
* 在迴圈中從右面在每三位的前面加上乙個逗號。
while zclen > 3.
n = zclen - 3.
zctemp = zcstr+n(3).
if not zcstr2 is initial.
concatenate zctemp zcstr2 into
zcstr2 separated by ','.
else.
zcstr2 = zctemp.
endif.
zclen = zclen - 3.
endwhile.
* 將不剩下的不足三位數加到前面
concatenate zcstr+0(zclen) zcstr2
into zcstr2 separated by ','.
if zflag2 = 1.
concatenate '-' zcstr2 into zcstr2.
endif.
clear zcstr.
* 將處理過的整數與小數連線起來。
concatenate zcstr2 zcdec into
zcstr separated by zflag.
* 將值返回
zstr = zcstr.
else.
zstr = znum.
endif.
endform.
第三種:
這種方法相對於前兩種方法的優點是,一.型別還是金額等數字型別,負號實現前置;二.幾乎不用寫很多**,且可以保留千分位;三.適用於多個這樣的字段修改需求。
實現步驟如下:
1.se37,按下圖命名規範建立function,
輸入函式組和描述,然後輸入import和export引數,如圖
新增**:
儲存,啟用。
最後,在對應的alv設定fieldcat時針對設定金額等數字型別的字段新增**:固定寫成』z***』形式。
we_fieldcat-edit_mask
='==z001'
.
SAP 外幣金額 匯率 轉換
sap中對於金額和匯率欄位的處理 一般是會計相關的,如果會計發票,銷售發票,採購發票等 有點特殊,並不是說你多少就在系統表中寫多少,有些貨幣的金額會進行除以乙個值 一般是100 所有這些金額在取出來的時候得進行相應的轉換,而有些匯率是會乘以一定的係數 一般也是100 所以我們在通過匯率計算的時候需要...
SAP中關於日元等金額沒有小數字的問題
1 業務背景 在sap中,由於日元和韓元等貨幣值是沒有小數字的,所以在做手工過賬或者是後勤過賬時金額都是整數,但是在存表時系統會金額會自動縮小100倍,預留兩位小數。如下圖所示 檢視一張發票憑證 發票憑證的bseg表資料 2 解決方案 系統中有個後台表tcurx,tcurx儲存貨幣的小數字currd...
SAP中負數的表示增強 負號從數字後更改到數字前面
sap 中的負號是放後面的,其實也無所謂,誰看不出來啊,關鍵人家要你改也沒有辦法。有個函式cloi put sign in front是把負號提前的,但是它是把字元轉化為字元型輸出的。就是把負號split下然後放前面,這樣的問題就是在顯示的時候字元型數字沒有3位一分的千位分隔符。再把字元型賦予數字型...