SAP 실현 환차손익 현황 — 결제되고 나서야 확정되는 손익
외화 채권·채무가 청산될 때 확정된 환차손익을 계정·통화별로 집계하고, 개별 전표까지 내려가는 화면입니다.
외화 거래는 돈이 실제로 오갈 때 손익이 확정됩니다. 청구할 때 환율과 받을 때 환율이 다르면 그 차이가 환차손익입니다.
결산 때 평가하는 미실현 손익과 달리 이건 되돌릴 수 없는 숫자입니다. 월별로 얼마나 실현되는지, 어느 통화에서 큰 건이 나오는지 봐야 합니다. 계정·통화별로 집계해 전표까지 내려가도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 환차손익 계정 — 외환차익(90851000) · 외환차손(90951000)
- 계정 자동결정 —
OB09의 KDB/KDF 매핑 - 환율 — 원거래 시점과 청산 시점(
TCURR) - 전표 — 청산 전표와 원거래 전표
- 통화 — 원거래 외화 통화
| 항목 | 내용 |
|---|---|
| 기반 T-code | FBL3N · OB09 · OB08 |
| 업무 영역 | 재무회계(FI) · 외환 관리 |
| Namespace | zui5.fxrealized |
| 셸 구조 | DynamicPage + 조회조건 Panel + 집계 테이블(12열) + 상세 Dialog |
| 데이터 | OData 미구현 — ModelMock 이 localdata JSON 을 fetch |
| 인접 앱 | fxval 미실현 평가손익 · fxratechk 환율마스터 점검 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
회사코드·회계연도·조회기간으로 조회하면 계정·통화별 집계가 나옵니다 → 차익과 차손, 순손익을 확인하고 → 행을 눌러 개별 전표로 내려갑니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 회계연도를 고릅니다.
- 조회기간을 시작월~종료월로 지정합니다. 시작이 종료보다 크면 오류가 납니다.
- 통화로 원거래 통화를 고릅니다. USD·EUR·JPY·CNY 입니다.
- 계정과 손익구분으로 차익·차손을 나눠 봅니다.
- 최소금액을 넣으면 그 이상인 전표만 집계됩니다. 큰 건만 볼 때 씁니다.
- 순손익을 확인합니다. 차익에서 차손을 뺀 값입니다.
- 집계 행을 누르면 개별 전표가 열립니다.
집계 기준
계정과 통화 조합으로 묶어 통계를 냅니다.
환차손익 = (청산 시점 환율 − 원거래 시점 환율) × 외화금액
집계 단위 = 계정 × 통화
건수 · 최소금액 · 최대금액 · 평균금액 · 금액합계
최초발생일 · 최종발생일 = 조회기간 내 전기일 최소·최대
순손익 = 차익 합계 − 차손 합계
최소금액 조건은 개별 전표 단위로 적용한 뒤 집계
최소·최대·평균을 함께 내는 이유
합계만 보면 큰 건 하나 때문인지 여러 건이 쌓인 것인지 알 수 없습니다. 평균 대비 최대값이 크게 벌어져 있으면 특정 거래 하나가 전체를 좌우한 것이고, 그 건을 먼저 확인해야 합니다.
환차손익 관련 앱 구분
| 구분 | 내용 | 성격 |
|---|---|---|
| 실현 손익 (이 앱) | 결제·청산 시점 확정 | 되돌릴 수 없음 |
| 미실현 평가손익 (fxval) | 결산일 F.05 평가 | 다음 기에 환입 |
| 환율마스터 점검 (fxratechk) | TCURR 등록 정합성 | 손익이 아닌 설정 |
| 순노출 (fxexposure) | 미청산 채권·채무 상계 | 리스크 규모 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 1000 한국법인(KRW) · 2000 미국법인(USD) |
회계연도 Gjahr | 필수 | 2026 |
조회기간 MonatFrom~MonatTo | 필수 | 1~8월. 시작>종료면 오류 |
통화 Waers | 선택 | 전체 / USD / EUR / JPY / CNY |
계정 Hkont | 선택 | 90851000 외환차익 / 90951000 외환차손 |
| 손익구분 | 선택 | 전체 / 차익만 / 차손만 |
| 최소금액(이상) | 선택 | 개별 전표 금액 기준 필터 |
결과 컬럼
메인 — 계정·통화별 집계 (12열)
| 컬럼 | 의미 |
|---|---|
| 계정과목 · 계정명 | 외환차익 / 외환차손 |
| 손익구분 | 차익(녹색) / 차손(빨강) |
| 통화 | 원거래 외화 통화 |
| 건수 | 해당 조합 전표 수 |
| 최소 · 최대 · 평균 · 합계 | 금액 통계(현지통화) |
| 최초발생일 · 최종발생일 | 전기일 최소·최대 |
| 상세 | 클릭 시 개별 전표 |
상세 Dialog — 개별 전표
| 컬럼 | 의미 |
|---|---|
| 전표번호 · 전기일 | 청산 전표 |
| 원거래 전표 | 연결된 원거래 |
| 외화금액 · 통화 | 거래 금액 |
| 원거래 환율 · 청산 환율 | 두 시점 환율 |
| 환차손익 금액 | 환율 차이 × 외화금액 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL3N | G/L 라인아이템 | 환차손익 계정 조회 원천 |
OB09 | 환차손익 계정 자동결정 | 계정 매핑 근거 |
OB08 · TCURR | 환율 마스터 | 두 시점 환율 |
BSEG · BKPF | 전표 라인과 헤더 | 전표 상세 |
F.05 | 외화 평가 | 미실현 — 별도 앱 |
도입 시 확인이 필요한 부분
환차손익 계정이 회사마다 다릅니다. OB09 설정에서 계정별로 다른 차익·차손 계정이 매핑돼 있으면 조회 대상 계정도 그에 맞춰야 합니다. 계정 하나만 보고 있으면 다른 경로로 발생한 손익이 빠집니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCFXREALIZED'
@EndUserText.label: '실현 환차손익 집계 (Z)'
define view Z_C_FX_REALIZED
as select from bseg as Line
inner join bkpf as Header on Line.bukrs = Header.bukrs
and Line.belnr = Header.belnr
and Line.gjahr = Header.gjahr
left outer join skat as AcctText on Line.hkont = AcctText.saknr
and AcctText.spras = 'K'
{
key Line.bukrs,
key Line.gjahr,
key Line.hkont as Account,
key Header.waers as Currency,
AcctText.txt50 as AccountText,
Header.monat as Period,
count(*) as DocCount,
min( Line.dmbtr ) as MinAmount,
max( Line.dmbtr ) as MaxAmount,
sum( Line.dmbtr ) as TotalAmount,
min( Header.budat ) as FirstDate,
max( Header.budat ) as LastDate
// 손익구분은 계정(90851000 차익 / 90951000 차손)으로 판정
}
where Line.hkont in ( '90851000', '90951000' )
group by Line.bukrs, Line.gjahr, Line.hkont, Header.waers,
AcctText.txt50, Header.monat
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage + 조회조건 Panel + 집계 테이블 |
| 조회조건 | sap.m.Select · sap.m.Input · sap.m.CheckBox — 우측 끝에 조회·초기화 |
| 이벤트 | change · submit 핸들러로 조회 이력이 있으면 즉시 재조회 |
| 집계 테이블 | sap.ui.table.Table — 12열 |
| 손익구분 | sap.m.ObjectStatus — MessageType 값만 사용 |
| 요약 | 제목·footer 에 차익·차손·순손익 |
| 상세 | sap.m.Dialog — 행 클릭으로도 열림 |
순손익을 footer 에 고정하는 이유
계정과 통화로 나뉜 집계를 훑다 보면 전체가 이익인지 손해인지 감이 사라집니다. 차익 합계와 차손 합계, 그 차이를 화면에 고정해 두면 세부를 보다가도 전체 그림으로 바로 돌아올 수 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.fxrealized) · ko 로케일 |
view/Main.view.xml | DynamicPage · 조회조건 · 집계 테이블 |
view/DetailDialog.fragment.xml | 개별 전표 상세 |
controller/Main.controller.js | 조회 · 집계 · 순손익 산출 |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 환율 · 손익 색 포맷터 |
i18n/i18n_ko.properties | 한국어 텍스트 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 금액합계 = 개별 전표 금액 합계 (전 조합) | 통과 |
| 평균금액 = 합계 ÷ 건수 | 통과 |
| 순손익 = 차익 합계 − 차손 합계 | 통과 |
| 손익구분이 계정과 정합 | 통과 |
| 최소금액 필터가 전표 단위로 적용 후 집계 | 통과 |
| 시작월 > 종료월이면 오류 메시지 | 통과 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 4/4 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
미실현 평가손익과 무엇이 다른가요?
실현은 결제가 끝나 확정된 손익이고 미실현은 결산일 시점 추정입니다. 미실현은 다음 기에 환입되지만 실현은 그대로 남습니다.
환차손익이 계속 한쪽으로 쏠리면요?
환율 추세와 거래 구조가 맞지 않는 것입니다. 수출이 많은데 계속 차손이면 헤지 전략을 검토할 시점입니다.
큰 건 하나만 빨리 찾으려면요?
최소금액에 값을 넣으면 그 이상인 전표만 집계됩니다. 평균과 최대값 차이가 큰 조합부터 상세로 내려가면 빠릅니다.
SAP 표준 기능과 어떻게 이어지나요?
환차손익 전기는 표준이 자동으로 처리합니다. 이 화면은 그 결과를 계정·통화로 묶고 통계와 드릴다운을 붙인 확장입니다.