SAP 자금 솔루션 자금 포지션 다차원 분석 — 은행·계좌·통화를 끌어다 놓고 기초에서 기말까지 롤포워드와 계획 대비 차이를 원천 전표까지
큐브 집계 · 끌어다 놓는 축 구성 · 칸에서 원천 전표까지의 드릴스루 · 기초+입출금+환율변동효과=기말 롤포워드 · 계획 대비 차이와 요인분해 · 행에 남는 변동 사유 · 근거를 보여 주는 AI 분석 · 하루 한 번 도는 에이전트 — 소개 영상과 실제 화면 34종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함14개 장면조회 → 피벗과 축 전환 → 경영 요약 → 원천 문서 → 롤포워드 → 기준 대비 차이 → AI 분석 · 에이전트 → 레이아웃 저장
주요 재생 지점
도입 포인트 — 이 앱을 사용해야 하는 이유
월말 자금 회의의 질문은 늘 비슷합니다. 지금 쓸 수 있는 돈이 얼마인가, 계획과 얼마나 벌어졌나, 왜 벌어졌고 무엇을 해야 하나. 지금은 이 세 답이 표준 현금 포지션 화면 · 은행 명세 · 엑셀 · 회의록으로 흩어져 있습니다. 이 화면은 세 답을 한 화면에 붙여, 보고용 표를 다시 만드는 손일을 줄이고 “어느 숫자가 맞나”를 따지는 시간을 “무엇을 할 것인가”로 돌립니다.
이 화면은 특정 회계기준서를 구현한 것이 아니라 자금 포지션·은행 계좌 잔액·입출금 흐름을 분석하는 업무 화면입니다. 그래서 표준 현금 포지션(FF7A)·유동성 예측(FF7B)·은행 계좌 명세 처리(FEBAN)·총계정원장 라인 항목(FBL3N)을 대체하지 않고, 그 숫자를 이어받아 축을 바꿔 보고 차이를 설명하는 쪽을 맡습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.
핵심 포인트 일곱 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 축을 바꿔도 숫자가 갈라지지 않는 피벗 | 은행·계좌·통화·활동 구분 등 차원을 끌어다 놓아 행 3단계·열 2단계로 봅니다. 모든 축이 같은 큐브에서 나오므로 합계가 어긋날 자리가 없고, 축을 바꿔도 서버를 다시 부르지 않습니다. | 은행별·계좌별·통화별 자금 현황표를 따로 만들고, 합계가 다르면 표를 맞추는 회의를 엽니다. |
| ② 기초에서 기말까지 칸마다 맞는 롤포워드 | 기초 잔액 + 순현금흐름 + 환율변동효과 − 기말 이 칸마다 0 인지 보여 줍니다. 기간을 합칠 때도 기초는 첫 기간, 기말은 마지막 기간 값으로 계산합니다. | 월말 잔액표와 입출금표를 엑셀로 이어 붙여 기초와 기말이 이어지는지 사람이 확인합니다. |
| ③ 칸에서 원천 전표까지 한 번에 | 칸을 누르면 그 금액을 이루는 전표 라인이 열리고, 원천 합계가 칸 금액과 같은지 그 자리에서 표시됩니다. | 자금 화면을 닫고 표준 라인 항목 조회를 다시 열어 조건을 손으로 맞춥니다. |
| ④ 계획 대비 차이를 여섯 요인으로 | 입금 시기·출금 시기·금액·환율·계획 외 발생·계획 미실현으로 가르고, 계획 + 요인 합 − 실적 = 0 을 매번 검산합니다. | 계획과 실적 차이를 엑셀로 밤새 분해하고 합계가 맞는지 다시 확인합니다. |
| ⑤ 차이 사유가 행에 남는다 | 사유가 조회 범위와 행 경로에 묶여 저장되어, 축을 바꿔도 다음 달에도 그 행에 따라옵니다. | 같은 질문을 매달 다시 하고 지난달 답은 메일함에서 찾습니다. |
| ⑥ 화면을 열지 않아도 도는 감시 | 가용 자금 하한·계좌 잔액 하한·외화 비중 한도 같은 규칙에 걸리면 대기함에 올라갑니다. 하루 한 번 실행합니다. | 잔액이 모자란 날 아무도 화면을 열지 않으면 그대로 지나갑니다. |
| ⑦ 숫자는 서비스가 계산하는 AI 분석 | 금액과 비율은 서비스가 큐브에서 계산하고 해설은 그 숫자를 읽어 씁니다. 근거 표가 함께 나오고 결론은 점검 필요 수준입니다. | 해설에 쓴 숫자가 어디서 왔는지부터 따져야 합니다. |
사례로 보는 효과 — 4~6월 순현금흐름 −718.2백만원의 요인
검증용 샘플 데이터에서 4월~6월 범위를 조회하면 순현금흐름 실적이 2,461.5백만원, 계획이 3,179.8백만원으로 −718.2백만원 차이가 납니다. 표준 화면에서도 이 차이까지는 읽을 수 있습니다. 이 화면은 그 다음을 답합니다. 요인분해를 켜면 차이가 입금 시기(회수 지연) −644.6, 출금 시기(지급 앞당김) −693.0, 금액 차이 +23.4, 환율 +60.1, 계획 외 발생 +358.2, 계획 미실현 +177.7 으로 나뉘고, 요인의 합이 총차이와 맞는지 검산 줄이 0 으로 보여 줍니다. 금액 자체가 달랐다기보다 입출금 시점이 어긋난 몫이 컸다는 것이 한눈에 드러납니다(샘플 데이터 기준이며 운영 원인은 점검이 필요합니다).
| 항목 | 금액(백만원) |
|---|---|
| 계획 순현금흐름 | 3,179.8 |
| 회수 지연(입금 시기) | −644.6 |
| 지급 앞당김(출금 시기) | −693.0 |
| 금액 차이 | +23.4 |
| 환율 | +60.1 |
| 계획 외 발생 | +358.2 |
| 계획 미실현 | +177.7 |
| 실적 순현금흐름 | 2,461.5 |
숫자 검증도 같은 자리에서 합니다. 샘플 데이터 3,714개 원천 라인으로 대사식 7종 총 970건을 전수로 돌렸고 차이는 0건입니다(자세한 표는 CDS 구성의 검증 결과에 있습니다).
도입하면 달라지는 것
- 월말 자금 보고 준비 — 은행별 현황표, 계획 대비 차이, 사유 정리가 한 화면에서 나와 엑셀 취합과 화면 캡처가 줄어듭니다.
- 회의의 주제 — “어느 잔액이 맞나”가 아니라 “어느 계좌에서 무엇을 할 것인가”를 이야기합니다.
- 다음 달로 이어지는 기록 — 사유와 저장한 보기가 남아 같은 설명을 다시 하지 않습니다.
- 놓치는 날이 없는 점검 — 규칙에 걸린 가용 자금·계좌 잔액·외화 비중이 대기함에 올라옵니다.
- 숫자를 의심하는 비용 — 칸을 누르면 원천 전표 라인이 열리고 합계 일치가 표시되어, 표준 화면을 다시 열지 않아도 됩니다.
이런 회사에 맞습니다
은행이 여러 곳이고 계좌가 열 개 안팎 이상이며, 원화와 함께 달러·유로·엔·위안 같은 외화 계좌를 운영하는 회사입니다. 자금팀이 월말마다 은행별·계좌별·통화별 현황표를 엑셀로 만들고, 계획 대비 차이를 설명해야 하는 경영지원 조직에 맞습니다. 본사와 판매법인처럼 회사코드가 둘 이상일 때 가용 자금을 회사별로 가르는 일에도 쓰입니다.
실행 화면
실제로 돌아가는 화면 34종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리인지 아래에 적었습니다. 숫자는 모두 같은 샘플 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.
사용 방법
- 조회 조건 입력 — 위쪽 조회 조건에서 회사(다중 선택), 기간 시작·끝, 비교 기준(없음 또는 계획)을 정합니다. 모두 선택 사항이며 비우면 전체 범위입니다.
- 조회 — 조건 줄 오른쪽 끝의 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다. 저장한 보기 가운데 “열면 바로 조회”로 지정한 것이 있으면 열리자마자 조회됩니다.
- 요약 확인 — 조회 뒤 조건 영역은 한 줄 요약으로 접히고 입금·출금·순현금흐름·계획 대비 차이·기말 잔액·가용 자금 카드와 피벗·차트가 나타납니다.
- 보는 사람과 축 이동 — 경영·재무·자금·회계 버튼으로 관점을 바꾸고, 차원 칩을 행 축·열 축으로 끌어다 놓거나 X 로 뺍니다. 측정값·값 필터·표시 단위도 여기서 바꿉니다.
- 칸 클릭 상세 — 표의 칸을 누르면 그 금액을 이루는 원천 라인 목록이 열리고 합계 일치가 표시됩니다. 행을 고르고 변동 사유·해설·에이전트를 이어서 씁니다.
- 내보내기 — 표 상단의 CSV 로 현재 피벗을, 원천 라인 창의 CSV 로 라인 목록을, 해설 창의 보고서로 PowerPoint 를 내려받습니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 표준 컨트롤(트리 표·값 도움·대화 상자)과 직접 그린 SVG 차트 | 외부 차트 라이브러리를 들이지 않아 반입 심사 없이 사내망에서 돕니다. |
| 집계·판정 로직 | 브라우저의 피벗 엔진과 계산 항목 식, 서비스의 차이 분해·해설·에이전트 로직 | 축 변경은 브라우저가, 요인분해·해설·에이전트처럼 서버 규칙이 필요한 일은 서비스가 맡습니다. |
| OData 서비스 구성 | OData V2 서비스 하나. 엔티티셋 14종(큐브·계획·원천 라인·차원·측정값·계산 항목·기간 요약·검산 기록·변동 사유·저장한 보기·감시 규칙·대기함·실행 기록)과 펑션 3종 | 화면이 읽는 자료와 쓰는 자료를 서비스 계약 하나로 모아, 운영에서는 같은 계약을 CDS 로 채워 갈아 끼웁니다. |
| 모델 구성 | 기본 모델 하나(OData V2, 묶음 요청 없음)와 화면 상태용 JSON 모델 하나 | 큐브와 계획은 조회 때 한 번만 읽고, 이후는 브라우저에서 다시 합산합니다. |
| 테마 | sap_horizon | SAP Fiori 표준 시각 언어를 그대로 씁니다. |
| 항목 | 내용 |
|---|---|
| 솔루션 | 자금 |
| 업무 영역 | 자금 포지션 분석(은행·계좌별 현금 흐름, 기초·기말 잔액, 가용 자금, 계획 대비 차이) |
| 관련 기준서·대상 영역 | 특정 기준서 연계 없음 · 대상 영역: 은행 계좌 잔액, 입출금 흐름, 외화 환산, 계획 대비 차이 |
| SAP 표준 T-code | FF7A · FF7B · FEBAN · FBL3N |
| 화면 성격 | 다차원 분석(피벗 표 · 차트 · 원천 문서 · 차이 분석 · 에이전트) |
| 데이터 연동 | OData V2 서비스 · 현재는 샘플 데이터로 동작 · 운영 원천 연동은 확인 필요 |
| 네임스페이스 | zui5.cashpos |
처음 열었을 때
조회 조건부터 피벗까지가 한 화면에 세로로 쌓입니다. 머리 영역은 접을 수 있어서 축을 짜는 동안에는 펼쳐 두고, 숫자를 들여다볼 때는 접어 둡니다.

