Текущее время: Вт, сен 25 2018, 03:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 15 2017, 17:00 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 24 2015, 12:01
Сообщения: 37
Пол: Мужской
Добрый день. Сам не абапер, но вопрос волнует, пока ответа не нашёл.

Есть элемент данных, построенный на домене:
Тип DEC
Число позиций 8
Десятичные разряды 6
Длинна вывода 9.

т.е. числа от 00,000001 до 99,999999

При загрузке из файла загружается какое то число.
Как проверить что оно подходит к данному типу?
Т.е. если в файле число например 475

Конструкция
TRY.
lv_unit_pr = ls_excel_char-unit_pr.

CATCH cx_sy_conversion_overflow.

Не работает, так как в абапе получаем 475.000000
и это не попадает в к CATCH
И вроде это правильно из-за того что это число типо P, плавающая точка, ещё один символ может быть и т.д. чтот такое объяснение этому.

в итоге в коде всё ок, но когда происходит запись в таблички, то тут получаем дамп.

Как нормально можно проверить?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 15 2017, 18:46 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 17:25
Сообщения: 2974
Пол: Мужской
Длина в данном случае указывается в байтах.
Далее по формуле (длина х 2 - 1(под знак) )
То есть:
p1 type p decimal 6 length 5 - 999,999999

p1 type p decimal 6 length 4 - 9,999999

То есть, не отловите Вы через try как написали.

Объявляйте p1 type p decimal 6 length 5 (или в домене это будет длина 9 там немного по другому, но все равно система приведет это к родовому типу P(5) ) и потом if > 99,999999 тогда ошибка.
ну и оставить try как есть конечно.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Сб, дек 16 2017, 10:46 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 24 2015, 12:01
Сообщения: 37
Пол: Мужской
Спасибо за ответ!
Т.е. получается, что если когда-то этот элемент данных всё таки захотят увеличить на один символ, то придётся смотреть его использование и править соответствующие проверки?
не универсально конечно


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 22 2017, 14:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 17:44
Сообщения: 2931
Откуда: Москва
Для этих целей существуют регулярные выражения. Если версия ERP 6.0 и выше

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 29 2017, 13:06 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 24 2015, 12:01
Сообщения: 37
Пол: Мужской
Добрый день. А как регулярные выражения помогают в данной ситуации?
Всё равно же, если меняешь элемент данных нужно будет и его менять.
Всё равно несколько мест.

p.s. я просто в лёгком шоке от того, что вроде проблема банальна и на поверхности а сап не предусмотрел её простого решения.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата  Тема решена
СообщениеДобавлено: Пт, дек 29 2017, 13:21 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2005, 14:24
Сообщения: 78
Можно воспользоваться ФМ BUS_NUMBERFIELD_PAI_NEW

Code:
FUNCTION BUS_NUMBERFIELD_PAI_NEW.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_TABNAME) LIKE  DD03L-TABNAME
*"     VALUE(I_FIELDNAME) LIKE  DD03L-FIELDNAME
*"     VALUE(I_CURRENCY) LIKE  TCURC-WAERS OPTIONAL
*"  EXPORTING
*"     VALUE(E_VALUE_DB)
*"  CHANGING
*"     REFERENCE(C_VALUE_DYNP)
*"  EXCEPTIONS
*"      INPUT_NOT_NUMERICAL
*"      TOO_MANY_DECIMALS
*"      MORE_THAN_ONE_SIGN
*"      ILL_THOUSAND_SEPARATOR_DIST
*"      TOO_MANY_DIGITS
*"      SIGN_FOR_UNSIGNED
*"      TOO_LARGE
*"      TOO_SMALL
*"      INVALID_DATE_FORMAT
*"      INVALID_DATE
*"      INVALID_TIME_FORMAT
*"      INVALID_TIME
*"      INVALID_HEX_DIGIT
*"      UNEXPECTED_ERROR
*"      INVALID_FIELDNAME
*"      FIELD_AND_DESCR_INCOMPATIBLE
*"      INPUT_TOO_LONG
*"      NO_DECIMALS
*"      INVALID_FLOAT
*"      CONVERSION_EXIT_ERROR
*"----------------------------------------------------------------------


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 29 2017, 15:38 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 24 2015, 12:01
Сообщения: 37
Пол: Мужской
еееее!!
То что нужно, именно это я и искал!
Спасибо, Daw!!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Пт, дек 29 2017, 17:35 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 17:25
Сообщения: 2974
Пол: Мужской
Alexey Zhandarov написал:
Добрый день. А как регулярные выражения помогают в данной ситуации?
Всё равно же, если меняешь элемент данных нужно будет и его менять.
Всё равно несколько мест.

p.s. я просто в лёгком шоке от того, что вроде проблема банальна и на поверхности а сап не предусмотрел её простого решения.

Предусмотрел через ФМки которые надо искать)
Но если Вы понимаете суть вопроса, то Вам можно было и самому забапить универсальную проверку прочитав параметры домена который сидит в Вашем ЭД.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка на то, что число является числом определённого формата
СообщениеДобавлено: Ср, янв 03 2018, 12:57 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 24 2015, 12:01
Сообщения: 37
Пол: Мужской
Alexey Zhandarov написал:
Вам можно было и самому забапить


Да, можно было. В самом деле уже почти даже начал)

Просто был у меня недавно схожий опыт, поэтому и не спешил.
Видел как в программах с юникодом абапер использовал не имеющиеся возможности
cl_abap_container_utilities=>read_container_c/cl_abap_container_utilities=>fill_container_c
а изобретал велосипед, написал кучу строк, которые потом ещё долго отлаживались.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

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