在sap中,每种货币单位都可以维护对应的小数位数(如果未维护,则使用默认两位小数),该信息保存在表tcurx中。
在使用TCode:OY04更改该数据时,会有如下提示:
在您继续之前,请仔细阅读以下内容。
如果不留意此注释,您可能会用事务对系统造成不可挽回的损坏。
在 R/3 系统表中,货币字段作为小数存储,其小数位可以改变。小数位不存储在
数据库的字段中。每个货币字段对应一个货币码字段。在此事务中,您分配唯一的
小数位数给货币码。
样例: 如果您已设置货币 USD 为两个小数位并过帐 100 USD 的金额,10000 USD
的数额存储在数据库的货币字段中。除非此数量被进一步处理或输出,系统将使用
参考字段的货币码通过此表来决定小数位数。用这种方法,表的容量梢员徽返
解释,以进行进一步的处理或格式化带标点的输出。
如果在过帐后更改 USD 的小数位数,例如,改为 3,现有字段内容 10000 将在进
一步处理或输出时被解释为 10 USD (10.000)。这使系统中表的容量对于所有包含
USD 数量的货币字段,被错误解释为原来的 10%。您必须转换系统中所有包含货
币字段的表以保持数据完整性。但是,这样不能在生产系统中同时用于组织原因和
运行时方面。
如果在生产系统中进行更改或并将其传输到生产系统中,TCURX 表的以下更改可能
导致数据完整性的损失:
o 对现有货币的小数位进行更改
o 从 TCURX 表中删除条目 (相应地将小数位更改为两位小数的标准值)
o 在 TCURX 中插入条目(相应地将两位小数标准值改为另一个值),此条目是现有的
货币代码
在定制新的安装,甚至插入 TCURX 的操作期间,可以对此表进行任意的修改,
如果货币代码已使用事务 0Y03 输入到 TCURC 表中,表示对这些货币代码尚未过
帐。
可用如下代码,检查输入值是否正确(比如小数位数是否过多等)
1 FORM test_check_decimal. 2 3 DATA: lv_input TYPE dmbtr VALUE '1.23', 4 lv_output TYPE dmbtr. 5 DATA: lv_reference_value TYPE waers VALUE 'JPY'. 6 7 DATA: ls_attribute_info TYPE wdr_context_attribute_info. 8 ls_attribute_info-rtti ?= cl_abap_typedescr=>describe_by_data( lv_input ). 9 TRY. 10 cl_wdr_conversion_utils=>from_string( EXPORTING in = |{ lv_input }| 11 num_decimals = 0 12 attribute_info = ls_attribute_info 13 reference_type = 'c' 14 reference_value = lv_reference_value 15 CHANGING data = lv_output ). 16 CATCH cx_wdr_conversion_exception INTO DATA(lcx_exception). 17 DATA(lv_message) = lcx_exception->get_text( ). 18 * lcx_exception->maxdigits 19 ENDTRY. 20 21 ENDFORM.
标签:info,conversion,USD,string,attribute,lv,wdr,货币,小数位 From: https://www.cnblogs.com/keyuming/p/17630554.html