재무회계 · 자금 예측

통화별 자금 예측 점검 — 통화마다 앞으로 12주의 잔고를 다시 구해 부족한 통화와 남는 통화를 가리고 환전 매수·매도 금액을 원화로 산출하는 자금 예측 화면

통화별 12주 예측 잔고 · 운영 하한과 보유 상한 · 하한 미달 주와 상한 초과 주 · 환전 매수·매도 제안 · 8개 대사식 전수 검산 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지

소개 영상1분 37초8개 장면음성 안내·자막표지 → 처음 연 화면 → 점검 필요 통화 → 통화 상세 → 주별 예측 → 환전 제안 → 대사 결과 → 정리

도입 포인트 — 이 앱을 사용해야 하는 이유

외화를 다루는 자금팀은 매주 같은 질문을 받습니다. '달러는 앞으로 몇 주 버틸까?', '유로는 남는데 얼마나 팔아도 될까?', '그래서 이번 달에 원화로 얼마를 준비해야 하나?' 표준 현금 포지션과 유동성 예측은 현재 잔고와 예정 흐름을 정확히 보여 주지만, 통화마다 회사가 정한 운영 하한과 보유 상한에 견주어 부족한 주와 남는 주를 가려내고 환전 금액까지 정하는 일은 화면 밖 엑셀에 남아 있는 경우가 많습니다.

이 앱은 그 자리를 메웁니다. 통화마다 12주의 입금·출금 예정을 이월해 예측 잔고를 다시 구하고, 하한 미달 주와 상한 초과 주를 판정한 다음, 부족한 통화는 매수, 남는 통화는 매도로 제안해 원화 금액과 예상 환전 비용까지 보여 줍니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 12주 예측과 환전 제안 관점을 더해 확장합니다.

한 줄 요약 — 통화마다 앞으로 12주의 예측 잔고를 하한·상한과 견주어 부족한 통화와 남는 통화를 가리고, 환전 매수·매도 제안을 원화 금액으로 보여 주며, 8종 대사식으로 숫자를 스스로 다시 맞춥니다. 점검 도구이며 실제 환전과 집행의 결정은 회사가 합니다.

핵심 포인트 여섯 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 12주 뒤의 잔고를 통화마다 미리 구한다통화마다 앞으로 12주의 입금·출금 예정을 주 단위로 이월해 주 기말 잔고를 다시 구하고, 운영 하한 아래로 내려가는 첫 주와 가장 큰 부족액을 찾아 줍니다.오늘 잔고만 보고 있다가 몇 주 뒤 하한 아래로 내려가는 것을 지급일이 다가와서야 알게 됩니다.
② 남는 통화도 같은 눈으로 본다보유 상한을 넘는 주가 몇 주인지 세고, 길게 이어지면 매도 검토 대상으로, 짧으면 정상 범위로 구분해 과잉 통화를 놓치지 않습니다.부족한 통화에만 신경이 쏠려 남는 통화가 낮은 이자로 쌓이는 것을 보지 못합니다.
③ 환전 제안을 원화 금액으로 바꾼다부족한 통화는 가장 큰 부족액만큼 매수, 남는 통화는 이후 하한을 지키는 만큼만 매도로 제안하고 예측환율로 원화 금액과 스프레드 비용까지 계산합니다.외화 부족분을 사람마다 다른 감으로 정하고 원화로 얼마가 필요한지는 따로 계산합니다.
④ 매수 뒤 경로로 매도를 정한다매수를 반영한 잔고 경로에서 상한을 넘는 만큼만 팔아, 판 뒤에 다시 하한 아래로 내려가는 일이 없도록 제안 순서를 매수 → 매도로 고정합니다.매도 금액이 이후 주의 지급을 고려하지 못해 팔고 나서 다시 사야 하는 일이 생깁니다.
⑤ 예측환율이 없는 통화는 숨기지 않는다환율이 없으면 원화 환산을 비우고 확인 필요로 표시해, 환산 합계에 슬쩍 빠지는 일 없이 담당자가 먼저 보게 합니다.환율이 빠진 통화가 합계에서 조용히 0 원으로 계산되어 총액이 작아 보입니다.
⑥ 숫자를 스스로 다시 맞춘다주별 이월·주차 연결·입출금 구성·요약 합계·원화 환산·제안 반영 후 하한 충족 등 8종의 대사식을 서비스가 전수로 계산해 차이를 요약에 올립니다.제안 숫자가 맞는지 확인하려고 자금 회의 전에 엑셀을 다시 열어 손으로 맞춰 봅니다.

오늘 잔고만 봐서는 몇 주 뒤의 부족이 보이지 않는다

달러 계좌에 오늘 3,975,000 USD 가 있다고 하면 안심이 됩니다. 그러나 앞으로 12주 동안 들어올 돈은 합계 2,020,600 USD, 나갈 돈은 5,845,600 USD 라면 12주 뒤 잔고는 150,000 USD 로 내려앉고, 8주차부터는 운영 하한 1,500,000 USD 아래입니다. 이 앱은 주마다 주 기초 + 입금 − 출금 = 주 기말 을 이월해 부족이 시작되는 주와 가장 큰 부족액을 한 줄로 보여 줍니다.

부족과 과잉이 같은 회사 안에 동시에 있다

같은 회사에서 달러는 모자라는데 유로는 상한을 넘어 쌓이고, 엔은 잠깐 넘었다가 돌아오기도 합니다. 통화마다 따로 보는 표로는 어느 통화를 얼마나 사고 팔아야 전체가 맞는지 한눈에 보이지 않습니다. 이 앱은 부족 통화의 매수와 과잉 통화의 매도를 같은 표에 놓고, 원화로 환산한 필요 금액과 매도 금액의 차이인 순 원화 소요까지 위쪽 요약에 올립니다.

