안녕하세요.
정말 맘 같지 않은 프로그램 언어네요..휴..
테이블 컨트롤에서 임의의 필드의 값을 수정하고(그림1) 저장을 클릭하면
수정한 데이타만 DB Field를 수정해야 합니다.
즉, 여기서 수정한 데이타 라인 번호를 어떻게 알 수 있는 지요?
테이블 컨트롤 레이아웃은 그림2와 같습니다.
기존 프로그램을 보니 Mark를 이용하던데, 자세한 방법을 모르겠습니다.
데이타를 수정하면 Mark 필드에 X가 저장되어야 하는 데, 전 왜 저장이 안되는 지
질문이 좀 애매하네요..
잠시 소스로 도배좀 하겠습니다. 죄송합니다.
- Screen 0100 -
* gt_list : Select 결과 저장한 Itab.
* gt_list 구조
*
Data : BEGIN OF gt_list occurs 0,
* VKORG like zsmts710-VKORG,
* VTWEG like zsmts710-vtweg,
* SPART like zsmts710-spart,
* VKBUR like zsmts710-vkbur,
* VKGRP like zsmts710-vkgrp,
* mark type c,
* END OF gt_list.
* tc0100 : Table Control Name
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
loop at gt_list
WITH CONTROL tc0100 CURSOR tc0100-current_line.
module display_data.
endloop.
*
PROCESS AFTER INPUT.
Module exit_command_0100 AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.
loop at gt_list.
FIELD gt_list-mark
MODULE gt_list_mark ON REQUEST.
module modify_data.
endloop.
- O01 -
module display_data output.
read table gt_list index tc0100-current_line.
g_mark = gt_list-mark.
endmodule. " display_data OUTPUT
- I01 -
data : l_idx type i.
IF tc0100-line_sel_mode = 1
AND gt_list-mark = 'X'.
LOOP AT gt_list WHERE mark = 'X'.
l_idx = sy-subrc.
g_mark = ''.
gt_list-mark = g_mark.
MODIFY gt_list index tc0100-current_line TRANSPORTING mark.
ENDLOOP.
ENDIF.
댓글 5
-
鵬의 날개
2007.07.02 19:06
-
김지성
2007.07.02 22:15
鵬의 날개님 답변 고맙습니다.
그럼 여러 line을 수정한다면 어떻게 처리를 해야하는 지, 당최 감이 안오네요..
-
鵬의 날개
2007.07.03 01:37
음...데이터 라인번호를 아시는게 목적이 아니라 mark를 해주시는게 목적이셨군요...
IF tc0100-line_sel_mode = 1
AND gt_list-mark = 'X'.
LOOP AT gt_list WHERE mark = 'X'.
l_idx = sy-subrc.
g_mark = ''.
gt_list-mark = g_mark.
MODIFY gt_list index tc0100-current_line TRANSPORTING mark.
ENDLOOP.
ENDIF.
이부분을 보시면 mark 된 인터널 테이블을 loop 돌면서 공백으로 바꿔주고 있습니다...
-
김지성
2007.07.03 17:20
鵬의 날개님 답변 고맙습니다.
답변이 늦었습니다. 어제 해결을 했네요..알고 보니 참 어이가 없더군요..정말 간단한 문제였는데,
제가 원하던 내용은 BDC 프로그램(S/O 생성)에서 Header 데이타는 화면상으로 입력을 받고 Item 데이타는 엑셀파일로
업로드 하게 됩니다. 업로드된 데이타를 검증하면 서 잘못된 데이타를 수정한 후 BDC를 태우는 프로그램입니다.
여기서 엑셀 파일을 업로드 하면 테이블 컨트롤에 보이게 되며 검증시 테이블 컨트롤에서 직접 수정하게 됩니다.
이때 수정된 데이타가 어떤 라인의 번호인지 알아야 Modify를 해줄 수 있을 거라고 생각을 했거든요..
그래서 테이블 컨트롤에서 수정한 라인의 Mark를 X로 하면 추후 이 Mark에 X란 넘만 Mod해주면 될꺼라고 생각했어요
그런데 아주 심플,초초초간단하게 해결되네요..
PROCESS BEFORE OUTPUT.
LOOP AT gt_item
WITH CONTROL tc_0220 CURSOR tc_0220-current_line.
MODULE display_gt_itme_data. "Module만 생성 코드 없음
ENDLOOP.
PROCESS AFTER INPUT.
MODULE get_cursor_0220.
LOOP AT gt_item.
field gt_item-mark module item_check.
ENDLOOP.
- PAI Module -
module item_check input.
modify gt_item index tc_0220-current_line.
endmodule.
이렇게 하면 테이블 컨트롤에서 수정한 데이타가 바로 반영이 되더라구요..쩝..
2틀동안 헤매이다 해결하니 기분은 좋지만, 약간 허탈함..
수고하세요..
-
鵬의 날개
2007.07.03 19:11
해결 하셨다니 다행이네요...^^
get cursor 를 이용하시면 간단할 것 같군요...
현재 커서의 위치의 라인을 가져오시면 테이블 컨트롤에 데이터를 뿌려주는 인터널 테이블의 인덱스를 알수 있습니다...
님이 올리신 mark 는 테이블 컨트롤 맨 앞의 선택 버튼을 클릭해야만 됩니다...