SAP 직접법 현금흐름 다차원 분석 — 활동 · 사업부 · 통화로 돌려 보고 간접법과의 차이를 여섯 요인으로 쪼개는 대사 화면
큐브 집계 · 끌어다 놓는 축 · 칸에서 은행 거래 라인까지 드릴스루 · 간접법 대비 차이와 여섯 요인 분해 · 변동 사유 · 숫자를 모델에 맡기지 않는 AI 해설 · 하루 한 번 도는 AI 에이전트 — 소개 영상과 실제 화면 32종으로 보여 드립니다.
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
결산 때마다 현금흐름표 담당자는 같은 질문을 받습니다. 직접법으로 모은 현금 숫자와 손익에서 출발한 간접법 숫자가 왜 다른가, 그 차이가 시기 문제인가 금액 문제인가 분류 문제인가, 그래서 누가 무엇을 고쳐야 하는가. 지금은 이 세 답이 은행 거래내역 엑셀, 간접법 조정표, 표준 현금 포지션 화면에 흩어져 있어, 숫자를 맞추는 일이 회의 시간의 대부분을 차지합니다.
표준 화면은 은행 계정별 잔액과 전표 라인을 정확하게 보여 줍니다. 이 화면은 그 위에서 “활동별 순현금흐름이 간접법과 얼마나 다른가”, “그 차이 가운데 인식 시기 때문에 생긴 몫이 얼마인가”, “환율 환산 때문에 생긴 몫이 얼마인가”를 한 표에서 답하도록 이어 붙입니다. 표준을 대체하지 않고, 표준이 끊기는 자리를 잇습니다.
핵심 포인트 일곱 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 축을 바꿔도 갈라지지 않는 피벗 | 활동 · 자금 항목 · 사업부 · 통화 · 거래처 그룹을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모든 축이 한 번 읽은 같은 큐브에서 나와 합계가 어긋날 자리가 없고, 축을 바꿔도 서버를 다시 부르지 않습니다. | 사업부별 · 항목별 · 통화별 시트를 따로 만들고, 합계가 다르면 시트를 맞추는 시간을 씁니다. |
| ② 칸에서 원천 라인까지 | 숫자를 누르면 그 칸을 이루는 원천 은행 거래 라인이 열리고, 라인 합계가 칸의 값과 같은지 바로 표시됩니다. | 리포트를 닫고 라인 아이템 화면을 다시 열어 조건을 손으로 맞춥니다. |
| ③ 간접법 대비 차이가 같은 표 안에서 | 비교 기준을 간접법으로 두면 직접법 · 간접법 · 차이 · 차이율이 나란히 붙고, 금액과 비율 기준을 모두 넘는 칸만 색이 칩니다. | 직접법 표와 간접법 표를 엑셀에서 붙여 차이 열을 직접 만듭니다. |
| ④ 차이를 여섯 요인으로 | 수금 시차 · 지급 시차 · 금액 · 환율 · 직접법에만 있는 흐름 · 간접법에만 있는 흐름으로 가르고 합이 총차이와 같은지 검산 줄로 보여 줍니다. | 차이 총액만 보고 원인은 담당자에게 메일로 되묻습니다. |
| ⑤ 변동 사유가 행에 남는다 | 차이가 난 행에 사유를 적어 두면 조회 범위와 함께 저장되어 다음 결산에서도 같은 행에 보입니다. | 같은 질문을 결산마다 다시 하고, 지난 결산의 답을 메일에서 찾습니다. |
| ⑥ 숫자는 서비스가, 문장은 초안으로 | 금액과 비율은 서비스가 큐브에서 계산해 근거로 내고, 해설은 그 숫자를 읽어 쓴 초안입니다. 결과는 파워포인트 검토 보고서로 내려받습니다. | 숫자와 문장이 따로 놀아 보고 직전에 다시 맞춥니다. |
| ⑦ 사람이 자리에 없어도 도는 점검 | 수금 시차 · 환율 환산 · 순흐름 차이 · 지출 비율 네 가지 규칙을 서비스가 하루 한 번 판정해 대기함에 올리고, 누가 언제 돌렸는지 활동 기록에 남깁니다. | 결산 마감 직전에야 차이를 발견합니다. |
사례로 보는 효과
검증용 샘플 데이터(가상 회사 2개 · 가상 사업부 4개 · 통화 5종 · 2026년 1월~9월)에서 회사 전체를 조회하면 유입 600,619.1백만원, 유출 601,102.1백만원, 직접법 순현금흐름은 −483.0백만원입니다. 같은 범위의 간접법 값은 3,118.8백만원이라 직접법이 간접법보다 3,601.8백만원 낮게 나옵니다. 총액만 보면 “어느 쪽이 틀렸나”를 묻게 됩니다.
이 앱은 같은 차이를 여섯 요인으로 가릅니다: 수금 시차 +411.4, 지급 시차 −132.6, 금액 +860.5, 환율 +19.3, 직접법에만 있는 흐름 −6,912.0, 간접법에만 있는 흐름 +2,151.6(단위 백만원)이고 검산 줄은 0 입니다. 가장 큰 몫은 시기나 환율이 아니라 직접법 라인에는 있으나 간접법 조정에는 잡히지 않은 흐름이었습니다. 이것은 원인의 단정이 아니라 점검 대상의 좁힘입니다. 이자 · 배당 · 세금의 활동 구분이나 조정 항목 누락 여부를 확인하는 일은 사람의 몫입니다.
활동별로 내려가면 영업활동은 직접법 17,701.1, 간접법 12,251.8로 5,449.3 차이(+44.5%)이고, 이 차이도 수금 시차 +220.0, 지급 시차 −47.6, 금액 +831.6, 환율 +47.4, 직접법에만 있는 흐름 +2,505.7, 간접법에만 있는 흐름 +1,892.3으로 갈라 맞습니다.
도입하면 달라지는 것
- 결산 현금흐름 점검 — 활동별 · 사업부별 · 통화별 표가 한 화면에서 나와 시트 취합과 캡처가 줄어듭니다.
- 회의의 주제 — “어느 숫자가 맞나” 대신 “직접법에만 있는 흐름을 어떻게 분류할 것인가”를 이야기합니다.
- 다음 결산으로 이어지는 기록 — 변동 사유와 저장한 보기가 남아 같은 설명을 반복하지 않습니다.
- 놓치는 날이 없는 점검 — 규칙에 걸린 숫자가 담당자 대기함에 올라옵니다.
이런 회사에 맞습니다
은행 거래내역으로 현금흐름을 직접 모으면서 결산에서는 손익 기반 간접법 숫자와 맞춰 보는 회사에 맞습니다. 사업부가 여럿이거나 수출입 대금으로 외화 비중이 있어 환율 환산이 차이의 한 요인으로 끼는 회사라면 효과가 더 큽니다. 반대로 거래가 몇 건뿐이라 엑셀 한 장으로 끝나는 회사에는 과합니다. 이 화면은 법정 현금흐름표를 만들지 않으며, 점검과 대사를 돕는 도구입니다.
실행 화면
실제 브라우저에서 찍은 화면 32종입니다. 순서는 처음 열었을 때 → 경영 요약 → 축 전환과 범위 → 칸에서 원천 거래까지 → 계산 항목 → 간접법 대비 차이 → AI 분석과 보고서 → AI 에이전트 → 보기 저장과 복원 → 좁은 화면입니다. 화면을 누르면 크게 볼 수 있습니다.
사용 방법
- 조회 조건 입력 — 필수는 기간 시작 · 기간 끝입니다. 회사는 비우면 전체, 비교 기준은 간접법 또는 없음을 고릅니다. 시작이 끝보다 늦으면 조회하지 않고 안내합니다.
- 조회 — 조건 영역 오른쪽 끝의 조회 버튼을 누릅니다. 조건 입력 칸에서 Enter 를 눌러도 같습니다. 조회하면 조건 영역이 접히고 한 줄 요약으로 바뀝니다.
- 요약 확인 — “보는 사람”(경영 · 재무 · 자금 · 회계)을 고르면 문장과 핵심 지표 카드의 초점이 달라집니다.
- 탭 · 축 이동 — 차원 보관함의 칩을 행 축 · 열 축으로 끌어다 놓거나 눌러 보냅니다. ✕ 로 뺍니다. 이미 읽은 큐브를 다시 묶으므로 서버를 부르지 않습니다.
- 행 · 셀 클릭으로 상세 — 행을 누르면 오른쪽에 간접법에서 직접법까지의 워터폴과 요인 표가 나오고, 값 칸을 누르면 그 칸을 이루는 원천 라인이 열립니다.
- 내보내기 — 표 오른쪽 위 CSV 로 현재 표를, 원천 보기 창의 CSV 로 원천 라인을 내려받습니다. 해설은 파워포인트 보고서로 내려받고, 짜 둔 축은 이름을 붙여 저장합니다.
무엇으로 만들었나
화면은 OpenUI5 표준 컨트롤로만 짰고, 데이터는 OData V2 서비스를 모델로 읽습니다. 아래 표는 자리마다 무엇을 쓰고 왜 그렇게 두었는지를 정리한 것입니다.
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 | OpenUI5 표준 컨트롤 — 트리 테이블(행 축 계층), 끌어다 놓기 칩, 다중 선택 창, 직접 그린 SVG 차트와 워터폴 | 외부 차트 라이브러리를 들이지 않아 운영 환경에 올릴 때 걸리는 것이 없습니다. |
| 큐브 다시 묶기 | 조회 때 직접법 큐브와 간접법 큐브를 한 번 읽고, 축 전환 · 필터 · 차이 모드는 브라우저가 그 자료로 다시 묶는 모델 파일 | 축을 바꿀 때마다 서버를 부르면 합계가 어긋날 수 있고 느려집니다. |
| 집계 · 판정 로직 | 서비스 쪽 계산 파일 — 요인 분해, 해설 근거, 에이전트 규칙 판정, 하루 한 번 제한 | 금액과 판정을 화면이 아니라 서비스가 갖게 해 숫자가 한 곳에서만 나옵니다. |
| 데이터 서비스 | OData V2 서비스 한 개 — 엔티티셋 14개(직접법 큐브 · 간접법 큐브 · 차원 · 측정값 · 계산 항목 · 기간 · 원천 라인 · 대사 · 변동 사유 · 보기 · 에이전트 3종)와 펑션 3개 | 운영 데이터로 바꿀 때 서비스 주소만 바꾸면 되도록 화면과 서비스를 갈랐습니다. |
| 테마 | sap_horizon | SAP 표준 화면과 같은 질감이라 현업이 낯설어하지 않습니다. |
앱 정보
| 항목 | 내용 |
|---|---|
| 솔루션 | 자금(Treasury) |
| 업무 영역 | 현금흐름표 · 직접법과 간접법 대사 |
| 관련 기준서 · 대상 영역 | 현금흐름표 기준서(직접법 · 간접법 표시) · 활동별 현금흐름 |
| SAP 표준 T-code | FF7A · FF7B · FF_5 · FEBAN · FBL3N |
| 화면 성격 | 다차원 분석 리포트(피벗 · 요인 분해 · 해설 · 에이전트) |
| 데이터 연동 | OData V2 |
| 테마 | sap_horizon |
처음 열었을 때
조회 조건부터 피벗까지가 한 화면에 세로로 쌓입니다. 조건 영역은 접을 수 있어서 축을 짜는 동안에는 펼쳐 두고, 숫자를 볼 때는 접어 둡니다.




