안녕하세요~ 초보 아밥퍼인데여~
오랜만에 코딩을 하게 됐는데 많이 잊어버려서 급 당황하고 있습니다.
FI 에서 일자별로 AP잔액 조회하는 프로그램인데여
DATA : BEGIN OF IT_BASIC OCCURS 0,
BUKRS LIKE BSIK-BUKRS, "회사코드
BELNR LIKE BSIK-BELNR, "회계전표번호
BUDAT LIKE BSIK-BUDAT, "전표의 전기일
HKONT LIKE BSID-HKONT, "계정
TXT20 LIKE SKAT-TXT20, "계정명
KTOPL LIKE SKA1-KTOPL, "계정과목
WAERS LIKE BKPF-WAERS, "통화키
LIFNR LIKE BSIK-LIFNR, "계정 번호
NAME1 LIKE LFA1-NAME1, "고객명
DMBTR LIKE BSEG-DMBTR, "미지급금
ZFBDT LIKE BSIK-ZFBDT, "만기일
ZLSPR LIKE BSEG-ZLSPR, "지급보류
END OF IT_BASIC.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-A10.
PARAMETERS : P_BUKRS LIKE BSIK-BUKRS OBLIGATORY, "회사코드
P_BUDAT LIKE BSIK-BUDAT OBLIGATORY DEFAULT SY-DATUM(8). "전기일자
SELECT-OPTIONS : S_ZFBDT FOR BSIK-ZFBDT OBLIGATORY, "만기일자
S_LIFNR FOR LFA1-LIFNR, "계정번
S_BELNR FOR BSIK-BELNR. "전표번호
SELECTION-SCREEN END OF BLOCK BL1.
머 이런식으로 했는데 데이터를 Select하는 부분에서 INNER JOIN을 하도 많이 해서 프로그램을 실행시키니까 시간이 너무 오래 걸리더라구여~
주변분이 지나가면서 하시는 말로는
1. PERFORM DATA_SELECT 해서 BISK에 관련된거 SELECT하고
2. PERFORM READ_DATA
LOOP
(1)LFA1
(2)SKAT
머 대충 이런식으로 하라고 말해주셨는데 너무 빨리 말해주고 지나가셔서 먼소린지,,,
아주 초보적인 질문이라 올릴까말까 많이 고민을 했는데 계속 혜결이 안되서 질문 드려여 ㅠㅜ
댓글 6
-
버미!
2010.12.31 20:29
-
無念군
2010.12.31 20:30
JOIN으로 안되시면.. 각각 테이블을 select 하셔서 ..
더블루핑..
loop ~
loop
endloop.
endloop
or
loop ~
read table ~~with key binary search .. (key 필드로 sort 필수 )
endloop.
처리하시면 되실듯 합니다,,
-
기쁨
2010.12.31 20:38
어제 나왔던 One Paper 내용 보시면 도움 될것 같은데요. ^^;;; -
그저조아
2011.01.03 19:54
감사합니다 ^^ 근데 버미님 제가 잘 몰라서 그런데여 LOOP안에서 SELECT를 사용하면 퍼포먼스 측면에서 좋지 않아서 그런건가여??
^^;;
-
열공합시다
2011.01.03 20:23
버미님 말씀에 동의합니당.
저도 첨에는 룹안에서 해결할려고 했는데
나중에는 포올엔트리를 사용해서 그냥 룹에서 리드문으로 읽어오는게 빠르더군요.
리드문으로 읽어오는 테이블을 중복값을 삭제해주면 더욱 속도가 빨라집니다.
단 포올엔트리 쓸때 비교하려는 인터널 테이블의 값이 비어있는지 꼭 체크하세요.
-
그저조아
2011.01.03 23:25
아~ 네 감사합니다 ㅎㅎ
얘기의 내용은 ..BSIK 테이블에서 초기 데이타를 검색해서
그것으로 For All을 이용하여 기타 정보를 조회해서
초기 데이타를 가지고 Loop을 돌고 그 안에서 Read 문으로 기타 정보를 조회해서 ALV itab에
저장하여 Display
대략 이런거 같네요..
참고로 Loop 안에서의 Select는 웬만하면 자제해 주세요...