*화면 상단 HEADING 제거*
REPORT ZTEST_SADBLO_12 NO STANDARD PAGE HEADING
MESSAGE-ID ZMESSAGE_SADBLO
LINE-SIZE 80.
DATA: WA_ZSADBLO TYPE ZSADBLO.
DATA: IT_ZSADBLO LIKE TABLE OF WA_ZSADBLO.
*SELECT-OPTION 선언*
SELECT-OPTIONS: S_NAME FOR WA_ZSADBLO-NAME NO INTERVALS DEFAULT
'박하성'.
*PARAMETERS 선언*
PARAMETERS: PA_PART LIKE ZSADBLO-SAPART DEFAULT '웅진팀'.
*START-OF-SELECTION*
START-OF-SELECTION.
*검색 구문*
SELECT * FROM ZSADBLO INTO WA_ZSADBLO
WHERE
NAME IN S_NAME
OR
SAPART EQ PA_PART.
WRITE: WA_ZSADBLO-SANUM,
WA_ZSADBLO-NAME,
WA_ZSADBLO-SAPART,
/.
ENDSELECT.
*TOP-OF-PAGE*
TOP-OF-PAGE.
WRITE: (4) '사번' CENTERED,
(5) '이름' CENTERED,
(14) '업무' CENTERED.
ULINE.
*AT LINE-SELELCTION*
AT LINE-SELECTION.
WRITE: WA_ZSADBLO-AGE,
WA_ZSADBLO-SEX,
WA_ZSADBLO-PLACE,
WA_ZSADBLO-ETC,
/.
*페이지가 넘어가지 않도록 하는것*
CASE SY-LSIND.
WHEN 1.
EXIT.
WHEN OTHERS.
SY-LSIND = 1.
ENDCASE.
*TOP-OF-PAGE DURING LINE-SELECTION*
TOP-OF-PAGE DURING LINE-SELECTION.
WRITE: '이름: ',
WA_ZSADBLO-NAME.
ULINE.
WRITE: (4) '나이' CENTERED ,
(4) '성별' CENTERED,
(14) '직책' CENTERED,
(20) '특기사항' CENTERED.
ULINE.
READ TABLE IT_ZSADBLO INTO WA_ZSADBLO
WITH KEY WA_ZSADBLO-SANUM .
*오류메세지 출력 구문*
*AT SELECTION-SCREEN*
AT SELECTION-SCREEN.
IF WA_ZSADBLO-NAME NE S_NAME.
MESSAGE S011.
ELSEIF PA_PART NE WA_ZSADBLO-SAPART.
MESSAGE S012.
ENDIF.
지금까지 제가 작성한 것들인데요.
첫번째 입력화면을 통해 값을 입력 받고
실행을 시키면 선택한 컬럼들이 출력이 되고
출력된 리스트 중에 한 라인을 선택하여 더블클릭하면
한 테이블 내의 다른 컬럼들을 보여주는 프로그램을 만들려고 합니다.
지금 문제점은
1. 첫번째 리스트 출력 후 라인을 더블클릭하면 다른 항목들이 뜨게 해야 하는데
첫번째 리스트 출력 후 더블클릭하면 첫번째 리스트의 맨 마지막 라인의 값을
첫번째 리스트의 첫라인부터 끝라인 까지 다 받아 옵니다.
그리고 라인을 더블 클릭해서 두번째 리스트가 나오면 리스트 상단에 해당 컬럼
이름이 출력되어야 하는데 이것또한 첫번째 리스트의 맨 마지막 라인의 값을 그대로
받아옵니다.
ex)
첫번째 리스트 두번째 리스트
이름 성별 나이 더블클릭 이름: 춘향이
홍길동 남자 44 ----------------> 나이 성별
향단이 여자 11 24 여자
춘향이 여자 24
여기서 원래는 홍길동의 이름을 받고 44살 남자라는 데이터를 받아와야 되는데 이게 안되네요ㅜㅜ
2.입력창에서 오류메세지 출력을 해야하는데
이름이 테이블에 있고 업무도 테이블에 있으면 성공
이름이 테이블에 없고 업무는 테이블에 있으면 에러메세지 '이름을 정확히 입력하세요'
이름이 테이블에 있고 업무는 테이블에 없으면 에러메세지 '업무를 정확히 입력하세요.
이런식으로 해야되는데
문제는 오류메세지 출력후 입력받는 곳이 빨갛게 변해서 값을 바꿔도 실행이 안되네요...ㅜㅜ
오류메세지 출력후 입력받는 곳에 다시 값을 넣을 수 있도록 할 수 없는건가요?
제가 시작한지 얼마 안되서 정확한 개념도 없이 과제를 시작하게 되어서
문법도 틀린부분이 많겠지만
여러분들의 많은 답변 부탁드릴께요.
아주초보라 설명이 이상해도 이해해주세요.....
(마지막으로 기초적인 설명 부탁드립니다.)
1 번 오류는 HIDE 구문을 사용하면 될거 같은데요
제가 예전에 작성한 소스코드인데 한번 참고 하시죠.
*&---------------------------------------------------------------------*
*& Report ZABAP20_01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zabap20_01 NO STANDARD PAGE HEADING.
* 사용할 테이블 선언.
TABLES : mara, makt, t134t.
************************************************************************
* 조인하고 fetch 한 레코드를 저장할 Internal Table 선언. *
************************************************************************
DATA : BEGIN OF lt_mat OCCURS 0,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
mtart TYPE mara-mtart,
mtbez TYPE t134t-mtbez,
matkl TYPE mara-matkl,
END OF lt_mat.
************************************************************************
* 조회조건 입력 콘트롤 UI 생성부분 *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bk_input WITH FRAME TITLE text-t01.
PARAMETERS : pa_count TYPE i DEFAULT 100, " fetch 할 레코드수
pa_mtart TYPE mara-mtart. " Material Type
SELECT-OPTIONS : so_matkl FOR mara-matkl.
SELECTION-SCREEN END OF BLOCK bk_input.
************************************************************************
* mara, matk, t134t 3개의 테이블조인 *
************************************************************************
SELECT m~matnr
k~maktx
m~mtart
t~mtbez
m~matkl
FROM mara AS m
LEFT OUTER JOIN makt AS k
ON m~matnr EQ k~matnr
* SY-LANGU 는 현재 환경의 언어 키값.
AND k~spras EQ sy-langu
INNER JOIN t134t AS t
ON m~mtart EQ t~mtart
AND t~spras EQ sy-langu
UP TO pa_count ROWS
INTO CORRESPONDING FIELDS OF TABLE lt_mat
WHERE m~mtart EQ pa_mtart
AND m~matkl IN so_matkl.
************************************************************************
* 헤더표시 부분. *
************************************************************************
WRITE :/1(112) sy-uline.
WRITE :/1(1) sy-vline,
2(5) 'Index' COLOR COL_NEGATIVE,
7(1) sy-vline,
8(15) 'Material Number' COLOR COL_POSITIVE,
23(1) sy-vline,
24(20) 'Material Description' COLOR COL_GROUP,
44(1) sy-vline,
55(13) 'Material Type' COLOR COL_KEY,
68(1) sy-vline,
69(28) 'Description of material type' COLOR COL_TOTAL,
97(1) sy-vline,
98(14) 'Material Group' COLOR COL_HEADING,
112(1) sy-vline.
WRITE :/1(112) sy-uline.
************************************************************************
* fetch 한 레코드 출력부분. *
************************************************************************
LOOP AT lt_mat.
WRITE :/1(1) sy-vline,
2(5) sy-tabix COLOR COL_NEGATIVE,
7(1) sy-vline,
8(15) lt_mat-matnr COLOR COL_POSITIVE,
23(1) sy-vline,
24(20) lt_mat-maktx COLOR COL_GROUP,
44(1) sy-vline,
55(13) lt_mat-mtart COLOR COL_KEY,
68(1) sy-vline,
69(28) lt_mat-mtbez COLOR COL_TOTAL,
97(1) sy-vline,
98(14) lt_mat-matkl COLOR COL_HEADING,
112(1) sy-vline.
* 각 라인에 HIDE 를 시켜놓으면 클릭이나 더블클릭시 해당 레코드에 접근할수 있음.
HIDE : lt_mat-matnr, lt_mat-maktx, lt_mat-mtart, lt_mat-mtbez, lt_mat-matkl.
ENDLOOP.
WRITE :/1(112) sy-uline.
************************************************************************
* 클릭또는 더블클릭 이벤트. *
************************************************************************
AT LINE-SELECTION.
" 여기서 HIDE 걸어둔 데이터에 접근할수 있음.
SET PARAMETER ID : 'MAT' FIELD lt_mat-matnr.
CALL TRANSACTION 'MM03'.