Текущее время: Чт, сен 20 2018, 03:09

Часовой пояс: 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
Сообщения: 2930
Откуда: Москва
Для этих целей существуют регулярные выражения. Если версия 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 часа


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

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


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

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