팔고 나서 다시 사야 하는 제안은 의미가 없다

상한을 넘는 만큼 다 팔면 이후 주의 지급에서 다시 하한 아래로 내려갈 수 있습니다. 그래서 이 앱은 매수를 먼저 반영한 잔고 경로를 만들고, 그 경로에서 상한을 넘는 주부터 이후 모든 주가 운영 하한 이상으로 남는 만큼만 매도로 제안합니다. 제안을 반영한 뒤의 최저 잔고가 하한 이상인지는 대사식으로 다시 확인합니다.

환율이 빠진 통화가 합계를 조용히 줄인다

예측환율이 없는 통화를 0 원으로 계산하면 필요 금액 합계가 작아 보이고 아무도 눈치채지 못합니다. 이 앱은 환율이 없는 통화의 원화 환산을 비워 두고 점검 결과를 '확인 필요'로 올려, 환율을 정한 뒤에 다시 보도록 합니다.

사용 방법

  1. 조회조건 입력 — 회계연도와 기간(월)은 필수이고, 회사·통화·주 시작일 기간·점검 코드·점검 결과는 필요할 때만 고릅니다. 비우거나 "전체"이면 그 조건은 걸리지 않습니다.
  2. 조회 버튼 또는 Enter — 조회 버튼은 입력 칸 오른쪽 끝에 있고, 입력 칸에서 Enter 를 눌러도 같은 조회가 실행됩니다. 처음 열면 한 번 자동으로 조회합니다.
  3. 요약 확인 — 점검한 통화 포지션, 하한 미달 통화, 필요 환전 원화 합계, 매도 가능 통화, 순 원화 소요, 확인 필요 통화, 정합성 대사 차이를 먼저 봅니다.
  4. 탭 이동 — 통화 포지션 → 주별 예측 → 환전 제안 → 대사 결과 순서로 넘깁니다.
  5. 행 클릭으로 상세 — 통화 포지션 행을 누르면 그 통화의 판정 근거와 12주 예측이 상세 창으로 열립니다. 닫기 버튼이나 ESC 로 닫습니다.
  6. CSV 내려받기 — 지금 보는 탭의 조회 결과가 UTF-8 CSV 로 내려옵니다.

숫자를 믿을 수 있는가 — 검증 결과

자금 회의에서 가장 비싼 질문은 "이 금액 맞아?" 입니다. 만드는 쪽에서 먼저 대사식을 세우고 예시 데이터 전체를 돌려 보았습니다. 아래는 서비스가 계산한 8종 대사식의 검사 건수와 차이 건수입니다.

대사식검사 건수차이 건수의도적 예외
주 기초 + 입금 − 출금 = 주 기말21600
주 기초 = 전주 기말19800
입금 = 채권 회수 + 기타 입금 · 출금 = 채무 지급 + 차입 상환 + 기타 출금21600
기초 + 예정 입금 − 예정 출금 = 기말 예측 = 12주차 주 기말1800
통화 요약의 입금·출금 = 12주 주별 입금·출금 합계1800
통화 요약 기말 원화 환산 = 12주차 주 기말 원화 환산 (예측환율이 있는 통화)1600
제안 반영 후 최저 예측 잔고 ≥ 운영 하한 (좌변 ≥ 우변, 정책이 있는 통화)1600
통화 요약의 필요 환전 원화 = 외화 매수 제안의 원화 금액 합계1200

검사 합계 710건에서 차이는 0건이고, 일부러 넣은 예외도 없습니다. 정책이 없는 통화와 환율이 없는 통화는 판정을 '확인 필요'로 남기고 해당 대사식의 검사 대상에서 빼며, 빠진 건수는 검사 건수에 반영되어 있습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 1.120 · sap_horizon 테마 · 통화·주별 탭은 sap.ui.table.Table, 제안·대사 탭은 sap.m.Table열이 많은 표는 고정 열과 가로 스크롤이 필요하고, 짧은 표는 반응형 표가 읽기 좋습니다
데이터 서비스OData V2 — manifest 의 데이터 소스에 상대 경로로 선언, 통화·주별·제안·대사 네 블록을 각각 부르고 총건수는 응답에 실어 받음운영 전환에서 서비스 주소만 바꾸면 되도록 화면은 주소를 코드에 두지 않습니다
판정·산출 로직서비스 로직 한 파일 — 주 이월, 하한·상한 판정, 매수·매도 제안, 환전 비용, 대사식화면이 아니라 서비스가 계산해야 다른 화면에서 불러도 같은 답이 나옵니다
조회조건sap.ui.model.Filter 로만 전달 — 날짜 기간은 BT 필터조회조건이 그대로 $filter 가 되어 서비스가 같은 조건으로 거릅니다
오류 처리메타데이터 로드 실패·요청 실패·빈 응답을 구분해 안내빈 표와 오류를 구분하지 못하면 사용자가 데이터가 없는 줄 압니다
정보 구성한 화면 안에 조회조건·요약·탭 4개·CSV자금 회의에서 한 화면으로 넘어가며 보도록 했습니다
앱 정보내용
업무 영역재무회계(FI) — 자금 예측
대상 영역자금 예측 · 외화 포지션 관리 (관련 기준서 없음)
SAP 표준 T-codeFF7A · FF7B · OB08 · FBL5N · FBL1N · FAGLL03
데이터 연동OData V2
화면 성격조회·점검 (결과 CSV 내려받기)
SAP 표준 기능을 그대로 이어받은 부분 — 통화별 잔고는 표준 현금 포지션(FF7A), 예정 입금·출금은 고객·공급업체 미결 항목(FBL5N · FBL1N)과 같은 원천, 환율은 환율 유지보수(OB08)의 값을 씁니다. 이 앱은 그 위에 12주 예측, 하한·상한 판정, 환전 제안을 더합니다.

실행 화면

