목차
internal table 종류
Subroutine
work area
FAE 1:1
FAE 1:N
Function
Trace
Transaction Code
Batch job
Smartforms
+)field symbol에 대한 이해
internal table 종류
✧ Standard Table
(=Table)
: 평범한 리스트
: 순차 탐색
✧ Sorted Table
: 키 기준 자동 정렬
: 이진 탐색(빠르다!)
✧ Hashed Table
: 키 기준 정렬x (인덱스도 없음 = 순서x)
: 가장 빠름!
Subroutine (서브 루틴)
: 프로그램 내에서 자주 쓰는 로직을 묶어서 따로 빼 둠
(원하는 프로그램을 재사용, 수정을 쉽게 할 수 있다!)
| LOOP AT gt_itab INTO gs_itab. PERFORM get_weight CHANGING gs_itab. "서브루틴 호출 . . . |
| FORM get_weight CHANGING ps_itab LIKE LINE OF gt_itab. "~weight를 구한다~ |
✧ 서브루틴 : Changing - Using
- CHANGING : 수정용 (값을 바꾸겠다!0
- USING : 참조해서 다른 걸 찾다 (값을 바꾸지 X)
- TABLE : 바꾸고, 참조하고 다 됨 (테이블을 넘겨서 서브루틴에서 조작하겠다) <권장X
Work Area 를 LOOP에서 사용하는 3가지 방법
: 프로그램 내에서 자주 쓰는 로직을 묶어서 따로 빼 둠
1. 헤더라인을 만들어 사용한다.
| DATA : gt_itab TYPE TABLE OF gty_itab WITH HEADER LINE. "같은 이름(gt_itab)의 인터널테이블, work area가 동시에 생성! |
| LOOP AT gt_itab. PERFORM get_matnr_name CHANGING gt_itab. "work area 역할을 한다(헤더라인 수정) MODIFY gt_itab. ENDLOOP. |
2. gs_itab을 만들어 사용한다. (하던 방식)
| DATA : gt_itab TYPE TABLE OF gty_itab. "인터널 테이블 DATA : gs_itab TYPE gty_itab. "work area |
| LOOP AT gt_itab INTO gs_itab. PERFORM get_matnr_name CHANGING gs_itab. MODIFY gt_itab FROM gs_itab. CLEAR gs_itab. ENDLOOP. |
3. Field Symbol을 사용한다.
| DATA : gt_itab TYPE TABLE OF gty_itab. "인터널 테이블 |
| LOOP AT gt_itab IASSIGNING FIELD-SYMBOL(<gs_itab>). PERFORM get_matnr_name CHANGING <gs_itab>. ENDLOOP. |
FAE 1:1, 1:N
FAE(For All Entries): FAE 쿼리 한번으로 10번의 SQL호출을 대신한다.
✧ EX) 자재번호(matnr)을 기준으로 SQL을 호출하려면??
1. 자재번호(matnr) 기준으로 정렬한다.(2번의 중복 제거를 위해 필요한 선작업)
| gt_maktv = gt_itab. SORT gt_maktv BY matnr. "matnr 기준으로 정렬(m-01, m-02, . . .) |
2. 자재번호(matnr) 중복 값을 제거한다.
| DELETE ADJACENT DUPLICATES FROM gt_maktv COMPARING matnr. |
3. FAE로 gt_makt에 자재번호(matnr) 와 자재내역(maktx)을 저장한다.
: gt_maktv에 들어 있는 자재번호(matnr, 중복x)을 기반으로, makt에서 matnr, maktx를 찾아 gt_makt에 넣는다
: 이러면 matnr이 똑같아서 여러 번 select하지 않게 된다!
| SELECT matnr, maktx INTO CORRESPONDING FIELDS OF TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_maktv "FAE! WHERE matnr = gt_maktv-matnr AND spras = sy-langu. |
4. gt_makt를 gt_itab에 다시 매핑한다.
4-1. matnr(자재번호) : maktx(자재명) = 1 : 1관계일 때
(m-01=배터리, m-02=스크린 이런 식으로)
| SORT gt_makt BY matnr. LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<gs_itab>). *gt_makt에서 matnr(gt_itab의) = <gs_itab>-matnr을 만족하는 첫 번째 레코드를 찾고, 그 결과를 <ls_makt>에 할당한다 READ TABLE gt_makt ASSIGNING FIELD-SYMBOL(<ls_makt>). WITH KEY matnr = <gs_itab>-matnr BINARY SEARCH. IF sy-subrc = 0. <gs_itab>-maktx = <ls_makt>-maktx. ENDIF. ENDLOOP. |
4-2. matnr(자재번호) : maktx(자재명 등... 설명일수도 있고...) = 1 : N관계일 때
(m-01=배터리,battery,バッテリー, m-02=스크린,screen,がめん 이런 식으로 다국어로 표현해야 할 때)
| SORT gt_makt BY matnr. LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<gs_itab>). *gt_makt에서 matnr(gt_itab의) = <gs_itab>-matnr을 만족하는 첫 번째 레코드를 찾고, 그 결과를 <ls_makt>에 할당한다 READ TABLE gt_makt ASSIGNING FIELD-SYMBOL(<ls_makt>). WITH KEY matnr = <gs_itab>-matnr BINARY SEARCH. IF sy-subrc = 0. *1:N은 여기가 추가! LOOP AT gt_makt ASSIGNING FIELD-SYMBOL(<gs_makt>) FROM sy-tabix. IF <gs_makt>-matnr = <gs_itab>-matnr. <gs_itab>-maktx = <ls_makt>-maktx. ELSE. EXIT. ENDIF. ENDLOOP. ENDIF. ENDLOOP. |
Function
function : 외부에서 기능을 호출해서 사용
| CALL FUNCTION 'GET_MATNR_NAME' EXPORTING "gt_itab에 담아진 값을 내보낸다.(function group에서는 받아야되니까 import) iv_matnr = ps_itab-matnr IMPORTING "function groups에서 select(소스코드)한 값을 받아온다.(fuction group에서는 여기로 줘야하니까 export) ev_maktx = ps_itab-maktx. |

