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/ |