위 쪽에 있는 그림에서 빨간 박스에 둘려 쌓여져 있는 부분을 활성활 시키고 싶습니다.
즉, 행추가 버튼을 눌러 추가된 행에 사원번호를 임의로 입력하고 싶습니다.
그러기 위해서는 빨간 박스 부분을 활성화 시켜주어야 하는데 어떻게 해야 저부분을 활성화 시킬 수 있을까요??
참고로 P필드 값이 'I'로 들어간 행은 행추가 버튼을 눌러 행을 추가한 행입니다.
한가지 질문을 더 드리겠습니다.
메뉴에 있는 저장 버튼을 눌러 현재 테이블 컨트롤 상태를 데이터를 불러온 테이블인 ZSADBLO에 UPDATE하고 싶습니다.
' ' -> DB에서 불러온 데이터
'I' -> 행추가 버튼을 눌러 추가한 행
'U' ->DB에서 불러온 데이터가 변경되었을 때
'D' ->DB에서 불러온 데이터에 행 삭제 버튼을 눌렀을 때
POINT (화면상에 보이는 P 필드)에 위와 같은 조건을 주고 UPDATE 하려면 어떻게 하나요??
제가 생각한 것은
(저장버튼의 OK_CODE는 SAVE입니다.)
OK_CODE가 SAVE면
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO WHERE NOT POINT IS INITIAL.
CASE POINT
WHEN 'I'
INSERT 구문
WHEN 'U'
UPDATE 구문
WHEN 'D'
DLELTE 구문
ENDLOOP.
이렇게 해도 되는 건가요??
답변 부탁드리겠습니다.^^
아래는 소스 코드 입니다.
--------------------------------------------------------------------------------------------------------------
PBO
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE SET_TC_LINES.
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO
WITH CONTROL TC_SADBLO.
MODULE MARK_SEND.
ENDLOOP.
PAI
PROCESS AFTER INPUT.
MODULE EXIT AT EXIT-COMMAND.
LOOP AT IT_ZSADBLO.
FIELD MARK MODULE MODIFY_INFO ON REQUEST.
CHAIN.
FIELD :
WA_ZSADBLO-NAME,
WA_ZSADBLO-POINT,
WA_ZSADBLO-AGE,
WA_ZSADBLO-SAPART,
WA_ZSADBLO-SEX,
WA_ZSADBLO-PLACE.
MODULE MODIFY_DATA ON CHAIN-REQUEST.
ENDCHAIN.
ENDLOOP.
MODULE USER_COMMAND_0100.
~TOP
*&---------------------------------------------------------------------*
*& Include MZTC_2TOP 모듈풀 *
*& *
*&---------------------------------------------------------------------*
PROGRAM SAPMZTC_2 MESSAGE-ID ZMESSAGE_SADBLO.
CONTROLS TC_SADBLO TYPE TABLEVIEW
USING SCREEN '0100'.
TABLES: ZSADBLO.
DATA: BEGIN OF WA_ZSADBLO,
POINT(1),
MARK(1),
SANUM LIKE ZSADBLO-SANUM,
NAME LIKE ZSADBLO-NAME,
AGE LIKE ZSADBLO-AGE,
SAPART LIKE ZSADBLO-SAPART,
SEX LIKE ZSADBLO-SEX,
PLACE LIKE ZSADBLO-PLACE,
END OF WA_ZSADBLO.
DATA: IT_ZSADBLO LIKE TABLE OF WA_ZSADBLO.
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE OK_CODE.
DATA: MARK.
DATA: WA_ZSADBLO1 LIKE WA_ZSADBLO.
~O01
*&---------------------------------------------------------------------*
*& Include MZTC_2O01 *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'TITLE'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module MARK_SEND OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MARK_SEND OUTPUT.
MARK = WA_ZSADBLO-MARK.
ENDMODULE. " MARK_SEND OUTPUT
*&---------------------------------------------------------------------*
*& Module SET_TC_LINES OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SET_TC_LINES OUTPUT.
DESCRIBE TABLE IT_ZSADBLO LINES TC_SADBLO-LINES.
ENDMODULE. " SET_TC_LINES OUTPUT
~I01
*&---------------------------------------------------------------------*
*& Include MZTC_2I01 *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'PLAY'.
CLEAR OK_CODE.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_ZSADBLO
FROM ZSADBLO.
WHEN 'SAVE'.
WHEN 'ADDR'.
CLEAR WA_ZSADBLO.
WA_ZSADBLO-POINT = 'I'.
INSERT WA_ZSADBLO INTO TABLE IT_ZSADBLO.
WHEN 'DELR'.
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO WHERE MARK = 'X'.
IF WA_ZSADBLO-POINT = '' OR WA_ZSADBLO-POINT = 'U'.
WA_ZSADBLO-POINT = 'D'.
MODIFY IT_ZSADBLO FROM WA_ZSADBLO.
ELSEIF WA_ZSADBLO-POINT = 'I'.
DELETE IT_ZSADBLO WHERE MARK = 'X'.
ENDIF.
ENDLOOP.
IF SY-SUBRC <> 0.
MESSAGE S018.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module MODIFY_DATA INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODIFY_DATA INPUT.
WA_ZSADBLO-POINT = 'U'.
MODIFY IT_ZSADBLO FROM WA_ZSADBLO
INDEX TC_SADBLO-CURRENT_LINE.
ENDMODULE. " MODIFY_DATA INPUT
*&---------------------------------------------------------------------*
*& Module MODIFY_INFO INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODIFY_INFO INPUT.
IF NOT MARK IS INITIAL.
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO1.
CLEAR WA_ZSADBLO1-MARK.
MODIFY IT_ZSADBLO FROM WA_ZSADBLO1.
ENDLOOP.
ENDIF.
WA_ZSADBLO-MARK = MARK.
MODIFY IT_ZSADBLO FROM WA_ZSADBLO
INDEX TC_SADBLO-CURRENT_LINE TRANSPORTING MARK.
ENDMODULE. " MODIFY_INFO INPUT
댓글 7
-
기본도없는초보
2008.12.03 01:11
-
튀밥
2008.12.03 01:13
기본도 없는 초보님 답변 감사합니다.^^
근데 오픈이란게 무슨 말씀이신지ㅜㅜ
아직 초보라 이해를 못하겠어요~
활성화를 오픈이라고 하신건가요???
-
설련
2008.12.03 01:19
네 활성화맞습니다
MODULE tc_cont OUTPUT.
IF flag = 'X'.
LOOP AT SCREEN.
IF screen-name = 'ITAB-PERID'.
IF tc_1-current_line > lin. "lin은 DB에건수 보다 많으면 오픈
screen-input = 1.
ELSE.
screen-input = 0.
ENDIF.
ELSE.
screen-input = 1. "주민번호가 아닌것은 열어줘라
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDMODULE.
이거 예전에 연습했던 테이블컨트롤 인데 그중에서 활성화와 비활성화 부분입니다 참고해보시겠어요 도움이 되실진 모르겠네요
-
튀밥
2008.12.03 01:22
감사합니다. 소스 참고해서 해보겠습니다.^^
한가지 더 궁금한게 있습니다. 저기서 LIN 이라는 것이 무엇을 나타 내는 건가요??
-
無念군
2008.12.03 03:20
답변을 잘 달아 주신거 같으신데용 ..
lin = 변수 처리 한거 같습니다 .. DB에서 select 해온 값이 count 값이 들어 가 있을것으로 예상 됩니다만..
IF tc_1-current_line > lin.
tc_1-current_line 말 그대로 화면상에 보여지는 table 의 값이 lin. DB에서 select 해온 값보다 클경우
라고 걸으신거 같습니다 +_+ㅋ
답변 달아 주신 방법을 이용하여 궁금 하신 점이 해결 되셧쓰면..
감사 인사 덧글 한줄과... [완료] 를 눌러 주시는 sence ^^*
-
튀밥
2008.12.03 03:49
기본도없는초보님, 설련님, 無念군님의 답변 정말로 감사드립니다.
답변을 통해 많은 것을 배우게 되었습니다.^^
-
초보자
2010.12.15 06:17
잘보았습니다.^^
튀밥님 말씀처럼 맨아래열은 새로 추가한열이시죠 나머지 위에부분은 db에서 셀렉트해온것이구요?
그러실땐 조건을 이렇게 주심 될것같은데한번 참고해보세요
테이블컨트롤의 라인이 인터널 테이블의 라인 즉 db의 데이터를 가지고온라인보다 크면 스크린에서 오픈해줘라 이렇게 주심 될것같은데
한번해보세요 전 이렇게 해결한 기억이 나네요