在SAP系統中,所有的數據系統默認是2位小數,但是針對不同的業務需求,對小數位有不同要求:
一、Currencies
T-code:OY04 Path:Global settings-->currencies-->set decimal places for currencies
這個操作時跨client的,會影響到這個服務器上的整個Client,系統會給提示:
“在您繼續之前,請仔細閱讀以下內容。
如果不留意此注釋,您可能會用事務對系統造成不可挽回的損壞。
在 R/3 系統表中,貨幣字段作為小數存儲,其小數位可以改變。小數位不存儲在
數據庫的字段中。每個貨幣字段對應一個貨幣碼字段。在此事務中,您分配唯一的
小數位數給貨幣碼。
樣例: 如果您已設置貨幣 USD 為兩個小數位並過帳 100 USD 的金額,10000 USD
的數額存儲在數據庫的貨幣字段中。除非此數量被進一步處理或輸出,系統將使用
參考字段的貨幣碼通過此表來決定小數位數。用這種方法,表的容量梢員徽返
解釋,以進行進一步的處理或格式化帶標點的輸出。
如果在過帳后更改 USD 的小數位數,例如,改為 3,現有字段內容 10000 將在進
一步處理或輸出時被解釋為 10 USD (10.000)。這使系統中表的容量對於所有包含
USD 數量的貨幣字段,被錯誤解釋為原來的 10%。您必須轉換系統中所有包含貨
幣字段的表以保持數據完整性。但是,這樣不能在生產系統中同時用於組織原因和
運行時方面。”
系統進入后為:
需要新增的,可以點擊新增,然后指定小數位即可。USD是有2位小數的貨幣單位,顯示的金額和表中存儲的值是一樣的。而像JPY這樣的貨幣單位是沒有小數的,1000 JPY保存在表中的值是10(比如系統下單:1000個 150JPY,MIGO收貨了8251個,自動產生的會計憑證會自動取整)。若系統中已經存在了小數位設置,再改動小數位,會造成數據大大的差異。保存數值與顯示的金額之間的關系是:
保存數值=顯示金額*10^(x-2) 其中x是該貨幣單位的小數位數。
SAP貨幣轉換
- 如果某貨幣的小數位不是2位,則需要通過OY04設置其小數位數。
- 系統中的數據表存放的日元JPY、俄盧布RUR等貨幣比前台輸入的金額小100倍。
系統根據OY04(Talbe:TCURX)中定義的貨幣小數位將原金額轉換成含小位小數的金額后存儲(據說根據ISO的什么標准),如日元為0位小數,120日元轉換后變成1.20,縮小100倍.如為TJLP5位小數,12.01230則轉換成12012.30,擴大1000倍。
SAP在數據存儲時必須要有小數位,再次查資料,發現SAP有所謂的external及internal的數據格式,不是存透明表取出的數都是external的,所以要解決此問題應在調用CONVERT_TO_LOCAL_CURRENCY 函數前,先調用一個 BAPI_CURRENCY_CONV_TO_INTERNAL 函數,就行了。
與之對應的FUNCTION:BAPI_CURRENCY_CONV_TO_EXTERNAL
二、定義度量單位小數
T-code:CUNI path: Global settings-->check unit of measurement(decimal pl.rounding)
三、匯率的改動
T-code:OB08
一般記帳exchange rate type 是M . 比如local currency本位幣是USD M : 8.70000 CNY = 1 USD CNYdocument currency .
Cny 1000 local cur.(USD) 114.94 更改匯率:
M:8.72560 CNY = 1USD . CNY document currency 記帳
CNY 1000 : local cur. (USD) 114.61
更該匯率是系統是可行的,我想這樣在使用外幣記帳時,如果currencies的小數定為兩位,樓上的混淆了這兩概念, 產生匯兌損益易的機會會少些. JPY的小數問題.
寫一個關於稅務的報表,就是從material doc, FI doc和PO抓些字段. material doc.和FI doc的對應如下:
mat doc tables :Mkpf( header), MSeg(item) FI doc tables :Bkpf( Header), BSeg( Item)
BKPF-AWKEY(Mat. doc no+公司+fiscal year或mat. no+fiscal year)
對應到MSEG-mblnr(mat. doc. no)
MSEG-ZEILE(itemno)*2-1對應到FI doc item的bseg-buzei(item no) 需要從BSEG帶出bseg-waers document curerncy. bseg-wrbtr (doc currency amount) bseg-dmbtr (local currency amount) 比如JPY為doc currency. Dr:12345 Cr:12345
可bseg-wrbtr為123.45, 這樣出來的報表就發生錯誤.
Why?我想SAP默認的所有的currencies的小數都是2位, 這樣在record一document時, 不管三七二一,一定將你輸入的數字弄兩個小數點. 1.USD 2位或OY04沒任何動作 Dr: 12345 Cr: 12345
在SAP中bseg-wrbtr為12345.00 Dr: 123.45 Cr:123.45
在SAP中bseg-wrbtr為123.45 顯示出來不做任何動作
2. JPY ,OY04定義小數0表示無小數 Dr : 12345 JPY Cr : 12345 JPY
在SAP中bseg-wrbtr為123.45 Dr : 123.45 JPY Cr : 123.45 JPY
你不可能做出這樣的document 顯示出來的數據*100
3.比如TND OY04定義小數為3. Dr 123456 cr 123456
在SAP中bseg-wrbtr為1234560.00 Dr:123.456 Cr:123.456
在SAP中bseg-wrbtr為1234.56 顯示出來的數據/10 .
就是所SAP保存數據和顯示數據是不同的,保存在數據庫中總保留兩位小數,所以在做report時間要小心,
顯示數據時根據TCURX(就是OY04)里面定義的小數位進行一定計算, (自己未測試,先記錄下來)。