안녕하세요. 질문이 있어 문의드립니다.
ALV에 있는 필드중 - 거래은행, 거래계좌(BANKACC), 입금계좌명 - 이 있는데요.
거래계좌를 '10001' 에서 '10003'으로 변경하는 경우
FORM data_changed USING rr_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA : ls_mod_cells TYPE lvc_s_modi,
ls_cells TYPE lvc_s_modi.
LOOP AT rr_data_changed->mt_good_cells INTO ls_mod_cells.
CASE ls_mod_cells-fieldname.
when 'BANKACC'.
perform bankacc_changed using rr_data_changed
ls_mod_cells.
bankacc_changed 라는 서브루틴을 호울하는데요.
이 루틴에서 아래의 쿼리로 은행계좌명 을 갖고와 셋팅해주려고 합니다.
쿼리에서 변경된 필드(거래계좌) 값은 아는데 그 라인의 회사코드와 거래은행코드를 갖고와야 합니다.
어떻게 갖고 올 수 있을까요? 아님 다른 방법이 있을까요?
오늘도 답변 부탁드립니다. 꾸벅~
SELECT SINGLE text1 FROM t012t
INTO l_text1
WHERE spras = sy-langu
AND bukrs = ??company_code -> 회사코드
AND hbkid = ??bankcd -> 거래은행
AND hktid = ls_mod_cells-value. -> 변경된 필드값 (거래계좌)
해당 그리드에 대한 내부테이블을 itab 이라고 가정하면
rr_data_changed->mt_mod_cells (보통 good_cells 보다는 mod_cells을 많이 사용합니다)
에 보면 row_id 라는 필드가 있는데 이 필드가 internal table 의 tabix 값을 가집니다.
그러므로 loop 아래에
read table itab into stab index ls_mod_cells-row_id.
라고 하면 현재 변경된 데이터의 internal table 레코드를 읽게 됩니다.
그럼 선택된 레코드의 회사코드, 거래은행계좌정보를 읽어올 수 있게 되고
이정보로 위 select 를 실행하시면 해당 정보를 읽어올 수 있습니다.
읽어온 정보를 grid 에 업데이트하기 위해서는 rr_data_changed->modify_cell 메쏘드를 사용하시면 되구요
좋은 결과 있으시길 바랍니다.