SAPфорум.RU
https://sapboard.ru/forum/

Проверка на то, что число является числом определённого формата
https://sapboard.ru/forum/viewtopic.php?f=13&t=95884
Страница 1 из 1

Автор:  Alexey Zhandarov [ Пт, дек 15 2017, 16:00 ]
Заголовок сообщения:  Проверка на то, что число является числом определённого формата

Добрый день. Сам не абапер, но вопрос волнует, пока ответа не нашёл.

Есть элемент данных, построенный на домене:
Тип 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, плавающая точка, ещё один символ может быть и т.д. чтот такое объяснение этому.

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

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

Автор:  Besa [ Пт, дек 15 2017, 17:46 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Длина в данном случае указывается в байтах.
Далее по формуле (длина х 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 как есть конечно.

Автор:  Alexey Zhandarov [ Сб, дек 16 2017, 09:46 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Спасибо за ответ!
Т.е. получается, что если когда-то этот элемент данных всё таки захотят увеличить на один символ, то придётся смотреть его использование и править соответствующие проверки?
не универсально конечно

Автор:  Удав [ Пт, дек 22 2017, 13:53 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Для этих целей существуют регулярные выражения. Если версия ERP 6.0 и выше

Автор:  Alexey Zhandarov [ Пт, дек 29 2017, 12:06 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Добрый день. А как регулярные выражения помогают в данной ситуации?
Всё равно же, если меняешь элемент данных нужно будет и его менять.
Всё равно несколько мест.

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

Автор:  Daw [ Пт, дек 29 2017, 12:21 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата  Тема решена

Можно воспользоваться ФМ 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
*"----------------------------------------------------------------------

Автор:  Alexey Zhandarov [ Пт, дек 29 2017, 14:38 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

еееее!!
То что нужно, именно это я и искал!
Спасибо, Daw!!

Автор:  Besa [ Пт, дек 29 2017, 16:35 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Alexey Zhandarov написал:
Добрый день. А как регулярные выражения помогают в данной ситуации?
Всё равно же, если меняешь элемент данных нужно будет и его менять.
Всё равно несколько мест.

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

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

Автор:  Alexey Zhandarov [ Ср, янв 03 2018, 11:57 ]
Заголовок сообщения:  Re: Проверка на то, что число является числом определённого формата

Alexey Zhandarov написал:
Вам можно было и самому забапить


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

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/