예전에 이노펠리스님이 올렸던 질문에 추가로 궁금한게 있어서 질문 드립니다.
http://www.e-abap.net/zb/bbs/zboard.php?id=ABAPQnA&no=3727
CALL METHOD grid1->GET_CURRENT_CELL
importing
e_row = row2
E_VALUE = value
E_COL = col
ES_ROW_ID = s_row
ES_COL_ID = s_col
ES_ROW_NO = s_roid .
ALV에서 위와 같은 메소들 호출 했는데요...
SUB TOTAL 이 여러개일 경우 더블 클릭 시
이걸 다른 SUB TOTAL과 구분해 주는 방법이 없을까요?
화면에 한줄을 모두 읽어오는게 젤 좋은거 같은데 아무리 찾아봐도 방법이 없네요.
GET_CURRENT_CELL 은 라인을 더블클릭이 안되고 선택시만 들어 오구요.
ROW2 에 몇번째 줄, VALUE에 화면 컬럼 값, COL 에 컬럼 네임이 들어 옵니다.
S_ROW 값에 'S 0202 0000000001' 요렇게 들어 오긴 하는데...
'T' 로 시작하면 토탈이구. 'S' 는 서브 토탈
'0202'이 레벨이더군요. 이걸론 구분하는데 많이 부족합니다.
출력 레이아웃 순서가 날짜, 자재타입, 외주구분, 공정, 데이터... 이렇게 들어가는데
자태 타입만 FERT에 대한 서브 토탈의 상세 내역을 출력 하려면
꼭 한라인을 읽어 와야 합니다.
다른 방법이라도 있으시면 꼭 답변 부탁드립니다
* e-abap님에 의해서 게시물 복사되었습니다 (2010-01-09 13:44)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-01-09 13:55)
댓글 5
-
요요
2009.12.31 00:37
GET_SUBTOTALS 를 사용해 보심은 어떠신지요? -
용스
2009.12.31 01:44
그것도 사용해 봤는데요 DATA, DATA1, DATA2, DATA3 로 여기는 화면에 보이는 순서가 아닌 그냥 레벨별로 구분된 순서 잖아요
Sub total 사이에 데이터가 있으면 라인도 늘어나고
그러니깐 화면에 보이는거랑 그 레벨로 정렬된 서브토탈 순서를 이어줄만한 INDEX가 없어서요.
화면을 읽어 오는 방법이 없을까요?
-
요요
2009.12.31 02:33
DATA et_sm00 TYPE REF TO data.
DATA et_sm01 TYPE REF TO data.
DATA et_sm02 TYPE REF TO data.
DATA e_row TYPE i.
DATA es_row_id TYPE lvc_s_row.
DATA es_row_no TYPE lvc_s_roid.
DATA tabname TYPE tabname.
DATA l_index TYPE i.
FIELD-SYMBOLS : <fs_table> TYPE table,
<fs_struc> TYPE ANY.
CASE g_okcode.
WHEN OTHERS.
CALL METHOD g_grid->get_current_cell
IMPORTING
e_row = e_row
es_row_id = es_row_id
es_row_no = es_row_no.
CALL METHOD g_grid->get_subtotals
IMPORTING
ep_collect00 = et_sm00
ep_collect01 = et_sm01
ep_collect02 = et_sm02.
CASE es_row_id-rowtype(1).
WHEN 'S'. " SubTotals
CONCATENATE 'ET_SM' es_row_id+2(2) '->*' INTO tabname.
ASSIGN (tabname) TO <fs_table>.
l_index = es_row_no-row_id + e_row.
READ TABLE <fs_table> ASSIGNING <fs_struc>
INDEX l_index.
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING <fs_struc> TO gs_data.
ENDIF.
WHEN 'T'. " Totals
* read et_sm00
ENDCASE.
이렇게 하니 sub totals 합계 결과가 읽히는 것 같네요.
테스트 한번 해보시구요. 좋은 결과 있으시길 바랍니다.
-
용스
2010.01.01 19:57
감사합니다.
ASSIGN (tabname) TO <fs_table>. <--- 요개 좀 ^^:
et_sm00 이 ref to data로 되어 있어서 assign이 잘 안되는데요
필드안에 인터널 테이블은 필드 심볼을 어떻게 사용해야 되나요 ?
-
용스
2010.01.06 23:02
'ET_SM02->*' 이건 동적으로 안되더라구요 하는 수없이 IF문으로 하나하나 넣어줘서
다시 필드 심볼로 받아 오게 했습니다.
if ES_ROW_ID+4(2) = '01'.
ASSIGN ET_SM01->* TO <FS_DATA>.
elseif ES_ROW_ID+4(2) = '02'.
ASSIGN ET_SM02->* TO <FS_DATA>.
.....
elseif ES_ROW_ID+4(2) = '05'.
ASSIGN ET_SM05->* TO <FS_DATA>.
endif.
read table <fs_data> assigning <fs> index wa1-counter.
뭐 결론은 ^^; 레이아웃을 바꾸기로 해버렸네요