Search
🤧

다시 정리)) 8. ABAP MOVE와 MOVE-CORRESPONDING

ABAP의 데이터 이동과 필드 매핑 MOVE와 MOVE-CORRESPONDING

예시

TYPES: BEGIN OF flight, carrid TYPE spfli-carrid, connid TYPE spfli-connid, cityfrom TYPE spfli-cityfrom, cityto TYPE spfli-cityto, END OF flight. DATA flights TYPE SORTED TABLE OF flight WITH UNIQUE KEY carrid connid. SELECT * FROM spfli INTO TABLE @DATA(spfli_tab). MOVE-CORRESPONDING spfli_tab TO flights. cl_demo_output=>display( flights ).
ABAP
복사
spfl_tab이라는 기존 테이블을 flights라는 새 테이블에 동일한 필드 이름만 매핑하여 데이터를 옮긴다. MOVE-CORRESPONDING 구문을 통해 구조가 다른 두 테이블 간에 같은 필드 이름끼리 데이터를 이동시킬 수 있다.

테이블 결합

조인문 : 테이블간의 결합 / 필드 갯수가 많고 데이터가 많으면 많이 느려진다.
read move : 필요한 필드만 딱 가져다가 데이터 받아오고 그거만 결합이 가능하다.
집계하고 결합하면 빠르다. 집계하기 전에 조인을 하면 조인도 느리고 결합도 느리고…
집계를 할 때는 더 적은 필드로 집계를 하는게 더 빠른데 필드가 늘어나니까 느려진다.
이전에 했던 SBOOK 소스 가지고 커스텀해보자
이 소스에서 테이블들을 결합시킬거다.
조인을 통해서 하면 효율이 떨어진다. 그래서 필요한거만 꺼내서 결합시키는게 더 효율적이다.
변경 소스
집계를 하고 read table로 행을 불러와서
for all entries in 구문은 ABAP에서 효율적인 데이터베이스 조회를 위해 사용하는 방법이다. 내부 테이블에 있는 여러 값을 기준으로 데이터베이스에서 조건에 맞는 여러 행을 한 번에 조회할 수 있다.

기본 구조

SELECT 필드 목록 INTO TABLE @내부_테이블 FROM 테이블 FOR ALL ENTRIES IN @참조_테이블 WHERE 조건1 = 참조_테이블-조건필드1 AND 조건2 = 참조_테이블-조건필드2.
ABAP
복사
FOR ALL ENTRIES IN 다음에 오는 테이블(보통 내부 테이블)은 데이터베이스 조회 시 참조가 되는 조건 값을 제공한다.
WHERE 절에서 참조_테이블의 필드와 매칭되는 데이터만 데이터베이스에서 가져온다.
조인도 인터널테이블(DATA로 선언한 테이블) 이랑 조인해도 된다

같은 뜻의 소스

첫 번째 코드 설명

MOVE-CORRESPONDING wa_collect TO wa_move. SELECT SINGLE carrname FROM scarr INTO wa_move-carrid WHERE carrid = wa_move-carrid.
ABAP
복사
1.
MOVE-CORRESPONDING wa_collect TO wa_move: wa_collect의 필드와 같은 이름을 가진 필드를 wa_move로 이동시키는 구문이다. MOVE-CORRESPONDING은 구조가 다른 워크 영역 간에 공통 필드 이름을 기준으로 데이터를 복사한다.
2.
SELECT SINGLE: SCARR 테이블에서 carrid에 맞는 carrname을 단일 조회하여 wa_move-carrname에 저장한다.
이 코드는 데이터베이스(SCARR 테이블)에서 직접 carrid 값을 기준으로 carrname을 조회해 wa_move에 저장하는 방식이다. 데이터베이스에 접근하는 만큼, 데이터베이스 접근 비용이 발생한다.

두 번째 코드 설명

