最终我遇到了一个令人惊讶的事实,即无论在数据元素域中设置了什么设置,货币和数量的内部ABAP字典类型(基于它们的数据元素)都会隐式保存符号信息。
即使使用上述域,数据元素也会保留ALV中的符号。我们可以阻止ALV(或ABAP)这种行为吗? 我仔细阅读了有关CURR和QUAN的文档,但没有找到关于sign的单词。有人可以解释一下吗?
我结束的唯一解决方案是使用基于DEC的DEC类型和数据元素。
ADDITION :简单测试以检查所描述的问题
1.创建三个类型BNOMS
(域BWHR
),MATQUAN
(域MENG10
)和MENGEP
(域MENGEP
)的变量。所有这些类型都是标准的DDIC类型,域中包含未选中符号字段
2.为它们分配负值
3.将它们输出到ALV
由于BNOMS
和MATQUAN
类型是CURR和QUAN类型,它们将输出符号,而MENGEP
则不会,因为它具有DEC类型。
在运行时所有它们都保留了符号但是在ALV中DEC类型域限制得到了尊重,因此我倾向于认为它与ALV相关的问题更多。
答案 0 :(得分:0)
请注意,ABAP堆栈中有两个不同的类型系统 - dictionary types,如CHAR
,NUMC
,DEC
和QUAN
用于结构,尤其是数据库定义,以及运行时使用的ABAP types。 type mapping is explained in detail in the documentation。Retrofit documentation。
重要的是要注意,在运行时("在调试器中"),只存在ABAP类型。通过域放置到数据元素上的任何限制都无法转换为相应的ABAP类型定义(例如,区分大小写/不敏感或有符号/无符号标志)。您可以根据具有固定值CHAR1_X
和'X'
的域' '
轻松定义变量。由于这转换为ABAP中的简单TYPE C LENGTH 1
,因此在unicode系统x
上分配小写U
,门
或 - 也同样容易。