안녕하세요.. 정말 초보적인 질문이지만,
다른 언어를 사용하는 운영에서 ABAP을 시작한지 며칠 되지 않아, 이렇게 문의를 드립니다.
문의 드릴 사항은 다음과 같습니다.
Master Table 과 Detail Table Join 테이터를 화면에 출력하는 내용입니다.
단, Detail Table 이 Cluster Table이라서 JOin 이 진행되지 않으므로, master table을
조회하여 WA-KEY 테이블에 넣었고, 이 WA-KEY 를 가지고, Detail Table을 조회하여
WA를 출력하는 형태입니다.
여기서 1:N 관계로 이루어져 있어, 다음과 같이 출력이 됩니다.
회계연도 기간 고객은 Mater Table 테이터 입니다.
전표번호가 KEY 가 되며, 차대변과 마이너스 전기 값이 Detail Table 값입니다.
==============================================================================================
회계연도 기간 고객 전표번호 지정(차) 마이너스전기 지정(대) 마이너스전기
2009 01 26424 9800000000 C63 X
2009 00 26424 9800000000 C78
==============================================================================================
LOOP AT ITAB_KEY INTO WA_KEY.
MOVE-CORRESPONDING WA_KEY TO WA.
SELECT *
INTO CORRESPONDING FIELDS OF WA
FROM BSEG
WHERE BUKRS = WA_KEY-BUKRS
AND GJAHR = WA_KEY-GJAHR
AND BELNR = WA_KEY-BELNR.
IF WA-SHKZG = 'S'.
WA-CZUONR = WA-ZUONR.
WA-CXNEGP = WA-XNEGP.
ELSEIF WA-SHKZG = 'H'.
WA-DZUONR = WA-ZUONR.
WA-DXNEGP = WA-XNEGP.
ENDIF.
APPEND WA TO ITAB.
CLEAR WA.
ENDSELECT.
ENDLOOP.
==============================================================================================
제가 출력하고자 요구하는 바는 전표번호가 기준이 되어 1번째 Row와 2번째 Row가 1Row로 보여지는 것입니다.
회계연도 기간 고객 전표번호 지정(차) 마이너스전기 지정(대) 마이너스전기
2009 00 ~ 01 26424 9800000000 C63 X C78
너무 초보적인 질문을 드려 죄송합니다.
한 수 부탁드리겠습니다.
댓글 3
-
아밥 잭
2010.08.23 23:16
-
라다메스
2010.08.23 23:59
답변에 감사드립니다.
append 부분을 밖으로 빼는 부분은 이미 실행하여 보았으나 원하는 결과값이 아니기에, 원래 소스를 올렸던 것입니다.
append 부분을 밖으로 뺄경우, 다음과 같이 실행되어 기간 필드가 문제가 되었습니다.
즉, 기간 부분 표기가...
회계연도 기간 고객 전표번호 지정(차) 마이너스전기 지정(대) 마이너스전기
2009 01 26424 9800000000 C63 X C78
그리고, db 부하로 인하여 로직에 대하여 말씀해 주신 사항은 정말 정말 감사드립니다.
워낙 초보다 보니, 구현에 급급한 상황인데, 좋은 방법을 알려주셔서 정말 감사드립니다.
-
아밥 잭
2010.08.24 00:13
기간 값은 SELECT ~ ENDSELECT에서 정리해주셔야 합니다.
SELECT ~ ENDSELECT문장안에서 기간값을 체크하여 같지 않으면 앞의 값과 비교하여 작은지 큰지를
체크하시고, 나중에 CONCATENATE문장을 사용하여 기간값을 만들어서 넣어 주셔야합니다.
제 생각입니다. ㅎㅎㅎ
안녕하세요,,,
일단, 제가 이해를 했는지 모르겠지만
위의 로직에서 하나의 ROW만 만들려면,
APPEND WA TO ITAB.
CLEAR WA를 ENDSELECT. 밖으로 빼세요.
ENDSELECT문장에서는 필요한 부분을 돌면서 계속 넣으시고요.
다 들어 갈 을 경우에 나중에 한번만 APPEND를 하는 방법입니다.
ENDSELECT.
APPEND WA TO ITAB.
CLEAR WA.
ENDLOOP.
참고로 현재의 로직은 성능면에서 바랍직하지는 않은데요,,,
그건 나중에 옆에 고수에게 한번 문의하시지요.
보충하자면 SELECT ~ ENDSELECT는 매번 db에 접속하기 때문에 좋은 로직은 아닙니다.
저라면,,, 헤드의 정보 ITAB를 사용하여 FOR ALL ENTRIES IN ITAB를 사용하여
LOOP문장에서 READ ~ BINARY SEARCH를 사용하고, LOOP 테이블 FROM SY-TABIX를
사용하여 작성하겠습니다.
감사합니다.