*&---------------------------------------------------------------------*
*& FOR IN 표현
*&
*& 인터널 테이블의 값을 다른 테이블로 옮길 때 사용합니다.
*&---------------------------------------------------------------------*
TABLES : EKPO.
TYPES : BEGIN OF GS_TEMP,
EBELN TYPE EKPO-EBELN,
EBELP TYPE EKPO-EBELP,
MATNR TYPE EKPO-MATNR,
END OF GS_TEMP,
GT_TEMP TYPE TABLE OF GS_TEMP WITH EMPTY KEY.
TYPES : BEGIN OF GS_TEMP2,
EBELN TYPE EKPO-EBELN,
EBELP TYPE EKPO-EBELP,
MATNR TYPE EKPO-MATNR,
PRICE TYPE EKPO-NETPR,
TEXT(100) TYPE C,
END OF GS_TEMP2,
GT_TEMP2 TYPE TABLE OF GS_TEMP2 WITH EMPTY KEY.
RANGES : LR_MATNR FOR EKPO-MATNR.
TYPES : TR_MATNR LIKE RANGE OF LR_MATNR.
*DATA : LS_TEMP TYPE GS_TEMP,
* LT_TEMP LIKE TABLE OF LS_TEMP.
**********************************************************************
SELECT *
INTO TABLE @DATA(LT_EKPO)
FROM EKPO
UP TO 10 ROWS.
*DATA : LS_EKPO LIKE LINE OF LT_EKPO.
*--------------------------------------------------------------------*
* FOR~IN 기본사용
*--------------------------------------------------------------------*
"기존문법
*
* LOOP AT LT_EKPO INTO LS_EKPO.
*
* CLEAR LS_TEMP.
* MOVE-CORRESPONDING LS_EKPO TO LS_TEMP.
* APPEND LS_TEMP TO LT_TEMP.
*
* ENDLOOP.
"신규문법
" LT_TEMP는 GT_TEMP의 구조를 가진다.
"LS_EKPO-EBELN의 값을 LS_TEMP-EBELN에 넣는다
"LS_EKPO-EBELP의 값을 LS_TEMP-EBELP에 넣는다
"LS_EKPO-MATNR의 값을 LS_TEMP-MATNR에 넣는다
"참고 / FOR 뒤에 스트럭쳐(LS_EKPO)는 자동으로 생성해줌
" 이때 LT_EKPO 의 데이터를 가지고 옴...
DATA(LT_TEMP) = VALUE GT_TEMP(
FOR LS_EKPO IN LT_EKPO
( EBELN = LS_EKPO-EBELN
EBELP = LS_EKPO-EBELP
MATNR = LS_EKPO-MATNR ) ).
*DATA(LT_TEMP2) = VALUE GT_TEMP(
* FOR LS_MARA IN LT_MARA
* (
* MATNR = LS_MARA-MATNR ) ).
*--------------------------------------------------------------------*
* FOR~IN WHERE 조건
*--------------------------------------------------------------------*
"기존 문법
*LOOP AT LT_EKPO INTO LS_EKPO WHERE EBELN = '4500000236'.
*
* CLEAR LS_TEMP2.
* MOVE-CORRESPONDING LT_EKPO TO LS_TEMP2.
* APPEND LS_TEMP2 TO LT_TEMP2.
*
*ENDLOOP.
"신규 문법
DATA(LT_TEMP2) = VALUE GT_TEMP(
FOR LS_EKPO IN LT_EKPO
WHERE ( EBELN = '4500000236' )
( EBELN = LS_EKPO-EBELN
EBELP = LS_EKPO-EBELP
MATNR = LS_EKPO-MATNR ) ).
*--------------------------------------------------------------------*
* FOR~IN~LET
*--------------------------------------------------------------------*
"TR_MATNR의 구조를 갖는다
"FOR 뒤에 스트럭쳐(LS_EKPO)는 자동으로 생성해줌
" => LT_EKPO 의 데이터를 가지고 옴...
"EBELN 값이 4500000236 ~ 4500000461 사이값을 가져옴
"LET은 임시로 변수 선언해 주는 것
" IN에 선언해준 값을 밀어 넣어줌
DATA(LT_TEMP3) = VALUE TR_MATNR(
FOR LS_EKPO IN LT_EKPO
WHERE ( EBELN BETWEEN 4500000236 AND 4500000461 )
LET S = 'I'
O = 'AA'
IN SIGN = S
OPTION = O
( LOW = LS_EKPO-MATNR ) ).
*** 기존문법으로 변환
*DATA : LS_TEMP3 LIKE LR_MATNR,
* LT_TEMP3 LIKE TABLE OF LS_TEMP3.
*DATA : S(1) , O(2).
*
*LOOP AT LT_EKPO INTO LS_EKPO WHERE ( EBELN BETWEEN 4500000236 AND 4500000461 ).
*
* S = 'I'.
* O = 'BT'.
*
* LS_TEMP3-SIGN = S.
* LS_TEMP3-OPTION = O.
* LS_TEMP3-LOW = LS_EKPO-MATNR.
*
*ENDLOOP.
*DATA(LT_TEMP4) = VALUE GT_TEMP2(
* FOR LS_EKPO IN LT_EKPO
* LET P = LS_EKPO-MENGE * LS_EKPO-NETPR
* IN ( PRICE = P
* EBELN = LS_EKPO-EBELN
* EBELP = LS_EKPO-EBELP
* MATNR = LS_EKPO-MATNR ) ) .
DATA(LT_TEMP5) = VALUE GT_TEMP2(
FOR LS_EKPO IN LT_EKPO
LET T = |{ LS_EKPO-MATNR ALPHA = OUT }_{ LS_EKPO-MENGE } 개|
P = LS_EKPO-MENGE * LS_EKPO-NETPR
IN TEXT = T
PRICE = P
( EBELN = LS_EKPO-EBELN
EBELP = LS_EKPO-EBELP
MATNR = LS_EKPO-MATNR ) ).
CL_DEMO_OUTPUT=>DISPLAY_DATA( LT_TEMP5 ).
*BREAK-POINT.
'SAP·ABAP > ABAP' 카테고리의 다른 글
| ABAP 신문법 - Reduce (0) | 2025.11.05 |
|---|---|
| ABAP 신문법 - Move (0) | 2025.11.05 |
| ABAP 신문법 - 데이터선언, ALPHA Conversion, Currency, SIGN, VALUE #구문, (0) | 2025.11.05 |
| RTTS 필드카탈로그 만들기 예시코드 (0) | 2025.11.05 |
| Eclipse ABAP 개발 툴 설치 가이드 (0) | 2025.11.05 |