SAP 수출입 자금계획 — 전표가 생기기 전에 외화 자금을 세우기
신용장 단위로 매출·입금(수출)과 개설·지급(수입) 계획을 등록하고, 외화금액을 기준일자 환율로 원화 환산해 자금 규모를 잡는 화면입니다.
수출입 자금은 전표가 생기기 전에 규모가 정해집니다. 신용장을 열면 만기에 얼마를 지급할지, 수출 선적이 끝나면 언제 입금될지가 계약 시점에 이미 잡힙니다.
그래서 자금 담당자는 전표를 기다리지 않고 L/C 단위로 계획을 먼저 세웁니다. 문제는 외화라는 점입니다. 금액은 달러나 유로로 적히는데 자금 규모는 원화로 비교해야 하고, 환율은 매출일자·개설일자 기준으로 잡아야 합니다. 이 화면은 외화금액만 넣으면 원화 환산과 회수율을 자동으로 채우고, 수출과 수입을 같은 그리드에서 구분해 관리하도록 만든 계획 등록 화면입니다.
SAP 표준 구조를 그대로 이어받은 부분
- 계획 테이블 —
ZTFIA0230(자금계획 수출입) 구조를 그대로 사용 - 구분코드 —
ZTFIA0210의 100000 수출 · 200000 수입 체계 유지 - 환율 —
ZTFIA0200(자금계획 환율)에서 기준일자 환율 조회 - 마스터 — 거래처(
LFA1·KNA1) · 계정 텍스트(SKAT)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 결산 · 수출입 자금계획 |
| Namespace | zui5.trade |
| 셸 구조 | 조회조건 영역(우측 조회) + 편집 가능한 계획 그리드, 구분코드에 따라 컬럼 라벨 전환 |
| 화면 수 | 조회·편집 화면 1개 |
| 데이터 | 계획 51건 (수출 27 · 수입 24) |
| 성격 | 등록·수정형(CRUD) — 실행 실적은 별도 인터페이스가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 6종 둘러보기
구분코드를 고르고 조회하면 그 유형의 계획이 펼쳐집니다 → 외화금액을 넣으면 원화가 자동 환산되고 → [추가]로 새 L/C 건을 넣고 저장합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 일자를 넣습니다. 일자는 당월 1일부터 익월 말일까지가 기본입니다.
- 구분코드를 고릅니다. 100000 수출이면 매출·입금, 200000 수입이면 개설·지급으로 컬럼이 바뀝니다.
- 거래처 · 지급조건 · 계정은 목록에서 고르고, L/C 번호와 외화금액은 셀에 직접 입력합니다.
- 외화금액을 넣으면 원화금액이 자동으로 환산됩니다. 통화나 일자를 바꿔도 다시 계산됩니다.
- 추가로 새 계획 라인을 만들고, 삭제로 선택 라인을 빼고, 저장으로 한 번에 반영합니다.
- 결과는 CSV 다운로드로 내려받습니다. 구분코드에 맞춰 헤더가 매출·입금 또는 개설·지급으로 나갑니다.
원화 환산 규칙
외화로 적힌 계획을 원화로 비교하려면 환산 기준이 하나로 정해져 있어야 합니다.
원화금액 = 외화금액 × 적용환율
적용환율 = 자금계획 환율 테이블에서 기준일자로 조회
수출 → 매출일자, 수입 → 개설일자
회수율(결제율) = 입금(지급) 외화금액 ÷ 매출(개설) 외화금액| 항목 | 산식 · 규칙 |
|---|---|
| 원화금액(매출/개설) | 외화금액 × 적용환율 |
| 원화금액(입금/지급) | 외화금액 × 적용환율 |
| 적용환율 | 자금계획 환율 테이블에서 매출일자 · 개설일자 기준으로 조회 |
| 재계산 시점 | 통화 · 일자 · 외화금액 중 하나라도 바뀌면 즉시 |
| 회수율 / 결제율 | 입금(지급) 외화금액 ÷ 매출(개설) 외화금액 |
| 초과 입력 안내 | 입금(지급)이 매출(개설)을 넘으면 저장 전에 알림 |
금액이 맞지 않으면 무엇을 의심하나
원화금액이 외화금액 × 환율과 어긋나면 기준일자가 환율 테이블에 없어 다른 날짜 환율이 적용된 경우입니다. 계획 환율은 회사가 월초 등 정해진 시점에 등록하므로, 등록되지 않은 날짜를 기준일자로 넣으면 환산이 빕니다. 일자를 바꿔 조회하거나 환율 테이블에 해당 일자를 추가한 뒤 다시 계산합니다.
구분코드 2종 — 수출·수입
같은 테이블에 저장되지만 화면에서는 두 유형으로 갈립니다. 돈이 들어오는 쪽과 나가는 쪽이라 라벨과 기준일자가 다릅니다.
| 구분코드 | 유형 | 기준일자 | 증빙번호 | 금액(기준) | 금액(정산) | 예정만기일 |
|---|---|---|---|---|---|---|
100000 | 수출자금 | 매출일자 | L/C# | 외화금액(매출) · 원화금액(매출) | 외화금액(입금) · 원화금액(입금) | 입금일자 |
200000 | 수입자금 | 개설일자 | P/C# | 외화금액(개설) · 원화금액(개설) | 외화금액(지급) · 원화금액(지급) | 만기일 |
수출은 매출이 먼저 일어나고 나중에 입금이 들어옵니다. 수입은 신용장을 개설한 뒤 만기에 지급합니다. 그래서 같은 자리의 금액이 한쪽에서는 받을 돈, 다른 쪽에서는 줄 돈이 됩니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 회사코드 |
일자 Zpdt | 필수 | 당월 1일 ~ 익월 말일 |
구분코드 Zfcd | 필수 | 라디오 — 100000 수출 / 200000 수입 |
입력자 Ernam | 선택 | 계획을 등록한 사용자 |
수정자 Aenam | 선택 | 계획을 고친 사용자 |
구분코드는 라디오 버튼이라 한 번에 한 유형만 봅니다. 수출과 수입을 같은 화면에 섞으면 금액의 방향이 헷갈리기 때문입니다.
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 상태 | 신규 / 수정 표시. 저장 전 변경분을 구분 |
| 매출일자 · 개설일자 | 구분코드에 따라 라벨이 바뀌는 기준일자. 환율 조회 기준 |
| Business Partner · 명 | 거래처 목록에서 선택, 명칭 자동 |
| Payment Term · desc | 지급조건 코드와 설명 |
| L/C# · P/C# | 신용장 · 구매계약 번호 |
| 계좌번호(계정코드) · 명 | 수출은 매출채권, 수입은 매입채무 계정 |
| 통화 | 자금계획 환율 테이블에 등록된 통화 |
| 외화금액(매출/개설) · 원화금액 | 입력값과 자동 환산값 |
| 외화금액(입금/지급) · 원화금액 | 입력값과 자동 환산값 |
| 적용환율 | 기준일자에 적용된 환율 |
| 회수율 · 결제율 | 입금(지급) ÷ 매출(개설) |
| 입금일자 · 만기일 | 예정 만기일 |
| 입력자 · 수정자 | 등록·변경 사용자. 저장 시 수정자 자동 기록 |
구분코드에 따라 일자·증빙번호·금액 컬럼의 라벨이 통째로 바뀝니다. 저장되는 필드는 같고 표시만 달라집니다.
SAP 표준 기능 매핑
이 화면은 유동성 예측을 대체하지 않습니다. 전표가 생기기 전 단계의 계획을 L/C 단위로 등록해, 표준이 채우지 못하는 구간을 메웁니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FF7B 관점 | 유동성 예측 | 전표 기반 예측 대신 L/C 단위 계획을 직접 등록해 확정 전 자금을 미리 세움 |
FTR_EDIT 관점 | 트레저리 거래 | 금융상품 단위 대신 수출입 건 단위로 입출금 예정을 관리 |
TCURR / 자금계획 환율 | 환율 테이블 | 계획 환산에는 회사가 정한 자금계획 환율을 사용 |
LFA1 · KNA1 | 거래처 마스터 | 거래처 코드와 명칭 |
SKAT | 계정 텍스트 | 계좌번호(계정코드) 명칭 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 자금계획(수출입) | ZTFIA0230 | CRUD 대상 테이블 |
| 자금계획 구분코드 | ZTFIA0210 | 100000 수출 · 200000 수입 |
| 자금계획 환율 | ZTFIA0200 | 기준일자별 통화 환율 |
| 계정 명칭 | SKAT | 계좌번호(계정코드) 텍스트 |
| 입력자 · 수정자 | ERNAM · AENAM | 저장 시 수정자 자동 기록 |
도입 시 확인이 필요한 부분
자금계획 환율을 언제 어떤 기준으로 등록하는지가 회사마다 다릅니다. 월초 고시환율을 쓰는 곳도 있고 계약 환율을 쓰는 곳도 있어, 기준일자에 환율이 없을 때의 처리(직전 환율 사용 · 입력 요구)를 함께 정해야 합니다. 수출입 거래처와 계정 체계, L/C 번호 채번 규칙도 프로젝트 표준에 맞춰 조정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 계획에 구분코드·환율·계정 텍스트를 붙여 서빙하는 뷰를 제안합니다.
@AbapCatalog.sqlViewName: 'ZCTRADEPLAN'
@EndUserText.label: '수출입 자금계획 (Z)'
define view Z_C_TRADE_FUND_PLAN
as select from ztfia0230 as Plan
left outer join ztfia0210 as Code on Plan.bukrs = Code.bukrs
and Plan.zfcd = Code.fcd
left outer join ztfia0200 as Rate on Plan.bukrs = Rate.bukrs
and Plan.waers = Rate.fcurr
and Plan.zpdt = Rate.gdatu
left outer join skat as Acct on Plan.saknr = Acct.saknr
and Acct.spras = 'K'
{
key Plan.bukrs as Bukrs,
key Plan.zpdt as Zpdt,
key Plan.zfcd as Zfcd,
key Plan.seq as Seq,
Code.fcd_t as ZfcdText,
Plan.partner as Partner,
Plan.zterm as Zterm,
Plan.lcno as Lcno,
Plan.saknr as Saknr,
Acct.txt50 as SaknrText,
Plan.waers as Waers,
Rate.ukurs as Ukurs,
Plan.wrbtr_s as WrbtrSales,
// 원화금액은 자금계획 환율로 환산
Plan.wrbtr_s * Rate.ukurs as DmbtrSales,
Plan.wrbtr_i as WrbtrIn,
Plan.wrbtr_i * Rate.ukurs as DmbtrIn,
Plan.duedt as Duedt,
Plan.ernam as Ernam,
Plan.aenam as Aenam
}매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 환율 등록 관행에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 계획 그리드 |
| 조회조건 | sap.m.Input · sap.m.DatePicker · sap.m.RadioButtonGroup — 우측 끝에 조회 |
| 편집 그리드 | sap.ui.table.Table — 셀에 Input · ComboBox · DatePicker |
| 컬럼 라벨 전환 | 구분코드에 따라 i18n 키를 바꿔 매출/개설 · 입금/지급으로 교체 |
| 상태 표시 | RowSettings.highlight · sap.m.ObjectStatus — 신규·수정·회수율 |
| 요약 표시 | sap.m.MessageStrip · sap.m.ObjectStatus |
| CSV | Blob + UTF-8 BOM — 구분코드에 맞춘 헤더 |
거래처 목록을 구분별로 나누지 않은 이유
처음에는 수출이면 수출 거래처만, 수입이면 수입 거래처만 목록에 넣었습니다. 그런데 그리드 행이 재사용될 때 새 목록에서 선택값을 찾지 못해 이전 거래처 이름이 그대로 남는 문제가 있었습니다. 그래서 목록은 전체를 유지하고 항목마다 수출·수입 표시를 붙였고, 구분과 맞지 않는 항목을 고르면 저장할 때 막도록 했습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.trade) · ko 로케일 · sap_horizon |
Component.js | 선택조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 조회화면 + 편집 가능한 계획 그리드 |
controller/Main.controller.js | 조회 · 라벨 전환 · 환율 재계산 · 추가/삭제/저장 · CSV |
model/ModelMock.js | localdata JSON 읽기 — 구분·기간 필터, 환율 재계산, 저장 시뮬레이션 |
model/formatter.js | 금액 · 외화 · 일자 · 환율 · 회수율 · 상태 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 — 구분별 컬럼 라벨 포함 |
localdata/trade.json | 수출입 자금계획 시뮬레이션 데이터 |
구분코드가 늘어도 i18n 라벨과 컨트롤러의 라벨 전환 부분만 손보면 됩니다.
검증 결과
화면 구성에 쓴 데이터는 수출·수입 두 유형의 L/C 건을 통화별 환율과 지급조건에 맞춰 생성한 것입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 수출자금 계획 | 27행 | 원화(매출) 1,547,056,000 · 원화(입금) 1,076,307,893 |
| 수입자금 계획 | 24행 | 원화(개설) 1,647,528,400 · 원화(지급) 1,281,576,272 |
| 환율 · 지급조건 | 4통화 · 5종 | USD · EUR · JPY · CNY / L/C · D/A · D/P 포함 |
| 검증 항목 | 결과 |
|---|---|
| 원화금액 = 외화금액 × 적용환율 (매출·입금 모두) | 통과 |
| 입금/지급이 없으면 원화금액도 0 · 매출(개설) 금액 이하 | 통과 |
| 적용환율이 자금계획 환율 테이블과 일치 | 통과 |
| 구분코드·명칭·수출입 구분 일치 | 통과 |
| 수출은 매출채권 계정, 수입은 매입채무 계정 | 통과 |
| 거래처·지급조건이 마스터에 존재 | 통과 |
| L/C 번호는 수출 LC, 수입 PC 로 시작 | 통과 |
| 일자는 당월 1일 ~ 익월 말일 · 예정만기일 > 기준일자 | 통과 |
| Sequence 중복 없음 · 외화금액 > 0 | 통과 |
| 화면 렌더링 — 실브라우저 조회 → 구분 전환 → 재계산 → 추가 → 저장 검증 | 6/6 |
거래처·금액·L/C 번호는 모두 검증용 데이터입니다.
자주 묻는 질문
왜 구분코드에 따라 컬럼 이름이 바뀌나요?
수출과 수입은 돈이 흐르는 방향이 반대입니다. 수출은 매출을 일으키고 나중에 입금을 받고, 수입은 신용장을 개설하고 만기에 지급합니다. 같은 자리의 금액이 한쪽에서는 받을 돈, 다른 쪽에서는 줄 돈이므로 라벨을 바꿔 혼동을 막았습니다. 저장되는 필드는 같습니다.
환율은 언제 기준으로 적용되나요?
매출일자(수출)와 개설일자(수입)입니다. 계획 시점의 환율로 원화를 환산해야 자금 규모를 비교할 수 있기 때문입니다. 통화나 일자, 외화금액 중 하나라도 바뀌면 원화금액을 즉시 다시 계산합니다.
회수율이 100%가 아니면 문제인가요?
아닙니다. 분할 입금이나 분할 결제가 예정된 건은 입금(지급) 계획이 매출(개설)보다 작게 잡힙니다. 다만 회수 계획이 아예 없는 건은 0%로 표시되므로, 만기가 가까운데 계획이 비어 있다면 확인 대상이 됩니다.
거래처 목록에 수출·수입이 함께 나오는 이유는?
목록을 구분별로 갈아끼우면 그리드 행이 재사용될 때 이전 목록이 남아 엉뚱한 이름이 보이는 문제가 있었습니다. 그래서 목록은 전체를 유지하고 항목마다 수출·수입 표시를 붙였습니다. 구분과 맞지 않는 거래처나 계정을 고르면 저장할 때 막습니다.
SAP 표준 기능과 어떻게 이어지나요?
표준 유동성 예측은 전표가 생긴 뒤의 자금을 봅니다. 이 화면은 전표가 생기기 전, L/C나 구매계약 단위로 언제 얼마가 들어오고 나갈지를 미리 세우는 계획 등록 화면입니다. 세운 계획은 자금계획 테이블에 남아 자금수지 보고서에서 실행과 대조됩니다.