Скрыть знак для типов DDIC CURR и QUAN в ALV

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

введите здесь описание изображения

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

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

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

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


person Suncatcher    schedule 13.01.2017    source источник
comment
где сохранить информацию о знаках?   -  person vwegert    schedule 14.01.2017
comment
@vwegert Я не знаю, где именно это происходит (отсюда и мой вопрос), по крайней мере, я вижу это в отладчике и при выводе в ALV-сетку.   -  person Suncatcher    schedule 15.01.2017


Ответы (1)


Имейте в виду, что в стеке ABAP есть две разные системы типов - типы словарей, такие как CHAR, NUMC, DEC и QUAN, которые используются для структур и особенно определений баз данных, и типы ABAP, используемые во время выполнения. Сопоставление типов подробно описано в документации .

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

person vwegert    schedule 15.01.2017
comment
Мне прекрасно известно различие между типами ABAP / DDIC и явно указанным в заголовке DDIC. Мы знаем, что соответствующее внутреннее представление для CURR и QUAN - это тип ABAP P, однако тип DEC также соответствует типу P и отлично несет информацию о знаке. - person Suncatcher; 16.01.2017
comment
Когда мы создаем переменную из домена на основе DEC с отключенным знаком, система учитывает этот факт. Таким образом, ваше предположение об игнорировании ограничений между типами ABAP и DDIC не совсем верно. - person Suncatcher; 16.01.2017
comment
Кажется, проблема с ALV, см. Мое дополнение. - person Suncatcher; 16.01.2017