자금 솔루션 · 자금 포지션 분석

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종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리인지 아래에 적었습니다. 숫자는 모두 같은 샘플 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.

사용 방법

  1. 조회 조건 입력 — 위쪽 조회 조건에서 회사(다중 선택), 기간 시작·끝, 비교 기준(없음 또는 계획)을 정합니다. 모두 선택 사항이며 비우면 전체 범위입니다.
  2. 조회 — 조건 줄 오른쪽 끝의 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다. 저장한 보기 가운데 “열면 바로 조회”로 지정한 것이 있으면 열리자마자 조회됩니다.
  3. 요약 확인 — 조회 뒤 조건 영역은 한 줄 요약으로 접히고 입금·출금·순현금흐름·계획 대비 차이·기말 잔액·가용 자금 카드와 피벗·차트가 나타납니다.
  4. 보는 사람과 축 이동 — 경영·재무·자금·회계 버튼으로 관점을 바꾸고, 차원 칩을 행 축·열 축으로 끌어다 놓거나 X 로 뺍니다. 측정값·값 필터·표시 단위도 여기서 바꿉니다.
  5. 칸 클릭 상세 — 표의 칸을 누르면 그 금액을 이루는 원천 라인 목록이 열리고 합계 일치가 표시됩니다. 행을 고르고 변동 사유·해설·에이전트를 이어서 씁니다.
  6. 내보내기 — 표 상단의 CSV 로 현재 피벗을, 원천 라인 창의 CSV 로 라인 목록을, 해설 창의 보고서로 PowerPoint 를 내려받습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤(트리 표·값 도움·대화 상자)과 직접 그린 SVG 차트외부 차트 라이브러리를 들이지 않아 반입 심사 없이 사내망에서 돕니다.
집계·판정 로직브라우저의 피벗 엔진과 계산 항목 식, 서비스의 차이 분해·해설·에이전트 로직축 변경은 브라우저가, 요인분해·해설·에이전트처럼 서버 규칙이 필요한 일은 서비스가 맡습니다.
OData 서비스 구성OData V2 서비스 하나. 엔티티셋 14종(큐브·계획·원천 라인·차원·측정값·계산 항목·기간 요약·검산 기록·변동 사유·저장한 보기·감시 규칙·대기함·실행 기록)과 펑션 3종화면이 읽는 자료와 쓰는 자료를 서비스 계약 하나로 모아, 운영에서는 같은 계약을 CDS 로 채워 갈아 끼웁니다.
모델 구성기본 모델 하나(OData V2, 묶음 요청 없음)와 화면 상태용 JSON 모델 하나큐브와 계획은 조회 때 한 번만 읽고, 이후는 브라우저에서 다시 합산합니다.
테마sap_horizonSAP Fiori 표준 시각 언어를 그대로 씁니다.
항목내용
솔루션자금
업무 영역자금 포지션 분석(은행·계좌별 현금 흐름, 기초·기말 잔액, 가용 자금, 계획 대비 차이)
관련 기준서·대상 영역특정 기준서 연계 없음 · 대상 영역: 은행 계좌 잔액, 입출금 흐름, 외화 환산, 계획 대비 차이
SAP 표준 T-codeFF7A · FF7B · FEBAN · FBL3N
화면 성격다차원 분석(피벗 표 · 차트 · 원천 문서 · 차이 분석 · 에이전트)
데이터 연동OData V2 서비스 · 현재는 샘플 데이터로 동작 · 운영 원천 연동은 확인 필요
네임스페이스zui5.cashpos
SAP 표준 기능을 그대로 이어받은 부분 — 입출금과 잔액은 표준 은행 계정 전표와 은행 명세의 구조를 원천으로 삼는 것을 전제로 하며, 환율은 샘플에서는 가정값이고 운영에서는 표준 환율 테이블을 쓰도록 확인이 필요합니다. 이 화면은 그 데이터를 다차원으로 묶어 보고 차이를 설명하는 관점을 더합니다.

처음 열었을 때

조회 조건부터 피벗까지가 한 화면에 세로로 쌓입니다. 머리 영역은 접을 수 있어서 축을 짜는 동안에는 펼쳐 두고, 숫자를 들여다볼 때는 접어 둡니다.

조회 전 — 틀이 먼저 보인다
조회 전 — 틀이 먼저 보인다 — 조회를 누르기 전에도 조회 조건·보는 사람 버튼·레이아웃 보드·피벗 틀이 제자리에 서 있습니다.

조회 전에도 빈 화면을 주지 않습니다. 조건과 보드, 피벗 틀이 먼저 서 있고 값만 비어 있어서 처음 여는 사람도 무엇을 고르면 무엇이 채워지는지 먼저 봅니다. 기간은 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 분석 — 계획 대비 해설
AI 분석 — 계획 대비 해설 — 현재 표에서 계획과 크게 벌어진 은행을 점검 필요 문장으로 설명합니다.

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

AI 분석 — 근거표
AI 분석 — 근거표 — 해설에 쓴 숫자를 계획·실적·차이로 펼쳐 보여 줍니다.

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

