在ALV

时间:2017-01-13 16:24:56

标签: types decimal sap currency abap

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

enter image description here

即使使用上述域,数据元素也会保留ALV中的符号。我们可以阻止ALV(或ABAP)这种行为吗? 我仔细阅读了有关CURRQUAN的文档,但没有找到关于sign的单词。有人可以解释一下吗?

我结束的唯一解决方案是使用基于DEC的DEC类型和数据元素。

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

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

1 个答案:

答案 0 :(得分:0)

请注意,ABAP堆栈中有两个不同的类型系统 - dictionary types,如CHARNUMCDECQUAN用于结构,尤其是数据库定义,以及运行时使用的ABAP typestype mapping is explained in detail in the documentationRetrofit documentation

重要的是要注意,在运行时("在调试器中"),只存在ABAP类型。通过域放置到数据元素上的任何限制都无法转换为相应的ABAP类型定义(例如,区分大小写/不敏感或有符号/无符号标志)。您可以根据具有固定值CHAR1_X'X'的域' '轻松定义变量。由于这转换为ABAP中的简单TYPE C LENGTH 1,因此在unicode系统x上分配小写U或 - 也同样容易。