경영 요약 — 보는 사람에 따라 달라지는 첫 줄
같은 숫자도 읽는 사람이 다르면 보는 순서가 다릅니다. “보는 사람” 네 가지(경영 · 재무 · 자금 · 회계)가 처음 보이는 측정값과 축 배치, 안내 문장을 바꿉니다.




축 전환과 범위 — 보고 싶은 만큼만
열 축은 두 단계까지, 행 축은 세 단계까지입니다. 값 필터는 차원마다 여러 값을 고를 수 있고, 고른 범위는 표 · 차트 · 요인 분해에 함께 적용됩니다.




칸에서 원천 거래까지
숫자를 의심할 때 가장 빠른 방법은 그 숫자를 만든 거래를 보는 것입니다. 값 칸을 누르면 행 경로와 열 조합이 그대로 조회 조건이 되어 원천 라인이 열립니다.



계산 항목 — 자주 쓰는 합과 비율을 식으로
활동별 흐름의 합이나 지출 비율처럼 자주 쓰는 값은 식으로 정의해 측정값 목록에 둡니다.


간접법 대비 차이 — 같은 표가 대사 자료가 된다
비교 기준을 간접법으로 두면 같은 표가 직접법 · 간접법 · 차이 · 차이율을 보여 주고, 행을 누르면 차이를 여섯 요인으로 가른 워터폴이 나옵니다.