조회 전에도 빈 화면을 주지 않습니다. 조건과 보드, 피벗 틀이 먼저 서 있고 값만 비어 있어서 처음 여는 사람도 무엇을 고르면 무엇이 채워지는지 먼저 봅니다. 기간은 2026년 1월~9월 전체가 기본이고, 비교 기준은 계획(P0)입니다.

조회를 누르면 요약 카드가 먼저 차고, 그 아래로 레이아웃 보드와 피벗이 함께 뜹니다. 기본 배치는 행 축 은행 › 계좌, 열 축 분기, 측정값은 순현금흐름입니다. 표 오른쪽 차트는 같은 값을 그린 것이라 표를 읽기 전에 모양부터 눈에 들어옵니다.

쓰지 않는 차원은 보관함에, 쓰는 차원은 행 축과 열 축에 놓입니다. 칩을 끌어다 놓으면 그 자리에서 다시 묶입니다. 행 축은 3단계, 열 축은 2단계까지 쌓이고 그 이상은 막습니다.

통화 칩을 행 축으로 끌어다 놓은 모습입니다. 다시 조회할 필요는 없습니다. 큐브는 이미 브라우저에 있고 축을 바꾸는 일은 그 행을 다시 묶는 일이기 때문입니다. 요약 카드의 합계가 그대로인 것이 이 점을 보여 줍니다.

접힌 머리글에는 회사·기간·비교 기준·단위가 한 줄로 남습니다. 긴 회의에서 숫자만 띄워 놓고 이야기할 때 쓰는 모습입니다. 조회를 누르면 이 줄로 자동으로 접힙니다.
경영 요약 — 자리마다 다른 화면
같은 큐브에서 나온 같은 숫자인데, 보는 사람의 자리에 따라 먼저 보여야 할 지표가 다릅니다. 경영·재무·자금·회계 네 관점으로 앞세우는 지표와 쪼개 보는 차원이 함께 바뀝니다.

경영 관점은 순현금흐름이 계획에서 얼마나 벗어났는지를 활동 구분별로 보는 자리입니다. 이 화면은 앞서 통화를 행 축에 올려 둔 상태이며, 관점을 바꿔도 요약 카드의 합계는 그대로입니다.

재무 관점은 쓸 수 있는 돈이 얼마인가가 첫 질문입니다. 가용 자금은 기말 잔액에서 질권 설정·사용 제한 금액을 뺀 값이며, 분기마다 회사와 은행별로 어떻게 움직였는지를 나란히 봅니다.

자금 담당자는 기초에서 출발해 입출금과 환율변동효과를 더하면 기말이 되는 흐름을 통화 › 계좌별로 읽습니다. 외화 통화는 환율변동효과 열이 0 이 아닌 값으로 채워집니다.

회계 관점은 숫자가 맞는지가 첫 질문입니다. 롤포워드 차이가 칸마다 0 인지, 그 칸을 이루는 원천 라인이 몇 건인지를 함께 보여 줍니다. 차이가 있으면 점검 필요로 봅니다.
축 전환과 범위
차원을 끌어다 놓고 값을 걸러 보는 동안 서버는 다시 불리지 않습니다. 열 조합과 행 조합에는 상한을 두었습니다.

열 축은 두 단계까지 쌓입니다. 분기별로 통화마다 열이 생겨 은행·계좌별로 어느 통화에서 움직였는지 한 번에 보입니다. 열 조합이 너무 많아지면 추가를 막고 안내합니다.

은행 다섯 곳 중 두 곳만 골라 본 모습입니다. 값마다 원천 라인 수가 함께 적혀 있어 어느 값이 큰지 알 수 있습니다. 필터를 걸어도 서버를 다시 부르지 않습니다.

필터를 건 상태는 값 필터 버튼에 개수로 표시됩니다. 요약 카드와 표, 차트가 모두 좁혀진 범위(순현금흐름 7,638.7백만원)로 다시 계산됩니다.

