안녕하세요..
오랜만에 개발 하려고 하니 머리가 안돌아서 힌트좀 얻으려고 합니다.
1) lt_list-기준일자 : 2015.07.31
2) 비교대상 테이블의 데이터 : lt_temp
날짜 값
2014.05.16 1
2014.0613 2
2014.06.17 3
2015.07.06 4 <== 가져오고 싶은 값.
3) 테스트 code
LOOP AT lt_temp WHERE no = lt_list-no.
lv_idx = sy-tabix.
IF lt_temp-날짜 < lt_list-기준일자 .
AT END OF 날짜.
CONTINUE.
ENDAT.
DELETE lt_temp INDEX lv_idx.
ELSE.
IF l_chk = ''.
MOVE lt_temp-값 TO gs_list-값.
l_chk = 'X'.
ENDIF.
ENDIF.
APPEND gs_list TO gt_list.
ENDLOOP.
마지막 값 2015.07.06 , 4 를 가져오고 싶은데, 테이블의 값이 마지막이면 삭제를 하고 싶지 않은데 어떻게 하면 좋을까요?
댓글 5
-
시원한바람
2022.06.11 02:32
-
다크나잇트
2022.06.16 20:19
어떻게 해결하셨는지 써주시면 도움이 될 것같습니다.
-
햄찌파파
2022.06.14 01:11
해결했다니 다행이시네요. 답변이 늦었네요.. ㅎㅎ
위의 경우 날짜 연산을 사용하면 편리할 듯 보입니다.
TYPES : BEGIN OF s,
date TYPE datum,
num TYPE i,
diff TYPE i,
END OF s.
DATA : lt_temp TYPE TABLE OF s.
DATA : lv_date TYPE datum.
lv_date = '20150731'.
lt_temp = VALUE #( ( date = '20140516' num = 1 )
( date = '20140613' num = 2 )
( date = '20140617' num = 3 )
( date = '20150706' num = 4 ) ).
LOOP AT lt_temp ASSIGNING FIELD-SYMBOL(<fs>).
<fs>-diff = abs( <fs>-date - lv_date ).
ENDLOOP.
SORT lt_temp BY diff.
READ TABLE lt_temp INTO DATA(ls_temp) INDEX 1.
WRITE ls_temp-date.
그럼 수고하세요.
-
시원한바람
2022.06.16 01:45
소중한 답변 감사드립니다.
해결은 했습니다만, 궁금하고 배우는 차원에서 해보려고 했는데
아래 에러가 발생하네요..
일러주신것은 제가 평소 해보진 않은 로직이라 무엇이 잘못되었는지 잘 모르겠네요..
답변 부탁드립니다..
DATA: BEGIN OF lt_0011_07 OCCURS 0,
num TYPE zt01-num,
erdat TYPE zt01-erdat
diff TYPE i,
END OF lt_0011_07.
DATA: lt_0011_07_temp LIKE TABLE OF lt_0011_07 WITH HEADER LINE.FIELD-SYMBOLS <fs> TYPE ANY.
lt_0011_07_temp[] = lt_0011_07[].
LOOP AT lt_0011_07_temp ASSIGNING FIELD-SYMBOL(<fs>).
<fs>-diff = abs( <fs>-erdat - lt_list-eindt ).
ENDLOOP. -
햄찌파파
2022.06.23 23:45
안녕하세요.
제가 드린 예제는 ABAP 740 이상 Version 에서 실행가능한 것입니다.
기존 문법을 사용한다면 아래와 같이 하시면 될 듯 싶습니다.
DATA: BEGIN OF lt_0011_07 OCCURS 0,
num TYPE zt01-num,
erdat TYPE zt01-erdat,
diff TYPE i,
END OF lt_0011_07.DATA: lt_0011_07_temp LIKE TABLE OF lt_0011_07 WITH HEADER LINE.
LOOP AT lt_0011_07_temp.
lt_0011_07_temp-diff = abs( lt_0011_07_temp-erdat - lt_list-eindt ).
MODIFY lt_0011_07_temp TRANSPORTING diff.
ENDLOOP.SORT lt_0011_07_temp BY diff.
READ TABLE lt_0011_07_temp INDEX 1.
WRITE lt_0011_07_temp-erdat.
겨우 해결했네요,ㅋㅋ