📖 개요 — 이 글에서 다루는 것
SAP FI의 G/L 계정은 크게 미결 관리(Open Item Management, OIM) 계정과 일반(잔액 관리) 계정으로 나뉩니다. 같은 잔액이라도 두 유형은 "잔액을 어떻게 검증하고 소멸시키는가"가 완전히 다릅니다. 이 글은 SAP S/4HANA 2023(On-Premise) 기준으로, ECC 6.0과의 차이도 함께 짚으며 다음을 다룹니다.
- 미결 관리 계정과 일반 계정의 내부 동작 차이(반제 필드, 인덱스 구조)
- 잔액 조회(FAGLB03)와 미결 조회(FBL3N)가 각 계정에서 의미하는 것
- 반제(Clearing) 프로세스 — 수동 F-03, 자동 F.13
- FS00에서 OIM 플래그 변경이 왜 막히는지, S/4HANA의 전환 프로그램은 무엇인지
📚 미리 알아두면 좋은 배경
전표 입력(FB50/FB01)과 G/L 계정 마스터(FS00)의 기본 구조, 그리고 차대변 균형 개념을 알고 있다면 충분합니다. AR/AP 조정계정(Reconciliation Account)과 보조부 개념을 접해봤다면 4번 섹션의 비교가 더 쉽게 읽힙니다. ABAP 예제가 나오지만 SELECT 문 수준이므로 개발자가 아니어도 따라올 수 있습니다.
🔧 시스템 환경과 준비 사항
- 시스템: SAP S/4HANA 2023 On-Premise (ECC 6.0 EhP8 차이는 본문에 병기)
- 주요 트랜잭션: FS00(계정 마스터), FBL3N/FAGLL03(개별 항목), FAGLB03(잔액), F-03(수동 반제), F.13(자동 반제), OB74(자동 반제 기준)
- 권한: 계정 마스터 변경 권한(F_SKA1_BUK 등)과 반제 전기 권한이 필요합니다
- 테스트 데이터: 은행 임시계정(예: 1102900 "카드매출 정산계정")처럼 OIM이 켜진 계정 1개, 일반 비용 계정 1개를 개발기에 준비해 두면 예제를 그대로 재현할 수 있습니다
ECC에서는 미결/반제 항목이 BSIS/BSAS 인덱스 테이블로 분리 저장되지만, S/4HANA에서는 유니버설 저널(ACDOCA) 위의 호환 뷰로 제공된다는 점을 기억해 두세요.
💡 핵심 개념 — 두 계정 유형은 무엇이 다른가
비유하자면 일반 계정은 "저수지"이고 미결 관리 계정은 "택배 물류센터"입니다. 저수지는 물이 얼마나 차 있는지(총 잔액)만 중요하고, 어떤 빗방울이 언제 들어왔는지는 묻지 않습니다. 반면 물류센터는 입고된 모든 상자(전표 라인)가 각각 출고 상자와 짝을 이뤄 소멸돼야 하며, 짝을 못 찾은 상자가 곧 "미결(Open)"입니다.
기술적으로 OIM 계정에 전기된 모든 라인은 상태를 갖습니다. 반제 전에는 미결 상태이며, F-03/F.13 등으로 차대변 합이 0이 되는 항목 그룹을 묶어 반제하면 시스템이 반제 전표(Clearing Document)를 생성하고 각 라인에 반제전표번호(BSEG-AUGBL)와 반제일(AUGDT)을 기록합니다. 이 순간 해당 라인은 미결 리스트에서 사라집니다.
| 구분 | 일반 계정 | 미결 관리 계정 |
|---|---|---|
| 잔액의 의미 | 누적 차대변 합계 | 미결 항목 합계 = 잔액 |
| 검증 방법 | FAGLB03 잔액 확인 | FBL3N 미결 리스트를 항목 단위로 소명 |
| 반제 필드(AUGBL/AUGDT) | 사용 안 함 | 반제 시 기록 |
| 대표 용도 | 손익 계정, 현금성 계정 | GR/IR, 은행 임시계정, 급여·카드 정산계정, 가수금 |
주의할 점 하나 — AR/AP 조정계정은 OIM 플래그를 켜지 않습니다. 미결 관리는 고객/구매처 보조부 레벨에서 이미 이루어지고, G/L 조정계정은 그 합계를 비추는 거울이기 때문입니다. G/L OIM은 "보조부가 없는 계정인데 항목 단위 소명이 필요한 경우"를 위한 장치입니다. 결산 관점에서 OIM 계정의 잔액 검증은 "이 잔액이 맞는가?"가 아니라 "남아 있는 미결 항목 하나하나가 남아 있을 이유가 있는가?"라는 질문으로 바뀝니다. 이것이 두 유형의 본질적 차이입니다.
💻 실전 예제 3단계
1단계 — 계정 유형 판별 기본 예제. 회사코드별 G/L 마스터(SKB1)의 XOPVW 필드가 OIM 플래그입니다. FS00 → Control Data 탭의 "Open Item Management" 체크박스와 동일한 값입니다.
REPORT zfi_oim_type_check.
PARAMETERS: p_bukrs TYPE bukrs DEFAULT '1000',
p_saknr TYPE saknr OBLIGATORY.
SELECT SINGLE xopvw, mitkz FROM skb1
INTO @DATA(ls_ctrl)
WHERE bukrs = @p_bukrs AND saknr = @p_saknr.
IF sy-subrc <> 0.
WRITE / |계정 { p_saknr ALPHA = OUT }: 회사코드 { p_bukrs }에 미생성|.
ELSEIF ls_ctrl-mitkz IS NOT INITIAL.
WRITE / |조정계정({ ls_ctrl-mitkz }): 보조부에서 미결 관리|.
ELSEIF ls_ctrl-xopvw = abap_true.
WRITE / |미결 관리 계정: FBL3N 미결 리스트로 검증 대상|.
ELSE.
WRITE / |일반 계정: FAGLB03 잔액 확인으로 충분|.
ENDIF.
2단계 — 실무 시나리오: 결산 전 미결 합계와 잔액 대사. 카드매출 정산계정(1102900)은 "매출 인식 시 차변 → 입금 확인 시 대변" 구조라서, 기준일 현재 미결 합계가 곧 계정 잔액이어야 합니다. 아래 예제는 불일치 시 에러를 내고 애플리케이션 로그(SLG1)에 남깁니다.
REPORT zfi_oim_balance_audit.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY,
p_saknr TYPE saknr DEFAULT '0001102900',
p_stida TYPE budat DEFAULT sy-datum. " 기준일
" 기준일 현재 미결 항목 합계 (반제 안 됐거나 기준일 이후 반제)
SELECT SUM( hsl ) FROM acdoca INTO @DATA(lv_open)
WHERE rldnr = '0L' AND rbukrs = @p_bukrs
AND racct = @p_saknr AND budat <= @p_stida
AND ( augdt IS INITIAL OR augdt > @p_stida ).
" 같은 기준일의 총 잔액
SELECT SUM( hsl ) FROM acdoca INTO @DATA(lv_total)
WHERE rldnr = '0L' AND rbukrs = @p_bukrs
AND racct = @p_saknr AND budat <= @p_stida.
IF lv_open = lv_total.
WRITE / |정상: 미결합계 { lv_open } = 잔액 { lv_total }|.
ELSE.
" SLG1 로그 기록 후 결산 담당자 확인 유도
DATA(lo_log) = cl_bali_log=>create_with_header(
cl_bali_header_setter=>create( object = 'ZFI'
subobject = 'OIM_AUDIT' ) ).
lo_log->add_item( cl_bali_free_text_setter=>create(
severity = if_bali_constants=>c_severity_error
text = |{ p_saknr } 불일치 { lv_open } vs { lv_total }| ) ).
cl_bali_log_db=>get_instance( )->save_log( lo_log ).
MESSAGE '미결합계-잔액 불일치. SLG1 확인 필요' TYPE 'E'.
ENDIF.
불일치가 나오는 대표 원인은 OIM 전환 이력이 있는 계정(과거 전표에 반제 정보 없음)이거나, 원장별 전기 차이입니다.
3단계 — 프로덕션: 자동 반제(F.13) 운영. 정산계정의 미결이 수천 건이면 수동 F-03은 불가능하므로 OB74에 매칭 기준을 정의하고 F.13을 야간 배치로 돌립니다. 예를 들어 카드 정산계정은 지정(Assignment, ZUONR) 필드에 카드사 승인번호를 채우도록 인터페이스를 설계하고, OB74에 다음과 같이 등록합니다.
" OB74 (테이블 TF123) 설정 개념
" 계정유형: S (G/L), 계정범위: 1102900 ~ 1102999
" 기준 1: ZUONR (승인번호) 기준 2: WAERS (통화)
" → ZUONR+WAERS가 같고 합계가 0인 그룹을 자동 반제
운영 시 체크리스트는 다음과 같습니다.
- 성능: F.13 변형(Variant)에서 계정 범위를 분할해 병렬 잡으로 실행하고, 기간을 열린 전기 기간으로 제한합니다.
- 테스트: 반드시 테스트 실행(Test Run) 결과 스풀을 검토한 뒤 실전 실행으로 전환하는 2단계 잡 체인을 권장합니다.
- 보안: 자동 반제 배치 사용자는 반제 전기 권한만 부여하고, FS00 변경 권한은 분리(SoD)하는 것이 일반적입니다.
- 모니터링: 반제되지 못하고 N일 이상 남은 미결(Aging)을 2단계 예제 로직으로 주간 리포팅하면 정산 누락을 조기에 잡을 수 있습니다.
⚠️ 흔한 실수와 트러블슈팅 FAQ
Q1. FS00에서 OIM 체크박스를 바꾸려는데 "미결 항목이 존재하여 변경 불가" 오류가 납니다.
설계상 정상입니다. OIM 전환은 기존 전표 라인의 반제 상태 정합성을 깨뜨릴 수 있어, 잔액이 0이고 미결 항목이 전혀 없어야만 허용됩니다. 이미 반제된 이력이 남아 있어도 막히는 경우가 있습니다. ECC 시절의 우회 프로그램 RFSEPA02/RFSEPA03은 New G/L·문서 분할 환경에서 데이터 불일치를 일으킬 수 있어 SAP Note에서 사용을 제한하며, S/4HANA에서는 FAGL_ACTIVATE_OP 프로그램으로 기존 항목까지 변환하는 전환 절차를 밟는 것이 일반적입니다. 그래도 실무에서는 신규 계정을 만들어 잔액을 이관하는 방식이 가장 안전한 선택지로 통합니다.
Q2. 잔액이 0인데도 FBL3N에 미결이 잔뜩 보입니다. 왜인가요?
OIM 계정에서 잔액 0은 "차변 미결과 대변 미결이 상쇄된 상태"일 수 있습니다. 반제를 실행하기 전까지 항목들은 계속 미결로 남습니다. 잔액 검증이 끝났다고 생각하지 말고 F-03/F.13으로 짝을 지어 소멸시켜야 결산 리스트가 깨끗해집니다.
Q3. 조정계정(고객/구매처)에 OIM을 켜려 했더니 아예 안 됩니다.
조정계정은 보조부에서 미결을 관리하므로 G/L 레벨 OIM과 상호 배타적입니다. FS00에서 Recon. Account 유형이 지정된 계정은 XOPVW를 설정할 수 없습니다.
Q4. 손익 계정에 OIM을 켜도 되나요?
기술적으로 일부 케이스가 있으나 일반적으로 권장되지 않습니다. 손익은 기말 이월 시 소멸되는 흐름이라 항목 단위 반제 개념과 맞지 않고, 미결이 계속 쌓여 관리만 어려워집니다.
🚀 이어서 살펴볼 주제
이 글의 개념이 잡혔다면 부분 반제(Partial) vs 잔여 항목(Residual) 방식의 차이, GR/IR 계정 재분류(F.19), 외화 미결 항목의 기말 평가(FAGL_FCV)와 반제 시 환차손익 처리로 확장해 보세요. S/4HANA 환경이라면 Fiori 앱 "Clear G/L Accounts"와 머신러닝 기반 매칭 제안 기능, 그리고 유니버설 저널에서 BSIS/BSAS가 호환 뷰로 대체된 구조를 비교해 보는 것도 좋은 다음 소재입니다.
📚 더 읽어볼 자료
- help.sap.com — SAP S/4HANA On-Premise 제품 문서 (General Ledger Accounting)
- help.sap.com — SAP S/4HANA Cloud: Open Item Clearing 관련 문서
- help.sap.com — SAP ERP(ECC) FI 문서: G/L Account Master Data
- SAP Note 175960 — 기존 계정의 Open Item Management 전환 제약
- SAP Note 606977 — RFSEPA02/03 사용 제한 관련
- SAP Community — FAGL_ACTIVATE_OP 실행 경험 및 자동 반제 설정 사례
댓글 0
아직 댓글이 없습니다.