해당소스는 특정날자를 입력하면 해당날자의 시작일과 마지막 일자를 구하는 펑션입니다.
해당 소스 나오는데는 큰 문제는 없구요.
하지만 윤달이라는 개념이 있어서 삽입을 해야하는데 넣을때 마다 오류가 발생됩니다.
도와주세요.
굵은 글씨로 처리한 부분에서 에러발생합니다.
제가 생각을 잘못 하는건지...여기까지 초급개발자 워니였습니다.
FUNCTION z_startday_endday_output.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUTDAY) TYPE SY-DATUM
*" EXPORTING
*" REFERENCE(STARTDAY) TYPE SY-DATUM
*" REFERENCE(ENDDAY) TYPE SY-DATUM
*"----------------------------------------------------------------------
DATA: date_input TYPE d,
monthcheck(2) TYPE c.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' " 날자 유효성 검사 펑션
EXPORTING
date = inputday
EXCEPTIONS
plausibility_check_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE E001(Z01) WITH 'ERROER!!'.
ENDIF.
date_input = inputday.
date_input+6(2) = '01'.
startday = date_input.
monthcheck = date_input+4(2).
CASE monthcheck.
WHEN '01'.
date_input+4(2) = '02'.
endday = date_input - 1.
WHEN '02'.
date_input+4(2) = '03'.
endday = date_input - 1.
WHEN '03'.
date_input+4(2) = '04'.
endday = date_input - 1.
WHEN '04'.
date_input+4(2) = '05'.
endday = date_input - 1.
WHEN '05'.
date_input+4(2) = '06'.
endday = date_input - 1.
WHEN '06'.
date_input+4(2) = '07'.
endday = date_input - 1.
WHEN '07'.
date_input+4(2) = '08'.
endday = date_input - 1.
WHEN '08'.
date_input+4(2) = '09'.
endday = date_input - 1.
WHEN '09'.
date_input+4(2) = '10'.
endday = date_input - 1.
WHEN '10'.
date_input+4(2) = '11'.
endday = date_input - 1.
WHEN '11'.
date_input+4(2) = '12'.
endday = date_input - 1.
WHEN '12'.
if date_input+0(4) mod 4 = 0 and date_input+0(4) mod 100 = 0
or date_input+0(4) mod 400.
date_input+4(2) = '01'.
endday = date_input + 364.
else.
date_input+4(2) = '01'.
endday = date_input + 365.
endif.
ENDCASE.
ENDFUNCTION.
댓글 7
-
강진규
2007.04.10 21:55
-
e-abap
2007.04.10 22:36
data : l_1 type i,
l_2 type i,
l_3 type i.
l_1 = date_input+0(4) mod 4.
l_2 = date_input+0(4) mod 100.
l_3 = date_input+0(4) mod 400.
if l_1 mod 4 = 0 and l_2 = 0
변수를 선언해서 사용하는게 좋을 거 같네요.
-
수욕정이풍부지
2007.04.11 00:27
조건문 안에 수식을 넣어서 에러 발생하시는 거 아닌가요?
e-abap님 말씀처럼 mod로 계산한 값을 일단 변수로 대체한 후에 조건문에 사용하시면 될 것 같습니다.
근데 e-abap님도 빨리 올리시느라 그런지 if l_1 mod 4 = 0 and l_2 = 0 이라고 쓰셨네요..
if l_1 = 0 and l_2 = 0 이라고 쓰려고 하셨던 것 같은데..
소스 연습을 위해서 만드는 펑션이 아니라면 강진규님 말씀처럼 존재하는 펑션을 쓰시면 될 것 같습니다.
concatenate inputday+0(6) '01' into startday.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = startday
IMPORTING
last_day_of_month = endday.
이렇게 쓰시면 될 것 같은데요..
-
w
2007.04.11 01:45
** 해당월의 마지막 일자
DATA: L_TT(2). "리턴이 날짜임
CALL FUNCTION 'RE_LAST_DAY_OF_MONTH'
EXPORTING
i_datum = sy-datum
IMPORTING
e_tt = l_tt.
-
이종원
2007.04.11 19:09
감사합니다. 두군데 다 적용해 보니...다 적용이 되네요..
직접만드는건 실력에 도움이 되겠지만 시간적인 측면을 보면....펑션내에 기존 펑션을 적용하는것이 더 효율적일것 같습니다.
감사합니다.
-
남군
2009.06.17 20:05
감사합니다. -
아이촉촉
2011.02.07 23:49
좋은 정보 감사합니다.
해당월 마지막 날짜 구하는 것은 RP_LAST_DAY_OF_MONTHS 평션을 쓰면 될것 같은데요...