abap basic

60
SAP BC400 테테테 IS 테 테테테

Upload: gunyoung-hwang

Post on 28-Apr-2015

153 views

Category:

Documents


15 download

TRANSCRIPT

Page 1: Abap Basic

SAP BC400

테크윈 IS 팀서기준

Page 2: Abap Basic

목 차1. System Architecture, Syntax ……………………… 32. 화면 설명 …………………………………………………………………………

103. 소스 설명 …………………………………………………………………………

144. Full Source Code ………………………………………………… 485. Subroutine ………………………………………………………………… 516. TABLE JOIN ………………………………………………………………… 57

Page 3: Abap Basic

1. System Architecture, Syntax

Page 4: Abap Basic

System Architecture

• 3 Tier 구조 Presentation Layer Application Layer DB Layer

• MS Dispatcher 작업 분배

• Dispatcher 작업을 WP 에 분배

• Work Process 실제 작업

Page 5: Abap Basic

ABAP Program

2.F8( 실행 )

4. DB 관련 명령어

5.Itab 에 저장

1. 조회화면

3.WP 에서 프로그램 실행

6.Write 문

Page 6: Abap Basic

Interaction Between Server Layers

Load-of-program. Initialization.

Select, Insert 등SQL 문Write 문 등

출력문

START-OF-SELECTION.END-OF-SELECTION.

Page 7: Abap Basic

• Saved Program Saved 후 Activate하지 않으면 마지막으로 Save 된 것이 아니라 마지막으로 Activate 된 것이 Execute 된다 . 실행 전 Activate 필수

• Activate Save Check Activate

• Activate 를 자주하라 .

Activate

Page 8: Abap Basic

• Data 선언• SELECT ~ ENDSELECT

– DB 에서 조건에 맞는 DATA 를 WA_SCARR 에 가져옴 .

• NEW-LINE. ( 줄바꿈 )• wa_scarr-carrid 외 2 개 화면 출력 .• . ( 마침표 )

General ABAP Syntax I

Page 9: Abap Basic

Line 처음 ‘ *’ line 주석문

‘ “ ’ 더블 쿼테이션 다음에 주석문

‘ : ’, ‘ , ’ 콜론 다음에 콤마가 나오면 앞에 나왔던 명령 계속 실행 .( 계속 WRITE)

General ABAP Syntax II

Page 10: Abap Basic

2. 화면 설명

Page 11: Abap Basic

조회 화면

Page 12: Abap Basic

실행 화면

Page 13: Abap Basic

Double Click

Page 14: Abap Basic

3. 소스 설명– Data 선언 , 15– Local & Global Data Type 16– Dictionary 17– Structure, Work area & Internal Table 19– Assignments 24– Event 순서 26 > 조회 화면 > LOAD-OF-PROGRAM. 28 > INITIALIZATION. 28 > AT SELECTION-SCREEN. 29 > 처리 로직 > START-OF-SELECTION. 30 > DB ACCESS 31 > SYSTEM 변수 38 > 화면 출력 > END-OF-SELECTION. 39 > 더블 클릭 > AT SELECTION-SCREEN. 41

> 제어문 , 반복문 42 > DETAIL LIST 44

> HIDE AREA 46 Source 코드 설명

Page 15: Abap Basic

Data 선언DATA : gv_char(10) TYPE c, “Character length 10

gv_numc(4) TYPE n, “Numerical Char length 4 gv_pack(5) TYPE p DECIMALS 2,

“ Length 는 5 바이트 소수점 2 자리 (length 5 아님 )

gv_date TYPE d, “Date (ex)2006.08.27 gv_time TYPE t, “Time (ex)12:30:26

gv_int TYPE i. “ 정수형 등이 있다 .

Page 16: Abap Basic

Local & Global Data Type* wa_scarr2 : Local Data Type * 프로그램 내에서 선언하면 Local Data TypeDATA : BEGIN OF wa_scarr2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, END OF wa_scarr2.

* scarr : Global Data Type * ABAP Dictionary 에 정의되어 있으면 Global Data typeDATA wa_scarr TYPE scarr.DATA it_scarr LIKE TABLE OF wa_scarr.

Page 17: Abap Basic

• Data type 선언 Dictionary 이용 DATA name TYPE dictionary. field : 하나의 값 Work area : 여러 개의 값을 Set 으로 저장 . Internal Table : Work area 의 set

Using Dictionary Elements to Define Data Objects Within the

Program

DATA it_spfli TYPE spfli_tabTable Type

Page 18: Abap Basic

Access to Structure Components

Work Area – Fieldname 하나의 Data 처럼 사용 가능

Page 19: Abap Basic

Work Area, Internal Table 선언

* TYPE : ABAP Dictionary 에 있는 것 사용 .* Like : Program 내에서 선언 된 것을 재사용 .* Dictionary 를 TYPE 으로 가능하지만 권장 안함 .DATA wa_scarr TYPE scarr. “Work areaDATA it_scarr LIKE TABLE OF wa_scarr. “Itab

DATA it_scarr TYPE TABLE OF scarr. “ItabDATA wa_scarr LIKE LINE OF it_scarr. “Work area DATA wa_scarr TYPE s_carr_id. “Data Element,W.A.DATA it_scarr TYPE TABLE OF scarr. “Itab

DATA it_scarr TYPE scarr_tab. “Table Type,ItabDATA wa_scarr LIKE LINE OF it_scarr. “Work area

Page 20: Abap Basic

Internal Table with Header line

•DATA : BEGIN OF it_scarr OCCURS 0, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, currcode TYPE scarr-currcode, url TYPE scarr-url, END OF it_scarr.

DATA it_scarr2 TYPE TABLE OF scarr WITH HEADER LINE.

Page 21: Abap Basic

Internal Table with Header line

1. LOOP AT itab. itab-carrid = itab-carrname. MODIFY itab. CLEAR itab. ENDLOOP.

2. LOOP AT itab INTO itab. itab-carrid = itab-carrname. MODIFY itab. CLEAR itab. ENDLOOP.

3. LOOP AT itab INTO wa. wa-carrid = wa-carrname. MODIFY wa. CLEAR wa. ENDLOOP.

* 참고•일반적으로 1 번 사용•SAP 에서 3 번 권장 .

•1 번 = 2 번 = 3 번•1 번의 LOOP At itab 다음에 “ INTO itab.” 생략

Page 22: Abap Basic

Internal Tables with and Without Header Lines

•헤더라인 없는 Internal Table 사용 권장Why? Class 에서 헤더라인 있는 Internal Table을 사용할 수 없다 . 그래서 헤더라인 없는 Internal Table + Work Area 를 사용 권장

Page 23: Abap Basic

Internal Table with Header line

1. 1 번 라인을 헤더라인에 올려 데이터를 수정2. MODIFY 하면 바디가 수정된다 .3. 2 번 라인부터 마지막 라인까지 순차적으로 헤더라인에 올려 수정 후 MODIFY 하면 바디 수정

21

Page 24: Abap Basic

Value Assignments

carrid1 = c_qf

Counter 1 증가

Field 를 Initial Value 로 Clear

Page 25: Abap Basic

Copying Structure Components with the Same

Name

Corresponding 은 같은 Field name 을 찾아 자동으로 Data 의 값을 넣어 줌 .

Page 26: Abap Basic

Event 순서•LOAD-OF-PROGRAM.& INITIALIZATION.Selection Screen 전 PARAMETERS & SELECT-OPTIONS 의 초기 값을 넣어 준다 .•AT SELECTION-SCREENSelection Screen 값 또는 권한 체크•START-OF-SELECTION.Select 등의 구문•END-OF-SELECTION.일반적으로 출력문 .•AT SELECTION-SCREEN더블 클릭 이벤트더블 클릭 이벤트만 빼고 나머지는 위에서 아래의 순서로

Page 27: Abap Basic

조회 화면PARAMETERS : pa_scarr TYPE s_carr_id.

SELECT-OPTIONS : so_scarr FOR wa_scarr-carrid.

Select-options 에서 선언 한 so_scarr 은 sign, option, low, high 값을 가지는 헤더라인을 가지는 Internal table.

Page 28: Abap Basic

조회화면 실행 전LOAD-OF-PROGRAM. so_scarr-sign = 'I'. so_scarr-option = 'BT'. so_scarr-low = 'AA'. so_scarr-high = 'AZ'. APPEND so_scarr.INITIALIZATION. pa_scarr = 'AB'.

•프로그램 Execute 시키면 조회화면 나오기 전 실행 .

Page 29: Abap Basic

조회 조건 체크•AT SELECTION-SCREEN. IF pa_scarr = 'AA'. MESSAGE 'Another value input' TYPE 'E'. ENDIF.

•위의 값이 ‘ AA’ 이여서 ERROR Message

Page 30: Abap Basic

Dialog Messages( 예 )MESSAGE i001(zm19) WITH es_row e_column.• ZM19 부분을 더블 클릭하면 message_class로 들어갑니다 .

•다음과 같이 입력하면 ‘ &’ 부분에 es_row, e_column 이 순서대로 들어갑니다 . 최대 4개까지 가능합니다 .•‘&&’ 를 입력하면 화면에 ‘&’ 으로 출력됩니다 .

Page 31: Abap Basic

프로그램 처리 부분START-OF-SELECTION. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF TABLE it_scarr WHERE carrid IN so_scarr.

IF sy-subrc <> '0'. STOP. ENDIF.

•Scarr table 에서 where 조건을 만족하는 데이터를 select하여 it_scarr 에 넣는다 .•조건을 만족하는 Data 가 있으면 sy-subrc =‘0’ 없으면 sy-subrc = ‘4’

Page 32: Abap Basic

• Open SQL DB interface 를 통해 Native SQL 로 변경 검색 결과 Table buffer 에 저장 SELECT …

• Native SQL DB 에 직접 Access DBMS 에 Dependent EXEC. ~ ENDEXEC.

Database Access (Architecture)

Page 33: Abap Basic

Database Read Access

Page 34: Abap Basic

Reading Single Records• SELECT SINGLE…

WHERE 조건에 KEY값을 잘 설정해서 DATA 건수가 하나만 나올 수 있도록 해야 함 . DATA 건수가 하나 이상일 경우 제일 처음 만나는 것을 가져옴

Page 35: Abap Basic

Suitable Target Structure for the Field List

• SELECT SINGLE…

SELECT SINGLE 필드1, 필드 2, 필드 3, 필드4, 필드 5 … 필드 1, 필드 2, 필드3, 필드 4, 필드 5 … 순으로 Work Area 에 들어간다 .

Page 36: Abap Basic

Fields in the Target Structure that have the Same Names as those in

the Field List• SELECT SINGLE… INTO CORRESPONDING FIELDS OF …

필드 name 이 같은 것을 자동으로 찾아 Work area 에 들어간다 .

Page 37: Abap Basic

Reading several rows using a loop

• SELECT … ENDSELECT

DB Interface 에서 순차적으로 Data 를 가져오기 때문에 속도가 느리다 . 그렇기 때문에 , 가능하면 사용하지 말자 .

Page 38: Abap Basic

Reading Several Rows Using an Array Fetch

• SELECT … INTO TABLE ITAB …

DB Interface 에서 Table 전체를 가져오기 때문에 속도가 빠르다 . … Into corresponding fields of table itab … 을 하면 fields name 을 자동으로 찾아서 입력해 주기 때문에 에러 제거에 좋다 .

Page 39: Abap Basic

System 변수•sy-subrc–Select 문 Data 있으면 0, 없으면 4–그 외 true = 0, false <> 0

•sy-index– loop counter – DO. ~ ENDDO. DO n TIMES. ~ ENDDO. WHILE. ~ ENDWHILE.

•sy-tabix– loop counter, LOOP AT itab. ENDLOOP.

•sy-lsind– 화면의 깊이 . BACK 가능한 화면 .

•sy-ucomm– SCREEN 화면에서 사용자 입력한 이벤트 명령어

•sy-langu– 사용 언어

•sy-datum– 현재 시간

Page 40: Abap Basic

화면 출력•END-OF-SELECTION. LOOP AT it_scarr INTO wa_scarr. WRITE :/ wa_scarr-carrid, wa_scarr-carrname, wa_scarr-currcode. HIDE : wa_scarr-carrid, wa_scarr-carrname. CLEAR wa_scarr. ENDLOOP.

•START-OF-SELECTION 에서 가져온 값을 화면에 출력 . it_scarr 은 internal table 이라서 data 가 여러건 있다 . it_scarr 순차적으로 wa_scarr 에 넣어서 화면에 출력한다 . HIDE 는 더블 클릭하여 AT LINE-SELECTION. 으로 값을 넘기기 위해 사용된다 .

