Сейчас все по порядку(для полноты картины):
Есть таблица ZRESURS, в ней есть поле REST_IN с элементом данных основанном на стандартном домене MENG13V, который допускает ввод отрицательных чисел.
Запросом данные из этой таблицы считываются во внутренную ITAB2 и ее содержимое выводится в ALVGrid.
При построении ALVGrid заполнил фиел-каталог так:
Code:
clear fldcatrow.
fldcatrow-fieldname = 'REST_IN'.
fldcatrow-ref_table = 'ZRESURS'.
fldcatrow-coltext = 'Остат.Выд.'.
fldcatrow-key = ' '.
fldcatrow-edit = 'X'.
fldcatrow-fix_column = ' '.
fldcatrow-outputlen = '8'.
append fldcatrow to fldcat3.
При открытии грида она выводит для отрицательных чисел минус справа типа "12,345-"
Попросили привести к виду "-12,345".
Для этого были написаны 2 функциональных модуля:
Code:
Сокращенно мудуль называю ФМ OUTPUT
FUNCTION CONVERSION_EXIT_ZSIGN_OUTPUT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA rate(18) type c.
rate = input.
clear output.
if rate < 0.
shift rate RIGHT DELETING TRAILING '-'.
shift rate LEFT DELETING LEADING space.
shift rate right.
rate(1) = '-'.
else.
shift rate LEFT DELETING LEADING space.
endif.
output = rate.
ENDFUNCTION.
Сокращенно мудуль называю ФМ INPUT
FUNCTION CONVERSION_EXIT_ZSIGN_INPUT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA rate(18) type c.
rate = input.
clear output.
output = rate.
ENDFUNCTION.
и в описание фиелд-каталога внесено изменение
Code:
clear fldcatrow.
fldcatrow-fieldname = 'REST_IN'.
fldcatrow-ref_table = 'ZRESURS'.
fldcatrow-convexit = 'ZSIGN'.
fldcatrow-coltext = 'Остат.Выд.'.
fldcatrow-key = ' '.
fldcatrow-edit = 'X'.
fldcatrow-fix_column = ' '.
* fldcatrow-outputlen = '8'.
append fldcatrow to fldcat3.
В результате минус при выводе переместился влево, т.е. можно сказать, что ФМ OUTPUT отработал правильно.
Когда мы вбиваем в ячейку число типа "-1.234" и нажимаем Enter он число вводит, в модуль ФМ INPUT НЕ ПОПАДАЕТ и выводит число в ячейке как "-1234.000". Причем она его выводит так потому, что на вход ФМ OUTPUT значение передается через переменную INPUT как "1234.000-", т.е. теряется разделитель дробной части.
Чтобы заставить систему заходить в ФМ INPUT я закоментировал в фиелд-каталоге поле
Code:
* fldcatrow-ref_table = 'ZRESURS'.
Теперь при вносе значения в ячейку она заходит в ФМ INPUT, но корректно сделать преобразование не получается поскольку параметр OUTPUT имеет тип p(7)
При бреакпоите видно, что входная переменная INPUT имеет значение "-1.234", затем RATE="-1.234"
и при попытке его присвоении OUTPUT превращается в "1-", что в ALVGrid выводится как "0.001-"
Как это все побороть?!