SAP 실현환차손익 현황 — 결제된 순간의 환차익·환차손만 가려내기
외화채권·채무가 결제·회수되는 순간 확정되는 환차손익만 계정·통화별로 모아, 아직 확정되지 않은 결산 평가손익과 뒤섞이지 않게 가려내는 화면입니다.
외화로 거래한 채권·채무는 환율이 움직이는 동안 두 번 손익을 만납니다. 결산일에 아직 남아 있으면 그날 환율로 다시 평가만 해 보는 미실현손익이 한 번, 실제로 결제되거나 회수되어 사라지는 순간 확정되는 실현손익이 또 한 번입니다. 앞의 것은 다음 달이면 뒤집힐 수 있지만, 뒤의 것은 이미 끝난 일이라 바뀌지 않습니다.
그래서 재무팀이 "이번 달 환차손익이 얼마나 확정됐는가"를 보려면, 결산 평가손익과 섞이지 않은 실현분만 따로 봐야 합니다. SAP 표준 전표 데이터 구조를 그대로 이어받아 결제·청산 시점에 확정된 환차손익만 계정·통화별로 모아 보여 주도록 OpenUI5 화면으로 확장한 것이 ZLFIA0130입니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 원천 — 청산(결제·회수) 전표 헤더(
BKPF)와 라인(BSEG) 구조를 그대로 사용 - 계정 자동결정 — 외화채권채무 계정별 환차익/환차손 계정 매핑(
OB09)을 그대로 따름 - 환율 근거 — 원거래·청산 각 시점에 전표에 남은 환율(환율마스터
TCURR기준) - 거래처 마스터 — 고객(
KNA1) · 공급업체(LFA1) · 계정(SKAT) 표준 구조 유지
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 총계정원장 · 실현환차손익 모니터링 |
| Namespace | zui5.fxrealized |
| 셸 구조 | 조회조건 영역(우측 조회) + 계정×통화별 집계 테이블, 행 선택 시 전표 상세 |
| 화면 수 | 조회 화면 1개 + 전표 상세 다이얼로그 |
| SAP 표준 기능 근거 | FBL3N · OB09 · OB08/TCURR |
| 구분되는 인접 화면 | 외화채권채무 미실현 평가손익(F.05) · 환율마스터 정합성 점검 — 본 화면은 실현손익만 다룸 |
| 성격 | 조회형(Read-Only) — 환차손익 계산과 전기는 표준 청산 처리가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
회사코드와 조회기간만 넣고 조회하면 계정×통화별 실현손익이 집계됩니다 → 최소금액으로 자잘한 건을 걸러내고 Enter 키로 즉시 다시 조회합니다 → 행을 클릭해 원거래환율 대비 청산환율의 차이로 발생한 개별 전표를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드 · 회계연도 · 조회기간(월)을 넣습니다. 세 값은 필수이며, 조회기간은 시작월~종료월 범위로 지정합니다.
- 통화 · 계정 · 손익구분은 보조 조건입니다. 특정 통화(예: EUR)나 계정(외환차익/외환차손) 하나만 볼 때 씁니다.
- 최소금액(이상)에 값을 넣으면 그 금액 미만의 자잘한 건은 집계에서 제외해 큰 건 위주로 봅니다.
- 조회조건 입력필드에서 Enter를 눌러도 바로 조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
- 결과는 계정×통화 조합 단위로 집계되어 표시되고, 상단 제목 영역과 표 하단에 차익·차손·순손익 합계가 함께 갱신됩니다.
- 행을 클릭(또는 상세 버튼)하면 그 조합에 속한 개별 전표가 원거래환율·청산환율과 함께 펼쳐집니다.
- 결과는 CSV 다운로드로 내려받습니다. 집계표와 상세 전표 목록 모두 UTF-8 BOM이 붙어 엑셀에서 한글이 깨지지 않습니다.
실현 손익 판정 기준
이 화면이 다루는 손익은 딱 하나, 이미 결제·회수가 끝나 확정된 것입니다. 판정은 계산이 아니라 어느 계정에 전기됐는가로 갈립니다.
| 구분 | 판정 기준 |
|---|---|
| 실현손익 (이 화면) | 외화채권·채무가 결제·회수로 청산되며 확정된 손익 — 계정 90851000(차익) / 90951000(차손) |
| 미실현손익 (별도 화면) | 결산일에 아직 남아 있는 채권·채무를 그날 환율로 다시 평가만 한 손익 — 다음 결산에서 뒤집힐 수 있음(F.05 대상) |
| 계정에 의한 손익구분 | OB09 설정에 따라 결제 시점에 시스템이 자동으로 두 계정 중 하나에 전기 — 화면은 이 계정 구분을 그대로 사용, 별도 부호 계산 없음 |
| 거래유형별 부호 방향 | 고객(AR) 채권 회수 시 환율상승 → 차익 / 공급업체(AP) 채무 지급 시 환율상승 → 차손 (반대 방향은 부호도 반대) |
두 손익을 같은 화면에 섞지 않는 이유
미실현손익은 평가일이 바뀌면 사라지거나 방향이 뒤집힐 수 있는 잠정치입니다. 실현손익은 이미 끝난 거래의 확정치입니다. 이 둘을 한 표에 합산해 버리면 "이번 달에 실제로 확정된 손익"이 얼마인지 알 수 없게 됩니다. 그래서 이 화면은 실현 계정(90851000/90951000)에 전기된 라인만 조회 대상으로 삼습니다.
환차손익 산출 4단계
한 건의 실현환차손익은 원거래부터 청산까지 네 단계를 거쳐 만들어집니다. 화면의 상세 다이얼로그는 이 네 단계를 한 줄로 이어 보여 줍니다.
| 단계 | 내용 | 비고 |
|---|---|---|
| ① 원거래 인식 | 외화 송장(매출채권/매입채무) 전기, 그 시점 환율로 원화 환산액 확정 | BKPF/BSEG, 환율은 TCURR 기준 |
| ② 청산 시점 도래 | 실제 결제(지급) 또는 회수(입금) 처리 | 표준 청산 트랜잭션이 담당 |
| ③ 환차손익 계산 | 외화금액 × │청산환율 − 원거래환율│ = 환차손익 금액(원화) | 시스템이 자동 계산 |
| ④ 계정 자동전기 | 방향에 따라 90851000(차익) 또는 90951000(차손)에 자동 전기 | OB09 설정 기준 |
이 화면은 ①~④가 이미 끝난 ④ 단계의 결과(전기 완료된 실현손익 라인)를 계정×통화로 모아 보여 주는 조회 전용 화면입니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 1000(한국법인·KRW) / 2000(미국법인·USD) |
| 회계연도 | 필수 | 2026 |
| 조회기간(월) | 필수 | 시작월~종료월 범위 지정. 시작월이 종료월보다 크면 오류 안내 |
| 통화 | 선택 | 전체 / USD / EUR / JPY / CNY — 원거래(외화) 통화 기준 |
| 계정 | 선택 | 전체 / 90851000(외환차익) / 90951000(외환차손) |
| 손익구분 | 선택 | 전체 / 차익만 / 차손만 |
| 최소금액(이상) | 선택 | 개별 전표의 환차손익 금액이 이 값 이상인 건만 집계에 포함 |
Select 조건은 변경 즉시, 최소금액은 Enter 로 이미 조회한 상태라면 곧바로 재조회합니다.
결과 컬럼
계정·통화별 집계
| 컬럼 | 의미 · 표시 |
|---|---|
| 계정과목 · 계정명 | 90851000 외환차익(실현) / 90951000 외환차손(실현) |
| 손익구분 | 차익(녹색) · 차손(빨강) |
| 통화 | 원거래(외화) 통화 |
| 건수 · 최소 · 최대 · 평균 · 합계금액 | 해당 계정×통화 조합에 속하는 전표 건수와 금액 통계(현지통화) |
| 최초발생일 · 최종발생일 | 조회기간 내 전기일(청산일)의 최소·최대값 |
| 상세 | 클릭 시 해당 조합의 개별 전표 상세를 연다(행 클릭도 동일) |
전표 상세(원거래 대비 청산환율)
| 컬럼 | 의미 · 표시 |
|---|---|
| 전기일(청산) · 전표번호 | 환차손익이 실현된 청산(지급/회수) 전표 |
| 구분 · 거래처 | 고객(AR) / 공급업체(AP)와 코드·명 |
| 원거래전표 · 원거래일 | 환차손익의 기준이 되는 최초 송장 전표 |
| 원거래환율 · 청산환율 | 각 시점에 적용된 환율(외화 1단위당 현지통화) |
| 외화금액 · 환차손익금액 | 외화금액은 불변, 환차손익금액 = 외화금액 × │환율차이│ |
| 적요 | 거래 설명 |
SAP 표준 기능 매핑
이 화면은 환차손익 계산이나 전기를 대체하지 않습니다. 계산과 계정 자동결정은 표준 청산 처리와 OB09 설정이
그대로 담당하고, 그 결과를 계정·통화 단위로 모아 규모 파악과 이례 건 탐지 관점을 더해 확장하는 구성입니다.
| T-code | 표준 기능 | 이 화면에서의 확장 |
|---|---|---|
FBL3N | 총계정원장 라인아이템 표시 | 환차손익 계정(90851000/90951000)만 필터링해 계정×통화로 재집계 |
OB09 | 외화 시가평가/환차손익 계정 자동결정 | 이 설정으로 갈린 계정을 그대로 손익구분 표시에 사용 |
OB08 / TCURR | 환율 마스터 | 원거래·청산 각 시점에 전표에 남은 적용환율을 그대로 대조 |
(참고) F.05 | 외화채권채무 평가(미실현) | 본 화면과 구분되는 별도 결산 시점 평가 — 본 화면은 실현분만 다룸 |
운영 데이터 소스 매핑
| 테이블 · 뷰 | 역할 |
|---|---|
BKPF | 회계전표 헤더 — 전기일, 회계연도/기간, 참조번호, 적용환율 |
BSEG | 회계전표 라인아이템 — 계정, 외화/현지통화 금액, 거래처, 청산정보 |
SKA1 · SKAT | G/L 계정 마스터(계정과목명) |
KNA1 · LFA1 | 고객 · 공급업체 마스터(명칭) |
TCURR | 환율 마스터 — 원거래일 · 청산일 각 시점 적용환율 |
T030 (OB09 설정) | 환차손익 계정 자동결정 설정(계정별 KDB/KDF 매핑) |
도입 시 확인이 필요한 부분
환차익/환차손 계정 번호와 회사별 배정은 계정과목표(COA)마다 다릅니다. 본문의 90851000/90951000은 예시 값이며,
실제 도입 때는 해당 회사의 OB09 설정을 그대로 확인해 계정 범위를 맞춥니다. 통화별 유의미한 최소금액 기준도
재무팀 내부 기준에 맞춰 조정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 청산 라인에 원거래 시점 환율을 자기조인으로 붙여 계정×통화 단위로 집계하는 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZCFXREALIZED'
@EndUserText.label: '실현환차손익 조회 (Z)'
define view Z_C_FxRealizedGainLoss
as select from bseg as Clear
inner join bkpf as ClearHeader on Clear.bukrs = ClearHeader.bukrs
and Clear.belnr = ClearHeader.belnr
and Clear.gjahr = ClearHeader.gjahr
inner join bseg as Orig on Clear.bukrs = Orig.bukrs
and Clear.rebzg = Orig.belnr
and Clear.gjahr = Orig.gjahr
inner join bkpf as OrigHeader on Orig.bukrs = OrigHeader.bukrs
and Orig.belnr = OrigHeader.belnr
and Orig.gjahr = OrigHeader.gjahr
left outer join skat as AcctText on Clear.hkont = AcctText.saknr
and AcctText.spras = 'K'
{
key Clear.bukrs as Bukrs,
key Clear.belnr as Belnr,
key Clear.gjahr as Gjahr,
ClearHeader.budat as Budat,
Clear.hkont as Hkont,
AcctText.txt50 as HkontTx,
// OB09 매핑을 역산 — 90851000이면 차익, 90951000이면 차손
case Clear.hkont
when '90851000' then 'GAIN'
when '90951000' then 'LOSS'
else '?'
end as GainLossType,
Clear.waers as Waers,
Clear.wrbtr as ForeignAmt,
OrigHeader.kursf as KursOrig,
ClearHeader.kursf as KursClear,
Clear.dmbtr as Dmbtr
}
where Clear.hkont in ('90851000', '90951000')
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 청산 참조 구조(REBZG 사용 범위)와
계정 범위에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage + 조회조건 헤더 · 결과 테이블 |
| 조회조건 | sap.m.Select · sap.m.Input — 우측 끝에 조회 버튼, Enter 로도 조회 |
| 결과 테이블 | sap.ui.table.Table(12열) — 계정×통화 조합을 키 컬럼으로 고정 |
| 손익 표시 | sap.m.ObjectStatus — 차익/차손을 Success/Error 로만 표시(임의 문자열 미사용) |
| 제목 영역 합계 | sap.f.DynamicPageTitle actions — 차익·차손·순손익 합계 |
| 전표 상세 | sap.m.Dialog + sap.m.Table — 원거래·청산 환율 대비 목록 |
계정을 그대로 손익구분 값으로 쓴 이유
환차손익의 방향(차익/차손)은 거래유형(AR/AP)과 환율의 등락 방향이 얽혀 있어 화면에서 다시 계산하면 실수가 나기
쉽습니다. 이미 OB09 설정으로 결제 시점에 정확히 갈려 전기된 계정이 있으므로, 화면은 그 계정 값을
그대로 신뢰해 손익구분 뱃지를 표시합니다. 계산은 원천에서 한 번만 하고, 화면은 보여 주기만 합니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.fxrealized) · ko 로케일 · sap_horizon 테마 |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | DynamicPage + 조회조건 · 결과 테이블 프래그먼트 조합 |
view/fragments/ | MainTitle · MainSearch · MainMessageStrip · MainTable · DetailDialog |
controller/Main.controller.js | 조회 · 계정×통화 집계 · 상세 · CSV 다운로드 로직 |
model/ModelMock.js | localdata JSON 읽기(Promise) 래퍼 |
model/formatter.js | 금액 · 환율 · 손익구분 · 상태 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/meta.json | 회사 · 계정 · 통화 · 기간 기준정보 |
localdata/items.json | 실현환차손익 전표 검증용 데이터(219건) |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 집계 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 실현환차손익 전표 219건(회사 1000: 177건, 회사 2000: 42건)이며, 생성 직후 전수 재계산으로 아래 항목을 확인했습니다.
| 회사코드 | 건수 | 순손익 |
|---|---|---|
| 1000 (주)샘플전자 - 한국법인 | 177건 | +7,414,186 KRW (차익 39,091,063 / 차손 31,676,877) |
| 2000 SAMPLE AMERICA INC. | 42건 | -4,581 USD (차익 6,065 / 차손 10,646) |
| 검증 항목 | 결과 |
|---|---|
| 환차손익금액 = 외화금액 × │청산환율-원거래환율│ (전 건 일치) | 통과 |
| 손익구분(차익/차손)이 거래유형(AR/AP)·환율 등락 방향에서 올바르게 파생 | 통과 |
| 손익구분에 대응하는 계정(90851000/90951000) 매핑 일치 | 통과 |
| 화면 집계(건수·합계·최소/최대/평균)가 검증 스크립트 재계산과 일치 | 통과 |
| XML/JSON 전체 파싱 · i18n 키 누락 0건 · manifest·네임스페이스 참조 일치 | 통과 |
적용 테마 sap_horizon 확인(부트스트랩 설정 + 런타임 값) | 통과 |
| 조회 버튼 조회조건 영역 배치 · Enter 키 조회 동작 | 통과 |
| 화면 렌더링 — 실브라우저 조회 → Enter 키 필터 → 상세 실동작 후 캡처, 콘솔 에러 0건 | 4/4 |
거래처 · 환율 · 금액은 모두 검증용 데이터입니다.
자주 묻는 질문
실현손익과 미실현손익을 왜 따로 보나요?
성격이 다르기 때문입니다. 미실현손익은 결산일에 남아 있는 외화채권채무를 그날의 환율로 다시 평가만 해 본 것이라 다음 결산에서 뒤집힐 수 있습니다. 실현손익은 실제로 결제·회수가 끝나 확정된 금액이라 다시 바뀌지 않습니다. 두 성격을 같은 화면에서 섞어 보면 이번 달에 확정된 손익이 얼마인지 가늠하기 어려워지므로, 이 화면은 실현된 건만 골라서 봅니다.
계정만 보고 차익인지 차손인지 알 수 있나요?
알 수 있습니다. SAP 표준 설정(OB09)에서 외화채권채무 관련 계정마다 환차익 계정과 환차손 계정을 각각 지정해 두면, 전기 시점에 방향에 따라 둘 중 하나로 자동 전기됩니다. 그래서 계정과목이 90851000이면 무조건 차익, 90951000이면 무조건 차손이라, 화면에서는 이 계정 구분을 그대로 손익구분 표시에 사용합니다.
원거래환율과 청산환율은 어디서 가져오나요?
각 시점 전표에 이미 적용되어 있는 환율입니다. 송장을 처음 전기할 때 그 날짜 기준 환율마스터(TCURR)에서 읽어 전표 헤더에 남기고, 나중에 결제·회수로 청산할 때도 그 시점 환율이 청산 전표 헤더에 남습니다. 화면은 두 전표를 원거래-청산 쌍으로 이어 각각의 환율을 그대로 가져와 차이를 계산합니다.
SAP 표준 기능과 어떻게 이어지나요?
환차손익을 계산해 계정에 자동으로 전기하는 것은 표준 청산 처리(예: F-28·F-53 등 결제 트랜잭션)와 OB09 계정자동결정 설정이 그대로 담당합니다. 이 화면은 그 결과로 총계정원장에 남은 라인(FBL3N 관점)을 계정·통화 단위로 모아 규모를 한눈에 보여 주고, 원거래-청산 환율 차이를 짚어 이례적으로 큰 건을 찾아내는 조회 전용 확장입니다.