[SAP] ABAP 많이 쓰이는 필수 SY 코드 및 공통 펑션 정리

[SAP ABAP] 필수 암기! 개발 시간을 단축하는 핵심 SY 시스템 변수와 공통 펑션(Function) 총정리

프로그램을 개발하다 보면 현재 날짜를 가져오거나, 로그인한 사용자의 아이디를 확인하고, 데이터가 정상적으로 조회되었는지 체크해야 하는 순간이 매번 찾아옵니다.

 

이럴 때마다 로직을 새로 짤 필요 없이, SAP가 미리 만들어둔 시스템 변수(SY Variables)표준 펑션(Function Modules)을 활용하면 개발 시간을 획기적으로 단축할 수 있습니다.

 

오늘은 ABAP 개발자라면 반드시 즐겨찾기 해두고 외워야 할 핵심 요소인 시스템 변수와 펑션들을 단계별로 정리해 보겠습니다.


1. 시스템 변수(System Variables)란?

ABAP 프로그램이 실행되는 동안 SAP 시스템은 현재 상태나 환경에 대한 다양한 정보를 SYST라는 구조체(Structure)에 지속적으로 업데이트합니다. 우리는 코드 내에서 SY-변수명 형태로 이 값들을 손쉽게 불러와 사용할 수 있습니다.

테이블 : SYST 를 조회하여 다양한 시스템 코드들을 볼 수 있습니다.

💡 핵심 팁: 시스템 변수는 시스템이 자동으로 값을 채워주므로, 개발자가 임의로 값을 변경(Assign)하는 것은 권장하지 않습니다. (예외적인 상황 제외)

가장 많이 쓰이는 필수 SY 코드

  • SY-SUBRC (Return Code): 가장 중요합니다! 직전에 실행된 ABAP 구문(SELECT, READ TABLE 등)의 성공 여부를 반환합니다.
    • 0: 성공
    • 4,8,1001 등 (0 이외의 값): 실패 또는 데이터 없음
  • SY-TABIX (Table Index): 현재 인터널 테이블(Internal Table)에서 루프(LOOP)가 돌고 있는 행(Row)의 인덱스 번호를 나타냅니다.
  • SY-INDEX (Loop Index): DO ... ENDDO 또는 WHILE 구문 등에서 현재 몇 번째 반복 횟수인지를 나타냅니다. (SY-TABIX와 혼동 주의!)
  • SY-DATUM (Current Date): 시스템의 현재 날짜를 반환합니다. (YYYYMMDD 형식)
  • SY-UZEIT (Current Time): 시스템의 현재 시간을 반환합니다. (HHMMSS 형식)
  • SY-DATLO (Current Date) : 사용자(User Time zone)의 현재 날짜를 변환합니다.
  • SY-UNAME (User Name): 현재 시스템에 로그인하여 프로그램을 실행 중인 사용자의 ID입니다.
  • SY-DBCNT : 쿼리 결과 성공한 Row의 수를 반환합니다.
  • SY-LANGU : 현재 로그인한 언어 키를 반환합니다.
  • SY-SYSID : 현재 접속한 시스템 변수를 반환합니다.
  • SY-MANDT (Client): 현재 로그인된 클라이언트 번호(예: 100, 400 등)입니다.
  • SY-TCODE (Transaction Code): 현재 실행 중인 트랜잭션 코드를 나타냅니다.
  • SY-UNAME : 현재 로그인한 사용자의 ID를 반환합니다.
  • SY-UCOMM (User Command): 화면(Screen)에서 사용자가 버튼을 클릭하거나 엔터를 쳤을 때 발생하는 액션 코드(Function Code)를 담습니다.

참고) SAP 공식 문서 - ABAP System Fields


2. 공통 Function Module (자주 쓰는 표준 펑션)

SAP는 전 세계 기업들의 비즈니스 프로세스를 지원하며 방대한 양의 표준 펑션들을 만들어 두었습니다. 바퀴를 다시 발명하지 마세요! 아래의 공통 펑션들은 실무에서 무조건 한 번 이상 쓰게 됩니다. (SE37 트랜잭션에서 테스트해 볼 수 있습니다.)

📅 날짜 계산 및 제어

  • RP_CALC_DATE_IN_INTERVAL: 특정 날짜를 기준으로 N일 전/후, N달 전/후, N년 전/후의 날짜를 계산해 줍니다. 윤년 등 복잡한 날짜 계산을 한 번에 해결합니다.
  • BKK_GET_MONTH_LASTDAY: 특정 날짜가 속한 달의 마지막 날짜(28일, 30일, 31일)를 구해줍니다. 월말 마감 로직에 필수적입니다.
  • FIMA_DAYS_AND_MONTHS_AND_YEARS: 두 날짜 사이의 일수, 월수, 년수 차이를 정확히 계산합니다.

🔢 데이터 변환 및 포맷팅 (Conversion Exit)

  • CONVERSION_EXIT_ALPHA_INPUT: 숫자 앞에 0을 채워줍니다. (예: 123 ➡️ 0000000123). SAP DB에 값을 넣기 전 필수입니다.
  • CONVERSION_EXIT_ALPHA_OUTPUT: 반대로 숫자 앞의 의미 없는 0을 제거해 줍니다. (예: 0000000123 ➡️ 123). 화면에 출력할 때 사용하거나, 타 시스템으로 Interface 할 경우 불필요한 0을 제거할 때 사용합니다.

팝업 및 UI 제어

  • POPUP_TO_CONFIRM: 사용자에게 "저장하시겠습니까?" 와 같은 Yes/No/Cancel 확인 팝업을 띄울 때 가장 많이 사용하는 표준 펑션입니다.

📁 파일 업로드/다운로드

(과거에는 GUI_UPLOAD / GUI_DOWNLOAD 펑션을 썼지만, 최근 객체지향 트렌드에 따라 아래 클래스 메소드 사용을 권장합니다.)

  • CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD: PC의 엑셀이나 텍스트 파일을 SAP 인터널 테이블로 읽어 들일 때 사용합니다.
  • CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD: SAP의 데이터를 PC에 파일로 다운로드할 때 사용합니다.