ANBTR_SUM 데이터 유형 CURR 13자리 소숫점 2자리
--------------------------------------------
.....
LOOP AT IT_ITAB.
ANBTR_SUM = ANBTR_SUM + IT_ITAB-ANBTR.
ENDLOOP.
...
여기서 ANBTR_SUM에 값에 값을 계속 더해줍니다.
그런데 더하다가 합계가 많이커지면 바로 덤프가 떨어지네요..
그덤프나올때 메세지로 처리를 하고 싶은데요...
MESSAGE E001 WITH '숫자가 너무 큽니다' RAISING CX_SY_ARITHMETIC_OVERFLOW.
이걸 해주는게 맞나요?
그래서 이렇게 해봤습니다.
LOOP AT IT_ITAB.
ANBTR_SUM = ANBTR_SUM + IT_ITAB-ANBTR.
MESSAGE E001 WITH '숫자가 너무 큽니다' RAISING CX_SY_ARITHMETIC_OVERFLOW.
ENDLOOP.
근데 ANBTR_SUM이 자릿수를 넘어서면 비교할 시간도 주지 않고 바로 덤프가 떨어집니다.
밑에 메세지를 타야하는데요..
어떻게 하면될까요?
댓글 6
-
쭈니
2009.07.16 15:36
-
헤미안
2009.07.16 15:48
음 ...덤프자체를 예외처리 하실려고 하시는거 같은데.
그건 좀 불가능한거 같은데요..
체크로직을 추가하셔서 체크로직이 참일때 해당 메세지를 호출하시는게 나을듯 합니다.
RAISING EXCEPTION구문은 핼프를 보니 method 구문이나 funtion안에서 예외를 정의한후 쓰는 구문인거 같습니다.
-
진
2009.07.16 15:58
try .... catch 구문을 사용하면 가능합니다. -
남군
2009.07.16 16:07
현재 에러는 TYPE 에러인데요..
LOOP AT IT_ITAB.을 사용하시고나서
ANBTR_SUM = ANBTR_SUM + IT_ITAB-ANBTR.
ENDLOOP.
TRY CATCH로 덤프는 안나게 하는게 가능하긴 하지만 빈번하게 나는 에러 같은 경우라면
ANBTR_SUM 의 소수점 이상의 자리수를 늘려 주는편이 나을 것 같네요..
-
민버미꺼!
2009.07.17 08:13
모든 분들 답변이 맞습니다.
남군님 답변대로 빈번하게 나는 에러면 변수의 타입을 크게 잡으시는 것이 효율적입니다.
-
rune
2009.08.17 22:38
try.
loop.
.
.
endloop.
catch 메시지처리
endtry. 가 가장 쉬워보이네요
엇...이상한데요???
LOOP AT IT_ITAB.을 사용하시고나서
ANBTR_SUM = ANBTR_SUM + IT_ITAB-ANBTR.
MESSAGE E001 WITH '숫자가 너무 큽니다' RAISING CX_SY_ARITHMETIC_OVERFLOW.
ENDLOOP.
이렇게 하시면 메세지가 소용이 없어 보입니다...
지금 내용을 보아하니.. ANBTR값이 13자리 이상히면 덤프가 떨어지는것이니... 그에 합당한 IF문을 사용하여 메세지 처리를 해주시면
될듯합니다...
아직 경험이 짧은 1人의 의견이었습니다