*&---------------------------------------------------------------------*
*& MOVE-CORRESPONDING 표현
*&
*& DEEP STRUCTURE 구조를 가지는 인터널 테이블을 한번에 복사 할 수 있습니다.
*& DEEP STRUCTURE : STRUCTUE 안에 STRUCTUE 추가
*& SE11 에서 .INCLUDE
*&---------------------------------------------------------------------*
DATA : BEGIN OF LS_STRUCTURE1,
COL11(10) TYPE C VALUE '1_1',
COL12(10) TYPE C VALUE '1_2',
END OF LS_STRUCTURE1.
DATA : BEGIN OF LS_STRUCTURE2,
COL12(10) TYPE C VALUE '2_1',
COL13(10) TYPE C VALUE '2_2',
END OF LS_STRUCTURE2.
"기존 문법
* MOVE-CORRESPONDING LS_STRUCTURE1 TO LS_STRUCTURE2.
"신규 문법
" 1. LS_STRUCTURE1과 일치하는 값은 넣어주고, 나머지는 초기화
LS_STRUCTURE2 = CORRESPONDING #( LS_STRUCTURE1 ).
" 2. 기존값을 기초로해서 넣어줌
"즉, 일치하는 필드에는 값을 넣어주고, 아닌것은 기존값을 그대로 둠
LS_STRUCTURE2 = CORRESPONDING #( BASE ( LS_STRUCTURE2 ) LS_STRUCTURE1 ).
**********************************************************************
*-- loop 를 돌리지 않고 인터널 테이블을 복사하는 문법
**********************************************************************
TYPES : BEGIN OF TY_S_TEMP,
EBELN TYPE BSEG-EBELN,
EBELP TYPE EKPO-EBELP,
MATNR TYPE BSEG-MATNR,
TEXT(40) TYPE C,
END OF TY_S_TEMP,
TY_T_TEMP TYPE TABLE OF TY_S_TEMP WITH EMPTY KEY.
SELECT *
INTO TABLE @DATA(LT_EKPO)
FROM EKPO
UP TO 100 ROWS.
DATA : LS_EKPO LIKE LINE OF LT_EKPO.
"신규 문법1
"이 두개 테이블에서(TY_T_TEMP / LT_EKPO ) 같은 필드의 값을
" 여기에(LT_TEMP) 넣어줘.
*DATA(LT_TEMP) = CORRESPONDING TY_T_TEMP( LT_EKPO ).
*DATA : LS_TEMP LIKE LINE OF LT_TEMP.
"기존 문법1 < LS_EKPO -> LS_TEMP -> LT_TEMP >
*LOOP AT LT_EKPO INTO LS_EKPO.
*
* CLEAR LS_TEMP.
* MOVE-CORRESPONDING LS_EKPO TO LS_TEMP.
* APPEND LS_TEMP TO LT_TEMP.
*ENDLOOP.
"신규 문법2
"mapping 에 명시하지 않은 필드는 같은 이름의 필드로 자동 복사
"EXCEPT 제외
DATA(LT_TEMP2) = CORRESPONDING TY_T_TEMP(
LT_EKPO
MAPPING TEXT = TXZ01
EXCEPT MATNR ).
DATA : LS_TEMP2 LIKE LINE OF LT_TEMP2.
"기존 문법2 < LS_EKPO -> LS_TEMP2 -> LT_TEMP2 >
LOOP AT LT_EKPO INTO LS_EKPO.
CLEAR LS_TEMP2.
MOVE-CORRESPONDING LS_EKPO TO LS_TEMP2.
LS_TEMP2-TEXT = LS_EKPO-TXZ01.
LS_TEMP2-MATNR = ' '.
APPEND LS_TEMP2 TO LT_TEMP2.
ENDLOOP.
**********************************************************************
*-- DEEP STRUCTURE 구조를 가지는 인터널 테이블을 한번에 복사
**********************************************************************
"신규 문법3
TYPES: BEGIN OF T_S_DEEP1,
ID TYPE CHAR10,
PROPERTY1 TYPE CHAR10,
VALUE1 TYPE STRING,
END OF T_S_DEEP1,
T_T_DEEP1 TYPE TABLE OF T_S_DEEP1 WITH KEY ID.
TYPES: BEGIN OF T_S_DEEP2,
ID TYPE CHAR10,
PROPERTY2 TYPE CHAR10,
VALUE2 TYPE STRING,
END OF T_S_DEEP2,
T_T_DEEP2 TYPE TABLE OF T_S_DEEP2 WITH KEY ID.
*TYPES: BEGIN OF T_S_DEEP2,
* ID TYPE CHAR10,
* PROPERTY1 TYPE CHAR10,
* VALUE1 TYPE STRING,
* END OF T_S_DEEP2,
* T_T_DEEP2 TYPE TABLE OF T_S_DEEP2 WITH KEY ID.
TYPES: BEGIN OF T_S_1,
ID TYPE CHAR10,
NAME TYPE STRING,
PROPERTY TYPE T_T_DEEP1,
END OF T_S_1,
T_T_1 TYPE TABLE OF T_S_1 WITH KEY ID.
TYPES: BEGIN OF T_S_2,
ID TYPE CHAR10,
NAME TYPE STRING,
PROPERTY TYPE T_T_DEEP2,
END OF T_S_2,
T_T_2 TYPE TABLE OF T_S_2 WITH KEY ID.
" DEEP STRUCTURE
" DATA(LT_2) = VALUE T_T_1 <= lt_2는 t_t1 의 구조를 가진다.
DATA(LT_1) = VALUE T_T_1(
( ID = '0000000001'
NAME = 'Car'
PROPERTY = VALUE #(
( ID = '0000000001' PROPERTY1 = 'Color' VALUE1 = 'Red' )
( ID = '0000000001' PROPERTY1 = 'Size' VALUE1 = 'Small' )
( ID = '0000000001' PROPERTY1 = 'Speed' VALUE1 = '100' ) )
)
( ID = '0000000002'
NAME = 'Boat'
PROPERTY = VALUE #(
( ID = '0000000002' PROPERTY1 = 'Color' VALUE1 = 'White' )
( ID = '0000000002' PROPERTY1 = 'Size' VALUE1 = 'Big' )
( ID = '0000000002' PROPERTY1 = 'Speed' VALUE1 = '30' ) )
)
).
DATA(LT_2) = VALUE T_T_2( ).
*
*DATA(LT_2) = VALUE T_T_1(
*( ID = '0000000001'
*NAME = 'BYCLE'
*PROPERTY = VALUE #( ( ID = '0000000011' PROPERTY1 = 'COLOR' VALUE1 = 'RED2' )
* ( ID = '0000000011' PROPERTY1 = 'SIZE' VALUE1 = 'SMALL2' )
* ( ID = '0000000011' PROPERTY1 = 'SPEED' VALUE1 = '1002' ) )
*)
*( ID = '0000000002'
*NAME = 'AIRPLANE'
*PROPERTY = VALUE #( ( ID = '0000000012' PROPERTY1 = 'COLOR' VALUE1 = 'WHITE2' )
* ( ID = '0000000012' PROPERTY1 = 'SIZE' VALUE1 = 'BIG2' )
* ( ID = '0000000012' PROPERTY1 = 'SPEED' VALUE1 = '302' ) )
* )
*).
* 구문법
* lt_2 = lt_1.
* 신문법
MOVE-CORRESPONDING LT_1 TO LT_2 .
" deep structure field 명이 같은것만 들어감
*MOVE-CORRESPONDING LT_1 TO LT_2 EXPANDING NESTED TABLES.
"기존에 data가 있으면 append 됨
MOVE-CORRESPONDING LT_1 TO LT_2 EXPANDING NESTED TABLES KEEPING TARGET LINES.
BREAK-POINT.
'SAP·ABAP > ABAP' 카테고리의 다른 글
| ABAP 인터널테이블의 3가지 종류 가볍게 정리 (0) | 2025.11.07 |
|---|---|
| ABAP 신문법 - Reduce (0) | 2025.11.05 |
| ABAP 신문법 - 데이터선언, ALPHA Conversion, Currency, SIGN, VALUE #구문, (0) | 2025.11.05 |
| ABAP 신문법 - for in 예시 (0) | 2025.11.05 |
| RTTS 필드카탈로그 만들기 예시코드 (0) | 2025.11.05 |