Текущее время: Пн, июл 14 2025, 12:46

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Непонятка с использованием CONVERSION_EXIT ...
СообщениеДобавлено: Пн, фев 12 2007, 13:21 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
Всем привет!

Есть у меня проблема с выводом отрицательных чисел (знак минус справа).

Попробовал решить ее через подпрограммы преобразования.

Тип данных выводимый в ALVGrid основан на стандартном домене MEHG13V.

Привожу код фМ
Code:
FUNCTION CONVERSION_EXIT_ZSIGN_OUTPUT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
  DATA rate(18) type c.
  rate = input.
  translate rate using ',.'.
  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.

FUNCTION CONVERSION_EXIT_ZSIGN_INPUT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA rate(18) type c.
  rate = input.
  clear output.
  output = rate.
ENDFUNCTION.


ФМ OUTPUT работает правильно, а вот с ФМ INPUT -проблемы.

Ввожу в ячейку "-1.234" нажимаю Enter программа переходи в ФМ INPUT.
Там по бреак поиту смотрую значения переменных :

INPUT =>"-1.234"
rate =>"-1.234"
OUTPUT => "0"

После присвоения OUTPUT значения rate
OUTPUT =>"1-"
и в ALVGrid выводится как "0.001-"
Хотя в самой таблице все сохраняется нормально "-1.234"

Что нужно поменять в ФМ INPUT, чтобы корректно работало?

ЗЫ: Типы переменным INPUT и OUTPUT не указывал


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятка с использованием CONVERSION_EXIT ...
СообщениеДобавлено: Пн, фев 12 2007, 14:14 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
mmsmms написал(а):
Всем привет!

Есть у меня проблема с выводом отрицательных чисел (знак минус справа).

Попробовал решить ее через подпрограммы преобразования.

...

А с чего это вдруг проблема? Или Вы собираетесь переписать все стандартные транзакции(модифицировать все домены)? Вот это будет проблемой!!
А так как так работает SAP - то пусть себе и работает дальше!

И не стоит зашивать форматы чисел в программу (',.') - они ведь у разных пользователей могут быть разными.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятка с использованием CONVERSION_EXIT ...
СообщениеДобавлено: Пн, фев 12 2007, 14:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
mmsmms написал(а):
ФМ OUTPUT работает правильно, а вот с ФМ INPUT -проблемы.

А попробуйте вообще не использовать ФМ INPUT, если в домене прописан знак "+/-", то вроде SAP должен сам разобраться с минусом.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 15:30 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пт, фев 09 2007, 12:41
Сообщения: 21
Откуда: Muenchen
Field catalog podkorregiroval?

_________________
Sorry for translit


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 16:31 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
to syname:

По поводу символа разделителя -согласен, это лишнее, уберу translate.
А вот только люди хотят, чтобы числа выглядели привычно для них, т.е. знак минус в начале, а не в конце, как SAP стандартно делает.

Сам домен MENG13V разрешает и положительные и отрицательные знаки и подпрограммы преобразования не имеет.

Мне нужно написать ФМ преобразования только для ALVGrida, а не прописывать ее в домене.


to Сергей Королев
Первоначально я и написал только OUTPUT но при вносе данных в ячейку вывалился в дамп с просьбой дать ему модуль INPUT.

to dankwart:

А что там нужно подкорректировать?

Дополнительно: Смотрю в отдладчике, а там тип данных для переменной OUTPUT в ФМ модуле INPUT p(7).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 17:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
mmsmms написал(а):
Первоначально я и написал только OUTPUT но при вносе данных в ячейку вывалился в дамп с просьбой дать ему модуль INPUT.

А выродженный модуль не пробовали? Типа OUTPUT = INPUT...

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 17:34 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
to Сергей Королев:

Не получается.

тип для переменной INPUT -LVC_VALUE (типа с(128))
тип для переменной OUTPUT -p(7)

При попытке OUTPUT = INPUT

для INPUT="-1.230"
OUTPUT="1-"
и в ALV отображается как "0.001-"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 17:37 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
не правильно fieldcatalog заполняете, не должен быть там p(7)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 19:16 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
Сейчас все по порядку(для полноты картины):

Есть таблица 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-"

Как это все побороть?!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 12 2007, 21:14 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Используете ФМ 'LVC_FIELDCATALOG_MERGE' для создания fieldcatalog.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 13 2007, 00:55 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
Посмотрите на ФМ:
CONVERSION_EXIT_EXCRT_OUTPUT и CONVERSION_EXIT_EXCRT_INPUT - они "решают" схожую задачу (знак минуса, в обратном курсе, меняют на '/').

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 13 2007, 09:55 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Или если хотите руками fieldcatalog создавать,
надо заполнить поля, примерно так:
fldcatrow-datatype = 'QUAN'.
fldcatrow-qfieldname = 'MEINS'.
fldcatrow-domname = 'MENG13V'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 13 2007, 12:48 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
to VGA:

Попробовал. При выводе данных заходит в ФМ OUTPUT и нормально выводит данные в ячейку как "-1.230"

При попытке вноса данных в ячейку и нажатии ENTER валится в дамп с сообщением:
Field symbol has not yet been assigned.

Error in ABAP program "CL_GUI_ALV_GRID============CP"
module "SPLIT_GOOD_AND_BAD"

to Виктор:

В модуле INPUT переменная OUTPUT уже имеет нужный тип данных, а у меня так не выходит.

to ALL:
У меня никак не получается сделать так, чтобы в ФМ INPUT переменная OUTPUT имела тип позволяющий присвоить ей отрицательное дробное число.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 13 2007, 13:09 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Вы ФМ 'LVC_FIELDCATALOG_MERGE' используете?
Сделайте так, а потом дальше разбирайтесть!

Если в дамп валится, вероятно не все поля руками заполнены в fieldcatalog


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 13 2007, 15:22 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 29 2006, 11:05
Сообщения: 30
Сформировал фиелд-каталог через ФМ LVC_FIELDCATALOG_MERGE
В результате она вывадит числа стандартным для SAP образом, а не как мне надо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB