
IF문은 비교를 하는 명령어로써 프로그램에서 가장 유용하게 사용됨. 조건에 대한 참과 거짓을 판단하여 참일 경우와 거짓일 경우의 실행 부분을 별도로 지정하여 변수의 값에 따라 다르게 처리할 수 있게 해주는 명령어
DATA : BEGIN OF GS_STUDENT,
ZCODE LIKE ZEDT05_001-ZCODE, "출석번호
ZKNAME LIKE ZEDT05_001-ZKNAME,
ZENAME LIKE ZEDT05_001-ZENAME,
ZGENDER LIKE ZEDT05_001-ZGENDER,
ZGNAME TYPE C LENGTH 4,
ZTEL LIKE ZEDT05_001-ZTEL,
END OF GS_STUDENT.
DATA : GT_STUDENT LIKE TABLE OF GS_STUEDNT.
CLEAR : GS_STUDENT, GT_STUDENT.
GS_STUDENT-ZCODE = 'CODE-01'.
GS_STUDENT-ZKNAME = '차은우'.
GS_STUDENT-ZENAME = 'CHA'.
GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZTEL = '01012345678'.
* 기본구조
IF LOGICAL_EXPRESSION. "LOGICAL_EXPRESSION : 논리연산
PROCESSING1.
ENDIF.
* 예시
IF GS_STUDENT-ZGENDER = 'M'. "M이 아닐경우에는 ZGNAME 빈칸
GS_STUDENT-ZGNAME = '남자'.
ENDIF.
APPEND GS_STUDENT TO GT_STUDENT.
CLEAR : GS_STUDENT.
* 기본구조
IF LOGICAL_EXPRESSION. "LOGICAL_EXPRESSION : 논리연산
PROCESSING1.
ELSE.
PROCESSING2.
ENDIF.
* 예시
IF GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZGNAME = '남자'.
ELSE.
GS_STUDENT-ZGNAME = '여자'.
ENDIF.
APPEND GS_STUDENT TO GT_STUDENT.
CLEAR : GS_STUDENT.
* 기본구조
IF LOGICAL_EXPRESSION. "LOGICAL_EXPRESSION : 논리연산
PROCESSING1.
ELSEIF.
PROCESSING2.
ELSE.
PROCESSING3.
ENDIF.
* 예시
IF GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZGNAME = '남자'.
ELSEIF GS_STUDENT-ZGENDER = 'F'.
GS_STUDENT-ZGNAME = '여자'.
ELSE.
GS_STUDENT-ZGNAME = '기타'.
ENDIF.
APPEND GS_STUDENT TO GT_STUDENT.
CLEAR : GS_STUDENT.
* 기본구조
IF ( LOGICAL_EXPRESSION1 ) AND ( LOGICAL_EXPRESSION2).
PROCESSING1.
ENDIF.
* 예시
IF ( GS_STUDENT-ZGENDER = 'M' ) AND ( GS_STUDENT-KNAME = '차은우').
GS_STUDENT-ZGNAME = '남자'.
ENDIF.
APPEND GS_STUDENT TO GT_STUDENT.
CLEAR : GS_STUDENT.
* 기본구조
IF ( LOGICAL_EXPRESSION1 ) OR ( LOGICAL_EXPRESSION2).
PROCESSING1.
ENDIF.
* 예시
IF ( GS_STUDENT-ZGENDER = 'M' ) OR ( GS_STUDENT-KNAME = '차은우').
GS_STUDENT-ZGNAME = '남자'.
ENDIF.
APPEND GS_STUDENT TO GT_STUDENT.
CLEAR : GS_STUDENT.
VAL1과 VAL2의 값이 같다.
IF VAL1 EQ VAL2.
IF VAL1 = VAL2.
VAL1이 VAL2의 값보다 작다.
IF VAL1 LT VAL2.
IF VAL1 < VAL2.
VAL1이 VAL2의 값보다 크다.
IF VAL1 GT VAL2.
IF VAL1 > VAL2.
VAL1이 VAL2의 값보다 작거나 같다.
IF VAL1 LE VAL2.
IF VAL1 <= VAL2.
VAL1이 VAL2의 값보다 크거나 같다.
IF VAL1 GE VAL2.
IF VAL1 >= VAL2.
VAL1과 VAL2의 값이 다르다.
IF VAL1 NE VAL2.
IF VAL1 <> VAL2.
인터널테이블을 순차적으로 1줄씩 읽기. 특정한 구문을 반복하여 처리할 필요가 있을 경우, 또는 인터널테이블에 있는 데이터에 대하여 처리할 필요가 있는 경우 사용하는 제어문. 프로그램 속도 저하의 원인이 되기도 함으로 접근성이 중요.
* 기본구조
LOOP AT GT_A (INTO GS_A).
ENDLOOP.
*예시
CLEAR : GS_STUDENT.
LOOP AT GT_STUENT INTO GS_STUDET.
IF GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZGNAME = '남자'.
ELSEIF GS_STUDENT-ZGENDER = 'F'.
GS_STUDENT-ZGNAME = '여자'.
ENDIF.
CLEAR : GS_STUDENT.
ENDLOOP.
* 기본구조
LOOP AT GT_A(INTO GS_A)
WHERE FIELD = 'VALUE'.
ENDLOOP.
*예시
CLEAR : GS_STUDENT.
LOOP AT GT_STUENT INTO GS_STUDET WHERE ZGENDER = 'F'.
IF GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZGNAME = '남자'.
ELSEIF GS_STUDENT-ZGENDER = 'F'.
GS_STUDENT-ZGNAME = '여자'.
ENDIF.
CLEAR : GS_STUDENT.
ENDLOOP.
* 기본구조
LOOP AT GT_A(INTO GS_A) FORM 1 TO 4.
ENDLOOP.
*예시
CLEAR : GS_STUDENT.
LOOP AT GT_STUENT INTO GS_STUDET FROM 2 TO 3.
IF GS_STUDENT-ZGENDER = 'M'.
GS_STUDENT-ZGNAME = '남자'.
ELSEIF GS_STUDENT-ZGENDER = 'F'.
GS_STUDENT-ZGNAME = '여자'.
ENDIF.
CLEAR : GS_STUDENT.
ENDLOOP.
LOOP내, 인터널테이블의 첫 번째 값이 실행될 때 수행
LOOP AT GT_STUDENT INTO GS_STUDENT.
GS_STUDENT-ZGNAME = '성별구분'.
AT FIRST.
GS_STUDENT-ZGNAME = '변경사항'.
ENDAT.
CLEAR : GS_STUDENT.
ENDLOOP.
LOOP내, 인터널테이블의 마지막 값이 실행될 때 수행
LOOP AT GT_STUDENT INTO GS_STUDENT.
GS_STUDENT-ZGNAME = '성별구분'.
AT LAST.
GS_STUDENT-ZGNAME = '변경사항'.
ENDAT.
CLEAR : GS_STUDENT.
ENDLOOP.
FIELD F1에 새로운 값이 들어올 때 수행
AT NEW구문은 사용한 필드 앞의 필드들이 하나라도 바뀌면 구문을 타기 때문에 SORT 필수
CLEAR : GS_STUDENT.
SORT GT_STUDENT BY ZCODE ZKNAME ZENAME ZGENDER. "정렬 필수
LOOP AT GT_STUDENT INTO GS_STDENT.
GS_STUDENT-ZGNAME = '성별구분'.
AT NEW ZENAME.
GS_STUDENT-ZGNAME = '변경사항'.
ENDAT.
CLEAR : GS_STUDENT.
ENDLOOP.

FIELD F1에 마지막 값이 들어올 때 수행
CLEAR : GS_STUDENT.
SORT GT_STUDENT BY ZCODE ZKNAME ZENAME ZGENDER. "정렬 필수
LOOP AT GT_STUDENT INTO GS_STDENT.
GS_STUDENT-ZGNAME = '성별구분'.
AT END OF ZENAME.
GS_STUDENT-ZGNAME = '변경사항'.
ENDAT.
CLEAR : GS_STUDENT.
ENDLOOP.
