SAP ABAP SY 시스템 변수 정리, SY-SUBRC 등

SAP ABAP SY 시스템 변수란, 프로그램이 실행되는 환경에서 공통으로 자주 쓰이는 변수 세트를 말합니다.

ABAP SY 시스템 변수는 SAP에서는 미리 정의(Pre-defined)하여 SAP ABAP 전역 시스템에서 제공하고 있으며, 매우 자주 사용이 되기 때문에 숙지해 두는 것이 좋습니다.

프로그램 로직의 성공 여부, 반복 구문의 인덱스 혹은 테이블 ROW, 메시지 표현, 사용자 로그인 정보 그리고 현재 실행 중인 프로그램 정보 등 다양한 정보를 SAP ABAP 전역에서 관리하여 제공합니다.

ABAP 프로그래밍 언어에서는 여러 목적으로, 그리고 공통적으로 사용되는 대표적인 SY- 시스템 변수를 정리해 보았습니다.

SY-SUBRC

가장 최근에 실행된 질의 혹은 쿼리 등 해피 케이스 상에서 정상적으로 동작했는지에 대한 반환 코드를 제공합니다.

예컨대, 데이터베이스 쿼리시 WHERE 조건에 맞는 데이터가 하나 이상으로 결과를 받게 된다면 SY-SUBRC 값을 0으로 반환합니다.

READ TABLE LT_FCAT ASSIGNING WITH KEY DOMNAME = 'CACCD'.

IF SY-SUBRC EQ 0.

ENDIF.

위의 예제의 경우, 도메인 이름이 CACCD 면 subrc 0, 값이 없으면 subrc 4을 반환하게 됩니다.

READ TABLE MT_TEXT_DATA ASSIGNING FIELD-SYMBOL() WITH KEY KEY =
BINARY SEARCH.

IF SY-SUBRC EQ 0.


  // 성공시 SY-SUBRC 0

ENDIF.

READ TABLE에 Binary Search의 경우에는 성공시 subrc 0, sort가 되지 않은 등의 이유로 실패를 하게 된다면 subrc 8을 리턴하게 됩니다.

이 외에도 bdc 프로그램에서 실패하게 된다면 1001 등의 다양한 에러 성격의 코드를 각각의 케이스에 좀 다르게 반환하게 됩니다.

다만, 성공시에는 공통적으로 0을 반환하므로, 성공 실패만을 판단하고 할 때에는 subrc 0을 기준으로 판단하면 됩니다.

READ TABLE에 대한 좀 더 상세한 내용은 아래의 글에서 확인할 수 있습니다.

ABAP READ TABLE 사용법 및 예제 정리

SY-DATUM, SY-UZEIT

SY-DATUM 시스템 변수는 실행 시점의 오늘 날짜를 반환해 주고, SY-UZEIT는 현재 시간을 반환해 줍니다.

시스템 데이터베이스 레코드 로그를 남길 때, 프로그램 수행 시간 등에 사용됩니다.

SY-DATLO, SY-DATUM 차이

위의 시스템 변수 SY-DATUM과 SY-DATLO 는 모두 실행 날짜 Date를 반환하는 변수입니다.

sy-datum과 sy-datlo의 차이점은 기준 날짜의 차이입니다.

SY-DATUM의 경우에는 현재의 어플리케이션 서버를 기준으로, 즉, 서버에 설정된 기준 날짜를 가져오게 되며,

SY-DATLO는 사용자의 Time zone 로컬 날짜를 가져오게 됩니다.

SY-UZEIT 및 SY-TIMLO 역시 같은 기준으로의 시간(Time)에 대응됩니다.

SY-TABIX, SY-INDEX

두 변수 모두 테이블 처리나 루프 등의 반복문에서 사용됩니다.

SY-TABIX의 경우 인터널테이블의 인덱스 번호를 반환합니다.

LOOP AT GT_LIST ASSIGNING .
  DATA(LV_TABIX) = SY-TABIX.

ENDLOOP.