표가 좁아도 되는 회의에서는 차트를 넓게 키웁니다. 정한 너비는 그 브라우저에 남아 다음에 열 때도 그대로입니다.
칸에서 원천 전표까지
숫자를 의심할 때마다 다른 화면을 열 필요가 없도록, 칸을 누르면 그 금액을 이루는 원천 라인이 열립니다. 합계가 칸 금액과 같은지는 그 자리에서 확인합니다.

누리은행 3분기 순현금흐름 1,211.6백만원 칸을 누른 모습입니다. 원천 합계가 같은 1,211.6백만원이고 라인은 88건입니다. 목록에는 거래일·전표·은행·계좌·자금 항목·통화·외화금액·환율·원화금액이 보입니다.

잔액 칸은 흐름 칸과 다르게 열립니다. 기간 합이 아니라 기간 말 값이므로 그 기간의 잔액 라인을 보여 줍니다. 한빛 외화 수출대금 계좌의 USD 잔액 라인이 외화금액과 환율, 원화 환산액으로 나란히 놓입니다.

월별로 펼치면 전월 기말이 당월 기초가 되는 흐름이 눈에 들어옵니다. 같은 칸을 누르면 그 달의 원천 라인으로 내려갑니다.
계산 항목 — 기초에서 기말까지
기초 + 입출금 + 환율변동효과 = 기말. 이 등식이 칸마다 맞는지가 자금 포지션 숫자의 첫 번째 검산입니다.

롤포워드 차이는 기초 + 순현금흐름 + 환율변동효과 − 기말 입니다. 칸마다 이 값이 0 인지가 숫자가 맞는지의 첫 확인이고, 0 이 아닌 칸이 있으면 점검 필요로 봅니다.
기준 대비 차이 — 같은 표가 계획 대비 보고가 된다
비교 기준만 바꾸면 같은 표가 계획 대비 차이 보고가 됩니다. 색은 두 기준을 모두 넘는 칸에만 칠하고, 차이는 요인으로 가르며 사유는 행에 남깁니다.

계획(P0)과 실적을 같은 차원으로 나란히 놓습니다. 차이 금액과 차이율이 모두 기준(기본 10백만원 · 5퍼센트)을 넘는 칸만 색이 칠해지고, 하나만 넘는 칸은 칠하지 않습니다.

대상 행과 계획 대비 차이가 위에 보이고, 구분은 입출금 시점·금액·환율·계획 외·일회성·기타 가운데 고릅니다. 사유는 조회 범위와 행 경로를 키로 저장되어 축을 바꾸거나 다음에 열어도 그 행에 따라옵니다.

왼쪽 파란 막대가 계획, 오른쪽 파란 막대가 실적이고 그 사이를 요인이 잇습니다. 4~6월 범위에서 계획 3,179.8백만원이 회수 지연 −644.6, 지급 앞당김 −693.0, 금액 차이 +23.4, 환율 +60.1, 계획 외 발생 +358.2, 계획 미실현 +177.7을 거쳐 실적 2,461.5백만원이 됩니다.

행을 고르면 그 행의 차이만 요인으로 나뉩니다. 맨 아래 검산 줄은 계획 + 요인 합 − 실적 = 0 을 매번 보여 줍니다. 0 이 아니면 계획 버전이나 조회 범위를 먼저 확인합니다.
AI 분석과 보고서
숫자는 서비스가 계산하고 해설은 그 숫자를 읽어 쓰며, 근거는 표로 함께 보여 줍니다.

해설은 서비스가 큐브에서 계산한 숫자로 쓰며, 결론은 점검 필요 수준으로 적습니다. 묶음 차원과 보는 사람을 바꾸면 해설도 다시 쓰입니다.

해설이 어떤 숫자를 읽었는지 같은 창에서 확인합니다. 작성 방식(규칙)도 함께 표시되어 사람이 근거를 검증할 수 있습니다.

현재 범위의 표와 차트, 워터폴을 담은 보고서를 서버에 파일을 남기지 않고 브라우저에서 바로 만듭니다. 내려받았다는 알림이 아래에 뜹니다.
AI 에이전트
화면을 열지 않아도 정해 둔 규칙으로 자금 부족과 환율 노출을 점검하고 대기함에 올립니다. 하루 한 번만 실행됩니다.

규칙마다 지표·연산자·임계값과 보는 사람이 붙어 있습니다. 가용 자금 하한, 계획 대비 순현금흐름 차이, 계좌 잔액 하한, 외화 보유 비중 한도 네 가지입니다. 하루 한 번만 실행할 수 있습니다.

실행하면 규칙에 걸린 항목이 대기함에 올라가고 머리글의 에이전트 버튼에 건수가 표시됩니다. 같은 규칙에서 여러 대상이 걸리면 한 규칙이 여러 건이 될 수 있습니다.

제한은 화면이 아니라 서비스가 실행 기록으로 판단합니다. 그래서 브라우저를 바꾸거나 새로 고쳐도 같은 날 두 번째 실행은 막힙니다.
레이아웃 저장과 복원
자주 쓰는 배치를 이름으로 저장하고 다음에 그대로 이어서 씁니다.

자주 쓰는 배치를 이름으로 저장합니다. 다음에 열 때 이 보기로 시작하게 하거나, 열자마자 조회까지 하게 할 수 있습니다.

보기는 서비스에 저장되어 어느 브라우저에서 열어도 따라옵니다. 기본과 자동 조회 표식은 보기 하나에만 붙습니다.

축을 많이 바꾼 뒤에도 한 번에 처음 배치로 돌아갑니다. 저장한 보기는 그대로 남습니다.
좁은 화면과 한계
열·행 조합 상한과 휴대폰 폭의 배치입니다. 한계는 숨기지 않고 화면에 안내합니다.

열 축에 차원을 너무 많이 올리면 조합이 108개가 되어 표를 읽을 수 없게 됩니다. 이 경우 표를 그리지 않고 열 축을 줄이라고 안내합니다.

행 축을 회계기간 › 계좌 › 자금 항목처럼 깊게 쌓으면 조합이 474개가 됩니다. 화면은 300행까지만 그리고 필터나 축 조정으로 범위를 줄이도록 안내합니다.

휴대폰 폭에서는 요약 카드가 두 줄로 접히고 조건 영역이 한 줄 요약이 됩니다. 가로 스크롤은 생기지 않습니다.