실제로 돌아가는 화면 6종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있습니다. 숫자는 모두 같은 예시 데이터에서 나와 화면끼리 맞춰 보셔도 됩니다.

처음 열었을 때

조회조건 · 요약 · 통화 포지션이 한 화면에 뜹니다. 회계연도 2026, 기간 09 가 기본값이라 열자마자 9월 기준 12주 예측이 보입니다.

처음 연 화면 — 통화 포지션
처음 연 화면 — 통화 포지션 — 조회조건 · 요약 KPI · 통화 포지션 탭이 한 화면에 열린 모습입니다.

두 회사의 통화 포지션 9건이 회사 · 통화 순으로 나옵니다. 위쪽 요약은 하한 미달 통화 2개, 필요 환전 원화 합계 2,713.8 백만원, 매도 가능 통화 2개, 순 원화 소요 1,136.2 백만원, 확인 필요 통화 1개, 정합성 대사 차이 0 입니다. 조회 버튼은 입력 칸 오른쪽 끝에 있고 Enter 로도 조회됩니다.

다시 봐야 할 통화만 남기기

점검 결과를 "점검 필요"로 고르면 하한 미달이나 상한 초과가 예측된 통화만 남습니다.

점검 필요 통화만 보기
점검 필요 통화만 보기 — 점검 결과를 "점검 필요"로 고르면 하한 미달·상한 초과가 예측된 통화 3건만 남습니다.

9월에는 세 통화가 남습니다. 미국 달러와 중국 위안은 12주 안에 하한 미달 주가 있어 점검 코드 C01, 유로는 상한 초과가 8주 이어져 C03 입니다. 최저 예측 잔고와 그 주차, 하한 미달 주 수, 상한 초과 주 수, 최대 부족액이 같은 줄에 있어 어디가 왜 걸렸는지 바로 읽힙니다. 주황색 "점검 필요"는 다시 볼 대상이라는 표시이며 문제가 있다는 단정이 아닙니다.

한 통화를 12주 끝까지

통화 행을 누르면 그 통화의 판단 재료가 한 창에 모입니다.

통화 상세 — 12주 예측
통화 상세 — 12주 예측 — 통화 행을 누르면 하한·상한·예정 입출금과 12주 예측 표가 상세 창으로 열립니다.

미국 달러(회사 1000)는 기초 3,975,000, 예정 입금 2,020,600, 예정 출금 5,845,600 으로 기말 예측 잔고가 150,000 입니다. 아래 12주 표에서 1~7주차는 정상이고 8주차(2026-10-20 시작) 주 기말이 1,425,000 으로 운영 하한 1,500,000 에 75,000 모자라 "점검 필요"가 됩니다. 가장 큰 부족액 1,350,000 이 필요 매수액이고, 제안을 반영하면 최저 잔고가 1,500,000 으로 올라옵니다.

주 단위로 내려가기

주별 예측 탭은 입금과 출금을 구성별로 나눠 보여 줍니다. 입금은 채권 회수와 기타 입금, 출금은 채무 지급·차입 상환·기타 출금입니다.

주별 예측 — 기간·점검 코드로 거르기
주별 예측 — 기간·점검 코드로 거르기 — 주 시작일 기간과 점검 코드를 함께 걸어 하한 미달 주만 골라낸 모습입니다.

주 시작일 기간을 2026-10-13 부터 2026-11-10 까지, 점검 코드를 W01(운영 하한 미달)로 걸면 9월 기준 예측 중 하한 아래에 놓인 8행만 남습니다. 중국 위안과 미국 달러의 8~11주차입니다. 날짜 기간은 하나의 구간 조건으로 서비스에 전달되며, 차입 상환은 4·8·12주차에만 나타나는 것도 이 표에서 읽힙니다.

얼마를 사고 얼마를 팔까

판정 다음에 남는 질문은 "그래서 얼마를 어느 주에" 입니다.

환전 제안
환전 제안 — 부족한 통화의 매수와 남는 통화의 매도를 집행 주차·예측환율·스프레드와 함께 원화 금액으로 보여줍니다.

회사 1000 의 제안은 네 건입니다. 미국 달러 1,350,000 매수(8주차, 1,852,740,000원), 유로 770,000 매도(5주차, 1,161,737,500원), 일본 엔 45,000,000 매도(11주차, 415,845,000원), 중국 위안 4,500,000 매수(8주차, 861,075,000원)입니다. 예상 환전 비용은 원화 금액에 스프레드(bp)를 곱한 값이고, 제안 근거 열에 왜 그 주에 그 금액인지 문장으로 적혀 있습니다.

숫자를 스스로 맞춰 본다

대사 결과 탭은 서비스가 계산한 8종 대사식의 결과입니다.

대사 결과
대사 결과 — 주별 이월·요약 합계·제안 반영 후 하한 충족 등 8개 대사식의 검사 건수와 차이 건수입니다.

좌변 합계와 우변 합계가 나란히 있고 차이 건수가 하나라도 있으면 요약의 정합성 대사 차이에 그대로 올라갑니다. 예시 데이터에서는 8개 대사식 모두 차이 0 입니다. 7번 "제안 반영 후 하한 충족"은 같은 값을 맞추는 식이 아니라 좌변이 우변 이상인지 보는 식이라 두 합계가 다릅니다.

화면 뒤에서 일어나는 일

조회를 누르면 화면은 통화 포지션 · 주별 예측 · 환전 제안 · 대사 결과 네 블록을 각각 조회조건과 함께 부르고, 요약의 필요 환전 원화 합계와 하한 미달 통화 수는 서비스의 함수로 받습니다. 나머지 요약은 조회 결과에서 계산하며 계산식은 컨트롤러 한 곳에 있습니다. 서비스는 같은 조건으로 거른 결과에 정렬과 건수를 적용해 돌려주고, 화면은 열 머리 정렬을 서비스 정렬로 보냅니다.