Page 41: Abap Basic

CLEAR, REFRESH, FREE• CLEAR ITAB. 헤더만 지운다 .• CLEAR ITAB[]. REFRESH ITAB. 바디를 지운다 .• FREE ITAB. 할당 된 메모리를 지운다 . 그런데 디버그 모드에서 ITAB 이 사라지지 않는다 .

• CLEAR : 변수 1, 변수 2, 변수 3.

• Sort it_sflight by carrid. carrid 로 it_sflight 정렬

Page 42: Abap Basic

더블 클릭 Event•AT LINE-SELECTION. IF sy-lsind = '1'. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_sflight WHERE carrid = wa_scarr-carrid. IF sy-subrc = '0'. WRITE:/ 'New Page Start'. ELSE. WRITE:/ 'No Data in Database'. ENDIF.

LOOP AT it_sflight INTO wa_sflight. WRITE :/ wa_sflight-carrid, wa_sflight-connid, wa_sflight-fldate, wa_sflight-price. CLEAR wa_sflight. ENDLOOP. ENDIF.

Page 43: Abap Basic

Conditional Branches(제어문 )

Page 44: Abap Basic

• Loop Counter – sy-index DO. ~ ENDDO. DO n TIMS. ~ ENDDO. WHILE. ~ ENDWHILE.

– sy-tabix LOOP AT <ITAB>. ~ ENDLOOP.

Loops( 반복문 )

Page 45: Abap Basic

Generating a Details List• AT LINE-SELECTION.

Double click Event

Page 46: Abap Basic

Generating Several Details Lists

• sy-lsind 1 이면 더블 클릭 1 번 한 화면 2 이면 위처럼 더블 클릭 1 번한 화면에서 다시 더블클릭

1: write

2: 더블클릭

3: write

4: 더블클릭

5: write

6: BACK

7: BACK

Page 47: Abap Basic

Buffering Row-Specific Data in the Hide Area

• Hide Area Hide 를 하면 Data Area 에 Line 과 Field name 과 Value 를 저장하고 있다 .

Page 48: Abap Basic

Data Flow for the Row Selection

• Hide Area Double Click 하여 At line-selection. 으로 이동하면 Hide 값을 가지고 와서 사용할 수 있다 .

Page 49: Abap Basic

4. Full Source Code

Page 50: Abap Basic

Full Source 1/2•REPORT zabap19_11.

* Data typeDATA : gv_char(10) TYPE c, "Character Length 10 gv_numc(4) TYPE n, "Numerical character Length 4 gv_pack(5) TYPE p DECIMALS 2, "Packed Number XXX.XX gv_date TYPE d, "Date 2006.08.27 gv_time TYPE t, "Time 12:16:30 gv_int TYPE i. "Integer

* Local Data TypeDATA : BEGIN OF wa_scarr2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, END OF wa_scarr2.

* scarr, sflight : Global Data TypeDATA wa_scarr TYPE scarr.DATA it_scarr LIKE TABLE OF wa_scarr.

DATA wa_sflight TYPE sflight.DATA it_sflight LIKE TABLE OF wa_sflight.

PARAMETERS : pa_scarr TYPE s_carr_id.

SELECT-OPTIONS : so_scarr FOR wa_scarr-carrid.

LOAD-OF-PROGRAM. so_scarr-sign = 'I'. so_scarr-option = 'BT'. so_scarr-low = 'AA'. so_scarr-high = 'AZ'. APPEND so_scarr.

Page 51: Abap Basic

Full Source 2/2•INITIALIZATION. pa_scarr = 'AB'.

AT SELECTION-SCREEN. IF pa_scarr = 'AA'. MESSAGE 'Another value input' TYPE 'E'. ENDIF.

START-OF-SELECTION. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF TABLE it_scarr WHERE carrid IN so_scarr.

IF sy-subrc <> '0'. STOP. ENDIF.

END-OF-SELECTION. LOOP AT it_scarr INTO wa_scarr. WRITE :/ wa_scarr-carrid, wa_scarr-carrname, wa_scarr-currcode. HIDE : wa_scarr-carrid, wa_scarr-carrname. CLEAR wa_scarr. ENDLOOP.