좁은 폭에서는 표와 차트가 나란히 놓일 자리가 없어 차트가 표 아래에 놓입니다. 표는 가로로 넘겨 보고 차트는 그대로 읽습니다.
화면 뒤에서 일어나는 일
축을 바꾸는 일과 원천으로 내려가는 일은 서로 다른 경로를 씁니다. 큐브와 계획은 조회 때 한 번 읽고, 그 뒤의 축 변경은 모두 브라우저 안에서 다시 합산합니다.
| 동작 | 서비스 호출 | 하는 일 |
|---|---|---|
| 조회 | 큐브 · 계획 · 기간 요약 · 차원 · 측정값 · 검산 기록 | 큐브와 카탈로그를 받아 둡니다(최대 5,000행). |
| 축 바꾸기 · 관점 전환 · 값 필터 · 표시 단위 | 없음 | 받아 둔 큐브를 브라우저에서 다시 묶습니다. |
| 칸 누르기(드릴스루) | 원천 라인 조회 | 그 칸의 조건만 필터로 받습니다. 같은 항목의 조건은 하나로 묶어 and 로 잇습니다. |
| 차이 모드 요인분해 | DecomposeVariance | 조회 범위를 미니 문법으로 넘기고 요인과 검산 줄을 받습니다. |
| AI 분석 | ExplainScope | 범위·관점·묶음 차원을 넘기고 해설과 근거 문장을 받습니다. |
| 에이전트 실행 | RunAgent | 감시 규칙을 실행하고 대기함에 올립니다. 하루 한 번만 허용합니다. |
| 변동 사유 · 보기 저장 | 생성·수정·삭제 | 사유와 보기를 서비스에 저장합니다. |
롤포워드와 차이 판정 — 판정 조건에서 사용자 조치까지
색과 문구는 점검을 돕는 표시이며 결론이 아닙니다. 판정 조건과 결과 상태, 그에 따른 조치는 아래와 같습니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 기초 + 순현금흐름 + 환율변동효과 − 기말 = 0 | 정상 | 없음 |
| 롤포워드 차이가 0 이 아님 | 점검 필요 | 조회 범위와 원천 잔액 라인 확인 |
| 차이 금액과 차이율이 모두 기준 이상 | 점검 필요(색 표시) | 변동 사유 입력, 요인분해 확인 |
| 둘 중 하나만 기준을 넘음 | 표시 없음 | 필요하면 기준값 조정 |
| 계획 + 요인 합 − 실적 ≠ 0 | 점검 필요 | 계획 버전과 조회 범위 확인 |
| 칸 금액과 원천 합계가 다름 | 점검 필요 | 원천 라인 목록과 조회 범위 확인 |
| 규칙 지표가 임계값 조건에 해당 | 대기함 등록(점검 필요) | 담당자가 내용을 읽고 판단 |
처리 순서는 이렇습니다. 원천 라인을 9개 차원 단위로 집계해 큐브와 계획을 만들고, 화면은 그 큐브를 한 번 읽어 와서 측정값을 더합니다. 흐름과 환율변동효과는 기간을 더하고, 기초는 범위의 첫 기간, 기말과 제한 자금은 마지막 기간 값을 씁니다. 계산 항목은 토큰 식으로 정의해 서버와 화면이 같은 식을 씁니다.
조회조건
| 조건 | 필수 | 기본값 | 서비스에 보내는 형태 |
|---|---|---|---|
| 회사 | 아니오 | 전체 | Bukrs eq 값(여러 개면 or 묶음) |
| 기간 시작·끝 | 아니오 | 2026년 01월~09월 | (Period ge 시작 and Period le 끝) |
| 비교 기준 | 아니오 | 계획(P0) | Version eq 'P0' |
| 값 필터(차원별 다중 선택) | 아니오 | 없음 | 브라우저에서 처리(서버 호출 없음) |
| 금액 단위 | 아니오 | 백만원 | 표시 단위만 변경 |
| 차이 기준(금액·비율) | 아니오 | 10백만원 · 5퍼센트 | 브라우저에서 처리 |
결과 컬럼
| 컬럼(측정값) | 의미 | 산출식 |
|---|---|---|
| 입금 · 출금 · 순현금흐름 | 원화 환산 입출금(거래일 환율) | 입금 = Flow[입], 출금 = −Flow[출], 순현금흐름 = 입 + 출 |
| 기초 잔액 | 범위 첫 기간 초 잔액 | OpenBal(범위 첫 기간) |
| 환율변동효과 | 외화 잔액의 환산 차이 | FxEff 합 |
| 기말 잔액 | 범위 마지막 기간 말 잔액 | EndBal(범위 마지막 기간) |
| 롤포워드 차이 | 이월 검산 | OpenBal + Flow + FxEff − EndBal |
| 가용 자금 · 가용 비율 | 쓸 수 있는 돈과 그 비율 | EndBal − Restr · (EndBal − Restr) × 100 ÷ EndBal |
| 평균 잔액 | 일평균 잔액 | BalDay ÷ 일수 합 |
| 원천 라인 수 | 칸을 이루는 라인 건수 | Cnt 합 |
좁은 화면에서 달라지는 것
390px 폭에서는 요약 카드가 두 줄로 접히고 차트가 표 오른쪽이 아니라 표 아래로 내려옵니다. 조건 영역은 한 줄 요약으로 접히며 가로 스크롤은 생기지 않습니다. 표 안의 열이 많으면 표 영역만 가로로 넘깁니다.
파일 구성
(앱 폴더)
├─ index.html · Component.js · manifest.json
├─ controller/ view/ model/ css/ i18n/
├─ odata/ 메타데이터 · 서비스 로직 · 자료 파일(엔티티셋 14종)
└─ media/ 소개 영상
SAP 표준 기능 확장 포인트
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 표준 화면으로 충분한 일은 표준에 두고, 표준에서 이어지지 않는 자리만 이 화면이 잇습니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 T-code | 표준에서 걸리는 자리 | 이 앱이 하는 일 |
|---|---|---|---|
| 은행·계좌별 현금 포지션 | FF7A | 정해진 형식으로 조회하는 데 맞춰져 있어 축을 바꿔 가며 보려면 다른 도구가 필요합니다(확인 필요) | 같은 큐브 위에서 은행·계좌·통화 축을 끌어다 놓습니다 |
| 유동성 예측과 계획 | FF7B | 예측과 실적의 차이를 요인으로 가르는 기능은 확인한 범위에서 찾지 못했습니다(확인 필요) | 계획(P0)을 같은 차원으로 얹어 차이를 여섯 요인으로 가릅니다 |
| 은행 명세와 입출금 대조 | FEBAN | 명세 처리가 중심이라 집계 칸에서 거슬러 올라가는 용도와는 다릅니다 | 칸을 누르면 입출금 라인이 열리고 합계 일치를 표시합니다 |
| 계정 라인 항목 확인 | FBL3N | 집계 화면에서 옮겨 가면 조건을 다시 넣어야 합니다 | 칸의 조건을 그대로 쥔 채 원천 라인을 보여 줍니다 |
| 차이의 원인 분해 | - | 표준에 없는 관점입니다. 보통 엑셀로 만듭니다(확인 필요) | 입금 시기·출금 시기·금액·환율·계획 외·계획 미실현으로 가르고 검산합니다 |
| 차이 사유 기록 | - | 집계 행에 붙일 자리가 없습니다(확인 필요) | 조회 범위와 행 경로를 키로 사유를 남깁니다 |
T-code 별 연계 지점
맞닿는 표준 T-code 마다 이어받는 데이터와 대사 지점을 아래에 적었습니다. 운영으로 옮긴 뒤에도 기존 표준 화면은 없애지 않습니다. 이 화면의 숫자와 표준 화면의 숫자를 맞춰 보는 용도로 함께 씁니다.
| T-code | 이름 | 이 앱과의 연계 |
|---|---|---|
| FF7A | 현금 포지션 | 이어받는 데이터 은행 계정별 기초·기말 잔액. 대사 지점 같은 날짜의 계좌 잔액이 이 앱의 기말 잔액과 같은지. 오가는 방법 이 앱의 계좌 행에서 FF7A 로 같은 계좌를 열어 잔액을 맞춥니다. 표준에 남길 일 공식 현금 포지션 보고. |
| FF7B | 유동성 예측 | 이어받는 데이터 계획 순현금흐름의 가정. 대사 지점 계획 버전의 입출금 금액. 오가는 방법 이 앱의 차이 모드 결과를 보고 FF7B 의 예측 항목을 점검합니다. 표준에 남길 일 예측 항목 유지·갱신. |
| FEBAN | 은행 계좌 명세 처리 | 이어받는 데이터 은행 명세 입출금 라인. 대사 지점 칸 금액과 명세 라인 합계. 오가는 방법 원천 라인 창에서 의심 라인을 찾아 FEBAN 으로 명세 처리 상태를 확인합니다. 표준에 남길 일 명세 전기와 후처리. |
| FBL3N | G/L 계정 라인 항목 | 이어받는 데이터 은행 계정의 전표 라인. 대사 지점 계정별 라인 합계와 칸 금액. 오가는 방법 원천 라인의 전표 번호로 FBL3N 에서 같은 전표를 엽니다. 표준에 남길 일 감사·세무 신고용 원장 조회. |
이 앱의 결과에서 표준 화면으로 가는 길은 위 표의 “오가는 방법”과 같습니다. 반대로 표준 화면에서 본 계좌 잔액은 이 앱의 계좌 행에서 같은 기간의 기말 잔액으로 다시 확인합니다. 법정·공시·감사·세무 신고용 보고는 표준에 남겨 둡니다.
S/4HANA 분석 스택과의 자리
S/4HANA 에는 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 수단이 이미 있습니다. 이 화면은 그것들과 경쟁하기보다, 같은 CDS 큐브 위에서 “끌어다 놓는 축 전환 · 칸에서 원천으로 · 계획 대비 차이 요인”을 한 화면에 모으는 자리를 맡습니다. 같은 쿼리를 Analysis for Office 에서 열어도 숫자는 같아야 하고, 그 차이가 0 인지를 대사 항목으로 둡니다. 특정 Fiori 분석 앱과의 기능 대응은 확인하지 못해 적지 않습니다(확인 필요).
분석 지표 정의표
| 지표 | 산식·판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 입금 · 출금 · 순현금흐름 | 입금 − 출금(출금은 −) | 피벗 · 차트 | ItemSet.Flow | 원화 환산, 거래일 환율 |
| 기초 · 기말 잔액 | 범위 첫 기간 기초 · 마지막 기간 기말 | 계산 항목 | OpenBal · EndBal | 기간 합산 아님 |
| 환율변동효과 | 외화 잔액의 환산 차이 | 계산 항목 · 에이전트 규칙 | FxEff | 환율은 가정값(확인 필요) |
| 롤포워드 차이 | 기초 + 순현금흐름 + 환율변동효과 − 기말 | 계산 항목(검산) | 위 항목 | 0 이 정상 |
| 가용 자금 | 기말 − 제한 자금 | 계산 항목 · 에이전트 규칙 | EndBal · Restr | 제한 자금은 마지막 기간 기준 |
| 계획 대비 차이 | 실적 − 계획, 차이율 = 차이 ÷ |계획| | 차이 모드 · 워터폴 | CubeSet · PlanSet | 금액·비율 둘 다 넘어야 색 표시 |
확장 포인트 — 운영에서 실제로 손대는 자리
| 확장 자리 | 고객사가 정하는 것 | 손대는 방식 |
|---|---|---|
| 은행·계좌 매핑 | 계좌를 자금 항목·활동 구분으로 묶는 기준 | 매핑 테이블에 행을 추가(현업) |
| 자금 항목 | 입출금 계정을 어느 자금 항목으로 볼지 | 계정별 매핑 테이블(회계·자금) |
| 계획 원천 | 계획 버전과 범주를 어디서 읽을지 | 계획 큐브 뷰의 원천 지정(기획·자금) |
| 확장 필드 | 거래처 그룹, 프로젝트 등 추가 차원 | 확장 필드 + 큐브 뷰 수정, 서비스 재활성화 |
| 권한 | 회사코드·은행·계좌 범위 | 권한 객체와 DCL 설계(보안) |
| 감시 규칙 | 임계값·보는 사람·주기 | 규칙 테이블 수정(자금) |
CDS 구성
샘플 데이터로 돌던 화면을 운영 데이터로 옮기려면 같은 서비스 계약을 CDS 로 채웁니다. 아래 코드는 구조를 보여 주는 스케치이며, 원천 테이블과 필드는 고객사 시스템에서 확인이 필요합니다(확인 필요 표시).
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZCPOS_ACCTMAP | 계정 → 계좌·자금 항목·활동 구분 매핑 | 코드 사전을 한 곳에 두어 뷰를 고치지 않고 표만 고치게 합니다. |
| 차원 | ZI_CashPosAccount | 계좌 한 행 + 은행 + 통화 + 마스킹 계좌번호 | 큐브에서 join 을 한 번만 걸고 값 도움말도 이 뷰를 봅니다. |
| 원천 라인 | ZI_CashPosItem | 입출금·잔액 라인을 유형(T/B)으로 구분 | 흐름은 합산하고 잔액은 기간 말 값만 쓰기 위해서입니다. |
| 큐브(실적) | ZI_CashPosCube | 입출금 흐름을 차원 단위로 집계 | 화면이 묶던 일을 DB 로 내립니다. |
| 큐브(계획) | ZI_CashPosPlan | 계획을 같은 키 모양으로 집계 | 키가 어긋나면 계획이 실적 옆에 붙지 않습니다. |
| 쿼리 | ZC_CashPosQuery | 행·열 기본 배치와 차이 정의 | Fiori 와 Analysis for Office 가 같은 정의를 씁니다. |
| 권한 | ZC_CashPosQuery(DCL) | 회사코드·계좌 범위 제한 | 집계를 읽는 자리에 걸어야 합계로 새지 않습니다. |
| 서비스 | ZUI_CashPos | OData V2 로 노출 | 화면이 읽는 이름과 키를 정합니다. |
① 계좌·자금 항목 매핑 테이블
자금 포지션의 차원은 코드 사전에서 시작합니다. 어느 은행 계정이 어느 계좌이고, 어느 입출금 계정이 어느 자금 항목·활동 구분인지가 이 테이블 한 곳에서 정해집니다. 이 매핑이 바뀌면 큐브의 모든 합계가 바뀌므로 변경 관리를 가장 엄격하게 합니다.
" ───────────────────────────────────────────────
" ZCPOS_ACCTMAP : 은행 계정 → 계좌 · 자금 항목 · 활동 구분 매핑
" 역할 : 큐브가 차원 값을 읽는 유일한 기준표
" 이유 : 계정 체계가 바뀌어도 뷰를 고치지 않고 이 표만 고치도록
" ───────────────────────────────────────────────
@EndUserText.label : '자금 포지션 계정 매핑'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zcpos_acctmap {
key client : abap.clnt not null;
key bukrs : bukrs not null;
key saknr : saknr not null; " 은행 계정(G/L)
acct_id : abap.char(10); " 계좌 식별
bank_id : abap.char(10); " 은행
item_id : abap.char(10); " 자금 항목
activity : abap.char(3); " 영업 / 투자 / 재무
cpty_grp : abap.char(4); " 거래처 그룹
restricted : abap_boolean; " 질권 설정·사용 제한 계좌 여부
}
② 차원 뷰 — 은행·계좌
차원은 큐브에서 join 을 한 번만 걸도록 별도 뷰로 둡니다. 값 도움말과 텍스트가 모두 이 뷰를 보게 하면 이름이 바뀔 때 한 곳만 고치면 됩니다. 은행 계좌 마스터(T012K 등)는 후보이며 실제 필드는 시스템에서 확인합니다.
" ───────────────────────────────────────────────
" ZI_CashPosAccount : 은행 계좌 차원 (한 행 = 한 계좌)
" 역할 : 계좌 이름·은행·통화·계좌번호(마스킹)를 한 곳에서 제공
" 이유 : 큐브·쿼리·값 도움말이 같은 이름표를 쓰게 함
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '자금 포지션 계좌 차원'
@ObjectModel.dataCategory : #DIMENSION
@Analytics.dataCategory : #DIMENSION
define view entity ZI_CashPosAccount
as select from t012k as k
inner join t012 as b on b.bukrs = k.bukrs and b.hbkid = k.hbkid " 확인 필요
{
key k.bukrs as CompanyCode,
key k.hbkid as HouseBank,
key k.hktid as AccountId,
@Semantics.currencyCode: true
k.waers as AccountCurrency,
b.banka as BankName,
concat('****', right(k.bankn, 4)) as AccountNoMasked
}
③ 원천 라인 뷰 — 입출금과 잔액 라인
큐브의 재료는 두 종류입니다. 은행 계정에 전기된 입출금 라인(거래 라인)과 기간 말 잔액 라인입니다. 둘을 한 뷰에서 라인 유형(T·B)으로 구분해 두면 큐브가 흐름은 T 만, 잔액은 B 만 집계할 수 있습니다. 전표 원천은 BKPF·BSEG 후보이며 표준 계정 잔액 뷰의 사용 여부는 확인 필요입니다.
" ───────────────────────────────────────────────
" ZI_CashPosItem : 은행 계정 입출금·잔액 라인
" 역할 : 전표 라인과 기간 말 잔액을 라인 유형(T/B)으로 구분해 제공
" 이유 : 흐름은 합산하고 잔액은 기간 말 값만 쓰기 위해 구분이 필요
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '자금 포지션 원천 라인'
define view entity ZI_CashPosItem
as select from bseg as s
inner join bkpf as h on h.bukrs = s.bukrs and h.belnr = s.belnr and h.gjahr = s.gjahr
inner join zcpos_acctmap as m on m.bukrs = s.bukrs and m.saknr = s.hkont
{
key s.bukrs, key s.belnr, key s.gjahr, key s.buzei,
'T' as LineType,
h.budat as PostingDate,
m.acct_id as AccountId,
m.item_id as CashItem,
m.activity as Activity,
case s.shkzg when 'S' then 'I' else 'E' end as InOut, " 차변=입금 / 대변=출금
@Semantics.amount.currencyCode: 'TransactionCurrency'
case s.shkzg when 'S' then s.wrbtr else -s.wrbtr end as FlowTc,
h.waers as TransactionCurrency,
@Semantics.amount.currencyCode: 'CompanyCurrency'
case s.shkzg when 'S' then s.dmbtr else -s.dmbtr end as FlowLc,
h.hwaer as CompanyCurrency
}
④ 큐브 뷰 — 실적 집계
화면이 브라우저에서 하던 집계를 DB 로 내립니다. 기간·회사·계좌·통화·활동 구분·자금 항목·거래처 그룹·입출 구분 단위로 묶고, 흐름은 합산합니다. 기초와 기말은 기간 합산이 아니므로 별도 잔액 뷰에서 마지막·첫 기간 값만 읽습니다.
" ───────────────────────────────────────────────
" ZI_CashPosCube : 자금 포지션 실적 큐브
" 역할 : 입출금 흐름을 9개 차원 단위로 집계(기간 합산)
" 이유 : 기간 합산이 가능한 측정값만 큐브에 두고 잔액은 따로 둠
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '자금 포지션 큐브'
@Analytics.dataCategory : #CUBE
@ObjectModel.modelingPattern : #ANALYTICAL_CUBE
define view entity ZI_CashPosCube
as select from ZI_CashPosItem as i
{
key left(i.PostingDate, 6) as Period,
key i.bukrs as CompanyCode,
key i.AccountId,
key i.TransactionCurrency,
key i.Activity,
key i.CashItem,
key i.InOut,
@Aggregation.default: #SUM
@Semantics.amount.currencyCode: 'CompanyCurrency'
sum(i.FlowLc) as Flow,
i.CompanyCurrency,
count(*) as LineCount
}
where i.LineType = 'T'
group by left(i.PostingDate, 6), i.bukrs, i.AccountId, i.TransactionCurrency,
i.Activity, i.CashItem, i.InOut, i.CompanyCurrency
⑤ 계획 뷰 — 같은 키 모양
계획은 실적과 같은 키 모양으로 집계해야 나란히 붙습니다. 키가 하나라도 어긋나면 계획이 실적 옆에 붙지 않고 따로 뜹니다. 계획 원천(유동성 예측 계획 테이블 등)은 확인 필요이며, 버전 코드는 고객사가 정합니다.
" ───────────────────────────────────────────────
" ZI_CashPosPlan : 자금 포지션 계획 큐브 (버전별)
" 역할 : 계획 순현금흐름을 실적과 같은 키로 제공
" 이유 : 실적 ↔ 계획 조인이 키 일치로만 성립하도록
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.dataCategory : #CUBE
define view entity ZI_CashPosPlan
as select from zcpos_plan as p " 계획 원천 — 확인 필요
{
key p.version as PlanVersion,
key p.period as Period,
key p.bukrs as CompanyCode,
key p.acct_id as AccountId,
key p.waers as TransactionCurrency,
key p.activity as Activity,
key p.item_id as CashItem,
key p.in_out as InOut,
@Semantics.amount.currencyCode: 'CompanyCurrency'
@Aggregation.default: #SUM
p.plan_flow as PlanFlow,
p.hwaer as CompanyCurrency
}
⑥ 쿼리 뷰 — 행·열 기본 배치와 계산 측정값
쿼리는 화면의 기본 배치를 정의합니다. 행 축 은행 › 계좌, 열 축 분기, 측정값 순현금흐름이 기본이고, 차이는 여기서 한 번만 정의합니다. 같은 쿼리를 Fiori 와 Analysis for Office 가 그대로 띄웁니다.
" ───────────────────────────────────────────────
" ZC_CashPosQuery : 자금 포지션 분석 쿼리
" 역할 : 기본 행·열 배치, 필터, 계산 측정값(차이)을 한 곳에서 정의
" 이유 : 화면과 다른 분석 도구가 같은 정의를 쓰게 함
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '자금 포지션 분석'
@Analytics.query : true
@Metadata.allowExtensions : true
define view entity ZC_CashPosQuery
as select from ZI_CashPosCube
association [0..1] to ZI_CashPosPlan as _Plan
on $projection.Period = _Plan.Period
and $projection.AccountId = _Plan.AccountId
{
@AnalyticsDetails.query.axis: #ROWS
@AnalyticsDetails.query.display: #KEY_TEXT
key AccountId,
@AnalyticsDetails.query.axis: #COLUMNS
key Period,
@Consumption.filter: { selectionType: #INTERVAL, multipleSelections: false, mandatory: false }
CompanyCode,
@AnalyticsDetails.query.axis: #FREE
Activity,
@DefaultAggregation: #SUM
Flow as NetFlow,
_Plan.PlanFlow as PlanFlow
}
⑦ 권한 — 회사코드와 계좌 범위
권한은 집계를 읽는 자리에 걸어야 합니다. 드릴스루에만 걸면 전사 합계와 자기 몫의 차이로 남의 숫자가 뺄셈으로 드러납니다. 회사코드와 은행 계좌 범위를 표준 권한 객체로 확인합니다.
" ───────────────────────────────────────────────
" ZC_CashPosQuery (DCL) : 회사코드 + 은행 계좌 범위 권한
" 역할 : 사용자가 볼 수 있는 회사코드·계좌 행만 반환
" 이유 : 집계 단계에서 걸어야 합계에서 남의 숫자가 새지 않음
" ───────────────────────────────────────────────
@EndUserText.label : '자금 포지션 권한'
@MappingRole : true
define role ZC_CashPosQuery {
grant select on ZC_CashPosQuery
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' )
and ( AccountId ) = aspect pfcg_auth( ZF_CPOS_ACC, ACCID, ACTVT = '03' ); " 권한 객체 이름은 설계 필요
}
⑧ 서비스 정의 — OData 로 내보내기
마지막으로 쿼리를 OData V2 서비스로 노출합니다. 화면이 읽는 엔티티셋 이름과 키를 이 정의가 정하므로, 화면의 서비스 계약과 같은 이름으로 맞춥니다.
" ───────────────────────────────────────────────
" ZUI_CashPos : 서비스 정의 + 바인딩(OData V2 - UI)
" 역할 : 쿼리·원천 라인·차원을 엔티티셋으로 노출
" 이유 : 화면의 서비스 계약과 이름·키를 맞추기 위해
" ───────────────────────────────────────────────
@EndUserText.label : '자금 포지션 서비스'
define service ZUI_CashPos {
expose ZC_CashPosQuery as CubeSet;
expose ZI_CashPosPlan as PlanSet;
expose ZI_CashPosItem as ItemSet;
expose ZI_CashPosAccount as AccountSet;
}
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다. 아래 항목은 코딩이 아니라 합의입니다.
| 해야 할 일 | 정하지 않으면 | 누가 |
|---|---|---|
| 계좌·자금 항목 매핑 | 계좌가 어느 자금 항목·활동 구분인지 갈려 첫 회의에서 숫자가 어긋납니다 | 자금팀 · 회계팀 |
| 원천 확정(전표·잔액·명세) | 같은 입출금이 두 번 잡히거나 빠집니다 | 자금팀 · IT |
| 환율 유형과 환산 시점 | 외화 칸이 표준 화면과 다르게 나옵니다 | 자금팀 · 회계팀 |
| 부호 규칙(입금 +, 출금 −) | 순현금흐름의 방향이 사람마다 달리 읽힙니다 | 자금팀 |
| 계획 원천과 버전 | “계획이 왜 이 숫자냐”가 반복됩니다 | 기획팀 · 자금팀 |
| 제한 자금 정의 | 가용 자금이 실제 쓸 수 있는 돈과 달라집니다 | 자금팀 · 재무팀 |
| 차원 범위 | 나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다 | 자금팀 · IT |
| 권한 설계 | 남의 회사·계좌 숫자가 합계에서 드러납니다 | 보안 · 권한 담당 |
| 대사 체계 | 표준 화면과 맞출 항목이 정해지지 않아 확인이 사람에게 남습니다 | 자금팀 · 회계팀 |
| 전송(TR) 순서 | 매핑·뷰·권한·서비스 순서가 어긋나 활성화에 실패합니다 | IT |
| 서비스 활성화와 주소 교체 | 화면이 샘플 서비스를 계속 읽습니다 | IT · Basis |
| 배치 주기와 에이전트 실행 | 점검이 사람이 화면을 열 때만 돕니다 | 자금팀 · Basis |
숫자를 믿을 수 있는가 — 검증 결과
샘플 데이터 3,714개 원천 라인(거래 3,573 · 계획 33 · 잔액 108)으로 대사식을 전수로 돌린 결과입니다. 의도적 예외는 0건입니다.
| 대사식 | 검사 건수 | 차이 |
|---|---|---|
| 큐브 흐름 = 원천 거래 라인 집계 | 472 | 0 |
| 롤포워드(기초 + 흐름 + 환율변동효과 = 기말) | 108 | 0 |
| 전월 기말 = 당월 기초 | 96 | 0 |
| 원천 잔액 라인 = 큐브 기말 | 108 | 0 |
| 통화별 외화 잔액 롤포워드(외화 기준) | 96 | 0 |
| 기간별 요약 = 큐브 재집계 | 27 | 0 |
| 검산 기록(기간 × 측정값) | 63 | 0 |
| 요인분해 합계 = 총차이(전체·한빛은행) | 2 | 0 |
운영 데이터로 갈 때
은행 입출금 라인이 수천만 건이면 집계는 브라우저가 아니라 DB 에서 해야 합니다. 큐브 뷰에서 기간·회사·계좌 단위로 미리 집계하고, 조회 조건에서 기간과 회사를 필수로 받아 한 번에 읽는 행을 줄입니다. 화면은 한 번에 5,000행까지만 읽고 행 조합은 300개까지만 그리도록 상한을 두었습니다. 응답 시간 기준은 고객사 데이터 규모로 실측해 정해야 하며 현재는 확인 필요입니다.
자주 묻는 질문
도입 상담과 데모에서 자주 나오는 질문을 네 묶음으로 적었습니다.
숫자와 산식
기초 잔액 + 순현금흐름 + 환율변동효과가 기말과 정말 맞습니까?
샘플 데이터 기준으로 칸마다 맞습니다. 기초는 조회 기간의 첫 기간 잔액, 기말은 마지막 기간 잔액이라 월을 합쳐 분기로 봐도 같은 식이 유지됩니다. 롤포워드 차이는 기초 + 순현금흐름 + 환율변동효과 − 기말 로 계산해 칸마다 보여 주며, 0이 아닌 칸이 있으면 빨갛게 표시됩니다. 운영 데이터에서 0이 아닌 칸이 나오면 원인은 대개 은행 명세 누락이나 기간 경계의 처리이므로 점검 필요 항목으로 보시면 됩니다.
셀 금액과 원천 전표 합계가 같다는 것은 어떻게 확인합니까?
칸을 누르면 그 금액을 이루는 원천 라인이 열리고, 라인 합계가 칸 금액과 같은지 같은 자리에 표시됩니다. 샘플 데이터에서는 대사식 7종 총 970건을 전수로 돌렸고 차이는 0건입니다. 표의 숫자는 별도 계산이 아니라 원천 라인을 더해 만든 큐브에서 나오기 때문에 같을 수밖에 없는 구조입니다.
잔액 칸과 흐름 칸이 열리는 방식이 왜 다릅니까?
흐름은 기간 안의 입출금을 더하지만 잔액은 기간 합이 아니라 기간 말 시점의 값이기 때문입니다. 그래서 기말 잔액 칸은 기간 말 잔액 라인이 외화금액·환율·원화금액으로 나오고, 기간을 합쳐도 잔액은 더하지 않고 마지막 기간 값을 씁니다.
가용 자금은 어떻게 정의합니까?
기말 잔액에서 제한 자금을 뺀 값으로 정의하고 제한 자금은 마지막 기간 기준으로 보며, 정의표에 산식을 적어 두었습니다. 회사마다 제한 자금의 범위가 달라 기준 확인이 필요합니다. 도입할 때 어떤 계좌·항목을 제한 자금으로 볼지 자금팀과 먼저 정하시기를 권합니다.
환율변동효과는 어떻게 계산합니까?
외화 계좌의 기초 잔액과 입출금, 기말 잔액을 각각 해당 시점 환율로 원화 환산한 뒤 남는 차이를 환율변동효과로 둡니다. 그래서 롤포워드는 외화 계좌에서도 닫힙니다. 환산 기준(기말환율·평균환율)은 회사의 회계정책에 따르므로 운영 전에 확인이 필요합니다.
계획 대비 차이의 여섯 요인은 어떻게 나눕니까?
입금 시기(회수 지연), 출금 시기(지급 앞당김), 금액 차이, 환율, 계획 외 발생, 계획 미실현입니다. 계획 + 요인 합 − 실적 이 매번 0이 되도록 나누는 순서를 정해 두었고, 검산 결과는 화면에서 바로 볼 수 있습니다. 요인 분류는 점검을 돕는 분해이며 원인의 최종 판단은 아닙니다.
쪼개는 축을 바꾸면 요인 금액이 달라집니까?
총차이는 같습니다. 요인별 배분은 계획과 실적을 맞추는 단위가 바뀌면 달라질 수 있으므로, 축을 바꾼 뒤에는 요인 합이 총차이와 같은지(검산 0)를 함께 확인해 주세요. 요인 분류는 점검 자료이며 원인의 최종 판단은 아닙니다.
계획 데이터는 어디서 가져옵니까?
계획은 은행 거래에서 나오지 않는 유일한 자료입니다. 자금 계획 테이블에서 같은 차원 구성으로 읽어 오며, 이 앱의 샘플에서는 가상 계획을 쓰고 있습니다. 운영에서는 자금팀이 관리하는 계획 버전을 연결하면 됩니다.
분기·반기 열은 원천 데이터에 없는데 어디서 만듭니까?
회계기간에서 만들어 큐브에 붙인 파생 차원입니다. 그래서 분기 열로 묶어도 원천 라인 수와 합계는 기간 열과 같습니다.
화면과 조작
행 축은 세 개, 열 축은 두 개까지인 이유가 있습니까?
열 축은 조합 수가 곱으로 늘어 머리글이 먼저 읽기 어려워지기 때문입니다. 열이 36개를 넘으면 경고를 띄우고, 행은 300개를 넘으면 경고를 띄웁니다. 상한을 넘겨도 계산은 되지만 읽을 수 있는 크기에서 멈추게 하는 것이 목적입니다.
축을 바꿀 때 서버를 다시 부릅니까?
부르지 않습니다. 조회 한 번으로 큐브를 받아 오고, 끌어다 놓는 축 변경은 브라우저에서 다시 묶기만 합니다. 그래서 축을 바꿔도 숫자가 갈라지지 않고 응답이 빠릅니다.
보는 사람(역할)을 바꾸면 무엇이 달라집니까?
경영·재무·자금·회계 관점별로 지표와 기본 축이 함께 바뀌고, 그 관점이 묻는 질문이 한 줄로 적힙니다. 데이터는 같고 보는 순서만 다릅니다. 바꾼 뒤 축을 직접 조정해도 됩니다.
저장한 레이아웃은 누구에게 보입니까?
저장한 보기는 레이아웃 관리에서 불러오고, 불러오면 축과 측정값, 필터가 그대로 복원됩니다. 표와 차트의 너비는 화면 크기가 기기마다 달라 레이아웃에 넣지 않고 그 브라우저에만 기억합니다.
차이 사유는 축을 바꾸면 사라집니까?
사라지지 않습니다. 사유는 조회 범위와 행 경로에 묶여 저장되므로 축을 바꾸거나 다시 조회해도 같은 행에 따라옵니다. 다만 행 경로가 달라지는 구성에서는 그 경로의 사유만 보입니다.
조회가 느려지지 않습니까?
원천 라인 전체를 내려받지 않습니다. 조회 단계에서 큐브로 집계해 받고, 칸을 눌렀을 때만 그 칸의 원천 라인을 건수 확인 후 읽어 옵니다. 큐브 행이 수만 건을 넘는 규모라면 서버 쪽 집계 범위를 먼저 줄이는 것을 권합니다.
휴대폰이나 좁은 창에서도 쓸 수 있습니까?
쓸 수 있습니다. 창이 좁으면 차트를 감추지 않고 표 아래로 내려 가로 스크롤 없이 읽게 합니다. 다만 열이 많은 구성은 넓은 화면이 편합니다.
AI 분석과 에이전트
AI가 금액을 잘못 말하면 어떻게 됩니까?
금액과 비율은 서비스가 큐브에서 계산해 넘기고, 해설은 그 숫자를 읽어 문장으로만 씁니다. 근거 표가 함께 나오므로 문장과 숫자를 바로 대조할 수 있고, 결론은 “점검 필요” 수준에서 멈춥니다. 최종 판단은 회사와 감사인의 몫입니다.
AI 모델이 없어도 쓸 수 있습니까?
쓸 수 있습니다. 모델을 쓰지 않을 때는 같은 근거로 규칙 기반 해설이 나옵니다. 모델은 문장을 매끄럽게 하는 선택 사항입니다.
API 키는 앱에 들어 있습니까?
기본 방식에서는 앱이 키를 갖지 않습니다. 사내 게이트웨이가 키를 들고 있고 앱은 게이트웨이만 부릅니다. 키를 화면이나 브라우저 저장소에 두지 않는 것이 원칙입니다.
에이전트는 무엇을 감시합니까?
가용 자금 하한, 계좌 잔액 하한, 외화 비중 한도 같은 규칙입니다. 규칙에 걸리면 대기함에 올라오고, 하루 한 번 실행합니다. 규칙은 표에 들어 있어 화면에서 더하거나 지울 수 있습니다.
같은 알림이 하루에 두 번 나가지 않습니까?
하루 한 번 제한을 서버 기록으로 판정하므로 브라우저를 여러 개 열어도 중복되지 않습니다.
대기함의 보고는 자동으로 발송됩니까?
자동으로 나가지 않습니다. 에이전트는 받을 사람과 본문 초안을 만들어 대기함에 올리고, 마지막 단추는 사람이 누릅니다.
도입과 운영
도입하려면 무엇부터 해야 합니까?
①은행 계좌와 자금 항목을 분석 차원에 맞추는 매핑을 정합니다. ②기초 잔액이 맞는지 표준 화면(FF7A·FF7B)과 대조합니다. ③계획 버전을 연결합니다. ④권한 범위를 정합니다. ⑤월말 한 번을 병행 운영하며 차이를 점검합니다. 이 순서를 지키면 숫자 논쟁이 도입 초기에 끝납니다.
표준 화면과 무엇이 다릅니까?
표준 현금 포지션(FF7A)과 유동성 예측(FF7B)은 날짜별 포지션과 예측에 강하고, 은행 명세 대사(FEBAN)나 계정별 라인 조회(FBL3N)는 건별 확인에 강합니다. 이 앱은 그 사이에서 축을 바꿔 가며 변동의 위치를 찾고, 계획 대비 차이와 사유를 한 화면에서 이어 주는 자리입니다. 표준을 대체하지 않고 함께 씁니다.
기존 보고는 없애야 합니까?
대부분 그대로 둡니다. 법정 보고와 감사 대응, 은행 대사는 표준 화면이 기준입니다. 이 앱은 회의 준비와 변동 점검에서 엑셀 취합을 줄이는 용도입니다.
권한은 어떻게 걸립니까?
CDS 조회 단계에서 회사코드 같은 권한 객체로 거릅니다. 권한이 없는 회사의 칸은 큐브에 들어오지 않으므로 화면에서 합계가 달라 보이는 일이 없습니다. 상세 구성은 CDS 구성 절에 있습니다.
ECC 에서도 됩니까?
구조가 달라집니다. 원천이 되는 테이블과 CDS 가 다르기 때문에 매핑과 큐브 구성을 따로 설계해야 하며, 화면은 그대로 쓸 수 있습니다. 먼저 적용 범위 상담이 필요합니다.
다통화와 다국어는 됩니까?
통화는 차원으로 올려 통화별로 볼 수 있고, 외화 계좌는 외화금액과 환율, 원화금액을 함께 보여 줍니다. 화면 글자는 i18n 파일로 분리되어 있어 언어를 더하는 일은 파일 하나를 더하는 일입니다.
유지보수에서 정기적으로 손이 가는 곳은 어디입니까?
계좌가 새로 열리거나 닫힐 때의 매핑과 계획 버전 갱신 정도입니다. 나머지는 데이터가 바뀌면 그대로 따라옵니다.
숫자가 기존 보고서와 다르면 어떻게 확인합니까?
①조회 범위(회사·기간·통화)가 같은지 봅니다. ②기초 시점이 같은지 봅니다. ③칸을 눌러 원천 라인 합계가 맞는지 봅니다. ④표준 화면(FBL3N)의 같은 계정과 대조합니다. 대부분 범위나 기초 시점이 다른 경우이며, 원천 라인에서 어긋나면 점검 필요 항목으로 올려 주세요.
이 앱의 결과를 회계 처리 근거로 써도 됩니까?
점검 도구입니다. 회계 처리와 공시의 최종 판단은 회사와 감사인이 하며, 이 앱의 분류와 해설은 그 판단을 위한 점검 자료로 쓰시기 바랍니다.