0 인덱스부터 시작하여 인터널 테이블을 반복(Iterative)하여 인덱스를 증가시킵니다.

SY-INDEX의 경우, DO나 WHILE 등에서의 인덱스를 반환하게 됩니다.

DO.
  DATA(LV_INDEX) = SY-INDEX.
ENDDO.

참고로 LOOP에 대한 사항은 아래의 글에서 자세히 확인할 수 있습니다.

SAP ABAP LOOP 사용법 및 예제

SY-DBCNT

SY-DBCNT는 쿼리 결과가 성공한 ROWS 수를 반환합니다.

SELECT 쿼리의 경우에는 WHERE 조건에 맞는 결과 ROWS를 반환하고, DELETE나 UPDATE의 경우에는 삭제 혹은 업데이트 성공한 ROWS 수를 반환합니다.

SY-LANGU

현재 로그인한 언어 키를 반환합니다.

sap abap sy 시스템 변수 - sy-langu
sap abap sy 시스템 변수 – sy-langu

 

따라서 현지화된 텍스트 등을 가져올 때 유용합니다.

SELECT SAKNR TXT20 TXT50
FROM SKAT
INTO CORRESPONDING FIELDS OF TABLE MT_SKAT
WHERE SPRAS = SY-LANGU
AND KTOPL = '1000'.

SY-SYSID

현재 접속한 시스템 변수를 반환합니다.

sap abap sy 시스템 변수 - sy-sysid
sap abap sy 시스템 변수 – sy-sysid

 

주로 개발/검증/운영 시스템의 분기 처리시 각기 다른 로직을 적용하고자 할 때 사용합니다.

IF SY-SYSID = '개발'.
// 개발 Legacy 인터페이스 연결
ELSEIF SY-SYSID = '검증'.
// 검증 Legacy 인터페이스 연결
ELSEIF SY-SYSID = '운영'.
// 운영 Legacy 인터페이스 연결
ENDIF.

SY-TCODE

현재 실행중인 프로그램 티코드를 반환합니다.

하나의 프로그램에 2개 이상의 T-CODE를 연결한 상태에서 각 T-CODE 별로 로직을 분기하고자 할 때 사용하거나, 프로그램 수행 로그에 프로그램 티코드를 남기고자 할 때 주로 사용합니다.

// 사용 프로그램 혹인 레코드 로그의 경우, 주로 날짜, 시간, 티코드, 사용자 sap id 등을 남긴다.
PERFORM WRITE_LOG_PROGRAM(ZCOMNLOG) USING SY-TCODE SY-REPID SY-UNAME.

SY-UNAME

현재 로그인한 사용자의 SAP ID 를 반환합니다.

CBO 형태로 개발된 권한을 SAP ID 기준으로 체크하거나, SY-TCODE, SY-DATUM 과 같이 시스템 로그를 남기는데 자주 사용 됩니다.

SELECT SINGLE *
FROM TBTCO
INTO LS_TBTCO
WHERE JOBNAME LIKE LV_JOBNAME
AND STRTDATE = SY-DATLO
AND STATUS NE 'F'
AND SDLUNAME = SY-UNAME.

예를 들면, 위의 코드는 현재 로그인한 SAP ID 로 SM37에 실행된 Job 내역을 조회하는 코드입니다.

시스템 변수 테이블 SYST

SAP SE11에서 SYST 테이블을 조회하면 더 많은 변수명을 확인할 수 있습니다.

sap abap sy 시스템 변수 - syst 테이블 se11
sap abap sy 시스템 변수 – syst 테이블 se11

 

자세한 사항은 SAP 공식 Document 시스템 필드 항목에서 확인할 수 있습니다.

이상으로 자주 사용되는 SAP SY 시스템 변수를 정리해 보았습니다.

함께 보면 좋은 글

ABAP 데이터 타입 종류 및 예제
ABAP MATCHCODE, 아밥 스크린 Search Help
SAP Table Data Class Size Category 설정시 고려사항