판정 조건과 사용자 조치

대상코드판정 조건결과 상태사용자 조치
통화C04운영 하한·보유 상한이 없는 통화확인 필요통화 정책을 회사가 먼저 정합니다
통화C0212주 안에 하한 미달 주와 상한 초과 주가 함께 있음점검 필요입금·출금 시점을 점검합니다
통화C0112주 안에 하한 미달 주가 있음점검 필요환전 매수 제안을 확인합니다
통화C03상한 초과 주가 3주 이상점검 필요과잉 통화 매도를 검토합니다
통화C05예측환율이 없음확인 필요환율을 정한 뒤 다시 조회합니다
통화C06상한 초과 주가 있으나 3주 미만정상짧은 초과로 보고 조치하지 않습니다
통화C0012주 내내 하한과 상한 사이정상조치 없음
주W04 · W03 · W01 · W02 · W00정책 없음 · 잔고 0 미만 · 하한 미달 · 상한 초과 · 기준 안확인 필요 · 점검 필요 · 점검 필요 · 점검 필요 · 정상부족분은 매수, 초과분은 매도 검토

판정 우선순위는 표의 위에서 아래입니다. 처리 순서는 ① 주마다 주 기말을 이월 ② 하한·상한으로 미달분·초과분 산출 ③ 통화 요약(최저 잔고·주차·미달·초과 주 수) ④ 매수 제안 ⑤ 매수 반영 경로에서 매도 제안 ⑥ 원화 환산과 환전 비용 ⑦ 대사식 8종입니다.

조회조건

조회조건필수기본값$filter 변환
회계연도필수2026Gjahr eq '2026'
기간(월)필수09Monat eq '09'
회사선택전체Bukrs eq '1000'
통화선택전체Waers eq 'USD'
주 시작일 시작·종료선택비어 있음WeekStart ge … and WeekStart le … (제안 탭은 집행일)
점검 코드선택전체CheckCode eq 'C01' (C 는 통화, W 는 주)
점검 결과선택전체CheckStatus eq 'CHECK'

결과 컬럼

컬럼의미산출식
최저 예측 잔고 · 주차12주 주 기말 중 가장 낮은 값과 그 주차min(주 기말)
하한 미달 주 · 상한 초과 주하한 아래·상한 위에 놓인 주의 수주별 판정의 개수
최대 부족액하한에 가장 많이 못 미친 주의 부족분max(하한 − 주 기말)
필요 매수액 · 필요 원화매수 제안 외화 금액과 원화 환산최대 부족액 × 예측환율
매도 가능액 · 매도 원화매수 반영 후 상한을 넘고 이후 하한을 지키는 만큼경로에서 계산
예상 환전 비용스프레드로 드는 비용원화 금액 × 스프레드(bp) ÷ 10,000
제안 반영 후 최저 잔고제안을 집행 주차부터 반영한 12주 최저값경로의 최솟값

좁은 화면에서 달라지는 것

좁은 화면에서는 조회조건이 두 줄로 접히고 요약은 줄바꿈되어 이어집니다. 표는 고정 열(회사·통화)을 둔 채 가로로 넘기며, 상세 창은 화면 폭에 맞춰 줄어듭니다.

파일 구성

앱 폴더/
├─ index.html · Component.js · manifest.json
├─ controller/   BaseController · Main.controller
├─ view/         Main.view.xml · DetailDialog.fragment.xml
├─ model/        formatter · ErrorHandler
├─ css/ · i18n/
├─ odata/        서비스 정의 · 서비스 로직 · 데이터
└─ media/        소개 영상 · 대표 이미지

SAP 표준 기능 확장 포인트

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 12주 예측과 환전 제안 관점을 더해 확장합니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일표준으로 되는 것이 앱이 더하는 것
통화별 현재 잔고 보기현금 포지션(FF7A)이 정확히 보여 줍니다같은 잔고를 통화별 하한·상한과 견주어 미달·초과를 가립니다
앞으로의 입출금 흐름유동성 예측(FF7B)이 예정 흐름을 보여 줍니다12주를 주 단위로 이월해 부족이 시작되는 주와 최대 부족액을 찾습니다
외화 필요 금액 정하기표준 화면은 계획 값을 보여 줍니다부족 통화의 매수 금액과 원화 필요액, 환전 비용을 제안합니다
남는 통화 처리통화별 잔고를 확인할 수 있습니다매수 반영 경로에서 하한을 지키는 만큼만 매도를 제안합니다
환율 확인환율 유지보수(OB08)가 환율을 관리합니다예측환율이 없는 통화를 확인 필요로 올려 합계에서 빠지지 않게 합니다
숫자 맞춰 보기전표·잔액 대사는 표준 보고서로 합니다주 이월·요약 합계·제안 반영 후 하한 충족 등 8종을 서비스가 전수 계산합니다

T-code 별 연계 지점

T-code이름연계
FF7A현금 포지션통화별 현재 잔고가 이 앱의 12주 첫 주 기초 잔고와 같은 원천인지 맞춰 봅니다. 오가는 방법은 이 앱에서 통화를 확인한 뒤 FF7A 에서 같은 날짜 잔고를 열어 보는 것입니다.
FF7B유동성 예측주별 예정 입금·출금 합계가 표준 유동성 예측의 같은 주 값과 맞는지 대사하는 지점입니다. 법정·감사 대응용 보고는 표준에 남겨 둡니다.
OB08환율 유지보수통화별 예측환율의 출처와 유효일을 확인합니다. 환율을 고치면 이 앱의 원화 환산이 같은 값으로 다시 계산됩니다.
FBL5N고객 개별 항목 조회채권 회수 예정액의 원천 미결 항목을 열어 보는 자리입니다. 이 앱의 주별 채권 회수 합계에서 원천으로 내려갑니다.
FBL1N공급업체 개별 항목 조회채무 지급 예정액의 원천 미결 항목을 확인합니다. 지급 예정일이 바뀌면 이 앱의 주차 배치도 바뀝니다.
FAGLL03총계정원장 개별 항목 조회환전을 집행한 뒤 외화 계정의 전기 내역을 확인합니다. 집행과 전기는 표준 절차에 둡니다.

