안녕 하세요 E-ABAP으로 열심히 공부하는 마늘맛쿨피스 입니다.
ABAP프로그램을 짜는데
gs_amt_profit-amt_1 = ( gs_amt_fix04-amt_10 / gs_amt_fix-amt_10 )
위 소스에서 gs_amt_fix04-amt_10 / gs_amt_fix-amt_10 둘중에 하나의 값이 0일경우 계산이 안되 오류가 납니다.
저런 계산식이 엄청나게 많아서 그런데 나누는 값이 0일때는 어떻게 처리 해야 될까 궁금 합니다.
IF문을 써서 0을 가려 내려 했지만 식이 너무 많아서 그것도 힘들거 같고 좋은 방법 있을까요 ??
Error in the ABAP Application Program
The current ABAP program "YREPORT_011" had to be terminated becau
come across a statement that unfortunately cannot be executed.
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_ZERODIVIDE', was not caught in
procedure "COMPARISON04" "(FORM)", nor was it propagated by a RAISING clause.
Since the caller of the procedure could not have anticipated that the
exception would occur, the current program is terminated.
The reason for the exception is:
In the current program "YREPORT_011", an arithmetic operation ('DIVIDE',
'/', 'DIV' or 'MOD') with a type P operand attempted to divide
by 0.
댓글 8
-
rune
2009.11.10 20:45
-
요요
2009.11.10 21:37
수식이 있는 곳을 다음과 같이 감싸시면 덤프를 에러메세지로 처리하실 수 있습니다.
DATA: result TYPE i,
number TYPE i VALUE 0.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4
OTHERS = 8.
result = 1 / number.
ENDCATCH.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH 'Arithmetic error'.
ELSE.
WRITE result.
ENDIF.
-
유리선율
2009.11.11 00:03
오~ rune/요요님 좋은 정보 감사..ㅋㅋ
-
마늘맛쿨피스
2009.11.11 00:34
식이 엄청 많으면 어떻게 하나요 ???
-
테라스
2009.11.11 18:25
CATCH ~ ENDCATCH. 사이에 계산식 전부를 집어넣으면 덤프떨어지는건 막을수 있습니다.
-
레드바이러스
2009.11.11 19:07
오늘 하나 배워가내요 감사합니다.
-
카스테라
2009.11.11 23:38
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4
OTHERS = 8.
result = 1 / number.
ENDCATCH.
제일 안전한 방법같습니다.
-
마늘맛쿨피스
2009.11.13 18:04
감사 합니다 카스테라 님 덕분에 소스가 1000라인이 줄었네요 ㅠㅜ 감사 합니다.
gs_amt_fix04-amt_10 값은 0이어도 상관이 없는데
gs_amt_fix-amt_10 는 0이면 덤프납니다 계산식 앞에서 IF문으로 gs_amt_fix-amt_10 가 0이면 계산식을 안타게 해야할것 같습니다.
저라면 IF문에서 계산식까지 매크로로 만들어서 하겠습니다.
define divide.
if &1 = 0.
&3 = 0.
else.
&3 = &2 / &1.
endif.
end-of-definition.
divide gs_amt_fix-amt_10 gs_amt_fix04-amt_10 gs_amt_profit-amt_1.