안녕하세요 ^^
문제는 제목과 같구요,
로직 순서는 대충...
1) select 문으로 원하는 전체데이터 gt_itab 에 담기
2) 불러온 gt_itab의 내용 몇몇필드 수정
3) 사용자출력
문제는,
사용자 layout 에 'Transaction number' 명으로 검색조건이 있는데,
이것은
1) 에서 못거르고요(이순간에는 정보가없고요),
2) 에서 "LOOP AT gt_itab INTO gs_itab" 이렇게 돌면서 다른 테이블정보끌고와,
gt_itab에 담고, 그 정보로 걸러야 할 듯 싶어요
그리고 3) 에서 거른 정보 뿌려주고요...
문제는 Loop 를 통해 gt_itab 레코드 하나하나 접근하면서, 원하는 않는 레코드를
걸로서 3)에서 전체적으로 뿌려줄 수 있느냔는 겁니다.
제가 아직 초라르 개념이 안서서, 고수분이 볼때는 너무 간단한문제로 고민하는거냐고 하시겠지만...
정말 오래 생각해보고 안되서 글 올립니다. ㅠ.ㅠ 알려주세요.
* e-abap님에 의해서 게시물 이동되었습니다 (2010-07-07 23:37)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-07-07 23:42)
댓글 4
-
두잉
2010.07.02 19:04
-
버미!
2010.07.02 19:14
두잉님 답변대로 해도 되지만 "2) 불러온 gt_itab의 내용 몇몇필드 수정" 처리를 다한다음
사용자 출력하기 전에 조회 조건에 'Transaction number' 요넘을 체크하여 있다면 한방에 삭제해도됨
'Transaction number' 이 S_TRNUM 이라면
if S_TRNUM[] is not initial.
delete gt_itab where (Transaction number의 필드명) not in S_TRNUM.
endif.
-
맑은하늘
2010.07.02 20:03
loop 안에서 delete 하는 것은 performance 측면에서 추천하고 싶지 않네요
데이터가 많지 않다면 별 문제 없겠지만요.
보통은 다음처럼 하는 경우가 많습니다.
loop at itab 에 대한 삭제조건이 명확하다면
delete itab where (삭제조건). 으로 삭제하시면 되지만
loop 를 돌면서 내부로직에 의하여 삭제 대상으로 결정된 레코드라면
아래처럼 삭제대상이라는 의미를 부여하여 그 부여한 조건을 삭제조건으로
하여 itab 을 삭제하는 것이 좀 더 좋을 것 같네요.
많은 방법이 있겠지만 case 별로 3개만 썼어요. 도움 되시길...
case 1.
loop at itab.
if delete_itab.
clear : itab_key.
endif.
endoop.
delete itab where itab_key is initial.
case 2.
1. itab 에 삭제를 위한 플래그 설정 : fieldname => del.
loop at itab.
...
if delete_itab.
itab-del = 'X'.
modify itab transporting del index sy-tabix.
endif.
endloop.
delete itab where del = 'X'.
case 3.
data : it_index type hashed table of i with unique key table line with header line.
loop at itab.
....
if delete itab.
insert sy-tabix into table lt_index.
endif.
endloop.
loop at it_index.
delete itab index it_index.
endoop.
-
marco
2010.07.02 22:57
음, 역시 LOOP를 돌면서 뭔가 삭제한다는 것 자체가 비효율적이라 생각했습니다.
되도록이면, GT_ITAB 에 담글 대 조건을 걸어서 걸러내야겠네요.
답변주신 세분 감사드립니다^^
이렇게 정성스럽게 답변을 주시다니...초보의 답답한 가슴이 뻥뚤린느낌입니다. ^_______^
data : l_index type sy-tabix.
LOOP AT gt_itab INTO gs_itab.
l_index = sy-tabix.
.
.
" 중간 로직...
.
.
" 수정 하시거나...
modify gt_itab from gs_itab index l_index.
" 삭제 하시거나
delete gt_itab index l_index.
endloop.
이렇게 하면 될 것 같은데요..원하시는 답변인지 모르겠네요..^^ 열공하세요..