2017-01-13 20 views
1

В конце концов я натолкнулся на удивительный факт, что внутренние типы словаря ABAP для валюты и количества (элементы данных на их основе) неявно сохраняют информацию о знаке независимо от того, какой параметр был установлен в области элементов данных ,Знак подавления для типов DDIC CURR и QUAN в ALV

enter image description here

Даже с указанным доменом элемент данных сохраняет знак в ALV. Можем ли мы предотвратить ALV (или ABAP) от такого поведения?
Я тщательно прочитал документацию обо всех CURR и QUAN, но не нашел ни одного слова о знаке. Может ли кто-нибудь объяснить это?

Единственным решением, с которым я закончил, было использование типа DEC и элементов данных на основе DEC.

Сложение: простой тест, чтобы проверить описанную проблему
1. Создайте три переменные типов BNOMS (домен BWHR), MATQUAN (домен MENG10) и MENGEP (домен MENGEP). Все эти типы являются стандартными типами DDIC с unchecked знак поля в домене.
2. Присвоить отрицательное значение для них
3. выводить их в ALV

Как BNOMS и MATQUAN типов CURR и Quan типы, они будут выводить знак в любом случае, тогда как MENGEP не будет, так как она имеет тип декабря , Во время выполнения все они сохраняют знак, однако в отношении ограничений домена ALV DEC-типа соблюдаются, поэтому я склонен думать, что это проблема, связанная с ALV.

+0

«сохранить информацию о знаке» где? – vwegert

+0

@vwegert Я не знаю, где именно это происходит (отсюда и мой вопрос), по крайней мере, я вижу это в отладчике и при выходе в ALV-сетку. – Suncatcher

ответ

0

Имейте в виду, что существуют две различные системы типа в стеке ABAP - dictionary types как CHAR, NUMC, DEC и QUAN, которые используются для структур и особенно определений баз данных, а также ABAP types используется во время выполнения. type mapping is explained in detail in the documentation.

Важно отметить, что во время выполнения («в отладчике») существуют только типы ABAP. Любые ограничения, помещенные в элемент данных через домен, которые не могут быть переведены в соответствующее определение типа ABAP (например, чувствительность к регистру/нечувствительность или флаг подписанного/неподписанного), просто игнорируются. Вы можете легко определить переменную, основанную на домене CHAR1_X, который имеет фиксированные значения 'X' и ' '. Так как это переводит на простой TYPE C LENGTH 1 в ABAP, то также легко назначить строчный код x, U или - в системе Unicode - .

+0

Я прекрасно осведомлен о различии между типами ABAP/DDIC и явно указанным DDIC в заголовке. Мы знаем, что соответствующее внутреннее представление для CURR и QUAN - это тип ABAP ** P **, однако тип DEC также соответствует ** P **, и он отлично несет знаковые данные. – Suncatcher

+0

Когда мы создаем переменную из домена на основе DEC с отключенным значком, система уважает этот факт. Таким образом, ваше предположение об игнорируемых ограничениях между типами ABAP и DDIC не совсем верно. – Suncatcher

+0

Кажется, проблема с ALV, см. Мое дополнение. – Suncatcher