그래서 운영 전환 때 기존 표준 보고서를 없애지 않습니다. 이 앱은 표준 보고서가 주는 숫자를 12주 예측과 제안이라는 한 단계 위의 관점으로 읽는 자리이고, 표준 화면은 원천 확인과 법정 대응에 그대로 남습니다.

S/4HANA 분석 스택과의 자리

표준 CDS 분석 쿼리와 Fiori 분석 앱은 이미 집계된 잔고를 여러 축으로 보는 데 강합니다. 이 앱은 그 옆에서 "앞으로 12주"와 "얼마를 사고 팔까"라는 판정·제안 한 단계를 맡고, 같은 분석 스택이 제공하는 통화·회사 차원을 그대로 씁니다. Analysis for Office 로 같은 숫자를 내려받아 비교해 보는 용도로도 CSV 내려받기를 쓸 수 있습니다.

확장 포인트 — 운영에서 실제로 손대는 자리

자리손대는 내용비고
통화 정책통화별 운영 하한·보유 상한·스프레드를 회사가 정해 정책 표에 적습니다가장 먼저 합의할 항목
예정 흐름 원천채권·채무 미결 항목 외에 차입 상환·세금·급여 같은 약정 흐름을 어디서 가져올지 정합니다확장 필드 또는 별도 계획 표
예측환율환율 유형과 기준일을 정합니다OB08 값과 같은 유형이어야 대사가 맞습니다
판정 기준상한 초과 지속 기준(3주)을 회사 기준으로 바꿉니다판정과 제안이 함께 바뀝니다
권한회사코드·통화 단위 권한을 집계 뷰에 겁니다상세에만 걸면 합계로 새어 나옵니다

분석 지표 정의표

지표산식·판정 기준대응 기능원천 데이터비고
주 기말 예측 잔고주 기초 + 입금 − 출금주별 예측주별 예정 흐름다음 주 기초로 이월
하한 미달분max(0, 운영 하한 − 주 기말)주별 예측 · 상세주별 예정 흐름 · 통화 정책0 초과면 W01
상한 초과분max(0, 주 기말 − 보유 상한)주별 예측주별 예정 흐름 · 통화 정책0 초과면 W02
최저 예측 잔고12주 주 기말의 최솟값통화 포지션주별 예측C01 판정의 근거
필요 매수액하한 미달 주 중 가장 큰 부족액통화 포지션 · 환전 제안주별 예측원화 통화는 0
매도 가능액매수 반영 경로에서 상한을 넘고 이후 하한을 지키는 만큼통화 포지션 · 환전 제안주별 예측 · 예측환율환율 없으면 확인 필요
예상 환전 비용원화 금액 × 스프레드(bp) ÷ 10,000환전 제안환전 제안 · 통화 정책반올림
순 원화 소요필요 환전 원화 − 매도 원화요약통화 포지션화면 위쪽 요약

CDS 구성

예시 화면은 통화 포지션 18건과 주별 예측 216건을 서비스 데이터로 들고 있지만, 운영에서는 통화 × 주 집계를 CDS 로 내립니다. 아래는 그때 만드는 객체를 레이어 순서대로 적은 것입니다. 코드는 스케치이며, 표준 필드명은 릴리스에 따라 다르므로 주석에 확인할 자리를 적었습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZFXPF_CCYPOL회사·통화별 하한·상한·스프레드정책은 바뀝니다. 코드에 박으면 바뀔 때마다 개발자를 부릅니다
기준ZI_FxFcstRate월별 예측환율환율 유형·기준일 선택을 한 곳에 가둡니다
차원ZI_FxCcyPolicy통화 + 정책 + 텍스트큐브에서 join 을 한 번만 걸게 합니다
큐브(주)ZI_FxCashWeek통화 × 주 예정 입금·출금주 버킷을 DB 에서 만듭니다
큐브(요약)ZI_FxCcyPosition최저 잔고·미달/초과 주 수·판정집계를 화면이 아니라 DB 에서 합니다
쿼리ZC_FxCashQuery회사·통화·점검 코드 필터표준 분석 도구가 그대로 띄웁니다
권한ZI_FXCCYPOSITION (DCL)회사코드 권한집계를 읽는 자리에 걸어야 합니다
서비스ZUI_FxCashForecastService Definition · Binding화면이 부르는 서비스를 한 곳에 묶습니다

① 통화 정책 테이블

판정의 모든 기준이 이 표에서 나옵니다. 회사·통화마다 운영 하한과 보유 상한, 환전 스프레드를 두고 유효 시작일을 키에 넣어 정책을 바꿔도 지난 달 판정이 흔들리지 않게 합니다.

" ────────────────────────────────────────────────────────────────
"  ZFXPF_CCYPOL — 통화별 자금 정책 (투명 테이블)
"  역할 : 운영 하한 · 보유 상한 · 환전 스프레드
"  나눈 이유 : 정책은 자금 회의마다 바뀐다. 코드가 아니라 표에 둔다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '통화별 자금 정책'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zfxpf_ccypol {
  key mandt      : mandt not null;
  key bukrs      : bukrs not null;
  key waers      : waers not null;
  key valid_from : abap.dats not null;     " 정책 유효 시작일
  @Semantics.amount.currencyCode : 'zfxpf_ccypol.waers'
  min_bal        : abap.curr(23,2);        " 운영 하한
  @Semantics.amount.currencyCode : 'zfxpf_ccypol.waers'
  max_bal        : abap.curr(23,2);        " 보유 상한 (0 = 미설정)
  spread_bp      : abap.int4;              " 환전 스프레드(bp)
}