AI 분석과 보고서 — 숫자는 서비스, 문장은 초안
금액과 비율은 서비스가 계산해 근거로 내고, 해설은 그 숫자를 읽어 쓴 초안입니다. 결과는 파워포인트 보고서로 내려받습니다.



AI 에이전트 — 규칙이 곧 받을 사람
사람이 화면을 열지 않아도 감시 규칙을 서비스가 하루 한 번 판정해 대기함에 올립니다.



보기 저장과 복원
짜 둔 축과 필터는 이름을 붙여 저장하고, 기본 보기로 지정하면 화면을 열 때 바로 조회됩니다.



좁은 화면과 한계
좁은 화면에서는 차트가 표 아래로 내려옵니다. 열이 너무 많아지는 조합은 상한 안내로 막습니다.


화면 뒤에서 일어나는 일
조회를 누르면 서비스는 조건에 맞는 직접법 큐브와 간접법 큐브를 한 번 돌려주고, 화면은 그 두 자료를 메모리에 둔 채 축 전환 · 필터 · 차이 모드 · 계산 항목을 모두 브라우저에서 다시 묶습니다. 요인 분해, 해설, 에이전트 판정처럼 판단이 들어가는 계산만 서비스 펑션이 맡습니다. 그래서 같은 범위를 어느 축으로 돌려 봐도 합계가 같고, 화면이 만든 숫자와 서비스가 만든 숫자가 갈라질 자리가 없습니다.
차이 요인 분해와 점검 규칙
직접법 순현금흐름과 간접법 순현금흐름의 차이를 여섯 요인으로 가르며, 합은 항상 총차이와 같습니다. 판정은 점검을 돕는 표시이며 원인이나 회계 처리의 결론을 단정하지 않습니다.
| 요인 | 판정(분류) 조건 | 사용자 조치 |
|---|---|---|
| 수금 시차(운전자본) | 인식 시기가 간접법과 다른 입금 칸의 (직접법 − 간접법) | 거래처 그룹 · 자금 항목별 회수 일정을 점검 |
| 지급 시차(운전자본) | 인식 시기가 간접법과 다른 출금 칸의 (직접법 − 간접법) | 지급 일정 변경 사유를 확인 |
| 금액 차이(비현금·충당) | 간접법과 일치하는 칸에서 외화 금액 차이 × 간접법 환율 | 계약 · 청구 금액과 충당 조정을 확인 |
| 환율 환산 | 간접법과 일치하는 칸에서 환율 차이 × 직접법 외화 금액(나머지 값이라 합이 항상 맞음) | 통화별 차이를 확인 |
| 직접법에만 있는 흐름 | 직접법 라인에만 있고 간접법에 없는 칸 | 간접법 조정 항목에 반영됐는지 점검 |
| 간접법에만 있는 흐름 | 간접법에만 있고 직접법 라인에 없는 칸 | 직접법 라인 누락 · 이월 여부를 확인 |
아래는 점검 규칙입니다.
| 규칙 | 조건 | 결과 | 사용자 조치 |
|---|---|---|---|
| 차이 색칠 | 금액 기준과 비율 기준을 모두 넘는 칸 | 불리하면 빨강, 유리하면 초록 | 변동 사유를 입력 |
| 원천 검산 | 원천 라인 합계와 칸의 값을 비교 | 일치 · 불일치 표시 | 불일치면 점검 필요 |
| 요인 검산 | 간접법 + 요인 합 − 직접법 | 0 이면 일치 | 0 이 아니면 점검 필요 |
| 감시 규칙 1 | 수금 시차 요인이 −300,000,000원 이하 | 경고(WARN) | 회수 일정 점검 |
| 감시 규칙 2 | 환율 환산 요인 절대값이 20,000,000원 이상 | 경고(WARN) | 통화별 차이 확인 |
| 감시 규칙 3 | 직접법과 간접법 순흐름 차이 절대값이 500,000,000원 이상 | 경보(ALERT) | 요인 분해로 원인 확인 |
| 감시 규칙 4 | 지출 비율이 97퍼센트 이상 | 정보(INFO) | 점검 필요 |
| 하루 한 번 | 같은 날 두 번째 실행 | LIMIT 으로 판정 | 내일 다시 실행 |
산출과 대사 순서
직접법 큐브와 간접법 큐브를 한 번 읽어 브라우저에서 다시 묶고, 서버가 요인 분해 · 해설 · 에이전트 판정을 계산합니다. 큐브 합계는 원천 라인 합계와 맞춰 봅니다.
| 순서 | 산출 · 대사식 | 검사 건수 | 차이 건수 |
|---|---|---|---|
| 1 | 큐브 합계 = 원천 라인 합계(측정값 · 기간별) | 36 | 0 |
| 2 | 큐브 점검 결과 NG 건수 | 36 | 0 |
| 3 | 순흐름 = 유입 − 유출(큐브 셀) | 2,185 | 0 |
| 4 | 영업 + 투자 + 재무 활동 흐름 = 순증감(기간별) | 9 | 0 |
| 5 | 간접법 + 요인 합 = 직접법(기간 범위 × 회사 조합) | 135 | 0 |
| 6 | 사업부별 요인 합 = 전체 요인 | 7 | 0 |
| 7 | 원화 라인의 외화 금액 = 원화 금액 | 3,234 | 0 |
| 8 | 키 중복(원천 라인 · 직접법 큐브 · 간접법 큐브) | 8,488 | 0 |
조회조건
| 조건 | 필수 | 기본값 | $filter · 처리 |
|---|---|---|---|
| 회사 | 선택 | 전체(비움) | 비우면 전체 회사 · 서버 필터 Bukrs |
| 기간 시작 | 필수 | 2026년 01월 | Period ge — 끝보다 늦으면 조회하지 않고 안내 |
| 기간 끝 | 필수 | 2026년 09월 | Period le — 시작과 하나의 AND 조건으로 전송 |
| 비교 기준 | 선택 | 간접법(I0) | 없음이면 차이 스위치가 꺼짐 |
| 금액 기준 · 비율 기준 | 선택 | 10백만원 · 5% | 차이 색칠 기준 — 둘 다 넘을 때만 칠함(브라우저에서 처리) |
| 차원 값 필터 | 선택 | 전체 | 사업부 · 통화 · 자금 항목 등 여러 개 선택 — 읽어 둔 큐브에서 거름 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 현금 유입 | 원화 환산 유입 합 | Σ 유입 원화 금액 |
| 현금 유출 | 원화 환산 유출 합(양수로 표시) | Σ 유출 원화 금액 |
| 순현금흐름 | 자금 영향 방향의 순 흐름 | 유입 − 유출 |
| 원천 라인 수 | 은행 거래 라인 건수 | 라인 수 합 |
| 차이 · 차이율 | 직접법과 간접법의 차이 | 직접법 − 간접법 · 차이 ÷ 간접법(0 이면 표시 안 함) |
| 지출 비율 | 유입 대비 유출 | 유출 × 100 ÷ 유입(유입 0 이면 표시 안 함) |
| 잉여 현금흐름 | 영업 + 투자활동 순흐름 | Flow[A] + Flow[B] |
| 일평균 순현금흐름 | 기간 일수로 나눈 순흐름 | 순흐름 ÷ 기간 일수 |
좁은 화면에서 달라지는 것
창 폭이 600px 안팎으로 줄면 조회 조건과 카드가 세로로 쌓이고, 표 오른쪽에 있던 차트가 표 아래로 내려옵니다. 표는 가로로 스크롤되며 차트는 감추지 않습니다. 터치 화면에서는 끌어다 놓기 대신 칩을 눌러 축으로 보냅니다.
파일 구성
index.html · Component.js · manifest.json
controller/ Main.controller.js · BaseController.js
view/ Main.view.xml · fragments/ (값 필터 · 원천 보기 · 변동 사유 · 해설 · 에이전트 · 보기 저장 · 보기 관리)
model/ cube.js(다시 묶기) · chart.js · pptx.js · layout.js · formatter.js · ErrorHandler.js
i18n/ i18n_ko.properties
css/ style.css
odata/ metadata.xml · service.js(서비스 로직) · calc.js(요인 분해 · 해설 · 에이전트 판정) · json/(엔티티셋별 데이터 14개)
readme.html
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | 표준 화면이 해 주는 것 | 이 앱이 더하는 관점 |
|---|---|---|
| 은행 계정별 현금 포지션 확인 | 표준 현금 포지션 화면(FF7A)이 계정 · 기간별 잔액을 정확히 보여 줍니다. | 활동별 · 사업부별 순현금흐름을 간접법 값과 같은 표에서 견줍니다. |
| 예측 라인의 기간별 흐름 | 유동성 예측 화면(FF7B)이 예측 라인을 관리합니다. | 직접법 실적과 같은 차원으로 맞붙여 차이를 봅니다. |
| 은행 거래내역 가져오기 · 후처리 | FF_5 와 FEBAN 이 전자 은행 거래내역을 가져와 전기합니다. | 가져온 거래를 여러 축으로 돌려 보고 활동 구분으로 묶습니다. |
| 계정 라인 아이템 조회 | FBL3N 이 은행 계정의 라인 아이템을 보여 줍니다. | 집계 숫자에서 그 라인으로 내려가는 연결을 화면이 제공합니다. |
| 직접법과 간접법 차이의 원인 구분 | 표준에는 두 방식의 차이를 시차 · 금액 · 환율 · 한쪽에만 있는 흐름으로 나누는 화면이 없습니다. | 이 앱이 여섯 요인으로 가르고 검산 줄로 합을 확인합니다. |
T-code 별 연계 지점
| T-code | 이름 | 연계 — 같은 데이터 · 대사 지점 · 오가는 길 · 표준에 남길 일 |
|---|---|---|
| FF7A | 현금 포지션 | 은행 계정별 현금 포지션 합계를 이 앱의 순현금흐름과 견줘 봅니다. 오가는 길: 이 앱 결과의 합계를 들고 표준 화면에서 같은 기간을 조회합니다. 표준에 남길 일: 잔액 확인. |
| FF7B | 유동성 예측 | 예측 라인의 기간별 흐름을 비교 값 후보로 둡니다. 대사 지점: 예측 라인 합계와 비교 큐브 합계. 표준에 남길 일: 예측 라인 유지. |
| FF_5 | 전자 은행 거래내역 가져오기 | 가져온 거래내역이 원천 라인의 출발점입니다. 대사 지점: 가져온 건수와 원천 라인 수. 표준에 남길 일: 가져오기. |
| FEBAN | 은행 거래내역 후처리 | 후처리가 끝난 거래의 전표를 원천 라인에서 확인합니다. 대사 지점: 후처리 대기 건이 이 앱 숫자에 들어갔는지. 표준에 남길 일: 후처리. |
| FBL3N | G/L 계정 라인 아이템 | 은행 계정 라인 아이템과 원천 라인을 대조합니다. 오가는 길: 원천 보기 창의 전표 키로 같은 전표를 찾습니다. 표준에 남길 일: 라인 상세 조회. |
S/4HANA 분석 스택과의 자리
S/4HANA 의 분석 스택(CDS 분석 쿼리, Fiori 분석 앱, Analysis for Office)과 이 앱은 경쟁하지 않고 같은 원천 위에 놓입니다. 아래 “CDS 구성”의 큐브 · 쿼리 뷰를 만들어 두면 표준 분석 도구도 같은 집계를 읽을 수 있고, 이 앱은 그 위에 요인 분해, 해설, 에이전트, 변동 사유 같은 업무 흐름을 얹습니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 정하나 | 누가 |
|---|---|---|
| 자금 항목 → 활동 구분 매핑 | 자금 항목이 영업 · 투자 · 재무 중 어디에 속하는지를 매핑 테이블에 둡니다. 이자 · 배당 · 세금의 분류는 회사 정책에 따라 정합니다. | 자금팀 · 회계팀 |
| 간접법 값의 원천 | 간접법 순현금흐름을 어떤 원천(손익 · 운전자본 증감 · 비현금 조정)에서 만들어 이 화면에 연결할지 정합니다. | 회계팀 |
| 거래처 그룹 규칙 | 은행 거래 라인의 상대방을 고객 · 공급사 · 은행 · 관계사 등으로 묶는 기준입니다. | 자금팀 · 회계팀 |
| 환율 기준 | 간접법 환율과 직접법 환율을 어느 환율 유형 · 환산 시점으로 잡을지 정합니다. 환율 요인이 나머지 값으로 계산되므로 기준이 흔들리면 다른 요인에 영향이 갑니다. | 자금팀 |
| 간접법 연계 구분 | 직접법 라인이 간접법과 일치 · 시기 이름 · 시기 늦음 · 간접법에 없음 중 어디인지 붙이는 규칙입니다. | 회계팀 · IT |
| 확장 필드 · BAdI | 고객사가 라인에 붙이는 확장 필드(예: 사업부 · 프로젝트)는 차원 후보가 됩니다. 값 도출은 BAdI 나 확장 필드에서 합니다. | IT |
| 권한 | 회사 코드 · 사업부 단위 접근 제한은 집계 단계(DCL)에 겁니다. 드릴스루에만 걸면 합계 뺄셈으로 새어 나갑니다. | 보안 담당 |
분석 지표 정의
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 유입 · 유출 | 원화 환산 유입 합 · 유출 합(양수) | KPI · 피벗 열 | 은행 거래 라인 원화 금액 | 외화는 원화 환산 후 합산 |
| 순현금흐름 | 유입 − 유출 | KPI · 피벗 기본 측정값 | 은행 거래 라인 | 유입 +, 유출 − |
| 간접법 대비 차이 | 직접법 − 간접법 · 차이율 = 차이 ÷ 간접법 | 차이 모드 | 직접법 큐브 · 간접법 큐브 | 분모 0 이면 표시 안 함 |
| 지출 비율 | 유출 ÷ 유입 × 100 · 97% 이상이면 정보 | 계산 항목 · KPI · 규칙 4 | 유입 · 유출 합 | 유입 0 이면 표시 안 함 |
| 잉여 현금흐름 | 영업활동 흐름 + 투자활동 흐름 | 계산 항목 | 활동 구분별 순흐름 | 활동 구분은 자금 항목에서 정함 |
| 현금 순증감(활동 합) | 영업 + 투자 + 재무활동 흐름 | 계산 항목 | 활동 구분별 순흐름 | 기간별 순증감과 대사 |
| 일평균 순현금흐름 | 순현금흐름 ÷ 기간 일수 | 계산 항목 | 기간 마스터 일수 | 샘플 데이터 기준 일수 |
| 여섯 요인 | 요인 분해 표 참조 | 워터폴 · 요인 표 · 해설 | 직접법 · 간접법 큐브 | 합 = 총차이 검산 줄 |
CDS 구성
아래 코드는 구조를 보이기 위한 스케치이며, 원천 테이블 · 필드는 운영 구성에 따라 달라지므로 ‘확인 필요’로 표시했습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZCFD_ITEMMAP · ZI_CfdFlowBase | 자금 항목 → 활동 구분 · 간접법 연계 구분 매핑과, 은행 거래 라인(직접법)과 간접법 산출 라인을 같은 모양으로 맞춤 | 활동 구분을 코드가 아니라 데이터로 두려고 |
| 차원 | ZI_CfdBu · ZI_CfdItem | 사업부 · 자금 항목 · 거래처 그룹 · 활동 구분의 키와 텍스트 | 화면의 값 필터 목록이 같은 텍스트를 쓰게 하려고 |
| 큐브(직접법) | ZI_CfdFlowCube | 기간 × 회사 × 사업부 × 자금 항목 … 단위로 유입 · 유출 · 순현금흐름 집계 | 화면이 읽는 가장 가는 단위 |
| 큐브(간접법) | ZI_CfdIndCube | 같은 모양의 간접법 산출 셀 | 두 방식을 같은 차원으로 맞붙이려고 |
| 쿼리 | ZC_CfdFlowQuery | 분석 쿼리 — 필수 필터 · 기본 행 · 열 · 측정값 | 표준 분석 도구에서도 같은 큐브를 읽게 하려고 |
| 권한 | ZC_CfdFlowQuery(DCL) | 회사 코드 · 사업부 단위 접근 제한 | 집계 단계에서 걸어야 합계로 새지 않습니다 |
| 서비스 | ZUI_CfdFlow_O2(Definition · Binding) | OData V2 로 큐브 · 쿼리를 게시 | 화면이 읽는 엔티티셋 이름을 고정하려고 |
① 매핑 테이블 — 자금 항목을 활동 구분 · 간접법 연계 구분에 묶는 기준
이 표에서 결정되는 것은 “어떤 거래가 영업이고 어떤 거래가 투자인가”입니다. 잉여 현금흐름 같은 계산 항목과 활동별 요인 분해가 모두 이 표를 따릅니다.
" ─────────────────────────────────────────────────────────
" ZCFD_ITEMMAP : 자금 항목 매핑
" 역할 : 자금 항목(회사별) → 활동 구분(A 영업 · B 투자 · C 재무) · 간접법 연계 구분
" 이유 : 활동 구분은 회사의 자금 항목 체계에서 정해지므로 코드가 아니라 데이터로 둔다
" ─────────────────────────────────────────────────────────
@EndUserText.label : '자금 항목 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zcfd_itemmap {
key client : abap.clnt not null;
key bukrs : bukrs not null;
key item : abap.char(4) not null;
activity : abap.char(1); " A 영업 · B 투자 · C 재무
dir : abap.char(1); " I 유입 · O 유출
ind_rs : abap.char(2); " OT 일치 · DL 늦음 · EA 이름 · UP 직접법에만 · LO 간접법에만
item_text : abap.char(40);
}
② 기준 뷰 — 직접법 라인을 한 모양으로
원천 라인을 읽어 활동 구분과 간접법 연계 구분을 붙이는 첫 단계입니다. 원천 테이블과 필드는 운영 구성에 따라 달라지므로 확인이 필요합니다.
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '직접법 현금흐름 기준'
define view entity ZI_CfdFlowBase
as select from acdoca as a
inner join zcfd_itemmap as m
on m.bukrs = a.rbukrs
and m.item = /* 확인 필요: 자금 항목을 어느 필드에서 도출하는지 */ a.racct
{
key a.rldnr, key a.rbukrs, key a.gjahr, key a.belnr, key a.docln,
a.budat as PostDate,
a.rhcur as Waers,
m.activity as Activity,
m.dir as Dir,
m.ind_rs as IndRs,
@Semantics.amount.currencyCode : 'Waers'
a.wsl as AmtFc, " 외화 금액
a.hsl as AmtKrw " 원화 금액(확인 필요: 현지 통화)
}
③ 차원 뷰 — 값 필터의 목록
화면의 값 필터 창이 읽는 목록입니다. 키와 텍스트를 같은 뷰에서 내보내 보관함의 이름과 필터 목록이 어긋나지 않게 합니다.
@EndUserText.label : '사업부'
@ObjectModel.resultSet.sizeCategory : #XS
define view entity ZI_CfdBu
as select from tka02 as k " 확인 필요: 사업부를 어느 마스터에서 도출하는지
{
@ObjectModel.text.element : ['BuName']
key k.gsber as Bu,
@Semantics.text : true
k.bezei as BuName
}
@EndUserText.label : '자금 항목'
define view entity ZI_CfdItem
as select from zcfd_itemmap as m
{
@ObjectModel.text.element : ['ItemText']
key m.item as Item,
m.item_text as ItemText,
m.activity as Activity
}
④ 큐브 — 기간 · 회사 · 사업부 · 자금 항목 단위 집계
화면이 한 번에 읽는 직접법 큐브입니다. 분석 지표 정의와 같은 식으로 유입 · 유출 · 순현금흐름을 집계합니다.
@Analytics.dataCategory : #CUBE
@EndUserText.label : '직접법 현금흐름 큐브'
define view entity ZI_CfdFlowCube
as select from ZI_CfdFlowBase as b
{
key substring(b.PostDate, 1, 6) as Period,
key b.rbukrs as Bukrs,
key b.Bu, key b.Item, key b.Waers, key b.Cpty,
key b.Activity, key b.Dir, key b.IndRs as Rs,
@Aggregation.default : #SUM
sum( case b.Dir when 'I' then b.AmtKrw else 0 end ) as Inflow,
@Aggregation.default : #SUM
sum( case b.Dir when 'O' then b.AmtKrw else 0 end ) as Outflow,
@Aggregation.default : #SUM
sum( case b.Dir when 'I' then b.AmtKrw else -b.AmtKrw end ) as Flow,
@Aggregation.default : #SUM
count( * ) as Cnt
}
group by substring(b.PostDate,1,6), b.rbukrs, b.Bu, b.Item, b.Waers, b.Cpty, b.Activity, b.Dir, b.IndRs
⑤ 간접법 큐브 — 같은 모양의 산출 값
간접법 값은 손익에서 출발해 비현금 항목과 운전자본 증감을 조정해 만듭니다. 그 조정의 원천은 회사마다 다르므로 확인이 필요합니다.
@Analytics.dataCategory : #CUBE
@EndUserText.label : '간접법 현금흐름 큐브'
define view entity ZI_CfdIndCube
as select from ZI_CfdIndBase as p " 확인 필요: 손익 · 운전자본 · 비현금 조정에서 만든 뷰
{
key 'I0' as Version,
key p.Period, key p.Bukrs, key p.Bu, key p.Item,
key p.Waers, key p.Cpty, key p.Activity, key p.Dir, key p.Rs,
@Aggregation.default : #SUM p.Flow as Flow,
@Aggregation.default : #SUM p.Inflow as Inflow,
@Aggregation.default : #SUM p.Outflow as Outflow
}
⑥ 분석 쿼리 — 화면이 읽는 문
표준 분석 도구에서도 같은 큐브를 열 수 있게 쿼리를 둡니다. 회사와 기간을 필수 조건으로 두어 전량 조회를 막습니다.
@Analytics.query : true
@EndUserText.label : '직접법 현금흐름 쿼리'
define view entity ZC_CfdFlowQuery
as select from ZI_CfdFlowCube
{
@AnalyticsDetails.query.axis : #ROWS Activity,
@AnalyticsDetails.query.axis : #ROWS Item,
@AnalyticsDetails.query.axis : #COLUMNS Period,
@Consumption.filter : { mandatory : true, selectionType : #INTERVAL }
Period,
@Consumption.filter : { selectionType : #SINGLE, multipleSelections : true }
Bukrs,
Bu, Waers, Cpty,
Flow, Inflow, Outflow, Cnt
}
⑦ 권한 — 집계 단계의 DCL
권한은 큐브를 읽는 입구에 겁니다. 드릴스루 창에만 걸면 합계에서 자기 몫을 빼서 남의 숫자를 추정할 수 있기 때문입니다.
@EndUserText.label : '직접법 현금흐름 권한'
@MappingRole : true
define role ZC_CfdFlowQuery_DCL {
grant select on ZC_CfdFlowQuery
where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' )
and ( Bu ) = aspect pfcg_auth( ZCFD_BU, GSBER, ACTVT = '03' ); " 확인 필요: 권한 오브젝트
}
⑧ 서비스 정의와 바인딩
마지막으로 OData V2 로 게시합니다. 화면이 읽는 엔티티셋 이름이 여기서 정해집니다.
@EndUserText.label : '직접법 현금흐름 서비스'
define service ZUI_CfdFlow {
expose ZI_CfdFlowCube as CubeSet;
expose ZI_CfdIndCube as PlanSet;
expose ZI_CfdBu as DimBu;
expose ZI_CfdItem as DimItem;
}
" 서비스 바인딩: ZUI_CfdFlow_O2 — 바인딩 유형 OData V2 - UI, 게시 후 서비스 URL 을 화면 설정에 넣는다
운영 시점에 해야 할 일
아래 항목은 코딩이 아니라 합의입니다. 합의가 끝나면 기술 작업은 위 코드를 운영 원천에 맞춰 고치고 서비스를 게시하는 일입니다.
| 항목 | 합의하지 않으면 생기는 일 | 누가 |
|---|---|---|
| 자금 항목 → 활동 구분 | 잉여 현금흐름이 기존 보고서와 어긋납니다 | 자금팀 · 회계팀 |
| 이자 · 배당 · 세금의 분류 | 활동별 금액이 보고서마다 달라집니다 | 회계팀 |
| 간접법 값의 원천 | “간접법 숫자가 왜 이 값이냐”가 반복됩니다 | 회계팀 |
| 간접법 연계 구분 규칙 | 수금 · 지급 시차 요인이 사람마다 달라집니다 | 회계팀 · IT |
| 환율 유형 · 환산 시점 | 환율 요인이 사람마다 달라집니다 | 자금팀 |
| 부호 규칙 | 순흐름이 뒤집혀 보입니다 | 회계팀 |
| 거래처 그룹 규칙 | 거래처 그룹별 합계가 현업의 분류와 다릅니다 | 자금팀 |
| 사업부 도출 | 사업부별 합이 전체와 맞지 않습니다 | 경영지원팀 |
| 권한 범위 | 남의 회사 · 사업부 숫자가 보입니다 | 보안 담당 |
| 대사 체계 | 표준 화면과 숫자가 다를 때 누가 확인하는지 정해지지 않습니다 | 자금팀 · 회계팀 |
| 변동 사유 분류 | 사유 분류가 통일되지 않아 모아 볼 수 없습니다 | 회계팀 |
| 에이전트 규칙 임계값 | 경고가 너무 많거나 하나도 없습니다 | 자금팀 · 회계팀 |
숫자를 믿을 수 있는가 — 검증 결과
리포트에서 가장 비싼 질문은 “이 숫자 맞아?”입니다. 만드는 쪽에서 대사식을 먼저 세워 전수로 돌린 결과입니다.
| 대사식 | 검사 건수 | 차이 건수 |
|---|---|---|
| 큐브 합계 = 원천 라인 합계(측정값 · 기간별) | 36 | 0 |
| 큐브 점검 결과 NG 건수 | 36 | 0 |
| 원천 라인 전체 합계 = 큐브 전체 합계 | 1 | 0 |
| 칸에서 내려간 원천 라인 합계 = 칸의 값(화면 14칸) | 14 | 0 |
| 순흐름 = 유입 − 유출(큐브 셀) | 2,185 | 0 |
| 유입 · 유출 부호 | 2,185 | 0 |
| 영업 + 투자 + 재무 활동 흐름 = 순증감(기간별) | 9 | 0 |
| 간접법 + 요인 합 = 직접법(기간 범위 × 회사 조합) | 135 | 0 |
| 사업부별 요인 합 = 전체 요인 | 7 | 0 |
| 원화 라인의 외화 금액 = 원화 금액 | 3,234 | 0 |
| 원천 라인 키 중복 | 4,287 | 0 |
| 직접법 큐브 키 중복 | 2,185 | 0 |
| 간접법 큐브 키 중복 | 2,016 | 0 |
대사식 13종 합계 16,330건을 검사했고 차이는 0건, 의도적 예외도 0건입니다. 화면의 순현금흐름 −483.0백만원은 검증 스크립트 결과(−482,972,654원)와 같습니다. 간접법에만 있거나 직접법에만 있는 흐름은 대사 오류가 아니라 요인으로 분류됩니다.
운영 데이터로 갈 때
화면은 샘플 서비스로 검증했습니다. 운영에서는 서비스 뒤의 원천을 위 CDS 로 교체하고, 화면 설정의 서비스 주소만 바꿉니다. 처음에는 기존 엑셀과 병행하며 합계를 맞춰 보고, 활동 구분 매핑과 간접법 연계 구분 규칙을 합의한 뒤 범위를 넓히시길 권합니다.
자주 묻는 질문
도입 상담과 데모에서 자주 받는 질문을 네 묶음으로 적었습니다.
숫자와 산식
요인 분해의 합은 항상 총차이와 같습니까?
같습니다. 환율 환산을 나머지 값으로 두어 합이 맞도록 했고, 화면의 검산 줄이 간접법 + 요인 합 − 직접법이 0 인지 보여 줍니다.
여섯 요인은 각각 무슨 뜻입니까?
수금 시차와 지급 시차는 직접법과 간접법에 모두 칸이 있되 인식 시기가 어긋난 차이입니다. 금액은 두 방식이 일치하는 칸에서 외화 금액 차이를 간접법 환율로 곱한 몫이고, 환율은 환율 차이에 직접법 외화 금액을 곱한 나머지 값입니다. 직접법에만 있는 흐름과 간접법에만 있는 흐름은 한쪽에만 칸이 있는 경우입니다.
간접법 숫자는 어디서 옵니까?
샘플에서는 손익에서 출발해 비현금 항목과 운전자본 증감을 조정한 값을 기준으로 둡니다. 운영에서는 같은 모양의 값을 원천에서 만들어 연결하며, 어느 원천을 쓸지는 회계팀과 합의가 필요합니다.
유입과 유출의 부호는 어떻게 됩니까?
순현금흐름은 자금에 미치는 방향으로 유입은 +, 유출은 −입니다. 유입 · 유출 측정값은 각각 양수로 표시합니다.
외화는 어떻게 합산합니까?
큐브는 원화 환산 금액과 외화 금액을 함께 갖습니다. 합계와 차이는 원화 환산 금액으로 하고, 외화 금액은 금액 요인과 환율 요인을 나눌 때만 씁니다.
이자 · 배당 · 세금은 어느 활동에 담깁니까?
회사 정책에 따라 자금 항목 매핑 테이블에서 정합니다. 이 화면은 정해진 대로 묶을 뿐 어느 분류가 맞는지 판단하지 않으며, 바꾸면 다시 계산합니다.
화면과 조작
축을 바꾸면 서버를 다시 부릅니까?
부르지 않습니다. 조회 때 큐브를 한 번 읽고, 축 전환 · 차원 값 필터 · 차이 모드 · 계산 항목은 브라우저가 그 자료로 다시 묶습니다. 검증에서 축을 다섯 번 바꾸는 동안 서버 요청은 0건이었습니다.
행 축과 열 축에 단계 제한이 있는 이유는 무엇입니까?
행 축 3단계, 열 축 2단계입니다. 단계가 늘면 칸 수가 곱으로 늘어 표를 읽을 수 없게 됩니다. 한도에 닿으면 안내 문구가 뜹니다.
칸을 눌렀을 때 나오는 원천 라인은 어디서 옵니까?
행 경로와 열 조합이 그대로 조회 조건이 되어 원천 은행 거래 라인을 전기일 순으로 읽습니다. 라인은 500줄씩 읽고 같은 창에서 CSV 로 내려받을 수 있습니다.
휴대폰에서도 쓸 수 있습니까?
창 폭이 줄면 차트를 표 아래로 내려 같은 리포트를 봅니다. 터치 화면에서는 끌어다 놓기 대신 칩을 눌러 축으로 보내면 됩니다.
계산 항목은 어떻게 만들어집니까?
식은 Flow[A]+Flow[B] 처럼 측정값과 활동 구분을 토큰으로 지정합니다. 서비스가 정의를 갖고 있어 화면은 식을 풀어 계산만 합니다.
분석 기능
해설은 모델이 씁니까?
기본은 규칙으로 만든 문장 초안입니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 넘기고, 모델을 연결하더라도 모델은 그 숫자를 문장으로 다듬을 뿐 숫자를 만들지 않습니다.
결과를 그대로 보고에 써도 됩니까?
이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 점검 필요 항목은 원천 거래와 사유를 확인한 뒤 쓰셔야 합니다.
변동 사유는 어디에 저장됩니까?
서비스가 조회 범위와 행 경로를 키로 저장합니다. 축을 바꾸거나 트리를 다시 펼쳐도 같은 행이면 사유가 따라옵니다.
에이전트는 무엇을 하고 얼마나 자주 돕니까?
켜 둔 감시 규칙(수금 시차 · 환율 환산 · 순흐름 차이 · 지출 비율)을 서비스가 판정해 걸린 항목을 대기함에 올립니다. 같은 날 두 번째 실행은 서버가 LIMIT 으로 막고 활동 기록에 남깁니다.
보고서(파워포인트)는 어디서 만들어집니까?
브라우저 안에서 만들어집니다. 표와 차트, 요약, 근거를 담은 파일을 외부 라이브러리 없이 지어 내려받으므로 운영 환경에 올릴 때 걸리는 것이 없습니다.
법정 현금흐름표를 대체합니까?
아닙니다. 직접법 숫자와 간접법 숫자를 맞춰 보고 차이를 점검하는 화면이며, 법정 보고용 현금흐름표는 표준 절차로 만듭니다.
도입과 운영
어떤 회사에 효과가 큽니까?
은행 거래내역으로 직접법 현금흐름을 모으고 결산에서 간접법 숫자와 맞춰 보는 회사입니다. 사업부가 여럿이거나 외화 거래가 있으면 효과가 더 큽니다.
표준 T-code 를 없애야 합니까?
아닙니다. 현금 포지션(FF7A), 유동성 예측(FF7B), 거래내역 가져오기(FF_5)와 후처리(FEBAN), 라인 아이템(FBL3N)은 그대로 쓰고, 이 화면은 그 위에서 대사와 차이 분석을 맡습니다.
운영 데이터는 어떻게 연결합니까?
화면은 샘플 서비스로 검증했고, 운영에서는 서비스 뒤의 원천을 CDS 로 교체한 뒤 화면 설정의 서비스 주소를 바꿉니다.
권한은 어떻게 겁니까?
회사 코드 · 사업부 단위 접근 제한을 집계 단계(DCL)에 겁니다. 드릴스루 창에만 걸면 합계에서 자기 몫을 빼서 남의 숫자를 추정할 수 있기 때문입니다.
데이터가 아주 크면 어떻게 됩니까?
큐브는 서버에서 기간 · 사업부 · 항목 단위로 미리 집계하고, 회사와 기간을 필수 조건으로 두어 전량 조회를 막습니다. 원천 라인은 500줄씩 나누어 읽습니다.
자금 항목이나 계정 매핑이 바뀌면 어떻게 합니까?
매핑 테이블을 고치면 됩니다. 자금 항목이 어느 활동 구분에 속하는지, 간접법과 어떻게 이어지는지가 그 표에서 정해지므로 화면 코드는 건드리지 않습니다.
기존 엑셀 시트를 꼭 없애야 합니까?
없애라고 권하지 않습니다. 처음에는 두 방식을 병행하며 합계를 맞춰 보고, 신뢰가 쌓이면 엑셀의 역할을 줄이면 됩니다.
이 글의 숫자는 실제 회사 자료입니까?
아닙니다. 가상 회사 · 가상 사업부 · 가상 거래처로 만든 검증용 샘플 데이터입니다. 샘플이므로 숫자가 실제 업무의 크기나 비율을 뜻하지 않습니다.
어떤 점검 항목을 먼저 확인해야 합니까?
도입 때는 활동 구분 매핑, 이자 · 배당 · 세금의 분류, 간접법 값의 원천, 환율 기준, 부호 규칙 다섯 가지를 먼저 합의하시길 권합니다.