Types ALV中DDIC类型CURR和QUAN的抑制符号

Types ALV中DDIC类型CURR和QUAN的抑制符号,types,decimal,currency,abap,alv,Types,Decimal,Currency,Abap,Alv,最终我遇到了一个令人惊讶的事实,即货币和数量的内部ABAP字典类型(基于它们的数据元素)隐式保存符号信息,而不管在数据元素域中设置了什么设置 即使使用上述域,数据元素也会在ALV中保留符号。我们能防止ALV(或ABAP)发生这种行为吗? 我彻底阅读了这两个方面的文档,但没有发现任何关于符号的单词。有人能解释一下吗 我最后提出的唯一解决方案是使用DEC类型和基于DEC的数据元素 添加:检查所述问题的简单测试 1.创建三种类型的变量:BNOMS(domainBWHR)、MATQUAN(domain

最终我遇到了一个令人惊讶的事实,即货币和数量的内部ABAP字典类型(基于它们的数据元素)隐式保存符号信息,而不管在数据元素域中设置了什么设置

即使使用上述域,数据元素也会在ALV中保留符号。我们能防止ALV(或ABAP)发生这种行为吗?
我彻底阅读了这两个方面的文档,但没有发现任何关于符号的单词。有人能解释一下吗

我最后提出的唯一解决方案是使用DEC类型和基于DEC的数据元素

添加:检查所述问题的简单测试
1.创建三种类型的变量:BNOMS(domain
BWHR
)、
MATQUAN
(domain
MENG10
)和
MENGEP
(domain
MENGEP
)。所有这些类型都是标准的DDIC类型,域中有未选中的符号字段。
2.为它们指定一个负值
3.将它们输出到ALV

由于
BNOMS
MATQUAN
类型是CURR和QUAN类型,它们将以任何方式输出符号,而
MENGEP
不会,因为它具有DEC类型。
在运行时,它们都保留符号,但是ALV DEC类型域限制得到了尊重,因此我倾向于认为这是与ALV更相关的问题。

请注意,ABAP堆栈中有两个不同的类型系统-例如
CHAR
NUMC
DEC
QUAN
用于结构,尤其是数据库定义,并在运行时使用。这个


需要注意的是,在运行时(“在调试器中”),只有ABAP类型存在。通过域对数据元素施加的任何无法转换为相应ABAP类型定义的限制(如区分大小写/不区分大小写或有符号/无符号标志)都将被忽略。您可以根据域
CHAR1\u X
轻松定义变量,该域具有固定值
'X'
'
。由于这在ABAP中转换为简单的
类型C长度1
,因此分配小写
x
、a
U
或-在unicode系统上-

请注意,ABAP堆栈中有两种不同类型的系统-如
CHAR
NUMC
DEC
QUAN
,用于结构,尤其是数据库定义,以及在运行时使用。这个


需要注意的是,在运行时(“在调试器中”),只有ABAP类型存在。通过域对数据元素施加的任何无法转换为相应ABAP类型定义的限制(如区分大小写/不区分大小写或有符号/无符号标志)都将被忽略。您可以根据域
CHAR1\u X
轻松定义变量,该域具有固定值
'X'
'
。由于这在ABAP中转换为简单的
类型C长度1
,因此分配小写
x
、a
U
或-在unicode系统上-

“保存符号信息”在哪里?@vwegert我不知道它确切发生在哪里(这是我的问题),至少我在调试器中看到它,并在输出到ALV网格时看到它。“保存符号信息”在哪里?@vwegert我不知道它确切发生在哪里(这是我的问题),至少我在调试器和输出到ALV网格时看到了它。我非常清楚ABAP/DDIC类型和标题中显式指定的DDIC之间的区别。我们知道CURR和QUAN对应的内部表示形式是ABAP类型P,但是DEC类型也对应于P类型,并且它完全承载符号信息。当我们从基于DEC的域创建带有禁用符号的变量时,系统尊重这一事实。所以,您关于ABAP和DDIC类型之间被忽略的限制的假设并不完全正确。似乎是ALV问题,请参阅我的补充。我完全了解ABAP/DDIC类型和标题中明确指定的DDIC之间的区别。我们知道CURR和QUAN对应的内部表示形式是ABAP类型P,但是DEC类型也对应于P类型,并且它完全承载符号信息。当我们从基于DEC的域创建带有禁用符号的变量时,系统尊重这一事实。所以你们关于ABAP和DDIC类型之间被忽略的限制的假设并不完全正确。似乎是ALV问题,请参阅我的补充。