SAP 통화별 순노출액 — 환율이 움직이면 얼마가 흔들리나
통화별로 미결 매출채권과 매입채무를 상계해 헤지되지 않은 순노출액과 Long·Short 포지션을 보는 화면입니다.
달러로 받을 돈 100만과 줄 돈 80만이 있다면 실제 환위험은 20만에만 걸립니다. 나머지는 서로 상쇄되기 때문입니다.
그런데 채권과 채무는 다른 화면에서 관리됩니다. 따로 보면 노출이 실제보다 커 보이고 필요 없는 헤지를 하게 됩니다. 통화별로 상계해 순노출만 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 미결 채권 — 고객 미결항목(
FBL5N) - 미결 채무 — 거래처 미결항목(
FBL1N) - 통화 — 원거래 외화 통화
- 환율 — 기준일 현재 스팟환율(
TCURR) - 거래처 — 고객과 공급업체 코드·명칭
| 항목 | 내용 |
|---|---|
| 기반 T-code | FBL5N · FBL1N · TCURR |
| 업무 영역 | 재무회계(FI) · 외환 리스크 |
| Namespace | zui5.fxexposure |
| 셸 구조 | DynamicPage + 조회조건 Panel + 노출 테이블(12열) + 상세 Dialog |
| 데이터 | OData 미구현 — ModelMock 이 localdata JSON 을 fetch |
| 인접 앱 | fxrealized 실현손익 · fxval 미실현 평가손익 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
회사코드·회계연도·기준월로 조회하면 통화별 노출이 나옵니다 → AR 과 AP 를 상계한 순노출액과 포지션을 확인하고 → 행을 눌러 개별 미결 전표로 내려갑니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 회계연도를 고릅니다.
- 기준월을 정합니다. 그 월 말 시점까지 미청산인 건만 집계됩니다.
- 통화로 대상을 좁힙니다.
- 포지션구분으로 Long 또는 Short 만 볼 수 있습니다.
- 최소금액을 넣으면 그 이상인 미결 전표만 집계됩니다.
- 순노출액과 노출비중을 확인합니다. 헤지 판단의 근거입니다.
- 행을 누르면 개별 미결 전표가 열립니다.
노출 산식
같은 통화의 채권과 채무를 상계합니다.
순노출액(외화) = AR 미결외화금액 − AP 미결외화금액
순노출액(환산) = 순노출액(외화) × 적용환율(스팟), 반올림
총노출규모 = AR 미결외화금액 + AP 미결외화금액
노출비중 = │순노출액│ ÷ 총노출규모 × 100
포지션 판정
순노출 > 0 → Long (순매입, 녹색)
순노출 < 0 → Short (순매도, 빨강)
노출비중 < 5% → Square (균형, 회색)
노출비중 5% 미만을 Square 로 두는 이유
채권 100만과 채무 98만이면 순노출은 2만입니다. 부호로는 Long 이지만 사실상 상쇄된 상태라 헤지할 이유가 없습니다. 비중으로 판정하면 실제로 대응이 필요한 통화만 색으로 걸러집니다.
포지션별 의미
| 포지션 | 상태 | 위험 방향 |
|---|---|---|
| Long (순매입) | 받을 외화가 더 많음 | 환율 하락 시 손해 |
| Short (순매도) | 줄 외화가 더 많음 | 환율 상승 시 손해 |
| Square (균형) | 노출비중 5% 미만 | 대응 불필요 |
| 총노출규모 | AR + AP 총량 | 거래 규모 참고 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 1000 한국법인(KRW) · 2000 미국법인(USD) |
회계연도 Gjahr | 필수 | 2026 |
기준월(누계) MonatTo | 필수 | 그 월 말 시점 미청산분 |
통화 Waers | 선택 | 전체 / USD / EUR / JPY / CNY |
| 포지션구분 | 선택 | 전체 / Long 만 / Short 만 |
| 최소금액(외화, 이상) | 선택 | 개별 미결 전표 외화금액 기준 |
결과 컬럼
메인 — 통화별 순노출 (12열)
| 컬럼 | 의미 |
|---|---|
| 통화 | USD / EUR / JPY / CNY |
| AR 미결건수 · 미결외화금액 | 기준월까지 미청산 매출채권 |
| AP 미결건수 · 미결외화금액 | 기준월까지 미청산 매입채무 |
| 순노출액(외화) | AR − AP |
| 적용환율(스팟) | 외화 1단위당 현지통화 |
| 순노출액(환산) | 순노출 × 스팟환율 |
| 포지션 | Long / Short / Square |
| 총노출규모 | AR + AP |
| 노출비중 | │순노출│ ÷ 총노출 × 100 |
상세 Dialog — 미결 전표
| 컬럼 | 의미 |
|---|---|
| 구분 | 고객(AR) / 공급업체(AP) |
| 거래처 | 코드와 명칭 |
| 전표번호 · 전기일 · 만기일 | 미결 전표 식별 |
| 외화금액 | 원거래 통화 기준 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL5N | 고객 미결항목 | AR 미결 원천 |
FBL1N | 거래처 미결항목 | AP 미결 원천 |
TCURR | 환율 마스터 | 스팟환율 환산 |
BSID · BSIK | 미결 항목 테이블 | 조회 원천 |
F.05 | 외화 평가 | 손익 — 별도 앱 |
도입 시 확인이 필요한 부분
외화 예금이나 차입금도 노출에 포함할지 정해야 합니다. 이 화면은 채권·채무만 다루는데, 외화 통장에 잔고가 있거나 외화 차입이 있으면 실제 노출은 달라집니다. 헤지 판단에 쓰려면 그 항목까지 합쳐 보는 것이 정확합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCFXEXPOSURE'
@EndUserText.label: '통화별 순노출액 (Z)'
define view Z_C_FX_EXPOSURE
with parameters p_keydate : dats
as select from bsid as ArItem
{
key ArItem.bukrs,
key ArItem.waers as Currency,
sum( ArItem.wrbtr ) as ArOpenAmount,
count(*) as ArOpenCount
// AP 는 BSIK 를 같은 형태로 집계해 union / join
// 순노출액 = AR − AP, 환산 = 순노출 × 스팟환율(TCURR)
// 노출비중 = |순노출| ÷ (AR + AP) × 100, 5% 미만은 Square
}
where ArItem.waers <> 'KRW'
group by ArItem.bukrs, ArItem.waers
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage + 조회조건 Panel + 노출 테이블 |
| 조회조건 | sap.m.Select · sap.m.Input · sap.m.CheckBox — 우측 끝에 조회·초기화 |
| 이벤트 | change · submit 핸들러로 조회 이력이 있으면 즉시 재조회 |
| 노출 테이블 | sap.ui.table.Table — 12열 |
| 포지션 표시 | sap.m.ObjectStatus — Long / Short / Square |
| 요약 | footer 에 Long·Short 통화수와 순노출 합계 |
| 상세 | sap.m.Dialog — AR/AP 미결 전표 |
총노출규모를 따로 보여 주는 이유
순노출이 작아도 거래 규모 자체가 크면 환율 변동에 따라 결제 시점마다 손익이 크게 오갑니다. 순노출은 헤지 대상 금액이고 총노출은 거래 규모이므로 두 숫자가 함께 있어야 상황이 제대로 읽힙니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.fxexposure) · 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 | 한국어 텍스트 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 순노출액(외화) = AR − AP (전 통화) | 통과 |
| 순노출액(환산) = 순노출 × 스팟환율 | 통과 |
| 총노출규모 = AR + AP | 통과 |
| 노출비중 5% 미만은 Square 로 판정 | 통과 |
| 상세 전표 합계 = 집계 외화금액 | 통과 |
| 기준월 말 시점 미청산 건만 집계 | 통과 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 4/4 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
순노출만 헤지하면 되나요?
원칙적으로는 그렇습니다. 다만 결제 시점이 크게 다르면 그사이 환율 변동에 노출되므로 만기 구조도 함께 봐야 합니다.
외화 예금은 왜 빠져 있나요?
이 화면은 채권·채무 기준입니다. 외화 통장 잔고나 외화 차입이 있으면 실제 노출이 달라지므로 별도로 합산해 판단해야 합니다.
Square 인데 금액이 큰 통화는요?
순노출은 작지만 총노출규모가 큰 상태입니다. 결제 시점이 어긋나면 일시적으로 노출이 생길 수 있어 만기 분포를 확인하는 것이 좋습니다.
SAP 표준 기능과 어떻게 이어지나요?
미결 항목은 표준 채권·채무 구조에 있습니다. 이 화면은 두 쪽을 통화 단위로 상계해 순노출과 포지션으로 보여 주는 확장입니다.