밑에 ALV 스크린상 삭제 로직인데요 잘 안풀리는곳이 있어서 문의 드립니다.
DELETE gt_outtab INDEX ls_row-index. <-- 이 로직은 ALV 스크린상에서 행을 지우는
로직인데요 디버깅상 하나의 행을 지울때는 문제가 없는데 여러 행을 지울때는 딱 홀수행만 지워집니다.
10개의 행을 지운다고 했을때 1,3,5,7,9 만 지워집니다. 그리고 나머지 2,4,6,8,10을 지운다고 했을때
2,6,10 이런식으로 반만 지워집니다. 근데 이상하게도 저 구문을 빼면 정상적으로 다 지워집니다.
근데 스크린상에는 지워진 데이터가 남아서 문제입니다. 제가 구현하려 하는건 실제 DB 테이블과
스크린상에서 동시에 같이 지워져야 하거든요
고수님들 도움좀 부탁드립니다.
LOOP AT lt_rows INTO ls_row.
READ TABLE gt_outtab INDEX ls_row-index INTO gt_outtab.
DELETE gt_outtab INDEX ls_row-index.
DELETE FROM zsailing_t_001 WHERE sdate = gt_outtab-sdate
AND regno = gt_outtab-regno
AND io = gt_outtab-io
AND buino = gt_outtab-buino.
ENDLOOP.
MESSAGE s001(00) WITH '선택된 데이터가 삭제되었습니다'.
CALL METHOD grid1->refresh_table_display.
쓰다가 벌써 두번 날려 먹었네요
코딩으로 봐서는 인터널 테이블이 키로 구분이 가능한거로 보이네요
DATA : BEGIN OF LT_DEL_KEYS OCCURS 0,
sdate TYPE sdate_type,
regno TYPE regno_type,
io TYPE io_type,
buino TYPE buino_type,
end of lt_del_keys.
LOOP AT lt_rows INTO ls_row.
READ TABLE gt_outtab INDEX ls_row-index.
if sy-subrc eq 0.
clear lt_del_keys.
move-correponding gt_outtab to lt_del_keys.
append lt_del_keys.
endif.
endloop.
loop at lt_del_keys.
DELETE gt_outtab WHERE sdate = lt_del_keys-sdatep.
AND regno = lt_del_keys-regno
AND io = lt_del_keys-io
AND buino = lt_del_keys-buino.
DELETE FROM zsailing_t_001 WHERE sdate = lt_del_keys-sdatep.
AND regno = lt_del_keys-regno
AND io = lt_del_keys-io
AND buino = lt_del_keys-buino.
endloop.