在form介面我們要想格式化一個數字行如:123456.03的話,我們可以把這個Item的屬性
成這樣
原數字 |
Format Mask |
結果 |
說明 |
123456.03 |
FM999,990 |
FM999,990.00 |
|
0.123 |
FM999,999.00 |
.12 |
小數點前是9 |
0.123 |
FM999,990.00 |
0.12 |
小數點前是0 |
123456789.03 |
FM999,990.00 |
###### |
因為Format Mask的個數不夠 |
123456789.03 |
FM999,999,990.00 |
123,456,789.03 |
|
在to_char中to_char(A,B)
A |
B |
結果 |
說明 |
0.123 |
FM999,999.00 |
.123 |
小數點前是9 |
0.123 |
FM999,990.00 |
0.123 |
小數點前是0 |
金額的格式輸入不應該用上面的方法,因為不同種類幣種的格式掩碼是不一樣的,例如:幣種為‘CNY’時金額保留兩位小數,幣種為‘BHD’時顯示三位小數,有兩種方法可以實現:
(1) 用代碼根據幣種動態控制格式掩碼
設需要格式化的塊為TEST,Item為AMOUNT,在塊TEST的Post-query裡加入如下代碼:
APP_ITEM_PROPERTY.SET_PROPERTY('TEST.AMOUNT', --需要格式化的Item
FORMAT_MASK,
FND_CURRENCY.GET_FORMAT_MASK(
/*格式化用的幣種,如果想用本位幣可以這樣取得
Select currency_code
Into l_currency_code
From gl_sets_of_books
Where set_of_books_id = fnd_profile(‘GL_SET_OF_BOOKS_ID’);
*/
‘USD’,
GET_ITEM_PROPERTY('TEST.AMOUNT', --返回Item的長度
MAX_LENGTH)));
這種方法簡單,但如果是一個塊顯示為多行資料,每行的幣種不同的話,就不起作用了。
(2) 用函數APP_CURRENCY.Line_Dyn_Currency實現,這種方法可以實現多行不同幣種的格式化
具體方法如下:
設需要格式化的塊為TEST,Item為AMOUNT,每行的幣種為Item CURRENCY_CODE在資料區塊中建立一個非資料庫描述欄位DESC,AMOUNT不顯示,顯示DESC,在塊TEST的post-query裡加入如下代碼:
:TEST.DESC := TEST.DESC;
APP_CURRENCY.Line_Dyn_Currency(:TEST.CURRENCY_CODE, 'TEST.AMOUNT', 'TEST.DESC', 'POST-QUERY');
在Item:DESC的WHEN-VALIDATE-ITEM裡添加如下代碼:
APP_CURRENCY.Line_Dyn_Currency(:TEST.CURRENCY_CODE, 'TEST.AMOUNT',
'TEST.DESC', 'WHEN-VALIDATE-ITEM');
它的作用是當DESC改變之後重新設定。
當然這種方法也有它的缺限,在塊上查詢之後使用者沒有操作,當前塊的狀態變成‘CHANGED’因顯示AMOUNT時函數會APP_CURRENCY.Line_Dyn_Currency對AMOUNT重新賦值。解決以上問題,可以在塊TEST的 post-query裡加 APP_RECORD.SET_STATUS('QUERY'),把塊的狀態改回來。