MOVE-CORRESPONDING wa_collect TO wa_move. READ TABLE it_scarr INTO wa_scarr WITH KEY carrid = wa_move-carrid. IF sy-subrc = 0. wa_move-carrname = wa_scarr-carrname. ENDIF.
ABAP
복사
1.
MOVE-CORRESPONDING wa_collect TO wa_move: 첫 번째 코드와 동일하게, 공통 필드 이름을 기준으로 wa_collect에서 wa_move로 데이터를 복사한다.
2.
READ TABLE: 여기서는 SCARR 테이블을 미리 내부 테이블(it_scarr)에 가져와 저장했다고 가정한다. READ TABLE 구문은 이 it_scarr에서 carrid에 맞는 값을 찾는다.
3.
IF 조건: READ TABLE의 결과로 sy-subrc가 0이면, 즉 값이 존재하면 wa_scarr-carrname의 값을 wa_move-carrname에 복사한다.
두 번째 방식은 데이터베이스에 직접 접근하지 않고, 미리 로드해 놓은 내부 테이블에서 데이터를 찾는 방식이다. 데이터베이스 접근 비용이 없기 때문에 성능 면에서 더 빠르다.

MOVE와 MOVE-CORRESPONDING의 차이점

MOVE-CORRESPONDING A TO B
구조가 다른 A와 B 간에 같은 이름의 필드끼리만 데이터를 이동시킨다.
이 구문은 테이블 간뿐 아니라 개별 행에도 적용 가능하다.
MOVE A TO B
구조가 같은 A와 B 간에 모든 필드를 이동시킨다.
B = A와 동일한 개념으로, 전체 필드를 일괄 복사한다.

엑셀 업로드 프로그램 - 테이블 생성

se11 가서 scarr 들어가기
여기서 이제 다시 se11 새 창을 다시 키고
이거만 치고 엔터치면 우측에 자동으로 박힘.
Initial Values 을 체크해주고 저장 눌러주기
ZCARRID_E를 더블 클릭해서 생성해주자
더블클릭 YES
저장하고 활성화를 도메인만 먼저 하자.
만들어진게 불러와졌다.
적어주고 활성화 해주자.
Data element가 만들어진걸로 불러와진걸 볼 수 있다.
연습한거니까 지워주자
같은방식으로 넣어주면 된다
맵핑이 맞는지 보고 맞으면 copy
SBOOK보면 단위필드가 연결되어 있다.
scarr의 인덱스탭으로 들어가면
인덱싱을 걸어주면 데이터 검색할때 더 빠르게 갖고올 수 있다.
회계감사 시 테이블의 변경 이력을 남기기 위해 Log Data Changes 옵션을 켠다. 이 옵션을 활성화하면 테이블 변경 사항이 기록되므로, 나중에 기록을 통해 변경 내역을 검토할 수 있다.
로그 기록이 활성화되면 시스템이 느려질 수 있으므로, 반드시 필요한 테이블에만 설정하는 것이 중요.
저장하고
뒤로 돌아와서 활성화하면 워닝이 뜬다
워닝은 뜨는데 안해도 사용하는데 문제가 없어서 그냥 뒤로 빠져나오면된다.
이렇게 하면 실제 테이블 데이터에 값을 추가할 수 있다.
이런식으로 넣고 저장하면
출력에 나온다.
지울때는 Table Entry를 사용

엑셀 업로드 프로그램 팅

메인소스가지고 넣어주고 리포트명에 따라서 INCLUDE 명칭 바꿔주기
더블 클릭
이제 여기다가 top_new 소스 넣어주기
그렇게 모든 INCLUE 애들을 맞는애로 넣어줘서 저장해주기.
메인화면에서
100을 더블클릭해서
생성
여기에 7번째 screen flow 소스를 넣어주면 된다
스크린을 그려줘야 한다 해당 버튼 클릭
커스텀테이블 버튼 클릭하고 원하는 사이즈만큼 드래그를 화면에 해주고 저장해준다.
버튼을 이제 만들어야하는데
해당 부분 더블클릭하고고
100을 더블 클릭하면
이제 뒤로 다시 메인으로 돌아와서
100을 더블 클릭릭
하나만 받아오게 설정하고 저장
활성화해주고 EXCEL 관련된거 다 체크하고 활성화 시켜주자
하고 여기 활성화 해주자
scarr 테이블에서
엑셀 다운로드 해가지고 (중간에 기본설정에서 허용 allow 까지 해주면 된다
이제 만든 엑셀 조회화면으로가서
상단 엑셀을 불러오자