차입 구조 다차원 분석 — 대주 · 통화 · 만기 구간으로 보는 차입 잔액과 계획 대비 차이 점검
축 전환 피벗 · 칸에서 원천 전표 라인까지의 드릴스루 · 기초 + 증감 + 환산 효과 = 기말 롤포워드 · 계획 대비 차이 요인 분해 · 변동 사유 · 해설 · 점검 알림 에이전트 — 소개 영상과 실제 화면 23종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
자금 회의의 질문은 늘 비슷합니다. 차입 잔액이 어느 대주와 어느 통화에 쌓여 있나, 상환이 어느 달에 몰리나, 계획과 얼마나 달라졌고 왜 달라졌나. 지금은 이 세 답이 표준 현금 포지션 화면 · 은행 명세 · 엑셀 차입 대장에 흩어져 있어 회의 전날 숫자를 맞추는 일이 먼저 생깁니다. 이 앱은 세 답을 한 화면에 모아, 기초 잔액에서 기말 잔액까지의 흐름과 계획 대비 차이를 같은 표 위에서 확인하게 합니다. 관련 기준서의 요구사항(IAS 7 현금흐름표(K-IFRS 제1007호)의 재무활동 현금흐름, IAS 21 환율변동효과(K-IFRS 제1021호), IFRS 7 금융상품: 공시(K-IFRS 제1107호)의 유동성 위험)을 점검하는 자리에서 보는 숫자를 한곳에 두는 것이 목적입니다.
핵심 포인트 일곱 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 축을 바꿔 보는 차입 구조 | 대주 · 상품 · 통화 · 금리 유형 · 만기 구간 · 거래 유형 등 11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다. | 대주별 · 통화별 · 만기별 표를 따로 만들고, 합계가 다르면 표를 맞추는 일부터 합니다. |
| ② 기초 + 증감 + 환산 효과 = 기말 | 약정 · 통화 단위로 잔액 롤포워드를 같은 표에서 봅니다. 롤포워드 차이 계산항목이 0이 아니면 바로 점검 대상으로 보입니다. | 기말 잔액과 증감 내역을 엑셀에서 따로 맞춥니다. |
| ③ 칸에서 원천 라인까지 | 표의 값을 누르면 그 칸을 이루는 전표 라인이 열리고 합계가 칸의 값과 같은지 바로 보입니다. | 표를 닫고 계정 원장 화면(FBL3N)을 다시 열어 조건을 손으로 맞춥니다. |
| ④ 계획 대비 차이를 요인으로 | 계획 순증감과 실적 순증감의 차이를 시점 · 금액 · 환율 · 계획 외 · 미실현으로 나눕니다. 요인 합과 총차이의 검산 줄이 항상 함께 나옵니다. | 차이가 났다는 사실까지만 알고 이유는 담당자 기억에 의존합니다. |
| ⑤ 변동 사유가 행에 남는다 | 사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음에 열어도 그 행에 따라옵니다. | 같은 질문을 회의마다 다시 하고 지난번 답은 메일에서 찾습니다. |
| ⑥ 단기 상환 · 외화 비중 점검 알림 | 감시 규칙 4개(단기 상환 비중 · 계획 대비 순증감 차이 · 외화 차입 비중 · 월 상환액 집중)에 걸린 항목이 대기함에 올라갑니다. 하루 한 번 실행합니다. | 한도를 넘어도 누군가 화면을 열기 전에는 알 수 없습니다. |
| ⑦ 해설 초안과 PowerPoint 보고서 | 숫자는 서비스가 계산하고 문장은 규칙으로 만든 초안입니다. 보고 있는 범위 그대로 PowerPoint 보고서를 내려받습니다. | 화면을 캡처하고 숫자를 옮겨 적어 보고 자료를 다시 만듭니다. |
사례로 보는 효과
샘플 데이터(2026년 1월~9월, 가상 약정 20건)에서 계획 순증감은 −37.36억원, 실적 순증감은 −16.47억원으로 +20.89억원의 차이가 났습니다. 요인으로 나누자 금액 차이 +13.50억원이 가장 컸고, 계획 미실현 +4.10억원, 계획 외 발생 +3.00억원, 환율 +0.29억원이 뒤를 이었습니다. 요인 합과 총차이의 검산은 0원이었습니다. 대주로 묶어 보면 한빛은행 +11.88억원, 미래은행 +11.15억원, 해든은행 −5.12억원이 눈에 띄어 어느 대주부터 점검할지 정할 수 있습니다. 같은 데이터로 대사식 11종을 전수 돌린 결과는 검사 1,383건에 차이 0건이었습니다(#sec-cds 의 검증 결과 표). 위 숫자는 모두 가상의 샘플 값이며 운영 데이터의 효과를 보장하지 않습니다.
도입하면 달라지는 것
- 회의 전날 표를 맞추는 시간이 줄고, “어느 숫자가 맞나” 대신 “어느 대주와 어느 만기를 점검할까”를 이야기하게 됩니다.
- 차이의 이유가 요인별로 나뉘어 있어 담당자가 바뀌어도 같은 방식으로 설명할 수 있습니다.
- 변동 사유가 행에 남아 다음 회의에서 같은 설명을 반복하지 않습니다.
- 단기 상환 비중이나 월 상환액이 한도에 닿으면 알림이 올라와 점검 시점을 놓치지 않습니다.
- 표준 화면과 숫자를 맞춰 보는 지점이 정해져 있어 대사 방법이 사람마다 달라지지 않습니다.
이런 회사에 맞습니다
은행 여러 곳과 시장성 차입(회사채 · 유동화)을 함께 쓰고, 원화 외에 달러 · 유로 · 엔 차입이 섞여 있어 대주 · 통화 · 만기 구간으로 잔액을 나눠 보아야 하는 회사입니다. 자금팀이 차입 대장을 엑셀로 관리하며 월 단위로 계획과 비교하고, 회계팀이 기말 잔액과 환산 효과를 따로 대사하는 조직이면 효과가 큽니다. 차입 약정이 몇 건 안 되고 통화가 하나뿐이라면 표준 화면만으로도 충분할 수 있습니다.
실행 화면
사용 방법
- 조회 조건 입력 — 회사(선택) · 기간(필수) · 비교 기준 · 금액 단위를 정합니다. 기간의 시작이 끝보다 늦으면 안내가 나옵니다.
- 조회 버튼과 Enter 키 — 조회 조건 영역 안 입력 필드의 가장 오른쪽에 있는 “조회”를 누르거나 입력 필드에서 Enter 를 누릅니다. 조회하면 조건 영역이 자동으로 접힙니다.
- 요약 확인 — 표 위 KPI 에서 실행 · 상환 · 순증감 · 계획 대비 차이 · 기말 잔액 · 12개월 내 상환 예정을 봅니다.
- 축 이동 — 차원 칩을 끌어다 놓거나 칩 메뉴(행으로 보내기 · 열로 보내기 · 축에서 빼기)로 옮깁니다.
- 칸 클릭 상세 — 표의 값을 누르면 원천 라인이 열립니다. 행을 선택해 변동 사유를 남길 수 있습니다.
- 내보내기 — “CSV”로 현재 표를, “보고서 PPTX”로 해설과 표를 내려받습니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 표준 컨트롤(트리 표 · 입력 · 다이얼로그), 차트는 SVG 직접 작성 | 외부 차트 라이브러리를 들이지 않아 반입 심사가 필요 없고 표와 차트가 같은 값에서 그려집니다. |
| 집계 · 판정 로직 | 브라우저의 피벗 계산 모듈 + 서비스 쪽 요인분해 · 해설 · 감시 규칙 계산 | 축을 바꿔도 서버를 다시 부르지 않고, 요인분해처럼 원천 라인이 필요한 계산은 서비스가 맡습니다. |
| OData 서비스 구성 | OData V2 서비스 한 개. 큐브 · 계획 · 원천 라인 · 사유 · 보기 · 감시 규칙을 엔티티셋으로 읽고 쓰며, 요인분해 · 해설 · 에이전트 실행은 함수로 호출 | 화면과 데이터 사이를 표준 프로토콜로 고정해 운영 원천으로 바꿀 때 화면을 고치지 않게 했습니다. |
| 테마 | sap_horizon | SAP 표준 화면과 같은 모양이라 사용자가 새로 익힐 것이 적습니다. |
아래 화면은 모두 샘플 데이터로 실제 브라우저에서 찍은 것입니다. 그림을 누르면 크게 볼 수 있습니다.
처음 열었을 때
조회 조건부터 표와 차트까지 한 화면에 세로로 쌓입니다. 조회 전에도 틀이 먼저 서 있어 무엇을 고르면 무엇이 채워지는지 보입니다.

조회 조건에는 기간이 기본으로 들어 있고 회사는 비어 있습니다(전체 회사). 값이 비어 있어도 틀이 서 있어서 처음 여는 사람도 구성을 먼저 파악합니다. 필수는 기간 하나입니다.

조회를 누르면 KPI 가 먼저 채워지고 표와 오른쪽 차트가 함께 나옵니다. 기본 측정값은 기말 잔액과 단기 상환 비중이며 단위는 백만원입니다. 조회하면 조건 영역은 접혀 표가 넓어집니다.

차원 칩을 끌어다 칸 사이에 놓으면 그 자리에서 표가 다시 묶입니다. 칩을 눌러 나오는 메뉴로도 옮길 수 있어 마우스가 불편해도 같은 일을 할 수 있습니다. 행 축은 3단계까지입니다.

다시 조회하지 않고 바로 표가 바뀝니다. 큐브는 이미 브라우저에 있고 축 이동은 그 행들을 다시 묶는 일이기 때문입니다. 합계는 어떤 배치에서도 같습니다.
경영 요약 — 보는 사람에 따라 달라지는 첫 줄
같은 큐브의 같은 숫자라도 먼저 보아야 할 지표는 자리마다 다릅니다. “보는 사람”을 바꾸면 KPI 와 기본 배치가 바뀝니다.

경영 관점은 차입 총잔액과 계획 대비 차이를 앞에 둡니다. 숫자 옆의 방향 색은 차입이 늘거나 단기 비중이 높아지는 쪽을 점검 우선(빨강)으로 칠합니다. 좋고 나쁨의 판정이 아니라 점검 순서입니다.

재무 관점은 회사별 · 만기 구간별 기말 잔액과 12개월 내 상환 예정 비중을 앞에 둡니다. 비중이 45% 이상이면 감시 규칙에도 걸립니다(임계값은 가정값).

자금 관점은 대주와 통화별 잔액, 실행 지연 · 상환 앞당김, 환산 효과를 앞에 둡니다. 외화 차입 비중을 확인할 때 이 관점이 편합니다.

회계 관점은 기초 + 증감 + 환산 효과 = 기말 롤포워드와 롤포워드 차이를 앞에 둡니다. 차이가 0이 아니면 해당 칸에서 바로 원천 라인으로 내려갑니다.
축 전환과 범위 — 리포트를 더 만드는 대신 축을 바꾼다
조건에서 범위를 좁히고 축으로 각도를 바꾸고 표와 차트의 너비까지 그 자리에서 나눕니다.

1단계 값이 하위 열을 묶어 보여 줍니다. 서버를 다시 부르지 않습니다. 열 조합이 너무 많아지면 표로 읽히지 않으므로 상한을 두고 안내합니다.

같은 차원 안에서는 또는, 차원끼리는 그리고로 묶입니다. 값 목록이 이름과 함께 열려 코드를 외우지 않아도 됩니다. 필터가 걸린 차원은 표시로 남습니다.

행을 접고 펴면 차트도 따라 바뀝니다. 표와 같은 값을 쓰므로 표와 차트의 숫자가 다를 수 없습니다.
칸에서 원천 문서까지 — 숫자를 의심할 때 내려가는 길
표의 숫자가 어디서 나왔는지 같은 화면에서 확인합니다.

표의 값을 누르면 열립니다. 원천 합계가 칸의 값과 같으면 “표의 값과 일치”, 다르면 차이 금액을 보여 줍니다. 계산항목 칸은 구성 값의 원천 합계로 맞춰 봅니다.

외화 금액에는 통화 코드를 함께 두고 환율은 소수 자릿수를 고정했습니다. 표준 화면으로 확인하려면 이 전표 번호를 계정 원장 화면(FBL3N)에서 찾으면 됩니다.

가장 상환이 몰린 달과 계획과 가장 어긋난 달이 한눈에 보입니다. 이 표의 합계도 큐브와 같은 값입니다.
계산항목 — 롤포워드를 표 안에서

계산항목은 토큰 식으로 정의되어 있고 원천값과 이름이 겹치지 않도록 원천값에는 표시를 붙였습니다. 롤포워드 차이가 0이 아니면 점검 대상입니다.
계획 대비 차이 — 같은 표가 점검 자료가 된다
비교 기준을 계획으로 두고 조회하면 같은 표가 차이 표로 바뀝니다.

금액 기준과 비율 기준을 넘는 칸만 색으로 강조해 점검할 칸을 줄여 줍니다. 기준값은 화면에서 바꿀 수 있습니다.

사유는 조회 범위와 행 경로를 키로 저장되어 다음에 같은 범위를 열면 따라옵니다. 단정적인 판단 대신 점검 메모를 남기는 용도입니다.

검산 줄은 계획 + 요인 합 − 실적이 0임을 매번 보여 줍니다. 환율 요인은 반올림 차이를 흡수해 합이 정확히 맞도록 했습니다.
해설과 보고서
숫자는 서비스가 계산하고 문장은 규칙으로 만든 초안입니다.

대주나 통화 같은 묶음 기준을 바꾸면 해설도 바뀝니다. 문장은 점검 필요 · 확인 필요 표현만 쓰며 원인을 단정하지 않습니다.

서버에 파일을 남기지 않고 내려받습니다. 내용은 해설과 같은 근거 숫자입니다.
에이전트 — 한도를 지켜 보는 점검

감시 규칙 4개를 하루 한 번 점검합니다. 같은 날 두 번째 실행은 안내와 함께 막힙니다. 걸린 항목은 읽음 처리할 수 있고 활동 기록에 실행 이력이 남습니다.
보기 저장과 복원

기본 보기로 정하면 다음에 그 모양으로 시작하고, 자동 조회를 켜 두면 열자마자 조회합니다. 기본 배치로 되돌리는 버튼이 함께 있습니다.
좁은 화면과 한계

좁은 화면에서는 표를 가로로 밀어 보고 차트는 표 아래로 내려갑니다. 표의 행이 250개를 넘으면 그리지 않고 행 축을 줄이거나 필터를 걸라는 안내를 보여 줍니다.
화면 뒤에서 일어나는 일
조회를 누르면 화면은 큐브(CubeSet)와 필요하면 계획(PlanSet)을 한 번 읽습니다. 이후 축 이동 · 측정값 · 값 필터는 브라우저의 피벗 계산이 처리합니다. 칸을 눌렀을 때만 원천 라인을, 차이 모드에서만 요인분해를 서비스에 다시 요청합니다. 쓰기는 변동 사유 · 보기 저장 · 에이전트 실행 세 곳뿐입니다.
점검 판단 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 큐브 합계와 원천 합계가 다름 | 확인 필요 | 원천 라인과 집계 기준을 다시 확인 |
| 롤포워드 차이가 0이 아님 | 확인 필요 | 약정 · 통화별 원천 라인에서 누락 확인 |
| 단기 상환 비중 45% 이상(가정값) | 점검 필요 | 만기 구간별 상환과 차환 계획 확인 |
| 계획 대비 순증감 차이 절대값 15억원 이상(가정값) | 점검 필요 | 요인 분해에서 구성 확인 후 사유 기재 |
| 외화 차입 비중 30% 이상(가정값) | 점검 필요 | 통화별 잔액과 환산 효과 확인 |
| 월 상환액 90억원 이상(가정값) | 점검 필요 | 상환 집중 월의 자금 계획과 비교 |
조회조건
| 필드 | 필수 | 기본값 | 필터 방식 |
|---|---|---|---|
| 회사 | 선택 | 전체 | Bukrs eq (여러 개면 또는) |
| 기간(부터) | 필수 | 202601 | Period ge |
| 기간(까지) | 필수 | 202609 | Period le |
| 비교 기준 | 선택 | 계획(P0)과 비교 | PlanSet Version eq |
| 금액 단위 | 선택 | 백만원 | 표시만 변경 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 실행 | 신규 · 연장 실행액 | Flow 가운데 증가 방향 합계 |
| 상환 | 정기 · 조기 · 일부 상환액 | Flow 가운데 감소 방향 합계의 부호 반대 |
| 순증감 | 기간 중 차입 변화 | 실행 − 상환 |
| 기초 · 기말 | 기간 처음 · 끝 잔액 | OpenBal · EndBal |
| 환산 효과 | 외화 잔액 환산 차이 | FxEff |
| 롤포워드 차이 | 검산 | 기초 + 순증감 + 환산 효과 − 기말 |
| 단기 상환 비중(%) | 12개월 내 상환 예정 비중 | Curr × 100 ÷ 기말 |
좁은 화면에서 달라지는 것
조건 영역은 접힌 상태로 시작하고, 표는 가로 스크롤로 보며, 차트는 표 아래에 놓입니다. 기능은 같습니다.
파일 구성
Component.js · manifest.json · index.html
controller/ 화면 흐름
view/ 메인 화면 + 대화상자 8개
model/ 피벗 · 차트 · 서식 · 보기 저장 · PPT 만들기
odata/ OData 서비스 선언 · 서비스 로직 · 계산 모듈 · 샘플 JSON
i18n/ · css/
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회와 점검 관점을 더해 확장합니다. 표준을 대체하지 않으며 표준에 남겨 둘 일(감사 · 공시 · 세무 신고 대응)은 그대로 표준에 둡니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | 표준으로 되는 부분 | 이 화면이 더하는 관점 |
|---|---|---|
| 차입 상환 예정액을 날짜별로 보기 | 현금 포지션(FF7A)에서 은행 · 계획 항목별로 확인 | 대주 · 통화 · 만기 구간으로 묶어 같은 기간에서 비교 |
| 단기 상환 비중과 유동성 흐름 | 유동성 예측(FF7B)에서 예측 흐름 확인 | 기말 잔액 대비 12개월 내 상환 비중을 한 칸에서 점검 |
| 실행 · 상환 입출금 라인 확인 | 은행 명세 사후 처리(FEBAN)에서 라인 처리 | 칸에서 원천 라인으로 내려가 전표와 대조 |
| 차입금 계정 전기 내역 확인 | 계정 원장 라인(FBL3N)에서 라인과 합계 확인 | 같은 라인을 롤포워드 안에서 합계 일치 여부와 함께 확인 |
| 계획 대비 차이의 구성 파악 | 계획과 실적 화면을 각각 조회 | 시점 · 금액 · 환율 · 계획 외 · 미실현 요인으로 나누고 검산 |
| 변동 사유 기록 | 전표 단위 적요 | 조회 범위와 행 경로에 묶은 점검 메모 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| FF7A | 현금 포지션 | 이 화면의 상환 예정(12개월 내) 금액과 같은 기간의 포지션 금액을 맞춰 봅니다. 차이가 나면 계획 항목 매핑을 확인합니다. 표준에 남겨 둘 일: 포지션 기준의 자금 운용 판단 |
| FF7B | 유동성 예측 | 단기 상환 비중이 높아진 달의 예측 흐름과 비교합니다. 이 화면 결과 → 해당 달 예측 확인 순서로 오갑니다. |
| FEBAN | 은행 명세 사후 처리 | 실행 · 상환 라인의 은행 명세 항목과 이 화면의 원천 라인을 건수 · 금액으로 대조합니다. 미결 항목의 처리는 표준에서 합니다. |
| FBL3N | 계정 원장 라인 | 칸의 원천 라인 전표 번호를 계정 원장 화면에서 찾아 합계를 맞춥니다. 법정 대사와 감사 대응은 표준에서 합니다. |
운영으로 전환할 때 기존 표준 리포트를 없앨 필요는 없습니다. 표준 리포트는 그대로 두고 이 화면은 같은 숫자를 다른 축으로 확인하는 데 씁니다.
S/4HANA 분석 스택과의 자리
표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 는 정해진 보고서를 안정적으로 배포하는 데 강합니다. 이 화면은 그 앞 단계, 즉 축을 바꿔 가며 숫자를 점검하고 요인으로 나누어 보는 자리에 둡니다. 어떤 Fiori 앱이 같은 범위를 이미 제공하는지는 사용 중인 릴리스에서 확인이 필요합니다.
분석 지표 정의
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 실행 · 상환 · 순증감 | 실행 − 상환 = 순증감 | 피벗 · KPI | 차입금 계정 전표 라인(BKPF · BSEG) | FBL3N 으로 확인 |
| 기초 · 기말 잔액 | 기초 + 순증감 + 환산 효과 = 기말 | 롤포워드 계산항목 | 약정별 잔액(운영 원천은 확인 필요) | IAS 7 · IAS 21 요구사항 점검 |
| 12개월 내 상환 예정 | M1 만기 구간 잔액 | 단기 상환 비중 | 약정 만기 일정(확인 필요) | FF7A 와 비교 |
| 계획 대비 차이 | 실적 − 계획 | 차이 모드 · 요인 분해 | 계획 버전 P0 | FF7B 와 비교 |
| 환산 효과 | 기말 환율 환산 − 기초 | 환율 요인 | 통화별 환율 | IAS 21 요구사항 점검 |
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 손대는 내용 | 비고 |
|---|---|---|
| 차입금 계정 범위 | 어떤 계정을 차입으로 볼지 매핑 | 회계팀이 정함 |
| 약정 마스터 | 약정 번호 · 대주 · 상품 · 금리 유형 · 만기 구간 보강 | 자금팀 관리 대장과 연결 |
| 환율 유형 · 환산 시점 | 기말 환율 유형과 환산 기준일 | 회계 정책에 맞춤 |
| 감시 규칙 임계값 | 4개 규칙의 한도 | 샘플은 가정값 |
| 권한 | 회사코드 · 대주 단위 조회 범위 | 집계 단계에 적용 |
| 확장 필드 | 약정 담보 · 약정 조건 등 업무 필드 | 확장 필드로 추가 |
CDS 구성 — 최대한 자세히
화면이 읽는 OData 서비스를 운영 원천으로 바꿀 때의 CDS 구성입니다. 아래는 구성 스케치이며, 확인하지 못한 표준 뷰와 필드는 “확인 필요”로 표시했습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | zdebt_loanmap | 약정 → 대주 · 상품 · 금리 유형 · 만기 구간 · 차입금 계정 매핑 | 분류 기준을 코드가 아닌 데이터로 두어 현업이 바꿀 수 있게 합니다. |
| 차원 | ZI_DebtLoan | 약정 차원 뷰 | 큐브와 쿼리가 같은 차원을 재사용합니다. |
| 문서 흐름 | ZI_DebtItem | 차입금 계정 전표 라인을 약정에 붙임 | 칸에서 내려가는 원천 라인이 이 뷰입니다. |
| 큐브(실적) | ZI_DebtCube | 기간 × 약정 × 통화 월 집계 | 화면의 CubeSet 에 해당합니다. |
| 큐브(계획) | ZI_DebtPlanCube | 계획 버전별 월 집계 | 계획 대비 비교의 기준입니다. |
| 쿼리 | ZC_DebtStructureQuery | 축 · 필터 · 측정값 배치 | 분석 앱에서 바로 쓰는 소비 뷰입니다. |
| 권한 | DCL | 회사코드 단위 조회 권한 | 집계 단계에서 걸어 합계로 새지 않게 합니다. |
| 서비스 | 서비스 정의 · 바인딩 | OData V2 게시 | 화면은 서비스 주소만 바꿉니다. |
① 약정 매핑 테이블
이 테이블에서 약정이 어느 대주 · 상품 · 금리 유형 · 만기 구간에 속하는지가 결정됩니다. 분류가 바뀔 때 코드를 고치지 않고 이 테이블만 고치므로, 운영에서 가장 먼저 합의해야 하는 자리입니다.
@EndUserText.label: '차입 약정 매핑 — 약정 · 대주 · 상품 · 금리 유형 · 만기 구간'
@AbapCatalog.enhancement.category: #NOT_EXTENSIBLE
@AbapCatalog.tableCategory: #TRANSPARENT
@AbapCatalog.deliveryClass: #C
@AbapCatalog.dataMaintenance: #ALLOWED
define table zdebt_loanmap {
key client : abap.clnt not null;
key bukrs : bukrs not null;
key loan_no : abap.char(10) not null; " 약정 번호
bank_id : abap.char(6); " 대주(은행 · 시장)
prod_type : abap.char(3); " FAC / WCL / TRF / BND / ABS / LSE
rate_type : abap.char(3); " FIX / CDL / SOF
mat_bucket : abap.char(2); " M1 ~ M4 (계약 만기 구간)
gl_account : saknr; " 차입금 계정
}
② 차원 뷰 — 약정
약정 번호를 키로 대주 · 상품 · 금리 유형 · 만기 구간을 차원으로 내보냅니다. 큐브와 쿼리가 모두 이 뷰를 거치므로 차원 이름이 한곳에서 정해집니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '차입 약정 차원'
@ObjectModel.usageType: { serviceQuality: #A, sizeCategory: #S, dataClass: #CUSTOMIZING }
@Analytics.dataCategory: #DIMENSION
define view entity ZI_DebtLoan
as select from zdebt_loanmap as m
association [0..1] to I_CompanyCode as _Company on _Company.CompanyCode = $projection.CompanyCode
{
@ObjectModel.text.element: ['LoanText']
key m.loan_no as Loan,
key m.bukrs as CompanyCode,
m.bank_id as Bank,
m.prod_type as Product,
m.rate_type as RateType,
m.mat_bucket as MaturityBucket,
m.gl_account as GLAccount,
_Company
}
③ 원천 라인 뷰 — 차입금 전표
표준 전표 라인 뷰에 약정 차원을 붙이고 증가 · 감소 방향을 한 번만 정합니다. 드릴스루가 합계를 맞추려면 방향 판정이 큐브와 같아야 하므로 이 뷰 하나에서만 부호를 정합니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '차입 원천 라인'
@ObjectModel.usageType: { serviceQuality: #C, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
define view entity ZI_DebtItem
as select from I_JournalEntryItem as j
inner join ZI_DebtLoan as l on l.CompanyCode = j.CompanyCode
and l.GLAccount = j.GLAccount
{
key j.CompanyCode,
key j.FiscalYear,
key j.AccountingDocument,
key j.LedgerGLLineItem,
j.PostingDate,
j.TransactionCurrency,
l.Loan,
l.Bank,
l.Product,
l.RateType,
l.MaturityBucket,
@Semantics.amount.currencyCode: 'TransactionCurrency'
j.AmountInTransactionCurrency,
@Semantics.amount.currencyCode: 'CompanyCodeCurrency'
j.AmountInCompanyCodeCurrency,
j.CompanyCodeCurrency,
// 차입 증가는 +, 상환은 − : 대변 잔액 계정이므로 부호를 한 번만 뒤집는다
case j.DebitCreditCode when 'H' then 'I' else 'E' end as Direction
}
④ 큐브 — 실적 월 집계
기간 · 약정 · 통화 단위로 순증감을 합산합니다. 통화별 합산을 유지하는 이유는 환산 효과를 따로 보기 위해서입니다. 화면의 큐브 합계 = 원천 라인 합계 대사가 이 뷰에서 성립합니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '차입 큐브 — 기간 × 약정 × 통화 월 집계'
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XL, dataClass: #MIXED }
define view entity ZI_DebtCube
as select from ZI_DebtItem
association [1..1] to ZI_DebtLoan as _Loan
on _Loan.Loan = $projection.Loan and _Loan.CompanyCode = $projection.CompanyCode
{
key CompanyCode,
key left(cast(PostingDate as abap.char(8)), 6) as Period,
key Loan,
key TransactionCurrency as Currency,
Bank,
Product,
RateType,
MaturityBucket,
@Semantics.amount.currencyCode: 'CompanyCodeCurrency'
@DefaultAggregation: #SUM
sum(case Direction when 'I' then AmountInCompanyCodeCurrency
else - AmountInCompanyCodeCurrency end) as NetFlow,
CompanyCodeCurrency,
@DefaultAggregation: #SUM
count( * ) as LineCount,
_Loan
}
group by CompanyCode, left(cast(PostingDate as abap.char(8)), 6),
Loan, TransactionCurrency, Bank, Product, RateType, MaturityBucket, CompanyCodeCurrency
⑤ 큐브 — 계획 월 집계
계획 버전별 월 계획 금액을 같은 차원으로 내보냅니다. 계획 원천은 운영 환경에 따라 다르므로 확인 필요입니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '차입 계획 큐브 — 계획 버전별 월 집계'
@Analytics.dataCategory: #CUBE
define view entity ZI_DebtPlanCube
as select from fclm_plan_item as p // 자금 계획 항목 — 운영 원천은 확인 필요
{
key p.bukrs as CompanyCode,
key p.plan_version as Version,
key left(cast(p.plan_date as abap.char(8)), 6) as Period,
key p.loan_no as Loan,
p.currency as Currency,
@Semantics.amount.currencyCode: 'Currency'
@DefaultAggregation: #SUM
p.plan_amount as PlanNetFlow
}
⑥ 쿼리 — 다차원 분석
행 · 열 · 자유 축과 필터를 정해 분석 앱에서 바로 열리게 합니다. 기간은 필수 구간 필터, 대주는 다중 선택으로 두어 화면의 조회 조건과 같은 모양을 맞췄습니다.
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '차입 구조 다차원 분석 쿼리'
@Analytics.query: true
@UI.headerInfo: { typeName: '차입', typeNamePlural: '차입 구조' }
define view entity ZC_DebtStructureQuery
as select from ZI_DebtCube
{
@AnalyticsDetails.query.axis: #ROWS
@Consumption.filter: { selectionType: #SINGLE, multipleSelections: true, mandatory: false }
Bank,
@AnalyticsDetails.query.axis: #ROWS
Product,
@AnalyticsDetails.query.axis: #COLUMNS
@Consumption.filter: { selectionType: #INTERVAL, mandatory: true }
Period,
@AnalyticsDetails.query.axis: #FREE
Currency,
@AnalyticsDetails.query.axis: #FREE
MaturityBucket,
@Semantics.amount.currencyCode: 'CompanyCodeCurrency'
@AnalyticsDetails.query.axis: #COLUMNS
NetFlow,
CompanyCodeCurrency
}
⑦ 권한 — 회사코드
집계 뷰에 권한을 걸지 않고 드릴스루에만 걸면 뺄셈으로 합계가 새어 나갑니다. 쿼리 단계에 걸어 보이는 범위가 합계에도 똑같이 적용되게 합니다.
@EndUserText.label: '차입 구조 조회 권한 — 회사코드 · 대주'
@MappingRole: true
define role ZC_DebtStructureQuery {
grant select on ZC_DebtStructureQuery
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}
⑧ 서비스 정의와 바인딩
쿼리와 약정 차원을 노출합니다. 바인딩을 OData V2 로 게시하면 화면의 manifest 서비스 주소만 바꾸면 됩니다.
@EndUserText.label: '차입 구조 분석 서비스'
define service ZUI_DebtStructure {
expose ZC_DebtStructureQuery as DebtStructure;
expose ZI_DebtLoan as Loan;
}
// Service Binding : OData V2 - UI 로 게시. 화면의 manifest 서비스 주소만 이 바인딩 주소로 바꾼다.
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 차입금 계정 범위 | 어떤 계정 전표를 차입으로 볼지 | 다른 부채 계정이 섞여 잔액이 어긋납니다 | 회계팀 |
| 약정 매핑 | 약정별 대주 · 상품 · 금리 유형 · 만기 구간 | 차원별 합계가 기존 대장과 달라 첫 회의에서 막힙니다 | 자금팀 |
| 환율 유형 · 환산 시점 | 기말 환율 유형과 기준일 | 환산 효과가 회계 정책과 어긋납니다 | 회계팀 |
| 부호 규칙 | 차입 증가와 상환의 방향 | 실행 · 상환이 뒤바뀌어 보입니다 | 회계팀 · 자금팀 |
| 계획 원천 확정 | 어떤 계획 버전과 항목을 기준으로 삼을지 | 계획 대비 차이의 기준이 사람마다 달라집니다 | 기획팀 · 자금팀 |
| 권한 설계 | 회사코드 · 대주 단위 조회 범위 | 남의 숫자가 보이거나 합계가 새어 나갑니다 | 보안 · 권한 담당 |
| 표준과의 대사 체계 | FF7A · FF7B · FEBAN · FBL3N 과 맞출 항목 | 대사 방법이 사람마다 달라집니다 | 자금팀 · 회계팀 |
| 서비스 활성화 | 서비스 바인딩 게시와 화면의 서비스 주소 교체 | 화면이 샘플 서비스를 계속 읽습니다 | Basis · 개발팀 |
| 전송 순서 | 테이블 → 뷰 → 쿼리 → 권한 → 서비스 | 활성화 순서가 어긋나 오류가 납니다 | 개발팀 |
| 성능 기준 | 응답 시간 목표와 조회 상한 | 운영 건수에서 느려져 쓰지 않게 됩니다 | 개발팀 · 현업 |
숫자를 믿을 수 있는가 — 검증 결과
| 번호 | 대사식 | 검사 건수 | 차이 건수 |
|---|---|---|---|
| ① | 큐브 합계 = 원천 라인 합계(기간 × 측정값) | 63 | 0 |
| ② | 기초 + 증감 + 환산 효과 = 기말(약정 × 기간) | 180 | 0 |
| ③ | 전기 기말 = 당기 기초(약정) | 160 | 0 |
| ④ | 통화별 롤포워드(기간 × 통화) | 36 | 0 |
| ⑤ | 만기 구간 합계 = 총 잔액(최종 기간) | 1 | 0 |
| ⑥ | 어떤 축 배치에서도 피벗 총합 = 큐브 총합 | 180 | 0 |
| ⑦ | 칸 금액 = 드릴스루 원천 라인 합계 | 452 | 0 |
| ⑧ | 실적 − 계획 = 차이, 요인 합 = 총차이, 워터폴 합 | 256 | 0 |
| ⑨ | 계산항목 = 토큰 식 결과 | 9 | 0 |
| ⑩ | 다중 선택 필터 후 합계 = 선택 값 큐브 합 | 16 | 0 |
| ⑪ | 큐브 대사 기록과 재계산 일치 | 30 | 0 |
의도적 예외는 0건입니다. 샘플 데이터 기준의 결과이며 운영 데이터에서는 다시 확인해야 합니다.
운영 데이터로 갈 때
차입 전표는 수가 많지 않아 큐브는 월 단위 집계로 충분하지만, 전표가 수천만 건인 환경에서는 집계를 데이터베이스 안에서 끝내고 기간을 필수 조건으로 받아야 합니다. 화면은 큐브를 한 번 읽어 브라우저에서 계산하므로 큐브 행 수에 상한(화면에서 표 행 250개)을 두었고, 원천 라인은 칸을 눌렀을 때만 읽습니다. 인덱스는 회사코드 · 전기일 · 약정 순으로 두고, 응답 시간 목표는 조회 3초 · 칸 상세 2초 안팎으로 잡는 것을 권합니다(가정값).
자주 묻는 질문 — 최대한 자세히
도입 전에 가장 자주 나오는 질문을 네 묶음으로 정리했습니다.
숫자와 산식
기말 잔액은 어떻게 계산되나요?
기초 잔액 + 신규·연장 실행 − 상환 + 환산 효과 = 기말 잔액입니다. 약정 · 통화 · 기간 단위로 계산하며 롤포워드 차이 계산항목이 0이 아니면 점검 대상으로 표시합니다. 샘플 데이터에서는 180개 약정·기간 조합 모두 차이가 0이었습니다.
단기 상환 비중은 무엇을 뜻하나요?
기말 잔액 가운데 12개월 안에 상환할 예정인 금액의 비율입니다. 샘플의 최종 기간 기준 12개월 내 상환 예정은 338.1억원(52.6%)이며, 유동성 분류와 차환 계획을 점검하는 출발점으로 씁니다. 판정이 아니라 점검 순서를 정하는 지표입니다.
외화 차입은 어떻게 원화로 보나요?
전표의 외화 금액에 인식 환율을 곱한 원화 금액을 쓰고, 기말 환율 환산과의 차이를 환산 효과로 따로 둡니다. 환율 유형과 환산 시점은 회계 정책에 맞춰 정해야 하며 샘플은 가정값입니다.
환산 효과와 환율 요인은 같은 것인가요?
비슷하지만 다릅니다. 환산 효과는 잔액 롤포워드의 한 항목이고, 환율 요인은 계획 대비 차이를 나눌 때 환율이 만든 몫입니다. 요인 분해에서 환율 요인은 반올림 차이를 흡수해 요인 합이 총차이와 정확히 맞도록 합니다.
요인 합이 총차이와 맞는지 어떻게 아나요?
차이 워터폴 아래 검산 줄이 계획 + 요인 합 − 실적을 매번 계산해 보여 줍니다. 샘플 전체 범위에서 이 값은 0원이었습니다. 0이 아니면 확인 필요로 표시됩니다.
계획과 실적의 어긋남을 왜 오류로 세지 않나요?
계획과의 차이는 분석 대상이고 원천 대사의 예외가 아니기 때문입니다. 대사 예외는 큐브와 원천이 맞지 않는 경우를 뜻하며 샘플에서는 0건이었습니다.
화면과 조작
축을 바꿀 때 서버를 다시 부르나요?
아니요. 조회할 때 큐브를 한 번 읽고 축 이동 · 측정값 변경 · 값 필터는 브라우저에서 계산합니다. 칸을 눌러 원천 라인을 볼 때와 차이 요인을 볼 때만 서비스를 다시 부릅니다.
행 축과 열 축은 몇 단계까지 가능한가요?
행 축은 3단계까지 둘 수 있고 열 축은 2단계까지 쌓습니다. 행이 250개를 넘거나 열이 너무 많으면 그리지 않고 줄이라는 안내를 보여 줍니다.
Enter 키로 조회할 수 있나요?
네. 조회 조건 입력 필드에서 Enter 를 누르면 조회 버튼과 같은 조회가 실행됩니다. 조회 버튼은 조건 영역의 입력 필드 오른쪽 끝에 있습니다.
보기를 저장하면 무엇이 저장되나요?
행 · 열 축 배치, 값 필터, 측정값, 금액 단위, 행 수 설정이 이름과 함께 저장됩니다. 기본 보기로 정하면 다음에 그 모양으로 시작하고 자동 조회를 켜면 열자마자 조회합니다.
CSV 로 내려받을 수 있나요?
네. 현재 표를 UTF-8 CSV 로 내려받습니다. 파일명은 한글 기능명만 쓰며 금액은 화면의 금액 단위를 따릅니다.
좁은 화면에서도 쓸 수 있나요?
네. 조건 영역이 접힌 채 시작하고 표는 가로로 밀어 보며 차트는 표 아래로 내려갑니다. 기능은 넓은 화면과 같습니다.
분석 기능
요인 분해의 요인은 무엇인가요?
실행·연장 시점 차이, 상환 시점 차이, 금액 차이, 환율, 계획 외 발생, 계획 미실현입니다. 원천 라인을 계획 라인과 맞춰 나누며 맞춰지지 않는 라인은 계획 외 또는 미실현으로 따로 셉니다.
해설은 사람이 쓴 것인가요, 모델이 쓴 것인가요?
기본은 규칙으로 만든 초안입니다. 금액과 비율은 서비스가 계산한 값이고 문장만 규칙으로 조립합니다. 모델 연결은 설정 하나로만 켤 수 있고 기본은 꺼져 있습니다. 초안은 점검 필요 항목을 찾는 용도입니다.
에이전트는 무엇을 하나요?
감시 규칙 4개(단기 상환 비중 · 계획 대비 순증감 차이 · 외화 차입 비중 · 월 상환액 집중)를 하루 한 번 점검하고 걸린 항목을 대기함에 올립니다. 같은 날 두 번째 실행은 막힙니다.
감시 규칙의 임계값은 어떻게 정해졌나요?
샘플 데이터에 맞춘 가정값입니다. 운영에서는 회사의 차입 한도와 약정 조건에 맞춰 규칙 설정에서 바꿔야 합니다.
변동 사유는 어디에 저장되나요?
조회 범위와 행 경로를 키로 서비스에 저장됩니다. 같은 범위를 다시 열면 그 행에 사유가 따라오며 구분(시점 · 금액 · 환율 · 계획 외 · 일회성 · 기타)도 함께 남습니다.
PowerPoint 보고서는 서버에 저장되나요?
아니요. 보고 있는 범위의 표와 차트로 브라우저에서 파일을 만들어 바로 내려받습니다. 서버에는 파일이 남지 않습니다.
도입과 운영
이 화면이 회계 판단을 대신하나요?
아닙니다. 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 화면은 분류 · 집계 · 대사를 돕고 걸린 항목은 점검 필요 또는 확인 필요로만 표시합니다. 세무 신고가 필요한 항목은 회사와 세무 대리인이 판단합니다.
표준 T-code 와는 어떤 관계인가요?
표준 실행은 SAP 표준 T-code 가 담당합니다. 이 화면은 현금 포지션(FF7A) · 유동성 예측(FF7B) · 은행 명세 사후 처리(FEBAN) · 계정 원장 라인(FBL3N)과 숫자를 맞춰 보는 지점을 두고 조회와 점검 관점을 더합니다. 기존 표준 리포트를 없앨 필요는 없습니다.
언제부터 어느 범위에 적용되나요?
샘플은 2026년 1월~9월의 가상 약정 20건입니다. 운영 적용 시기와 범위는 확인된 사실이 없으므로 고객사 환경 확인 후 정해야 합니다.
운영 데이터와 연결하는 데 얼마나 걸리나요?
소요는 확인 필요입니다. 기술 작업은 매핑 테이블 · 뷰 · 서비스 바인딩이지만 실제로는 차입금 계정 범위, 약정 매핑, 환율 유형, 권한을 정하는 합의가 더 오래 걸립니다.
권한은 어떻게 걸리나요?
회사코드 단위 권한을 쿼리 단계에 걸어 보이는 범위가 합계에도 똑같이 적용되게 합니다. 드릴스루에만 걸면 합계에서 뺄셈으로 새어 나갈 수 있으므로 권장하지 않습니다.
전표가 많아지면 느려지지 않나요?
큐브를 월 단위로 집계해 읽고 원천 라인은 칸을 눌렀을 때만 읽으므로 전표 수의 영향이 작습니다. 전표가 수천만 건이면 집계를 데이터베이스 안에서 끝내고 기간을 필수 조건으로 받아야 합니다.
약정이나 계정 체계가 바뀌면 어떻게 하나요?
약정 매핑 테이블의 행을 고치면 됩니다. 분류가 코드에 박혀 있지 않아 뷰를 다시 이송할 필요가 없습니다. 바뀐 뒤에는 큐브와 원천의 대사를 다시 돌려야 합니다.
샘플 데이터에는 실제 거래처가 들어 있나요?
아니요. 대주 · 약정 · 금액은 모두 가상입니다. 실제 고객사 데이터나 계좌번호는 쓰지 않았습니다.