② 예측환율 뷰

통화별 월 예측환율을 한 곳에서 읽습니다. 환율이 없는 통화는 행이 없으므로 큐브에서 left outer join 으로 붙여 '환율 없음'을 확인 필요로 올릴 수 있게 합니다.

" ────────────────────────────────────────────────────────────────
"  ZI_FxFcstRate — 월별 예측환율 (TCURR)
"  역할 : 통화 · 기준월 → 원화 환율(1단위당)
"  나눈 이유 : 환율 유형·기준일 선택을 한 뷰에 가둔다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '예측환율'
@Analytics.dataCategory: #DIMENSION
define view entity ZI_FxFcstRate
  as select from tcurr
{
  key fcurr as Waers,
  key gdatu as ValidFrom,          // 역입력 일자 — 변환 확인 필요
      ukurs as Rate
}
where kurst = 'M'                    // 환율 유형은 회사가 정함 — 확인 필요
  and tcurr = 'KRW' 

③ 통화 차원 뷰

정책과 통화 텍스트를 한 행으로 묶습니다. 화면·쿼리·권한이 같은 통화 정의를 보게 합니다.

" ────────────────────────────────────────────────────────────────
"  ZI_FxCcyPolicy — 통화 차원 (정책 + 텍스트)
"  역할 : 회사 × 통화 한 행 = 하한 · 상한 · 스프레드
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '자금 예측 — 통화 차원'
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'Waers'
define view entity ZI_FxCcyPolicy
  as select from zfxpf_ccypol as p
  association [0..1] to I_Currency as _Cur on _Cur.Currency = p.waers
{
  key p.bukrs      as Bukrs,
  key p.waers      as Waers,
      @Semantics.amount.currencyCode: 'Waers'
      p.min_bal    as MinBal,
      @Semantics.amount.currencyCode: 'Waers'
      p.max_bal    as MaxBal,
      p.spread_bp  as SpreadBp,
      _Cur
}

④ 주별 예정 흐름 큐브

채권 미결 항목은 입금으로, 채무 미결 항목은 출금으로 만들어 같은 주 버킷에 합칩니다. 지급 예정일이 속한 주를 DB 에서 정하는 것이 이 큐브의 핵심입니다.

" ────────────────────────────────────────────────────────────────
"  ZI_FxCashWeek — 통화 × 주 예정 입금 · 출금
"  역할 : 미결 항목의 예정일을 12주 버킷으로 나눈다
"  나눈 이유 : 주 이월(누적)은 쿼리에서, 버킷은 DB 에서.
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '자금 예측 — 주별 예정 흐름'
@Analytics.dataCategory: #CUBE
define view entity ZI_FxCashWeek
  as select from ZI_FxOpenItem as o      // BSID 입금 · BSIK 출금 union 뷰 — 필드 확인 필요
{
  key o.Bukrs,
  key o.Waers,
  key dats_days_between($parameters.p_start, o.DueDate) / 7  as WeekNo,
      @Semantics.amount.currencyCode: 'Waers'
      sum( case o.Direction when 'I' then o.Amount else 0 end ) as InAmt,
      @Semantics.amount.currencyCode: 'Waers'
      sum( case o.Direction when 'O' then o.Amount else 0 end ) as OutAmt
}
group by o.Bukrs, o.Waers,
         dats_days_between($parameters.p_start, o.DueDate) / 7

⑤ 통화 요약 큐브

12주를 이월한 최저 잔고·미달 주 수·초과 주 수와 필요 매수액을 한 행으로 모읍니다. 화면의 통화 포지션 탭이 이 뷰를 읽습니다.

" ────────────────────────────────────────────────────────────────
"  ZI_FxCcyPosition — 통화 × 기간 요약과 판정
"  역할 : 최저 예측 잔고 · 미달/초과 주 수 · 필요 매수액 · 판정 코드
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '자금 예측 — 통화 요약'
@Analytics.dataCategory: #CUBE
define view entity ZI_FxCcyPosition
  as select from ZI_FxWeekBalance as w          // 주 누적 잔고 뷰 (window 함수)
  inner join ZI_FxCcyPolicy       as p on p.Bukrs = w.Bukrs and p.Waers = w.Waers
{
  key w.Bukrs,
  key w.Waers,
      min( w.CloseBal )                                   as MinProjBal,
      sum( case when w.CloseBal < p.MinBal then 1 else 0 end ) as ShortWeeks,
      sum( case when w.CloseBal > p.MaxBal then 1 else 0 end ) as OverWeeks,
      max( case when w.CloseBal < p.MinBal
                then p.MinBal - w.CloseBal else 0 end )   as MaxShort,
      case
        when p.MaxBal = 0 and p.MinBal = 0 then 'C04'
        when min( w.CloseBal ) < p.MinBal  then 'C01'
        else 'C00'
      end                                                 as CheckCode
}
group by w.Bukrs, w.Waers, p.MinBal, p.MaxBal

⑥ 분석 쿼리

화면과 표준 분석 도구가 같은 필터를 쓰게 합니다. 회사·통화·점검 코드는 필수에 가깝게 두어 응답 시간을 지킵니다.

