테이블 컨트롤에서 insert row 가 잘 되지 않습니다...
그림에서와 같고 ..단 , insert row 시 사원번호 필드만 닫혀있는 상태구요 나머지는 모두 입력가능한 필드로 ]
insert 하고 싶은데요..잘 안되요 .. 도와주세요~~~
* e-abap님에 의해서 게시물 복사되었습니다 (2010-01-09 13:43)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-01-09 13:57)
댓글 6
-
숟가락맨
2010.01.06 22:25
-
금은돌
2010.01.06 22:59
좀더 쉽게 설명해주면 ...1. 스크린에가서 해당 활성화해줄 필드를 구룹잡아준다.
2. (+) 버튼을 누루면 빈라인 인설트해준다.
3. pbo에서 loop을 돌면서 한라인씩 찍어줄때 해당 빈 인설트부분이 나오면 loop at screen을
이용해서 구룹잡은것만 활성화한다.
테이블 컨트롤이 화면상에 어떤 원리로 뿌려지는지 확인 하신다면 이해 하시기 쉬울꺼에요..
-
처음처럼
2010.01.06 23:31
참조소스 좀 부탁드려요~
-
요요
2010.01.07 00:18
[flow logic]
PROCESS BEFORE OUTPUT.
MODULE tc_change_tc_attr.
LOOP AT gt_data
INTO gs_data
WITH CONTROL tc
CURSOR tc-current_line.
MODULE set_tc_line.
ENDLOOP.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
LOOP AT gt_data.
CHAIN.
FIELD gs_data-pernr.
FIELD gs_data-name1.
ENDCHAIN.
MODULE tc_line.
ENDLOOP.
MODULE user_command_100.
[Source code]
CONTROLS: tc TYPE TABLEVIEW USING SCREEN 0100.
DATA : BEGIN OF gs_data,
pernr TYPE pernr_d,
name1 TYPE name1_gp,
rtype TYPE c, " Recort type "N"ew
END OF gs_data,
gt_data LIKE TABLE OF gs_data.
DATA g_okcode TYPE syucomm.
START-OF-SELECTION.
* Test data
gs_data-pernr = '123456'.
gs_data-name1 = '이름'.
APPEND gs_data TO gt_data.
gs_data-pernr = '234567'.
gs_data-name1 = '나이'.
APPEND gs_data TO gt_data.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*----------------------------------------------------------------------*
* MODULE TC_CHANGE_TC_ATTR OUTPUT
*----------------------------------------------------------------------*
MODULE tc_change_tc_attr OUTPUT.
DESCRIBE TABLE gt_data LINES tc-lines.
ENDMODULE. "TC_CHANGE_TC_ATTR OUTPUT
*&---------------------------------------------------------------------*
*& Module TC_LINE INPUT
*&---------------------------------------------------------------------*
MODULE tc_line INPUT.
MODIFY gt_data FROM gs_data INDEX tc-current_line.
ENDMODULE. " TC_LINE INPUT
*&---------------------------------------------------------------------*
*& Module SET_TC_LINE OUTPUT
*&---------------------------------------------------------------------*
MODULE set_tc_line OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'GS_DATA-PERNR'.
CASE gs_data-rtype.
WHEN 'N'. " 추가된 라인(New line)
screen-input = '1'.
WHEN OTHERS.
screen-input = '0'.
ENDCASE.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE. " SET_TC_LINE OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_100 INPUT.
GET CURSOR LINE tc-current_line.
CASE g_okcode.
WHEN 'INSERT'.
PERFORM line USING g_okcode.
WHEN 'DELETE'.
PERFORM line USING g_okcode.
ENDCASE.
CLEAR g_okcode.
ENDMODULE. " USER_COMMAND_100 INPUT
*&---------------------------------------------------------------------*
*& Form LINE
*&---------------------------------------------------------------------*
FORM line USING us_okcode TYPE any.
DATA l_itab_index TYPE i.
DATA ls_data LIKE gs_data.
CLEAR ls_data.
ls_data-rtype = 'N'. " New-line indicator
" itab 의 index : 테이블 컨트롤의 현재 커서 위치 기준
l_itab_index = tc-top_line + tc-current_line - 1.
CASE us_okcode.
WHEN 'INSERT'.
INSERT ls_data INTO gt_data INDEX l_itab_index.
WHEN 'DELETE'.
DELETE gt_data INDEX l_itab_index.
ENDCASE.
ENDFORM. " LINE
테이블 컨트롤은 gs_data 구조에서 rtype을 제외한 나머지 필드
버튼은 icon_insert_row(fcode => INSERT) icon_delete_row(fcode => DELETE) 두개임.
선택이 아닌 커서위치를 기준으로 삽입, 삭제기준을 정하였습니다.
선택으로 할 경우 LOOP AT GT_DATA WHERE MARK = 'X' 등으로 바꾸시면 됩니다.
도움이 되시길 바랍니다.
-
요요
2010.01.07 00:22
참.. 고정필드가 여러개일 경우 SCREEN-NAME 대신 SCREEN-GROUP1~4 를 활용하셔도
될 거예요.
-
처음처럼
2010.01.07 18:02
감사합니다~ 덕분에 해결되었습니다 ^^
라인 추가하는거는 인터널 테이블에 빈라인 하나 추가하면 될테고...loop at screen. 해당 필드에 input 옵션 세팅해주면 추가된 필드 막을수 있을듯한데요....