Function Groups 폴더 안에 GET_MATNR_NAME이라는 Function Module을 만든다
✧ Import : call한 코드에서 -> Function module로 들어오는 것!

- optional : 입력 필수인지
-값 자체를 복사할지, 참조해서 넘길지
✧ Export : function module에서 -> call한 코드로 보내주는 것!

✧ Source code : 여기에 구현할 소스 코드를 적는다

Trace
t-code: ST05로 진입해서 Trace 가능하다!(성능, 문제 체크)

트랜잭션(t-code)
SE80, SE11 = 개발자용 T-code
사용자는 제한된 결과 인터페이스만 지정해준 특정 T-code를 이용해 볼 수 있게 해야 한다!

예: 사용자는 ZR1900050을 입력하면 결과 테이블을 조회할 수 있다.
Batch job
(=백그라운드 잡)
batch job : 자동으로 실행되는 시스템
✧ t-code: SM36 (생성하기)
✧ t-code: SM37 (결과보기)

Start condition으로 설정하고 실행할 수 있다!

Field Symbol에 대한 이해

✧ field-symbol(< >) : 메모리를 안먹음. 그냥 주소만 가지고 있는 껍데기(인터널 테이블의 거울 같은 것)
-그래서 따로 modify, append를 안해도됨
-루프 돌때마다 필드 심볼의 주소가 바뀐다.
-인터널 테이블 -> field symbol에 할당해줌.
-필드심볼 104주소에 ‘1000’이 할당되면 append로 104와 연결된 인터널 테이블의 필드에 거울처럼 1000이 할당된다.
-필드 심볼은 메모리 할당 자체가 안되어있어서 그냥 주소만 담는 껍데기 역할이다.
'Study > SAP' 카테고리의 다른 글
| [SAP] Local Objects 백업: 실습 코드 모음 (0) | 2026.01.26 |
|---|---|
| [SAP] 과제, 실습 문제: 결과 화면 모음 (0) | 2026.01.26 |
| [SAP] 정리3 - 코드 작성할 때? (0) | 2026.01.06 |
| [SAP] 정리2 - TABLE 만들기 (0) | 2026.01.02 |
| [SAP] 정리1 - 이론 (0) | 2026.01.01 |