DB 테이블에 있는 자료를 테이블 컨트롤로 옮겨와서 작업을 하는데
테이블 컨트롤에 특정한 라인을 하나 생성해서 그 생성한 라인에 새로운 자료를 넣고 싶습니다.
1. 새로 생성한 라인에 자료를 저장하는 방법이 궁금하구요...(찾아봐도 잘 모르겠네요..)
2. 자료를 특정라인에 넣어놔도 스크린 로직을 타면서 sort를 시켜버리네요.
[ex) 코드 번호가 1.2.3.... 10 까지 있는데 제가 11번 코드를 2번코드 다음에 넣고 싶은데 로직을 타면서 소트 되서 10번 뒤에 나옵니다.]
그래서 소트를 시키지 않는 명령어가 있으면 변수를 적용해서 "이럴경우엔 소트 시키지 마라..."라고 하고 싶은데
그런 명령어가 따로 있는건지 궁금합니다.
1번 사항도 꼭 알고 싶고...1번을 알아도 2번 사항이 해결이 안되면 안되서..;ㅎㅎ
결국은 두개 다 알고 싶다는....
댓글 4
-
CoMAN
2009.01.06 23:59
-
tenyearsago
2009.01.07 04:33
답변 감사합니다. 개념 정립하는데 도움이 되었습니다.
그렇지만 질문의 뜻이 제대로 전달이 되지 않은 부분이 있는듯 한데
제가 궁금해했던게 테이블 컨트롤에서
특정 위치에 라인을 생성하는것이 아니라 그 특정위치에 생성한 라인에 "데이터를 넣는 방법"입니다.
100번 스크린에 테이블 컨트롤을 만들고 200번 테이블에 테이블 컨트롤의 라인별 자료조회 기능을 만들었습니다.
인터널 테이블을 그대로 100번 스크린 테이블 컨트롤로 사용하였으며 200번 테이블의 각 필드는 인터널 테이블의 헤더부분입니다.
100번스크린에서 mark 클릭후 "조회 버튼" 누르면 그 자료가 itab헤더로 올라가서 200번 스크린에 뿌려지게 됩니다.
100번스크린에서 "생성 버튼" 누르면 200번 스크린에서 itab헤더클리어 하여 공백상태이며 자료입력후 저장하면 db테이블에 저장됩니다.
여기서 100번 스크린의 특정 라인을 선택한후 "생성버튼"을 누르면 200번 화면에 입력창이 뜨고 거기서 입력을 하고 저장을 하면
100번 스크린에서 선택한 특정라인에 저장이 되게 하고 싶습니다.
현제 100번스크린에서 특정라인 선택하여 "생성버튼"을 누르면 인터널테이블 바디부분에
라인추가 되는것까진 되는데 그 라인에 200번 스크린의 자료를 insert 시키는 법을 모르겠습니다.
인터널테이블 헤드부분을 내가 지정한 인터널 테이블의 특정 라인에 저장하고 싶은게 질문의
요점이겠습니다.
또한 sort가 되지 않고 원하는 위치에 저장이 되게 하고 싶습니다.
이렇게 할수 있는 방법이 있는가요? 정확하진 않더라도...혹여 돌아가는 코딩법이라도 알려주시면 감사하겠습니다.
-
CoMAN
2009.01.07 20:34
라인이 추가되었다는건 internal table에 공백라인이 들어가 있다는 말씀인듯한데...
itab-posnr itab-b itab-c
10 A 100
20 B 200
30 (공백) "새로 추가한 라인
40 C 300
30을 스크린 200으로 넘겨서 추가하고자 하는 거라면....
posnr을 key modify하면 되지 않을까요?
30이 추가되지 않은 상태에서 추가하고자 할때는
스크린 200에서 insert로 하시면 될거 같고....
*님의 생각하는 방향과 맞는지 모르겠습니다만...
-
tenyearsago
2009.01.08 04:37
감사합니다 ^^ 드뎌 해결했네요.이걸로 3일을 끌다니.ㅠ.ㅠ
*1>SCREEN에 라인추가(+)/라인삭제(-) 버튼생성합니다.
g_oldokcode = g_okcode.
CLEAR : g_okcode.
* g_okcode는 Function code입니다.
CASE g_oldokcode.
*..................................<라인추가>
WHEN 'INSROW'. "+버튼 클릭시
READ TABLE gt_itab WITH KEY mark = 'X'.
IF sy-subrc EQ '0'.
INSERT INITIAL LINE INTO gt_itab INDEX sy-tabix.
*...혹시 gt_itab에 기본적으로 들어가 데이터가있으면 처리해야함.
ELSE.
MESSAGE s000 WITH '한 개의 라인을 선택하십시요.'.
ENDIF.
*..................................<라인삭제>
WHEN 'DELROW'.
DATA : t_subrc LIKE sy-subrc.
CLEAR t_subrc.
READ TABLE gt_itab WITH KEY mark = 'X'.
IF sy-subrc EQ '0'.
"다른 연관된 데이터가 있는지 체크 후 삭제
DELETE gt_itab WHERE mark EQ 'X'.
ELSE.
MESSAGE s000 WITH '한 개의 라인을 선택하십시요.'.
ENDIF.
ENDCASE.
*2> 코드번호말고 별도의 소트할수 있는 (sy-tabix처럼) 필드를 가져갑니다.
insert or delete할 경우 소트필드를 다시 지정합니다. -> internal table의 sy-tabix로..
예) loop at gt_itab.
add 10 to gt_itab-posnr. "소트필드 / 화면에는 보이지 않게 할수 있음.
modify gt_itab.
endloop.
sort gt_itab by posnr.