Текущее время: Вт, июл 15 2025, 14:37

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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