보고서(PPT) 내려받기
보고서(PPT) 내려받기 — 해설 창에서 보고서 버튼을 누르면 브라우저에서 PowerPoint 가 만들어집니다.

현재 범위의 표와 차트, 워터폴을 담은 보고서를 서버에 파일을 남기지 않고 브라우저에서 바로 만듭니다. 내려받았다는 알림이 아래에 뜹니다.

AI 에이전트

화면을 열지 않아도 정해 둔 규칙으로 자금 부족과 환율 노출을 점검하고 대기함에 올립니다. 하루 한 번만 실행됩니다.

에이전트 — 감시 규칙과 실행 전
에이전트 — 감시 규칙과 실행 전 — 규칙 네 개와 지금 실행 버튼이 보이고, 오늘은 아직 실행하지 않았다고 알려 줍니다.

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

에이전트 — 실행 후 대기함
에이전트 — 실행 후 대기함 — 규칙 4개 중 6건이 걸렸다는 안내와 함께 대기함에 보고가 쌓입니다.

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

에이전트 — 하루 한 번 제한
에이전트 — 하루 한 번 제한 — 같은 날 두 번째 실행은 서버가 막고 내일 다시 실행하라고 안내합니다.

제한은 화면이 아니라 서비스가 실행 기록으로 판단합니다. 그래서 브라우저를 바꾸거나 새로 고쳐도 같은 날 두 번째 실행은 막힙니다.

레이아웃 저장과 복원

자주 쓰는 배치를 이름으로 저장하고 다음에 그대로 이어서 씁니다.

보기 저장 — 이름 붙여 저장
보기 저장 — 이름 붙여 저장 — 현재 축·필터·기준 값을 이름을 붙여 저장하고, 기본 보기와 열면 바로 조회를 지정합니다.

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

저장한 보기 관리
저장한 보기 관리 — 저장한 보기 목록에서 이름 변경·삭제와 기본·자동 조회 지정을 합니다.

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

기본 배치로 복원
기본 배치로 복원 — 복원을 누르면 처음 배치로 돌아가고 알림이 뜹니다.

축을 많이 바꾼 뒤에도 한 번에 처음 배치로 돌아갑니다. 저장한 보기는 그대로 남습니다.

좁은 화면과 한계

열·행 조합 상한과 휴대폰 폭의 배치입니다. 한계는 숨기지 않고 화면에 안내합니다.

열 조합 상한 안내
열 조합 상한 안내 — 열 조합이 36개를 넘으면 추가를 막고 안내를 띄웁니다.

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

행 조합 상한 안내
행 조합 상한 안내 — 행 조합이 300개를 넘으면 앞쪽만 보이고 줄이라는 안내가 뜹니다.

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

좁은 화면 — 390px
좁은 화면 — 390px — 조회 조건·보는 사람·요약 카드가 세로로 쌓입니다.

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

좁은 화면 — 차트가 표 아래로
좁은 화면 — 차트가 표 아래로 — 390px 에서는 차트가 표 오른쪽이 아니라 표 아래로 내려옵니다.

좁은 폭에서는 표와 차트가 나란히 놓일 자리가 없어 차트가 표 아래에 놓입니다. 표는 가로로 넘겨 보고 차트는 그대로 읽습니다.

화면 뒤에서 일어나는 일

축을 바꾸는 일과 원천으로 내려가는 일은 서로 다른 경로를 씁니다. 큐브와 계획은 조회 때 한 번 읽고, 그 뒤의 축 변경은 모두 브라우저 안에서 다시 합산합니다.

동작서비스 호출하는 일
조회큐브 · 계획 · 기간 요약 · 차원 · 측정값 · 검산 기록큐브와 카탈로그를 받아 둡니다(최대 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 으로 명세 처리 상태를 확인합니다. 표준에 남길 일 명세 전기와 후처리.
FBL3NG/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_CashPosOData 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건입니다.

대사식검사 건수차이
큐브 흐름 = 원천 거래 라인 집계4720
롤포워드(기초 + 흐름 + 환율변동효과 = 기말)1080
전월 기말 = 당월 기초960
원천 잔액 라인 = 큐브 기말1080
통화별 외화 잔액 롤포워드(외화 기준)960
기간별 요약 = 큐브 재집계270
검산 기록(기간 × 측정값)630
요인분해 합계 = 총차이(전체·한빛은행)20

운영 데이터로 갈 때

은행 입출금 라인이 수천만 건이면 집계는 브라우저가 아니라 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)의 같은 계정과 대조합니다. 대부분 범위나 기초 시점이 다른 경우이며, 원천 라인에서 어긋나면 점검 필요 항목으로 올려 주세요.

이 앱의 결과를 회계 처리 근거로 써도 됩니까?

점검 도구입니다. 회계 처리와 공시의 최종 판단은 회사와 감사인이 하며, 이 앱의 분류와 해설은 그 판단을 위한 점검 자료로 쓰시기 바랍니다.