ZSADBLO -사원정보
ZBOOKINFO -도서정보
ZBOOKLENT -대여정보
이렇게 3개의 테이블이 있습니다.
이 테이블들을 이용해서 리포트 프로그램을 짜고 있습니다.
우선 이름과 업무를 입력받고 실행을 시키면
사번 이름 업무 대여정보 가 출력 되어야 합니다.
대여정보는 사원정보의 사번과 대여정보의 사번을 비교하여 사번이 존재하면 Y, 존재하지 않으면 N으로 표시해야 합니다.
저렇게 해서 출력된 리스트 중에서
사번 이름 업무 쪽을 더블클릭하게 되면
사원의 상세정보를
대여정보쪽을 더블클릭하였을 때,
값이 Y면 대여목록을 값이 N이면 '대여정보가 없습니다' 를 출력해야 합니다.
지금 제가 안되는 것은 첫번째 HEADING이 뜨고 위에서 말한 세가지 경우에 각기 다른 두번째 HEADING을 띄우는 것과
첫번째 리스트에서 대여정보 부분을 더블 클릭하게 되면 대여목록을 띄우는 것입니다.
아래가 소스 코드 입니다.
*&---------------------------------------------------------------------*
*& Report ZTEST_SADBLO_15 *
*& *
*&---------------------------------------------------------------------*
*& 작성자: 김연일 *
*& 작성일자:2008.11.05 *
*& 작성내용:도서 대여 정보 *
*&---------------------------------------------------------------------*
*화면 상단 HEADING 제거*
REPORT ZTEST_SADBLO_14 NO STANDARD PAGE HEADING
MESSAGE-ID ZMESSAGE_SADBLO
LINE-SIZE 110.
*----------------------------------------------------------------------*
* DATA 선언부 *
*----------------------------------------------------------------------*
DATA: BEGIN OF WA_ZSADBLO.
INCLUDE STRUCTURE ZSADBLO.
DATA: STATUS,
END OF WA_ZSADBLO.
DATA: WA_ZBOOKINFO TYPE ZBOOKINFO.
DATA: WA_ZBOOKLENT TYPE ZBOOKLENT.
DATA: IT_ZSADBLO LIKE TABLE OF WA_ZSADBLO.
DATA: IT_ZBOOKINFO LIKE TABLE OF WA_ZBOOKINFO.
DATA: IT_ZBOOKLENT LIKE TABLE OF WA_ZBOOKLENT.
*----------------------------------------------------------------------*
* SELECT-OPTION과 PARAMETERS 선언 *
*----------------------------------------------------------------------*
*SELECT-OPTION 선언*
SELECT-OPTIONS: S_NAME FOR WA_ZSADBLO-NAME NO INTERVALS DEFAULT
'김연일'.
*PARAMETERS 선언*
PARAMETERS: PA_PART LIKE WA_ZSADBLO-SAPART DEFAULT 'SAP'.
*----------------------------------------------------------------------*
* 필드에 값이 입력된 후 실행되면 리스트을 출력 *
*----------------------------------------------------------------------*
*START-OF-SELECTION*
START-OF-SELECTION.
*S_NAME와 PA_PART값 입력받아 출력하는 부분*
SELECT *
FROM ZSADBLO
INTO CORRESPONDING FIELDS OF TABLE IT_ZSADBLO
WHERE NAME IN S_NAME
AND SAPART LIKE PA_PART.
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO.
SELECT SINGLE SANUM
FROM ZBOOKLENT
INTO WA_ZBOOKLENT-SANUM
WHERE SANUM = WA_ZSADBLO-SANUM.
IF SY-SUBRC EQ 0.
WA_ZSADBLO-STATUS = 'Y'.
ELSE.
WA_ZSADBLO-STATUS = 'N'.
ENDIF.
MODIFY IT_ZSADBLO FROM WA_ZSADBLO.
ENDLOOP.
LOOP AT IT_ZSADBLO INTO WA_ZSADBLO.
WRITE: / WA_ZSADBLO-SANUM,
WA_ZSADBLO-NAME,
WA_ZSADBLO-SAPART,
wa_zsadblo-status.
HIDE: WA_ZSADBLO-SANUM.
ENDLOOP.
*----------------------------------------------------------------------*
* 필드에 값이 입력된 후 실행되면 리스트를 뿌려주기 전에 HEADEING 뿌림 *
*----------------------------------------------------------------------*
*TOP-OF-PAGE*
TOP-OF-PAGE.
WRITE: (4) '사번' CENTERED,
(5) '이름' CENTERED,
(14) '업무' CENTERED,
(8) '대여여부' CENTERED.
ULINE.
*----------------------------------------------------------------------*
* 첫번째 리스트 중에 한 라인을 더블클릭하면 WRITE문 실행 *
*----------------------------------------------------------------------*
*AT LINE-SELELCTION*
AT LINE-SELECTION.
*HIDE값을 받아옴*
READ TABLE IT_ZSADBLO INTO WA_ZSADBLO
WITH KEY SANUM = WA_ZSADBLO-SANUM.
WRITE: WA_ZSADBLO-AGE,
WA_ZSADBLO-SEX,
WA_ZSADBLO-PLACE,
WA_ZSADBLO-ETC,
/.
*ZSADBLO의 사번과 ZBOOKLENT의 사번이 같을 경우 데이터 불러옴*
SELECT *
FROM ZBOOKLENT
INTO CORRESPONDING FIELDS OF TABLE IT_ZBOOKLENT
WHERE SANUM EQ WA_ZSADBLO-SANUM.
LOOP AT IT_ZBOOKLENT INTO WA_ZBOOKLENT.
WRITE: / WA_ZBOOKLENT-SANUM,
WA_ZBOOKLENT-BOOKID,
WA_ZBOOKLENT-BOOKLENTDAY,
WA_ZBOOKLENT-BOOKBACKDAY.
ENDLOOP.
*페이지가 넘어가지 않도록 하는것*
CASE SY-LSIND.
WHEN 1.
EXIT.
WHEN OTHERS.
SY-LSIND = 1.
ENDCASE.
*----------------------------------------------------------------------*
* 두번째 리스트가 뿌려지기 전에 HEADING 뿌림 *
*----------------------------------------------------------------------*
*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.
**대여정보 헤더*
* WRITE: () '사원번호' CENTERED,
* () '도서ID' CENTERED,
* () '도서대여일' CENTERED,
* () '도서반납예정일' CENTERED.
* ULINE.
**대여정보 없을 경우 헤더*
* WRITE: '도서를 대여한 적이 없습니다.'.
*
* ULINE.
그리고 위쪽에 있는 노란부분을 FIELD-SYMBOL을 써서 변경하려면 어떻게 해야 할지 모르겠습니다.
도와주세요~ㅜㅜ
댓글 3
-
Giant
2008.11.06 05:47
-
SAP폐인
2008.11.06 05:55
아무래도 도서정보시스템 만들면서 연습하시는 거 보니 투입되기 위해서 공부시키는 것 같네요..
GET CURSOR 구문을 활용해서 유저가 클릭한 값을 읽어서 처리해주면 될 것 같습니다.
클릭한 값이 사원이나 사번이면, 그리고 대출여부면 으로 구분해서 각각 select 구문을 작성하면 될 것 같습니다.
그리고 전체적으로 막히는 부분이 있으시면 실행하면서 디버깅 해보세요...
-
튀밥
2008.11.06 20:54
Giant 님과 SAP폐인님!! 친절한 답변 감사 드립니다. 많은 도움이 되었습니다.^^
AT LINE-SELECTION에서 왜서 또 이미 WRITE된 ITAB을 읽고 있습니까? 그리고 아래의 코드가 이해 안갑니다.
READ TABLE IT_ZSADBLO INTO WA_ZSADBLO
WITH KEY SANUM = WA_ZSADBLO-SANUM.
WRITE: WA_ZSADBLO-AGE,
WA_ZSADBLO-SEX,
WA_ZSADBLO-PLACE,
WA_ZSADBLO-ETC,
/.
위에서 IT_ZSADBLO 안에 AGE,SEX,PLACE,ETC등 필드가 어디 있습니까요?
그리고 미안하지만 위에서 예기한 문제점이 혹시 더블 클릭 했을시 DETAIL이 안 뜨는것입니까?
저는 HIDE를 사용시 전체 STRUCTURE을 HIDE합니다. 즉, HIDE WA_ZSADBLO.
그리고 AT LINE-SELECTION에서 GET CURSOR FIELD f VALUE val.이 문구를 사용 합니다.
도움이 됬는지 잘 모르겠네요? 제 답변이 무슨 문제가 있으시면 말을 남겨 주십시요!
그리고 FIELD-SYMBOLS을 사용 하려면 아래와 같이 사용하시면 됩니다.
FIELD-SYMBOLS <FS>LIKE LINE OF IT_ZSADBLO .
LOOP AT IT_ZSADBLO ASSIGNING <FS>.
SELECT SINGLE SANUM
FROM ZBOOKLENT
INTO WA_ZBOOKLENT-SANUM
WHERE SANUM = WA_ZSADBLO-SANUM.
IF SY-SUBRC EQ 0.
ELSE.
ENDIF.
ENDLOOP.