startdate enddate
20190501 20190531
20190601 20190630
20190701 20190731
이런식으로 itab에 값이 들어있습니다
여기에 날짜를 끼워넣어야 되는데요
예로
20190515 20190615 이 날짜를 넣는다구하면..
20190501 20190514
20190515 20190615
20190616 20190630
20190701 20190731
이렇게 만들어야됩니다.
20190415 20190515 이 날짜를 넣는다구하면..
20190415 20190515
20190516 20190531
20190601 20190630
20190701 20190731
이렇게 되야하구요. ..맨뒤에 들어갈수도 있구요
이리저리 고민하고 있는데 잘안되네요
시간이없는데...많은 조언 부탁드립니다
감사합니다
댓글 6
-
이종
2019.10.04 08:17
-
shc120
2019.10.04 19:33
위나 아래행을 비교해서 시작일 종료일을 바꿔줘야해서요 -
Mori
2019.10.07 22:50
1. 입력할 Enddate 로 기존 데이터중 Startdate 가 Enddate 보다 작은 데이터를 검색하여
Startdate = Enddate + 1 하여 변경
2. 입력할 데이터를 Append 후 Sort
※ 전제조건 : 입력할 데이터의 Startdate ~ Enddate 기간이 1달을 넘지 않을 것
Ex.)
1. 20190515 20190615 을 입력시
loop at itab where startdate <= '20190615'.
20160601 검색됨
Then : startdate = 20160615 + 1
modify startdate = 20160616
endloop.
2. append 20190515 20190615 to itab.
3. sort itab by startdate.
-
shc120
2019.10.08 03:09
불행히도 입력할 데이터의 sdate~edate는 랜덤이에요
자기 마음대로 들어올수 있대요... -
Mori
2019.10.08 21:02
그럼 입력기간내에 들어가는 데이터를 지우시고 위 로직 태우시면 되지 않을까 싶네요.
그리고 위 로직중에 빠진 내용이 있는데
이전 데이터중에 Enddate 수정부분이 빠졌습니다.
다시 로직을 세워보면
1. 입력기간내 데이터 삭제
delete itab where startdate > input_startdate
and enddate < input_enddate.
2. Enddate 중 Input_startdate 보다 작은 일자중 Max값을 검색하여
Enddate = Input_start_date - 1. 로 수정
3. Startdate 중 Input_enddate 보다 큰 일자중 Min값을 검색하여
Startdate = Input_Enddate + 1 로 수정
4. itab 에 Input_date 추가
5. 정렬
순으로 작업하시면 이어지는 기간이 만들어질 것 같아요.
[Template]
TYPES: BEGIN OF LS_DATE,
STARTDATE TYPE DATS,
ENDDATE TYPE DATS,
END OF LS_DATE.
DATA: S_INPUT TYPE LS_DATE,
S_DATA TYPE LS_DATE,
T_ITAB TYPE TABLE OF LS_DATE,
T_TEMP TYPE TABLE OF LS_DATE.
"- Make data
S_DATA-STARTDATE = '20190501'. S_DATA-ENDDATE = '20190514'. APPEND S_DATA TO T_ITAB.
S_DATA-STARTDATE = '20190515'. S_DATA-ENDDATE = '20190615'. APPEND S_DATA TO T_ITAB.
S_DATA-STARTDATE = '20190616'. S_DATA-ENDDATE = '20190630'. APPEND S_DATA TO T_ITAB.
S_DATA-STARTDATE = '20190701'. S_DATA-ENDDATE = '20190731'. APPEND S_DATA TO T_ITAB.
"- 입력값
CLEAR S_INPUT.
S_INPUT-STARTDATE = '20190415'. S_INPUT-ENDDATE = '20190515'.
"- 1. 기간내 삭제
DELETE T_ITAB WHERE STARTDATE > S_INPUT-STARTDATE
AND ENDDATE < S_INPUT-ENDDATE.
"- 2. Enddate 설정
T_TEMP = T_ITAB.
DELETE T_TEMP WHERE ENDDATE > S_INPUT-STARTDATE.
SORT T_TEMP BY ENDDATE DESCENDING.
READ TABLE T_TEMP INDEX 1 INTO S_DATA.
IF SY-SUBRC IS INITIAL.
READ TABLE T_ITAB INTO S_DATA
WITH KEY STARTDATE = S_DATA-STARTDATE
ENDDATE = S_DATA-ENDDATE.
IF SY-SUBRC IS INITIAL.
S_DATA-ENDDATE = S_INPUT-STARTDATE - 1.
MODIFY T_ITAB FROM S_DATA
INDEX SY-TABIX
TRANSPORTING ENDDATE.
ENDIF.
ENDIF.
"- 3. startdate 설정
T_TEMP = T_ITAB.
DELETE T_TEMP WHERE STARTDATE > S_INPUT-ENDDATE.
SORT T_TEMP BY STARTDATE ASCENDING.
READ TABLE T_TEMP INDEX 1 INTO S_DATA.
IF SY-SUBRC IS INITIAL.
READ TABLE T_ITAB INTO S_DATA
WITH KEY STARTDATE = S_DATA-STARTDATE
ENDDATE = S_DATA-ENDDATE.
IF SY-SUBRC IS INITIAL.
S_DATA-STARTDATE = S_INPUT-ENDDATE + 1.
MODIFY T_ITAB FROM S_DATA
INDEX SY-TABIX
TRANSPORTING STARTDATE.
ENDIF.
ENDIF.
"- 4 append
APPEND S_INPUT TO T_ITAB.
"- 5 sort
SORT T_ITAB BY STARTDATE.
CL_DEMO_OUTPUT=>DISPLAY( T_ITAB ). -
shc120
2019.10.09 02:28
Mori님 감사합니다. 많은 도움이 되었습니다.
덕분에 제 로직이 많이 간결해졌습니다 ^^
append 하고 해당 필드로 sort하면 안되는건가요?