AT LINE-SELECTION. IF sy-lsind = '1'. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_sflight WHERE carrid = wa_scarr-carrid. IF sy-subrc = '0'. WRITE:/ 'New Page Start'. ELSE. WRITE:/ 'No Data in Database'. ENDIF.

LOOP AT it_sflight INTO wa_sflight. WRITE :/ wa_sflight-carrid, wa_sflight-connid, wa_sflight-fldate, wa_sflight-price. CLEAR wa_sflight. ENDLOOP. ENDIF.

Page 52: Abap Basic

5. Subroutine

Page 53: Abap Basic

Actual & Formal parameters

Page 54: Abap Basic

Call by value, Call by value result, Call by reference

•Call by value값을 복사해서 사용하고 지운다 .•Call by value and result값을 복사해서 사용하고 Subroutine 이 끝나면 값을 리턴한다 .•Call by referenceActual parameter 를 그대로 사용한다 .

Page 55: Abap Basic

Call by value, Call by value result, Call by reference

•Call by value값을 복사해서 사용하고 Subroutine 이 끝나면 지운다 .•Call by value and result값을 복사해서 사용하고 Subroutine 이 끝나면 값을 리턴한다 .•Call by referenceActual parameter 를 그대로 사용한다 .

Page 56: Abap Basic

Call by value 외 2 개 소스 1/2

REPORT zabap19_13.

DATA: pv_a(3) TYPE n, pv_b(3) TYPE n, pv_sum(3) TYPE n.

WRITE :/'Initial value : ', 50 'a = ', pv_a, 'b = ', pv_b, 'sum = ', pv_sum.pv_a = 1.pv_b = 2.

PERFORM call_by_value USING pv_a pv_b pv_sum.WRITE :/'Main : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 3.WRITE :/ 'Change call by value but main is not change.'.

PERFORM call_by_value_result CHANGING pv_a pv_b pv_sum.WRITE :/'Main : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 1.WRITE :/ 'Change after function' COLOR 5.

q

FORM call_by_value USING value(p_pv_a) value(p_pv_b) value(p_pv_sum). WRITE:/. WRITE:/ '============ start function ============'. WRITE:/ 'Call by value Start'. p_pv_sum = p_pv_a + p_pv_b. WRITE :/'Call by value : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum COLOR 3. WRITE :/'Call by value : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 3. WRITE:/ '============ end function ============'.ENDFORM. " call_by_value

Page 57: Abap Basic

Call by value 외 2 개 소스 2/2

FORM call_by_value_result CHANGING value(p_pv_a) value(p_pv_b) value(p_pv_sum). p_pv_a = 10. p_pv_b = 20. WRITE:/. WRITE:/ '============ start function ============'. WRITE:/ 'Call by value and result Start'. p_pv_sum = p_pv_a + p_pv_b. WRITE :/'Call by value result pv_a pv_b pv_sum : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum. WRITE :/'Call by value result : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 1. WRITE:/ '============ end function ============'.ENDFORM. " call_by_value_result

FORM call_by_reference USING p_pv_a p_pv_b p_pv_sum. p_pv_a = 100. p_pv_b = 200. WRITE:/. WRITE:/ '============ start function ============'. WRITE:/ 'Call by reference Start'.

p_pv_sum = p_pv_a + p_pv_b. WRITE :/'Call by reference pv_a pv_b pv_sum : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum COLOR 4. WRITE :/'Call by reference : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 4. WRITE:/ '============ end function ============'.ENDFORM. " call_by_reference

Page 58: Abap Basic

5. TABLE JOIN

Page 59: Abap Basic

• inner join 2 개의 Table 에서 필요한 필드만 가져와서 하나의 테이블을 만든다 . 2 개의 테이블에서 공통의 필드를 가지고 있어야 한다 . 여기서는 Mandt, Carrid 가 공통 필드

Example of a Table Join

Page 60: Abap Basic

사용 예SELECT a~sabun a~name a~parts b~parts_area FROM emp AS a INNER JOIN dep AS b ON a~parts = b~parts INTO CORRESPONDING FIELDS OF TABLE it_people.

emp INNER JOIN depemp 와 dep table 을 inner joinON a~parts = b~parts 테이블 두개의 연결 키

Implementation Options for Table Joins