솔루션 홈
환차손익

SAP 실현환차손익 현황 — 결제된 순간의 환차익·환차손만 가려내기

외화채권·채무가 결제·회수되는 순간 확정되는 환차손익만 계정·통화별로 모아, 아직 확정되지 않은 결산 평가손익과 뒤섞이지 않게 가려내는 화면입니다.

외화로 거래한 채권·채무는 환율이 움직이는 동안 두 번 손익을 만납니다. 결산일에 아직 남아 있으면 그날 환율로 다시 평가만 해 보는 미실현손익이 한 번, 실제로 결제되거나 회수되어 사라지는 순간 확정되는 실현손익이 또 한 번입니다. 앞의 것은 다음 달이면 뒤집힐 수 있지만, 뒤의 것은 이미 끝난 일이라 바뀌지 않습니다.

그래서 재무팀이 "이번 달 환차손익이 얼마나 확정됐는가"를 보려면, 결산 평가손익과 섞이지 않은 실현분만 따로 봐야 합니다. SAP 표준 전표 데이터 구조를 그대로 이어받아 결제·청산 시점에 확정된 환차손익만 계정·통화별로 모아 보여 주도록 OpenUI5 화면으로 확장한 것이 ZLFIA0130입니다. 실제 구동 화면 4종을 함께 공개합니다.

SAP 표준 기능을 그대로 이어받은 부분

  • 전표 원천 — 청산(결제·회수) 전표 헤더(BKPF)와 라인(BSEG) 구조를 그대로 사용
  • 계정 자동결정 — 외화채권채무 계정별 환차익/환차손 계정 매핑(OB09)을 그대로 따름
  • 환율 근거 — 원거래·청산 각 시점에 전표에 남은 환율(환율마스터 TCURR 기준)
  • 거래처 마스터 — 고객(KNA1) · 공급업체(LFA1) · 계정(SKAT) 표준 구조 유지
항목내용
업무 영역재무회계(FI) · 총계정원장 · 실현환차손익 모니터링
Namespacezui5.fxrealized
셸 구조조회조건 영역(우측 조회) + 계정×통화별 집계 테이블, 행 선택 시 전표 상세
화면 수조회 화면 1개 + 전표 상세 다이얼로그
SAP 표준 기능 근거FBL3N · OB09 · OB08/TCURR
구분되는 인접 화면외화채권채무 미실현 평가손익(F.05) · 환율마스터 정합성 점검 — 본 화면은 실현손익만 다룸
성격조회형(Read-Only) — 환차손익 계산과 전기는 표준 청산 처리가 담당
UI 테마sap_horizon 단일 적용

실제 화면 4종 둘러보기

회사코드와 조회기간만 넣고 조회하면 계정×통화별 실현손익이 집계됩니다 → 최소금액으로 자잘한 건을 걸러내고 Enter 키로 즉시 다시 조회합니다 → 행을 클릭해 원거래환율 대비 청산환율의 차이로 발생한 개별 전표를 확인합니다.

아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.

Main.view.xml
초기화면 — 조회조건과 sap_horizon 테마
초기화면 — 조회조건과 sap_horizon 테마 — 회사코드·회계연도·조회기간(월)이 필수값이고, 통화·계정·손익구분·최소금액은 보조 조건입니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
전체조회
전체조회 — 계정×통화별 실현손익 집계
전체조회 — 계정×통화별 실현손익 집계 — 회사코드 1000, 2026년 1~8월 전체 조회 결과입니다. 외환차익 계정(90851000, 녹색)과 외환차손 계정(90951000, 빨강)이 통화(USD·EUR·JPY·CNY)별로 나뉘어 표시되고, 상단과 하단에 차익·차손·순손익 합계가 함께 뜹니다.
최소금액 필터
최소금액 필터 + Enter 키 조회
최소금액 필터 + Enter 키 조회 — 최소금액 입력란에 500,000을 넣고 Enter 키를 눌러 조회한 화면입니다. 마우스로 조회 버튼을 누르지 않아도 곧바로 재조회되며, 각 조합의 건수·합계가 500,000 이상인 전표만 반영해 다시 계산됩니다.
전표 상세
상세 다이얼로그 — 원거래환율 대비 청산환율
상세 다이얼로그 — 원거래환율 대비 청산환율 — 집계 행을 클릭하면 그 계정×통화 조합에 속한 개별 전표가 펼쳐집니다. 원거래(송장) 전표번호·일자·환율과 청산 전표번호·일자·환율을 나란히 두어, 그 차이로 환차손익 금액이 어떻게 나왔는지를 한 줄에서 확인할 수 있습니다.

조작 방법

  1. 회사코드 · 회계연도 · 조회기간(월)을 넣습니다. 세 값은 필수이며, 조회기간은 시작월~종료월 범위로 지정합니다.
  2. 통화 · 계정 · 손익구분은 보조 조건입니다. 특정 통화(예: EUR)나 계정(외환차익/외환차손) 하나만 볼 때 씁니다.
  3. 최소금액(이상)에 값을 넣으면 그 금액 미만의 자잘한 건은 집계에서 제외해 큰 건 위주로 봅니다.
  4. 조회조건 입력필드에서 Enter를 눌러도 바로 조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
  5. 결과는 계정×통화 조합 단위로 집계되어 표시되고, 상단 제목 영역과 표 하단에 차익·차손·순손익 합계가 함께 갱신됩니다.
  6. 행을 클릭(또는 상세 버튼)하면 그 조합에 속한 개별 전표가 원거래환율·청산환율과 함께 펼쳐집니다.
  7. 결과는 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 · SKATG/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.htmlOpenUI5 부트스트랩 — sap_horizon · lodash · moment
manifest.json앱 디스크립터 — 앱 ID(zui5.fxrealized) · ko 로케일 · sap_horizon 테마
Component.js조회조건 모델 · 결과 모델 초기화
view/Main.view.xmlDynamicPage + 조회조건 · 결과 테이블 프래그먼트 조합
view/fragments/MainTitle · MainSearch · MainMessageStrip · MainTable · DetailDialog
controller/Main.controller.js조회 · 계정×통화 집계 · 상세 · CSV 다운로드 로직
model/ModelMock.jslocaldata JSON 읽기(Promise) 래퍼
model/formatter.js금액 · 환율 · 손익구분 · 상태 포맷터
i18n/i18n_ko.propertiesko 로케일 리소스
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 관점)을 계정·통화 단위로 모아 규모를 한눈에 보여 주고, 원거래-청산 환율 차이를 짚어 이례적으로 큰 건을 찾아내는 조회 전용 확장입니다.

실현환차손익 마감 점검, 지금 쓰는 SAP 위에서 확장해 보세요

결제·회수가 끝날 때마다 얼마가 확정됐는지 계정·통화 단위로 바로 볼 수 있으면, 결산을 닫기 전에 이례적으로 큰 건을 먼저 짚어낼 수 있습니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

환차손익실현손익외환차익외환차손FBL3NOB09OpenUI5