SAP 金額等負號提前問題

2021-07-04 21:29:15 字數 3124 閱讀 6954

一般我們在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位一分的千位分隔符。再把字元型賦予數字型...