【ERP】如何根据系统币种(扩展)精度来动态产生数字的格式(FORMAT MASK)
系统设置
首先到币种定义界面定义币种的精度和扩展精度。
NAVIGATION: Financials > Currencies > Currencies
界面截图如下:
Precision是普通精度,Extended是扩展精度。FND Libraries里面有一个程序包FND_CURRENCIES提供了API可以让我们方便的根据精度或扩展精度来构建format mask。下面举出简单的代码调用实例。
Precision
利用FND_CURRENCIES的SAFE_GET_FORMAT_MASK来轻松获取:
1 declare
2 l_format_mask varchar2(80);
3 l_formatted_number varchar2(40);
4 begin
5 l_format_mask :=
6 fnd_currency.safe_get_format_mask(
7 currency_code => 'USD'
8 , field_length => 20
9 );
10
11 dbms_output.put_line(l_format_mask);
12
13 select to_char(1234566.123456, l_format_mask)
14 into l_formatted_number
15 from dual;
16
17 dbms_output.put_line(l_formatted_number);
18 end;
Extented Precision
很遗憾,这个取法Oracle并没有提供单一的API来供我们调用,不过我们可以自己搞定这种情况,即利用FND_CURRENCIES里面的GET_INFO和SAFE_BUILD_FORMAT_MASK来得到EXTENDED PRECISION的format mask,示例代码如下:
1 declare
2 l_format_mask varchar2(80);
3 l_precision number;
4 l_ext_precision number;
5 l_min_acct_unit number;
6
7 l_formatted_number varchar2(40);
8 begin
9 fnd_currency.get_info(
10 currency_code => 'USD'
11 , precision => l_precision
12 , ext_precision => l_ext_precision
13 , min_acct_unit => l_min_acct_unit
14 );
15 fnd_currency.SAFE_BUILD_FORMAT_MASK(
16 format_mask => l_format_mask
17 , field_length => 20
18 , precision => l_ext_precision
19 , min_acct_unit => l_min_acct_unit
20 );
21
22 dbms_output.put_line(l_format_mask);
23
24 select to_char(1234566.123456, l_format_mask)
25 into l_formatted_number
26 from dual;
27
28 dbms_output.put_line(l_formatted_number);
29 end;
Enjoy!