" ────────────────────────────────────────────────────────────────
"  ZC_FxCashQuery — 분석 쿼리(Consumption)
"  역할 : 회사 · 통화 · 점검 코드 필터와 화면 열 배치
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '자금 예측 점검'
@Analytics.query: true
@UI.headerInfo: { typeName: '통화 포지션', typeNamePlural: '통화 포지션' }
define view entity ZC_FxCashQuery
  as projection on ZI_FxCcyPosition
{
  @Consumption.filter: { mandatory: true, selectionType: #SINGLE }
  key Bukrs,
  @Consumption.filter.selectionType: #RANGE
  key Waers,
  @AnalyticsDetails.query.axis: #ROWS
  MinProjBal,
  ShortWeeks,
  OverWeeks,
  MaxShort,
  CheckCode
}

⑦ 권한 정의(DCL)

집계를 읽는 자리에 권한을 겁니다. 상세에만 걸면 합계와 자기 몫의 차이로 다른 법인 잔고가 드러납니다.

" ────────────────────────────────────────────────────────────────
"  ZI_FXCCYPOSITION — 회사코드 권한
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '통화 요약 권한'
@MappingRole: true
define role ZI_FXCCYPOSITION {
  grant select on ZI_FxCcyPosition
    where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑧ 서비스 정의

화면이 부르는 서비스를 한 곳에 묶습니다. 화면은 서비스 주소만 알면 되고, 뷰 구조가 바뀌어도 서비스 계약은 유지됩니다.

" ────────────────────────────────────────────────────────────────
"  ZUI_FxCashForecast — Service Definition
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '자금 예측 점검 서비스'
define service ZUI_FxCashForecast {
  expose ZC_FxCashQuery  as CcyPos;
  expose ZI_FxCashWeek   as Week;
  expose ZI_FxCcyPolicy  as CcyPolicy;
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다.

해야 할 일무엇을 정하나정하지 않으면누가
통화 정책 확정통화별 운영 하한·보유 상한·스프레드판정이 담당자마다 달라집니다자금팀
예정 흐름 원천 확정채권·채무 미결 외에 약정 흐름(차입 상환·세금·급여)을 어디서 가져올지부족이 늦게 보이거나 아예 안 보입니다자금팀 · 회계팀
예측환율 유형·기준일OB08 의 어떤 유형을 몇 월 기준으로 쓸지FF7A 와 원화 환산이 어긋납니다자금팀
상한 초과 지속 기준3주를 회사 기준으로 바꿀지일시 초과까지 점검 대상이 됩니다자금팀
권한 설계회사코드·통화 단위 조회 범위다른 법인 잔고가 보입니다보안
대사 체계FF7A · FF7B 와 맞출 항목과 허용 차이숫자를 믿지 못합니다자금팀 · 감사
전송(TR) 순서정책 표 → 기준 뷰 → 큐브 → 쿼리 → DCL → 서비스활성화 오류로 이송이 되돌아옵니다개발
서비스 게시·주소 교체Service Binding 게시, 앱 manifest 의 서비스 주소 교체화면이 여전히 예시 데이터를 읽습니다개발 · 운영

운영 데이터로 갈 때

미결 항목이 수천만 건이면 주 버킷 집계를 화면이 아니라 DB 에서 해야 합니다. 기간 파라미터와 회사코드를 필수로 두고, 예정일과 회사코드에 인덱스를 확인하며, 통화 요약 큐브는 월 단위로 읽어 응답 시간을 3초 안에 두는 것을 기준으로 삼는 것이 안전합니다. 주별 예측은 통화 하나를 열었을 때만 내려받아 첫 화면의 부담을 줄입니다.

자주 묻는 질문

도입 검토에서 나올 질문을 네 묶음으로 정리했습니다.

숫자와 산식

예측 잔고는 어떻게 이월합니까?

주마다 주 기초에 입금을 더하고 출금을 빼서 주 기말을 구하고, 그 값이 다음 주 기초가 됩니다. 입금은 채권 회수와 기타 입금, 출금은 채무 지급·차입 상환·기타 출금으로 나눠 보여 줍니다. 12주 주 기말이 통화 요약의 기말 예측과 같은지는 대사식으로 다시 확인합니다.

필요 매수액은 어떻게 정해집니까?

12주 중 운영 하한에 가장 많이 못 미친 주의 부족액입니다. 처음 부족해지는 주가 시작되기 전에 그 금액을 한 번에 매수하는 것으로 가정합니다. 부족한 주가 없으면 매수는 제안하지 않습니다.

매도 가능액은 왜 매수 뒤에 계산합니까?

매수를 반영한 잔고 경로에서 상한을 넘는 주가 있어야 그만큼 팔 수 있기 때문입니다. 상한 초과분의 최댓값과 이후 모든 주가 하한 이상으로 남는 여유 중 작은 값만 제안하므로, 판 뒤에 다시 하한 아래로 내려가지 않습니다. 이 순서는 대사식 7번으로 다시 확인합니다.

원화 통화는 왜 환전 제안이 없습니까?

원화는 환전 대상이 아니라 기준 통화이므로 필요 매수액과 매도 가능액을 0 으로 둡니다. 원화 포지션도 하한·상한 판정은 받아 부족이나 초과가 있으면 점검 필요로 표시됩니다.

예상 환전 비용은 어떻게 계산합니까?

원화 금액에 통화별 스프레드(bp)를 곱해 10,000 으로 나눈 값을 반올림합니다. 예를 들어 1,852,740,000원에 8bp 를 적용하면 1,482,192원입니다. 실제 체결 비용은 은행과 시점에 따라 다르므로 계획 단계의 근사값으로 봐야 합니다.

대사식은 몇 가지를 검산합니까?

주별 이월, 주차 연결, 입금·출금 구성, 통화 요약 이월, 요약 = 주별 합계, 원화 환산 합계, 제안 반영 후 하한 충족, 매수 제안 = 필요 환전액까지 8종입니다. 예시 데이터에서 검사 710건 모두 차이 0 이었습니다.

화면과 조작

조회 버튼은 어디에 있습니까?

조회조건 영역 입력 칸의 맨 오른쪽입니다. 화면 아래 바에 두지 않았고, 입력 칸에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 처음 열면 한 번 자동으로 조회합니다.

주 시작일 기간은 어떻게 걸립니까?

시작일과 종료일을 모두 넣으면 하나의 구간 조건으로 서비스에 전달됩니다. 한쪽만 넣으면 이상·이하 조건 하나만 걸립니다. 환전 제안 탭에서는 같은 칸이 집행일에 적용됩니다.

점검 코드는 통화와 주 어느 쪽에 걸립니까?

C 로 시작하는 코드는 통화 포지션에, W 로 시작하는 코드는 주별 예측에 걸립니다. 한 선택 목록에 두 종류를 함께 두고 선택한 코드에 맞는 탭만 거릅니다. 다른 탭은 코드 조건 없이 그대로 보입니다.

통화 행을 누르면 무엇이 열립니까?

그 통화의 하한·상한·기초·예정 입출금·최저 예측 잔고·필요 매수와 매도·원화 환산이 위에, 12주 예측 표가 아래에 열립니다. 판정 문장과 판정 근거가 한 줄씩 붙습니다. 닫기 버튼이나 ESC 로 닫습니다.

CSV 는 어떤 데이터가 내려옵니까?

지금 보는 탭의 조회 결과가 UTF-8 CSV 로 내려옵니다. 조회조건을 바꾼 뒤 다시 조회하면 바뀐 결과가 내려옵니다. 금액은 표시 형식이 아닌 원 값으로 내려와 엑셀에서 바로 합산할 수 있습니다.

판정과 활용

판정이 "점검 필요"이면 문제가 있다는 뜻입니까?

아닙니다. 점검 필요는 하한에 못 미치거나 상한을 넘는 주처럼 다시 볼 대상을 가리는 표시일 뿐입니다. 이 화면은 점검 도구이며 실제 환전과 집행, 회계 판단의 최종 결정은 회사와 감사인이 합니다.

상한 초과가 짧은 통화는 왜 정상입니까?

상한을 넘는 주가 3주 미만이면 일시적인 쌓임으로 보고 정상 범위로 둡니다. 3주 이상 이어질 때만 과잉 통화로 점검합니다. 이 기준은 회사가 바꿀 수 있으며 바꾸면 판정과 제안이 함께 바뀝니다.

예측환율이 없으면 어떻게 됩니까?

원화 환산 금액을 비워 두고 해당 통화를 확인 필요로 표시합니다. 합계에 0 원으로 들어가는 일은 없습니다. 환율을 정한 뒤 다시 조회하면 환산되고, 이 통화의 환전 제안도 원화 금액이 채워집니다.

통화 정책이 없는 통화는 어떻게 다룹니까?

하한과 상한이 없으면 부족과 초과를 판정할 수 없으므로 점검 코드 C04 로 확인 필요에 두고 매수·매도도 제안하지 않습니다. 회사가 정책을 정하는 일이 먼저입니다.

두 회사의 같은 통화를 합쳐 볼 수 있습니까?

회사별 정책과 포지션이 다르므로 판정은 회사 × 통화 단위로 합니다. 위쪽 요약은 조회된 전체의 필요 환전 원화 합계와 순 원화 소요를 보여 줘 회사 간 합산 관점을 더합니다.

도입과 운영

어떤 사용자에게 효과가 큽니까?

외화 입금·출금이 있는 회사의 자금팀과 재무 담당자입니다. 매주 통화별 부족을 엑셀로 만들던 일을 화면 하나로 줄이고, 환전 회의 자료의 숫자를 서비스가 먼저 맞춰 둡니다.

도입 범위와 시기는 어떻게 잡습니까?

통화 정책과 예정 흐름 원천을 합의하는 일이 먼저이고 개발은 그다음입니다. 한 회사·두세 통화로 시작해 FF7A · FF7B 와 숫자를 맞춘 뒤 통화와 회사를 늘리는 방식이 안전합니다.

표준 T-code 를 대체합니까?

대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 12주 예측과 환전 제안 관점을 더해 확장합니다. 법정·감사 대응과 전기는 표준에 남습니다.

데이터 원천은 무엇입니까?

고객·공급업체 미결 항목의 예정일별 금액, 은행 계좌 잔고, 환율 테이블, 회사가 정하는 통화 정책입니다. 어떤 필드를 쓸지는 고객사 설정에 따라 확인이 필요합니다.

운영 연결에는 무엇이 필요합니까?

정책 표와 CDS 뷰를 만들어 이송하고 서비스 바인딩을 게시한 뒤, 앱 manifest 의 서비스 주소만 바꾸면 됩니다. 화면 코드는 그대로입니다. 개발보다 정책과 원천을 정하는 합의에 시간이 더 듭니다.

권한은 어떻게 막습니까?

회사코드 표준 권한 객체를 집계 뷰에 겁니다. 상세에만 걸면 합계와 자기 몫의 차이로 다른 법인 잔고가 드러나므로 집계 단계에 둡니다. 통화 단위 제한이 필요하면 같은 방식으로 추가합니다.

통화와 회사가 많아도 됩니까?

판정은 통화 × 주 단위로 DB 에서 집계하므로 통화 수보다 미결 항목 건수가 부담입니다. 회사와 기간을 필수 조건으로 두고 월 요약 뷰를 읽도록 하면 응답 시간을 지킬 수 있습니다.

계정 체계나 매핑이 바뀌면 어떻게 합니까?

통화 정책과 예정 흐름 매핑이 표로 분리되어 있어 표만 고치면 됩니다. 판정 로직은 그대로이고 바뀐 정책은 유효 시작일 이후 기간부터 적용됩니다.

화면의 숫자는 실제 회사 자료입니까?

아닙니다. 가상 회사 두 곳과 가상 은행으로 만든 예시 데이터이며 실제 고객사의 잔고·환율·금액을 쓰지 않았습니다.