수출 솔루션 · 영업·채권 관리

외화 매출채권 회수·환율 영향 다차원 분석 — 예정 대비 순회수액 차이를 요인으로 가르는 수출 채권 관리

큐브 집계 · 끌어다 놓는 축 구성 · 칸에서 청구 문서까지의 드릴스루 · 예정 대비 차이와 요인분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 하루 한 번 도는 AI 에이전트 — 소개 영상과 실제 화면 28종, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함14개 장면도입 포인트 → 조회 → 역할별 요약 → 축 전환 → 원천 문서 → 예정 대비 → 요인분해 → AI → 에이전트 → 표준 연계 → CDS → 질문

주요 재생 지점

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

수출 채권 회의의 질문은 매월 같습니다. 예정 대비 얼마나 덜 걷혔나, 왜 덜 걷혔나, 누가 무엇을 챙겨야 하나. 지금 이 세 답은 표준 조회 화면 · 밤새 만든 엑셀 · 회의 메모로 흩어져 있습니다. 이 앱은 세 답을 한 화면에 붙여, 회수 현황을 만드는 손일을 줄이고 “어느 숫자가 맞나” 하는 회의를 없앱니다.

한 줄 요약 — 회수율과 환율 영향 리포트는 누구나 만듭니다. 이 앱의 값은 조회 다음에 있습니다: 차이를 요인으로 가르고, 사유를 행에 남기고, 사람이 열지 않아도 감시하고, 보고서까지 만듭니다. 그리고 그 숫자가 청구 원천과 어긋나지 않는다는 것을 매번 스스로 검산합니다.

핵심 포인트 여덟 가지

포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 합계가 갈라지지 않는 피벗고객 · 국가 · 통화 · 회수 방식 등 11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모두 같은 큐브 1,070행에서 나오므로 합계가 어긋날 자리가 없습니다.고객별 · 국가별 · 통화별 리포트를 따로 만들고 합계가 다르면 맞추는 회의를 엽니다.
② 칸에서 청구 문서까지 한 번에칸을 누르면 그 금액을 만든 청구 문서 라인이 열리고 칸 값과 원천 합계가 같은지 그 자리에서 보입니다.리포트를 닫고 VF03 · FBL5N 을 열어 조건을 손으로 맞춥니다.
③ 예정 대비 차이를 다섯 요인으로순회수액 차이를 청구 규모 · 회수율(지연) · 환율 · 환가료·수수료 · 미계획으로 가르고 합이 총차이와 같은지 매번 검산합니다.엑셀로 밤새 분해하고 산식이 사람마다 달라집니다.
④ 변동 사유가 행에 남는다사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도 다음 기간에도 따라옵니다.같은 질문을 매달 다시 하고 지난달 답은 메일함에서 찾습니다.
⑤ 사람이 열지 않아도 도는 감시규칙마다 임계값과 받을 역할(영업 · 자금 · 채권 · CFO)이 붙어 걸리면 대기함에 올라가고, 하루 한 번 제한은 서버가 판정합니다.연체가 커진 날 아무도 화면을 열지 않으면 그대로 지나갑니다.
⑥ 보고서를 바로보고 있는 범위의 표와 차트를 담은 PowerPoint 보고서가 브라우저에서 바로 만들어집니다.화면을 캡처하고 숫자를 옮겨 적어 보고서를 다시 만듭니다.
⑦ 숫자는 모델에 맡기지 않는 AI금액 · 비율은 서비스가 계산하고 해설은 규칙 기반이 기본입니다. 모델 연결은 서비스 설정 하나이며 기본은 꺼짐입니다.AI 가 만든 숫자를 보고에 써도 되는지부터 따져야 합니다.
⑧ 환율 영향을 따로 본다외환차손익이 순회수액 차이에서 차지하는 몫이 요인으로 분리됩니다(이 자료에서는 +3,811백만원).환율 영향이 청구 규모 · 회수 지연과 섞여 원인을 가리기 어렵습니다.

총차이 30,642백만원의 몫 — 환율이 아니라 청구 규모와 회수 지연

예정 순회수액 493,849백만원 대비 실적 463,208백만원으로 30,642백만원이 모자랐다는 사실까지는 표준 리포트도 말해 줍니다. 다섯 요인으로 가르면 청구 규모 −23,482 · 회수율(지연) −23,782 · 환율 +3,811 · 환가료·수수료 +41 · 미계획 +12,771(백만원)이며, 환율은 오히려 도움이 됐습니다. 금액만 보았다면 “환율 때문에 덜 걷혔다”로 끝났을 회의가, 어느 고객의 청구가 얼마나 늦게 걷히는지를 정하는 회의로 바뀝니다.

고객 · 통화 · 회수 방식 조합마다
청구 규모 = (A청구 − P청구) · qp · cp  ·  회수율(지연) = cp · (A회수 − P회수 − (A청구 − P청구) · qp)

환율 = 실제 회수액 − 회수 외화 · cp  ·  환가료·수수료 = −(실제 수수료 − 예정 수수료)  ·  예정 행이 없는 조합은 미계획으로 따로 세웁니다. (cp 예정 환율, qp 예정 회수 비율)

검산 조건 — 다섯 요인의 합은 총차이와 어긋나지 않아야 하며 화면이 매번 그 등식을 보여 줍니다. 예정 행이 없는 조합은 억지로 나누지 않고 미계획으로 따로 세웁니다. 반올림 때문에 표시 합계가 1 차이 날 수 있습니다.

도입하면 달라지는 것

  • 마감 보고 준비 — 차이 표 · 요인분해 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합과 캡처가 줄어듭니다.
  • 회의의 주제 — "어느 숫자가 맞나" 보다 "어느 고객 · 통화부터 챙길 것인가" 를 이야기합니다.
  • 다음 기간으로 이어지는 기록 — 사유와 레이아웃이 남아 같은 설명을 다시 하지 않습니다.
  • 놓치는 날이 없는 감시 — 화면을 열지 않아도 규칙에 걸린 항목이 대기함에 올라옵니다.

이런 회사에 맞습니다

  • S/4HANA 를 쓰면서 수출 채권 회수와 환율 영향을 엑셀로 맞추고 있는 회사.
  • USD · EUR · JPY · CNY 등 여러 통화로 청구하고 L/C · D/A · D/P · T/T 를 섞어 쓰는 수출 비중이 큰 회사.
  • AI 를 쓰고 싶지만 숫자의 출처를 통제해야 하는 영업관리 · 자금 · 채권 조직.

여섯 가지 기능과, 그것이 없을 때 생기는 일

기능하는 일없을 때 생기는 일
축 바꿔 보기11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 배치. 같은 큐브에서 나오므로 합계가 갈라지지 않습니다.축마다 리포트를 따로 만들게 되고 그만큼 숫자가 어긋납니다.
청구 문서까지 내려가기칸을 누르면 그 금액을 만든 청구 문서 라인이 열립니다. 만든 조회 조건도 함께 보여 줍니다.숫자를 의심할 때마다 다른 화면을 열어 조건을 다시 넣어야 합니다.
예정 대비 차이비교 기준만 켜면 같은 표가 차이 리포트가 됩니다. 금액과 비율을 둘 다 넘을 때만 색을 칠합니다.실적 리포트와 차이 리포트를 따로 운영하게 됩니다.
차이 요인분해청구 규모 · 회수율(지연) · 환율 · 환가료·수수료 · 미계획으로 가르고 합이 총차이와 같은지 검산합니다."왜 줄었나" 를 엑셀로 만들게 되고 산식이 사람마다 달라집니다.
변동 사유 기록차이가 난 행에 사유를 적어 두면 조회 범위와 함께 남아 다음 기간에도 따라옵니다.같은 질문을 매달 다시 하게 됩니다.
스스로 도는 점검감시 규칙에 걸리면 받을 역할의 눈으로 숫자를 다시 적어 대기함에 올립니다.연체가 커진 날 아무도 화면을 열지 않으면 그대로 지나갑니다.

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

리포트에서 가장 비싼 질문은 "이 숫자 맞아?" 입니다. 만드는 쪽에서 먼저 대사식을 세워 전수로 돌린 결과입니다.

대사식검사 건수차이
큐브 합계 = 원천 라인 합계(측정값 9종)90
축 배치 6가지에서 피벗 총합 = 큐브 총합60
칸 금액 = 드릴스루 합계120
요인 합 = 총차이(범위 6개)60
예정 + 총차이 = 실적(범위 6개)60
다중 선택 필터 합계 = 선택 값들의 큐브 합10

대사식 6종 전부 차이 0. 화면 쪽은 따로 자동화로 돌려 축을 바꿔도 합계가 변하지 않는지, 칸 금액과 문서 합계가 같은지를 다시 잽니다.

도입 후 쓰는 순서

  1. 회사코드와 청구월 범위를 고르고 조회를 누릅니다. 필요하면 고객 · 통화 · 회수 방식 같은 차원 값을 여러 개 골라 범위를 좁힙니다.
  2. 레이아웃 보드에서 차원을 행 축 · 열 축으로 끌어다 놓습니다. 행 축은 3단계, 열 축은 2단계까지 쌓입니다.
  3. 궁금한 칸을 누르면 그 금액을 만든 청구 문서 라인이 열립니다. 칸 값과 원천 합계가 같은지 머리에 바로 보입니다.
  4. 비교 기준을 예정 대비로 켜면 같은 표가 차이 리포트가 됩니다. 차이가 난 행에는 사유를 적어 둡니다.
  5. 차이 분해 탭에서 그 차이가 왜 생겼는지를 다섯 요인으로 봅니다.
  6. 짜 둔 축은 이름을 붙여 저장해 둡니다. 기본 레이아웃으로 지정하면 다음에 열 때 그 배치로 시작합니다.

실행 화면

실제로 돌아가는 화면 28종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리이고 왜 그렇게 두었는지를 아래에 적었습니다. 숫자는 모두 같은 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.

사용 방법

  1. 조회조건 — 회사코드 · 시작 청구월 · 종료 청구월을 확인합니다. 기본은 전체 기간이고, 예정 기준은 고정으로 표시됩니다.
  2. 조회 — 오른쪽 위 파란 조회 버튼을 누르거나 입력란에서 Enter 키를 누릅니다. 조회 전에도 레이아웃 보드와 빈 피벗 틀이 보입니다.
  3. 역할별 요약 — 청구액 · 순회수액 · 회수율 · 외환차손익과 예정 대비 값을 봅니다. 역할(CFO · 영업 · 자금 · 채권)을 바꾸면 앞세우는 지표가 바뀝니다.
  4. 축 바꾸기 — 차원 칩을 눌러 행 · 열 · 사용 안 함으로 옮기거나 끌어다 놓습니다. 서비스를 다시 부르지 않습니다.
  5. 칸 · 행 누르기 — 칸은 원천 청구 문서 라인을 열고, 행 이름은 차트와 요인분해를 그 행 기준으로 바꿉니다.
  6. 내려받기와 저장 — 현재 피벗은 CSV 로(변동 사유 포함), 축 구성은 이름을 붙인 레이아웃으로 남깁니다.

무엇으로 만들었나

구성내용
화면OpenUI5 표준 컨트롤(트리 테이블 · 탭 · 팝업)과 sap_horizon 테마. 외부 차트 라이브러리 없이 SVG 로 직접 그린 차트
데이터OData V2 서비스 하나. 큐브는 조회할 때 한 번 읽고, 축을 바꾸는 일은 브라우저 안에서 다시 묶어 처리
계산요인분해 · 대사 · AI 근거 숫자는 서비스 쪽 계산 모듈 하나가 맡고, 화면은 읽기만 합니다
보고서PowerPoint 보고서는 브라우저에서 바로 만들어 내려받습니다. 서버에 파일을 남기지 않습니다
자료가상의 수출 청구 라인 9,026줄 · 큐브 1,070행 · 예정 1,099행. 실제 회사 데이터가 아닙니다
왜 화면과 계산을 나눴나 — 같은 계산 모듈을 서버와 점검용 모형이 함께 쓰므로, 화면에서 본 숫자와 서비스 숫자가 갈라질 자리가 없습니다. 운영 전환 때는 이 서비스 자리에 CDS 기반 서비스를 꽂으면 됩니다.

처음 열었을 때 — 틀이 먼저, 값은 조회 뒤에

조회를 누르기 전에도 조회조건 · 레이아웃 보드 · 피벗 틀이 서 있고, 조회하면 같은 자리에 값과 차트가 채워집니다.

조회 전 — 틀이 먼저 보인다
조회 전 — 틀이 먼저 보인다 — 차원 카탈로그와 측정값은 조회조건과 상관없는 목록이라 화면을 열 때 먼저 읽습니다.

조회 전에도 빈 화면을 주지 않습니다. 조회조건 · 레이아웃 보드 · 피벗 틀이 먼저 서 있고 값만 비어 있어서 처음 여는 사람도 무엇을 고르면 무엇이 채워지는지 먼저 봅니다. 기간은 2026-01 ~ 2026-09, 회사코드는 1000 이 기본입니다.

조회 직후 — 피벗과 차트, 요약 지표
조회 직후 — 피벗과 차트, 요약 지표 — 기본 배치는 행 축 도착 권역 › 도착 국가이며 오른쪽에는 같은 값을 그린 차트가 붙습니다.

조회하면 청구 라인 9,026줄이 큐브 1,070행으로 묶여 들어옵니다. 위쪽 역할별 요약에는 청구액 606,522백만원과 순회수액 463,208백만원, 회수율 76.0% 가 보이고 예정 대비 값이 작게 붙습니다. 행을 펼치면 하위 차원으로 내려가고 차트도 함께 바뀝니다.

레이아웃 보드 — 축을 옮긴 뒤
레이아웃 보드 — 축을 옮긴 뒤 — 차원 칩을 눌러 행 · 열 · 사용 안 함으로 옮기거나 끌어다 놓습니다.

고객을 행 축으로, 청구 통화를 열 축으로 옮긴 모습입니다. 이때 서비스를 다시 부르지 않고 브라우저가 들고 있는 큐브를 다시 묶으므로 총합 463,208 은 그대로이고 네트워크 요청은 0건입니다. 열에 올린 차원이 있으면 첫 분석 항목만 열에 펼쳐 보입니다.

머리 영역을 접으면 요약 한 줄
머리 영역을 접으면 요약 한 줄 — 조회조건 영역은 접을 수 있고 접으면 요약 한 줄이 남습니다.

표를 넓게 보고 싶을 때 머리 영역을 접습니다. 접은 상태에서도 기간 · 분석 항목 · 건수가 한 줄로 남아 지금 무엇을 보고 있는지 잃지 않습니다.

경영 요약 — 역할을 바꾸면 앞세우는 지표가 바뀐다

같은 큐브를 역할 네 가지의 눈으로 봅니다. 역할을 바꿔도 다시 조회하지 않습니다.

역할 요약 — CFO
역할 요약 — CFO — CFO 는 국가별 순회수액 · 회수율 · 외환차손익을 예정과 견줍니다.

청구액 · 순회수액 · 회수율 · 외환차손익 네 지표가 앞에 오고 행 축은 도착 권역 › 도착 국가입니다. 작은 글씨로 예정 값과 대비율이 붙어 한 줄로 달성 여부를 읽습니다.

역할 요약 — 영업 책임자
역할 요약 — 영업 책임자 — 영업 책임자는 고객 · 국가별 청구액 대비 회수율과 미회수 잔액을 봅니다.

행 축이 고객으로 바뀌고 미회수 잔액이 앞으로 옵니다. 국가가 같아도 고객별로 회수 속도가 다르다는 점이 바로 드러납니다.

역할 요약 — 자금 책임자
역할 요약 — 자금 책임자 — 자금 책임자는 통화 · 회수 방식별 회수액과 외환차손익, 환가료·수수료율을 봅니다.

행 축이 청구 통화 › 회수 방식입니다. 외환차손익과 환가료·수수료율이 앞에 와서 어느 통화와 방식에서 비용이 큰지 확인합니다.

역할 요약 — 채권 책임자
역할 요약 — 채권 책임자 — 채권 책임자는 결제 조건 · 회수 방식별 미회수 비중과 가중 회수일수를 봅니다.

결제 조건 30 · 60 · 90일별로 미회수 비중이 어떻게 다른지, 가중 회수일수가 몇 일인지를 봅니다. 연체 관리의 출발점이 되는 화면입니다.

축 전환과 범위 — 열 두 단계, 다중 선택, 차트 너비

축은 보는 사람이 바꾸고 범위는 차원 값을 여러 개 골라 좁힙니다.

열 축 2단계
열 축 2단계 — 열 축은 최대 2단계이며 조합이 36을 넘으면 더 추가하지 못하게 막습니다.

청구 통화에 이어 회수 방식을 열로 올려 통화 × 방식의 교차표를 만듭니다. 열 조합 수가 상한을 넘으면 반쯤 그린 표 대신 범위를 좁히라는 안내가 뜹니다.

차원 값 다중 선택
차원 값 다중 선택 — 차원마다 값 여러 개를 고르고 값마다 이름 · 코드 · 라인 수를 보여 줍니다.

도착 국가를 눌러 중국 · 일본 · 싱가포르처럼 여러 개를 고릅니다. 큐브에 있는 값만 올라오고 차원 안에서는 or, 차원 사이에서는 and 로 묶입니다.

선택한 국가로 좁힌 결과
선택한 국가로 좁힌 결과 — 필터 후 합계는 선택한 값들의 큐브 합과 같습니다.

필터 버튼에 선택 개수가 붙고 요약 지표와 표와 차트가 모두 좁혀진 범위로 바뀝니다. 서비스를 다시 부르지 않고 같은 큐브를 걸러 쓰기 때문입니다.

표와 차트 사이 손잡이
표와 차트 사이 손잡이 — 손잡이를 끌거나 방향키로 차트 너비를 조절하고 그 브라우저에 기억합니다.

표가 넓을 때는 차트를 줄이고 차트를 크게 볼 때는 표를 줄입니다. 값은 브라우저에만 남으므로 다른 사람 화면에는 영향이 없습니다.

칸에서 원천 청구 문서까지

숫자를 의심할 때 다른 화면을 열지 않도록, 칸에서 곧바로 문서 라인으로 내려갑니다.

드릴스루 — 칸 값 = 원천 합계
드릴스루 — 칸 값 = 원천 합계 — 행 경로와 열 조합이 조건이 되고 질의 조건이 머리에 표시됩니다.

전체 합계의 순회수액 칸을 누르면 원천 청구 라인 9,026줄 중 첫 500행이 열리고 "셀 값 463,208 = 원천 합계 463,208 일치" 가 적힙니다. 라인에는 청구 문서 · 전기일 · 만기일 · 회수일 · 선하증권 · 고객 · 회수 방식 · 결제 조건 · 인코텀즈 · 통화 · 청구액(외화) · 인식 환율이 있습니다. 더 보기로 이어 읽습니다.

기간별 요약
기간별 요약 — 청구월별 라인 수 · 청구액 · 회수액 · 미회수 · 외환차손익 · 순회수액 · 회수율 · 가중 회수일수.

서비스가 원천 라인을 청구월별로 합산한 값입니다. 7월 이후 회수율이 급격히 낮은 것은 결제 조건 때문에 기준일 현재 아직 회수 전인 청구가 많기 때문이며, 9월분은 전부 미회수입니다.

계산항목 — 전기되지 않는 단계를 행으로

회수분 인식액 · 순회수액 · 회수율 같은 단계는 원장에 전기되지 않습니다. 식으로 정의해 계산항목으로 둡니다.

분석 항목에서 계산항목 선택
분석 항목에서 계산항목 선택 — 계산항목 7종은 토큰 식으로 정의되어 측정값과 같이 고를 수 있습니다.

순회수액 = 회수액 − 환가료·수수료, 회수율 = (청구 − 미회수) ÷ 청구처럼 서비스가 식을 풀어 줍니다. 비율 계산항목은 합계 행에서도 분자 · 분모를 먼저 합산한 뒤 나누어 평균의 평균 오류를 피합니다.

기준 대비 차이 — 차이 모드, 변동 사유, 워터폴, 요인분해

예정 대비를 켜면 같은 표가 차이 리포트가 됩니다.

예정 대비 차이 모드
예정 대비 차이 모드 — 칸마다 실적 · 예정 · 차이 · 증감률이 붙습니다.

색은 숫자의 크기가 아니라 순회수액에 준 영향 방향으로 칠하며, 금액과 비율을 둘 다 넘을 때만 칠합니다. 외환차손익은 예정에 값이 없어 예정 0 으로 비교되므로 해석에 주의가 필요합니다.

변동 사유 입력
변동 사유 입력 — 사유 구분과 내용을 적으면 조회 범위와 행 경로를 키로 저장됩니다.

환율 · 지연 · 물량 · 수수료 · 분쟁 · 기타 중에서 고르고 내용을 적습니다. 키가 축 배치가 아니라 범위와 행 경로이므로 축을 바꾸거나 다음 기간에도 같은 행에 따라옵니다. CSV 와 AI 근거에도 실립니다.

차이 워터폴과 검산 줄
차이 워터폴과 검산 줄 — 예정 493,849 에서 실적 463,208 까지를 요인별 막대로 잇습니다.

청구 규모 −23,482 · 회수율(지연) −23,782 · 환율 +3,811 · 환가료·수수료 +41 · 미계획 +12,771 로 가르고 맨 아래 검산 줄이 "요인 합계 −30,642 / 총차이 −30,642 (오차 0.00) ✓" 를 매번 적습니다.

AI 분석과 보고서 — 숫자는 서비스가, 설명만 AI 가

AI 는 숫자를 만들지 않습니다. 서비스가 계산한 값을 읽어 설명합니다.

AI 분석 — 요약과 핵심 발견
AI 분석 — 요약과 핵심 발견 — 기본은 규칙 기반 해설이고 모델 연결은 서비스 설정 하나로 켭니다(기본 꺼짐).

현재 범위의 요약과 핵심 발견 다섯 건이 나옵니다. 원인은 단정하지 않고 점검 필요 항목만 제시하며, 이미 사유가 적힌 차이는 건너뜁니다.

근거 수치 표
근거 수치 표 — 모델에 넘긴 근거를 펼쳐 볼 수 있습니다.

대상 · 실적 · 예정 · 차이 · 사유 열이 그대로 보여 해설이 어떤 숫자에서 나왔는지 확인합니다. API 키는 앱 · 설명서 · 블로그 어디에도 두지 않습니다.

PowerPoint 보고서
PowerPoint 보고서 — 외부 라이브러리 없이 브라우저에서 만들어 내려받습니다.

현재 범위의 표지 · 요약 · 핵심 발견 · 기간별 표 · 차트 · 근거를 담은 6장짜리 .pptx 를 만듭니다. 파일은 PowerPoint 에서 열리는 것을 python-pptx 로 확인했습니다.

AI 에이전트 — 규칙, 대기함, 활동 기록

감시 규칙에 걸리면 받을 역할의 눈으로 보고를 대기함에 올립니다.

감시 규칙
감시 규칙 — 규칙 다섯 개: 회수율 하락 · 환율 영향 임계 · 미회수 비중 상한 · 환가료·수수료율 상한 · 예정 없는 청구 조합.

규칙마다 임계값 · 점검 주기 · 받을 역할 · 사용 여부가 있고 임계값은 화면에서 고칩니다. 판단과 기록은 화면이 아니라 서비스에 있습니다.

받은 보고(대기함)
받은 보고(대기함) — 걸린 항목이 역할별 보고로 올라옵니다.

이 자료에서는 한 번 실행에 20건이 걸렸습니다. 각 보고에는 제목 · 본문 · 심각도 · 행 경로가 있고 역할 필터로 걸러 봅니다. 문구는 모두 "점검 필요" 수준입니다.

활동 기록 — 하루 한 번 제한
활동 기록 — 하루 한 번 제한 — 같은 날 두 번째 실행은 서버가 건너뜀으로 판정하고 기록을 남깁니다.

첫 실행은 20건, 두 번째는 "하루 1회 제한으로 건너뜀" 이며 둘 다 활동 기록에 시각 · 주체 · 결과 · 건수로 남습니다. 운영에서는 같은 호출을 배치가 대신 부릅니다.

레이아웃 저장과 복원

축 · 조회조건 · 측정값 · 표시 행 수 · 접힘 상태를 이름 붙여 저장합니다.

레이아웃 저장
레이아웃 저장 — 이름을 붙이고 기본 레이아웃 · 자동 조회를 지정합니다.

기본 + 자동 조회로 저장하면 다음에 열 때 조회된 채로 시작합니다. 저장 값은 서비스에 남아 새로 고침해도 다시 보입니다.

저장된 레이아웃 목록
저장된 레이아웃 목록 — 메뉴에서 고르면 그 배치로 복원하고 관리 창에서 이름 바꾸기 · 삭제를 합니다.

기본으로 지정한 레이아웃에는 별표가 붙습니다. 자주 쓰는 배치는 이름을 붙여 두고 회의 때 불러 씁니다.

좁은 화면과 한계

창이 좁으면 차트를 감추지 않고 표 아래로 내립니다.

좁은 화면(390px)
좁은 화면(390px) — 차트가 표 아래로 쌓입니다.

휴대폰 폭에서도 같은 리포트를 봅니다. 표는 좌우로 밀고 차트는 아래에서 이어 봅니다.

열 조합 상한 안내
열 조합 상한 안내 — 행 · 열 조합이 상한을 넘으면 범위를 좁히라는 안내가 뜹니다.

열 축에 고객 · 결제 조건 · 회수 방식 같은 값이 많은 차원을 올리면 조합이 상한 36을 넘습니다. 이때는 반쯤 그린 표 대신 안내가 나오므로 필터로 범위를 먼저 좁힙니다.

화면 뒤에서 일어나는 일

여기부터는 목차에 올리지 않은 상세입니다. 위의 화면들이 어떤 규칙으로 그렇게 움직이는지를 자리별로 적었습니다.

피벗이 만들어지는 다섯 단계

  1. 큐브 받기 — 회사코드와 청구월 범위로 큐브 1,070행을 한 번 읽습니다. 조회할 때만 부릅니다.
  2. 행 묶기 — 행 축 차원을 순서대로 적용해 트리를 만듭니다(최대 3단계).
  3. 열 만들기 — 열 축 차원의 값 조합으로 열을 세웁니다(최대 2단계). 합계 열은 두지 않습니다. 표가 가로로 늘어나 차트 자리를 먹기 때문입니다.
  4. 칸 채우기 — 행 묶음 × 열 조합마다 측정값을 더합니다. 합계 칸이 어긋날 수 없는 이유는 모든 칸이 같은 큐브 행에서 나오기 때문입니다.
  5. 계산항목 붙이기 — 순회수액 · 회수율 · 외환차손익처럼 차원으로는 나오지 않는 값을 식으로 계산해 붙입니다. 계산항목은 7종입니다.

축을 바꿀 때와 칸에서 문서로 내려갈 때

축을 바꾸면 2단계부터 다시 돌 뿐 서비스를 다시 부르지 않습니다. 반면 칸을 눌러 청구 문서 라인으로 내려갈 때는 그 칸의 행 경로와 열 조합을 그대로 조회 조건으로 바꿔 서비스를 부르며, 한 번에 500행씩 끊어 읽습니다. 머리에는 건수와 합계가 적히고, 합계가 눌렀던 칸 값과 같아야 정상입니다.

차이 판정 규칙

판정 조건결과사용자 조치
실적 − 예정이 금액 기준과 비율 기준을 모두 넘음값 색 표시(영향 방향 기준)행을 선택해 요인분해와 사유를 확인
금액 또는 비율 중 하나만 넘음색 없이 값만 표시점검 여부는 사용자가 판단
칸 값 ≠ 드릴스루 원천 합계머리 메시지 경고원천 청구 라인과 집계 조건 확인
요인 합 ≠ 총차이검산 줄 경고계산 로직 확인(정상일 때 차이 0)
감시 규칙 임계 초과대기함 보고(높음 · 보통)받은 보고의 행 경로로 이동해 사유 입력
이미 사유가 적힌 차이AI 분석에서 건너뜀필요하면 사유 수정

모든 판정은 ‘점검 필요’ · ‘확인 필요’ 수준이며 원인을 단정하지 않습니다.

산출 · 대사식 순서

  1. 순회수액 = 회수액(원화) − 환가료·수수료
  2. 회수율(%) = (청구액 − 미회수 잔액) ÷ 청구액 × 100
  3. 외환차손익 = 회수액(원화) − 회수 외화액 × 청구 인식 환율
  4. 미회수 비중(%) = 미회수 잔액 ÷ 청구액 × 100 · 가중 회수일수 = Σ(회수일수 × 회수액) ÷ 회수액
  5. 차이 요인 다섯 가지 — 청구 규모 · 회수율(지연) · 환율 · 환가료·수수료 · 미계획. 합이 총차이와 같은지 매번 검산합니다.

조회조건

구분항목설명
조회조건회사코드 · 시작 청구월 · 종료 청구월큐브를 이 범위로 한 번 읽습니다. 기간 범위에는 상한을 둡니다.
차원 필터도착 권역 · 도착 국가 · 고객 · 청구 통화 · 회수 방식 · 결제 조건 · 인코텀즈 · 제품그룹 · 사업부차원마다 값을 여러 개 고릅니다(차원 안 or · 차원 간 and). 큐브에 있는 값만 올라오며 값마다 이름 · 코드 · 라인 수를 보여 줍니다.
기준예정 회수예정 대비 스위치를 켜면 같은 표에 예정과 차이가 붙습니다.
표시분석 항목 · 보기 방식 · 표시 행 수계산항목 7종을 포함해 열로 세울 항목을 고릅니다.

결과 컬럼

칸을 눌러 내려간 청구 문서 라인에는 아래 컬럼이 나옵니다. 금액은 원화 기준이고 외화 금액은 청구 통화 그대로 보여 줍니다.

컬럼설명
청구 문서 · 품목집계된 금액을 만든 원천 한 줄. VF03 에서 같은 번호로 열 수 있습니다
전기일 · 만기일 · 회수일지연일수와 연체일수를 구하는 기준
선하증권VL03N 의 선적 정보와 맞춰 보는 키
청구 외화 · 인식 환율 · 청구액청구액(원화) = 청구 외화 × 인식 환율
회수 외화 · 회수 환율 · 회수액회수액(원화) = 회수 외화 × 회수 환율
환가료·수수료 · 미회수 · 외환차손익순회수액과 미회수 비중의 재료

좁은 화면에서 달라지는 것

창이 좁으면 차트를 감추지 않고 표 아래로 내립니다. 조회조건은 한 줄씩 쌓이고 레이아웃 보드의 칩은 메뉴로 옮깁니다. 표가 가로로 넘치면 표 안에서만 밀려 보이고 페이지 전체는 밀리지 않습니다. 끌어다 놓기가 불편한 손가락 화면을 위해 모든 이동은 칩 메뉴로도 됩니다.

파일 구성

./
├─ index.html · Component.js · manifest.json · readme.html
├─ controller/ · view/ · model/ (큐브 묶기 · 차트 · 보고서)
├─ css/ · i18n/
├─ media/ (소개 영상 · 포스터 · 자막)
└─ odata/ (서비스 정의 · 계산 모듈 · 샘플 자료)

SAP 표준 기능 확장 포인트

이 앱은 표준을 대체하지 않고, 표준이 끊기는 자리만 이어 붙입니다. 먼저 표준만으로 되는 일과 되지 않는 일을 가릅니다.

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

하려는 일표준으로는이 앱이 더하는 것
청구 문서 한 건 확인VF03 으로 충분합니다집계 숫자에서 그 문서로 내려가는 길(드릴스루)
고객별 미결 항목 확인FBL5N 으로 충분합니다고객 · 통화 · 회수 방식 차원 조합별 집계와 미회수 비중
판매 오더 · 출하 확인VA03 · VL03N 으로 충분합니다결제 조건 · 선적 정보를 청구 라인과 같은 축에서 봄
수익성 관점의 비교KE30 이 담당합니다외환차손익을 예정 대비 요인으로 분리
예정 대비 차이의 원인표준 화면에는 해당 기능이 없습니다다섯 요인으로 가르고 합계를 검산
차이 사유 기록전표 단위 메모만 가능합니다조회 범위 + 행 경로를 키로 집계 행에 사유를 남김

T-code 별 연계 지점

표준을 대체하지 않습니다. 표준이 이미 잘하는 일은 표준에 두고, 끊기는 자리만 이어 붙이는 쪽으로 구성했습니다.

T-code용도이어지는 지점
VA03판매 오더 조회청구 전 오더의 결제 조건 · 통화를 확인합니다. 이 앱의 결제 조건 · 통화 차원이 이어받는 값입니다. 오더에서 본 조건과 칸의 열 값이 같은지 대사합니다.
VL03N출하 조회선적일과 선하증권 번호를 확인합니다. 드릴스루의 선하증권 열과 맞춰 보며, 선적 이후 청구가 늦어진 건이 없는지 봅니다.
VF03청구 문서 조회드릴스루로 연 청구 문서 번호를 표준 화면에서 열어 청구액(외화) · 인식 환율이 같은지 확인합니다. 이 앱 결과 → VF03 순으로 오갑니다.
FBL5N고객 개별 항목 조회미회수 잔액과 회수일을 대사합니다. 표준 화면 값은 이 앱의 같은 고객 · 통화 행에서 다시 봅니다. 법정 · 감사 대응 숫자는 표준에 남깁니다.
KE30수익성 분석수익성 관점의 환율 영향과 이 앱의 환율 요인을 나란히 놓고 방향이 같은지 봅니다. 기존 리포트는 없애지 않고 함께 둡니다.

표준 업무와 이 앱이 맞물리는 자리

업무T-code표준 화면에서 겪는 불편이 앱에서는
판매 오더 확인VA03오더에서 결제 조건을 보려면 문서마다 열어야 합니다결제 조건 열로 바로 묶어 봅니다
출하 · 선적 확인VL03N선적 시점과 회수 시점을 함께 보기 어렵습니다선하증권과 회수일을 같은 라인에서 봅니다
청구 문서 라인VF03집계 숫자에서 문서로 내려가는 길이 끊깁니다칸을 누르면 그 조건 그대로 열립니다
고객 미결 · 정산 항목FBL5N고객 단위 목록이라 차원 조합 집계가 없습니다같은 차원으로 묶어 미회수 비중을 봅니다
수익성 비교KE30환율 영향을 요인으로 가르는 자리는 없습니다환율을 다섯 요인 중 하나로 세웁니다
차이의 원인 분해없음표준에 없습니다. 보통 엑셀로 만듭니다다섯 요인으로 가르고 합계를 검산합니다

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

S/4HANA 에는 표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 도구가 있습니다. 이 앱은 그것들과 경쟁하기보다 같은 CDS 큐브를 읽는 또 하나의 화면으로 놓입니다. 큐브 뷰와 분석 쿼리를 운영에서 CDS 로 올리면 Analysis for Office 에서도 같은 숫자를 볼 수 있습니다.

다만 이 화면이 하는 일 — 축을 끌어다 놓는 피벗, 칸에서 문서까지의 드릴스루, 예정 대비 요인분해, 행에 남는 사유, 감시 에이전트 — 은 한 화면에 묶여 있다는 점이 다릅니다. 표준 분석 앱의 정확한 이름과 제공 범위는 릴리스마다 달라 확인 필요로 둡니다.

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

자리바탕내용
예정 환율 · 예정 회수 비율예정 데이터 테이블(커스텀)어디서 가져올지는 고객사가 정합니다. 요인분해의 기준이므로 가장 먼저 확정합니다.
환율 유형 · 환산 시점환율 테이블과 환산 함수청구 인식 시점 환율과 회수 시점 환율을 구분합니다.
환가료 · 수수료 범위확장 필드 · 조건회수 방식(L/C · D/A · D/P · T/T)별로 어떤 비용을 순회수액에서 뺄지 정합니다.
차원 추가큐브 뷰 필드 · 확장 필드영업조직 · 제품 · 프로젝트 같은 차원을 뷰에 추가합니다.
권한DCL · 권한 오브젝트회사코드 · 영업조직을 집계 단계에 겁니다.
감시 규칙규칙 테이블 · 배치 잡임계값과 받을 역할을 고객사 기준으로 바꿉니다.

지표 정의

지표산식쓰이는 자리표준 원천비고
청구액(원화)청구 외화 × 인식 환율피벗 · 큐브청구 문서 품목-
순회수액회수액 − 환가료·수수료계산항목고객 정산 항목NetCollected
회수율(%)(청구 − 미회수) ÷ 청구 × 100계산항목 · 역할 요약고객 미결 · 정산 항목예정 대비 pp 표시
외환차손익회수액 − 회수 외화 × 인식 환율계산항목 · 요인 환율환율 테이블 · 정산 전표환산 기준일은 확인 필요
미회수 비중(%)미회수 잔액 ÷ 청구액 × 100계산항목 · 채권 요약고객 미결 항목감시 규칙 R3
가중 회수일수Σ(회수일수 × 회수액) ÷ 회수액계산항목 · 채권 요약전기일 · 정산일-

CDS 구성

운영 전환에서 화면이 읽을 CDS 뷰를 레이어별로 정리하고 코드를 공개합니다. 코드는 구조를 보이기 위한 스케치이며 필드 이름과 값은 고객 시스템 기준으로 확인이 필요합니다.

뷰 레이어 구성

레이어뷰담는 것이렇게 나눈 이유
기준ZARFX_PLAN예정 환율 · 예정 회수 비율 · 예정 청구 외화예정은 전표에서 나오지 않는 유일한 자료라 별도 테이블로 둡니다.
차원ZI_ArFxCustomer고객 한 행 + 국가 + 권역 + 텍스트큐브에서 join 을 한 번만 걸고 값 도움말이 이 뷰 하나를 보게 합니다.
항목ZI_ArFxItem청구 라인 + 정산 + 환산원천 한 줄을 만드는 자리입니다.
큐브(실적)ZI_ArFxActualCube항목을 차원 조합으로 집계화면이 들고 묶던 일을 DB 로 내립니다.
큐브(예정)ZI_ArFxPlanCube예정 테이블을 같은 키 모양으로 집계키가 어긋나면 예정이 실적 옆에 붙지 않고 따로 뜹니다.
큐브(통합)ZI_ArFxCube실적 + 예정 + 차이차이를 화면에서 빼지 않고 여기서 한 번만 정의합니다.
쿼리ZC_ArFxQuery행 · 열 축 기본 배치와 계산 측정값표준 분석 도구가 그대로 띄웁니다.
권한ZI_ARFXCUBE (DCL)회사코드 · 영업조직집계를 읽는 자리에 걸어야 뺄셈으로 새지 않습니다.

① 예정 테이블 — 요인분해의 기준

예정 환율과 예정 회수 비율이 이 테이블에서 갈립니다. 요인분해의 기준이 되므로 운영 전환에서 가장 먼저 합의해야 합니다.

" ─────────────────────────────────────────────────────────────
" ZARFX_PLAN : 외화 매출채권 예정(회수 계획) 테이블
" 역할   : 청구월 × 고객 × 통화 × 방식 조합의 예정 청구 외화 · 회수 외화 · 예정 환율
" 나눈 이유: 예정은 전표에서 나오지 않는 유일한 자료이므로 원천을 따로 둔다
" ─────────────────────────────────────────────────────────────
@EndUserText.label : '외화 채권 예정'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table zarfx_plan {
  key client     : abap.clnt not null;
  key bukrs      : bukrs not null;
  key version    : abap.char(8) not null;          " 예정 버전
  key period     : abap.char(7) not null;          " YYYY-MM
  key customer   : kunnr not null;
  key currency   : waers not null;
  key method     : abap.char(2) not null;          " LC · DA · DP · TT
  key terms      : abap.char(3) not null;          " 결제 조건 일수
  billed_fc      : abap.curr(15,2);
  collect_fc     : abap.curr(15,2);
  plan_rate      : abap.dec(9,4);                  " 예정 환율
  plan_fee_rate  : abap.dec(7,5);
}

② 차원 뷰 — 고객과 국가

고객 한 행에 국가와 권역 · 텍스트를 붙입니다. 값 도움말과 필터가 이 뷰를 보게 해 두면 큐브에서 join 을 한 번만 겁니다.

" ─────────────────────────────────────────────────────────────
" ZI_ArFxCustomer : 고객 차원
" 나눈 이유: 국가 · 권역 매핑을 큐브마다 반복하지 않는다
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '고객 차원'
@ObjectModel.representativeKey : 'Customer'
@Analytics.dataCategory : #DIMENSION
define view entity ZI_ArFxCustomer
  as select from I_Customer as c
{
  @ObjectModel.text.element : ['CustomerName']
  key c.Customer,
      c.CustomerName,
      c.Country,
      " 권역은 국가 → 권역 매핑이 필요하다 (확인 필요 : 고객사 기준 매핑 테이블)
      case c.Country when 'US' then 'NA'
                     when 'DE' then 'EU' when 'NL' then 'EU'
                     else 'AS' end as Region
}

③ 항목 뷰 — 청구 라인과 정산

청구 품목 한 줄에 정산 정보를 붙이고 원화로 환산합니다. 이 뷰의 한 줄이 드릴스루가 여는 문서 라인입니다.

" ─────────────────────────────────────────────────────────────
" ZI_ArFxItem : 청구 라인 + 정산(회수) + 환산
" 확인 필요 : I_BillingDocumentItem · I_OperationalAcctgDocItem 의 필드명은
"            릴리스마다 다르므로 View Browser 로 실제 이름을 확인한다.
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '외화 채권 항목'
define view entity ZI_ArFxItem
  as select from I_BillingDocumentItem as i
    inner join   I_BillingDocument     as h on h.BillingDocument = i.BillingDocument
    left outer join I_OperationalAcctgDocItem as a
                 on  a.CompanyCode  = h.CompanyCode
                 and a.ClearingAccountingDocument is not initial
                 and a.InvoiceReference = h.BillingDocument
{
  key i.BillingDocument,
  key i.BillingDocumentItem,
      h.CompanyCode,
      h.BillingDocumentDate                         as PostDate,
      h.SoldToParty                                 as Customer,
      i.TransactionCurrency                         as Currency,
      @Semantics.amount.currencyCode : 'Currency'
      i.NetAmount                                   as BilledFc,
      a.ClearingDate                                as CollDate,
      @Semantics.amount.currencyCode : 'Currency'
      a.AmountInTransactionCurrency                 as CollectedFc
}

④ 실적 큐브 — 차원 조합으로 집계

화면이 브라우저에서 하던 묶음을 DB 로 내립니다. 환산은 항목 단위로 한 번 하고 합산합니다.

" ─────────────────────────────────────────────────────────────
" ZI_ArFxActualCube : 청구월 × 고객 × 통화 × 방식 조합별 집계
" 나눈 이유: 합산은 DB 에서, 환산은 항목 단위로 — 평균의 평균 오류를 피한다
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.dataCategory : #CUBE
@EndUserText.label : '외화 채권 큐브(실적)'
define view entity ZI_ArFxActualCube
  as select from ZI_ArFxItem as i
  association [1..1] to ZI_ArFxCustomer as _Customer on _Customer.Customer = i.Customer
{
  key i.CompanyCode,
  key cast( substring( cast( i.PostDate as abap.char(10) ), 1, 7 ) as abap.char(7) ) as Period,
  key i.Customer,
  key i.Currency,
      _Customer,
      @DefaultAggregation : #SUM
      count( * )                                   as Lines,
      @DefaultAggregation : #SUM
      @Semantics.amount.currencyCode : 'Currency'
      sum( i.BilledFc )                            as BilledFc,
      @DefaultAggregation : #SUM
      @Semantics.amount.currencyCode : 'Currency'
      sum( i.CollectedFc )                         as CollectedFc
}
group by i.CompanyCode, i.PostDate, i.Customer, i.Currency

⑤ 예정 큐브 — 같은 키 모양으로

예정 데이터를 실적 큐브와 같은 키로 집계합니다. 키가 어긋나면 예정이 실적 옆에 붙지 않고 따로 떠 미계획 요인으로 잡힙니다.

" ─────────────────────────────────────────────────────────────
" ZI_ArFxPlanCube : 예정 큐브
" 나눈 이유: 실적 큐브와 키 모양을 같게 맞춰 union 이 아니라 join 으로 붙인다
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.dataCategory : #CUBE
@EndUserText.label : '외화 채권 큐브(예정)'
define view entity ZI_ArFxPlanCube
  as select from zarfx_plan as p
{
  key p.bukrs     as CompanyCode,
  key p.version   as Version,
  key p.period    as Period,
  key p.customer  as Customer,
  key p.currency  as Currency,
      @DefaultAggregation : #SUM
      p.billed_fc  as PlanBilledFc,
      @DefaultAggregation : #SUM
      p.collect_fc as PlanCollectedFc,
      p.plan_rate  as PlanRate
}

⑥ 통합 큐브 — 차이를 한 곳에서 정의

실적과 예정을 붙여 차이를 한 번만 정의합니다. 화면 · 분석 도구 · 배치가 같은 정의를 읽습니다.

" ─────────────────────────────────────────────────────────────
" ZI_ArFxCube : 실적 + 예정 + 요인
" 나눈 이유: 요인분해 식을 화면 · 도구마다 따로 쓰지 않는다
" 요인 : 청구 규모 · 회수율(지연) · 환율 · 환가료·수수료 · 미계획
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.dataCategory : #CUBE
@EndUserText.label : '외화 채권 큐브(통합)'
define view entity ZI_ArFxCube
  as select from ZI_ArFxActualCube as a
    left outer join ZI_ArFxPlanCube as p
      on  p.CompanyCode = a.CompanyCode and p.Period = a.Period
      and p.Customer = a.Customer       and p.Currency = a.Currency
{
  key a.CompanyCode, key a.Period, key a.Customer, key a.Currency,
      a.BilledFc, a.CollectedFc, p.PlanBilledFc, p.PlanCollectedFc, p.PlanRate,
      " 청구 규모 요인 = (실적 청구 외화 − 예정 청구 외화) × 예정 회수 비율 × 예정 환율
      case when p.Period is null then 0
           else ( a.BilledFc - p.PlanBilledFc )
                * ( p.PlanCollectedFc / p.PlanBilledFc ) * p.PlanRate end as BillEffect,
      " 미계획 = 예정 행이 없는 조합의 실적 순회수액 (원화 환산 후 합산)
      case when p.Period is null then 1 else 0 end                       as IsUnplanned
}

⑦ 분석 쿼리 — 행 · 열 축과 계산 측정값

표준 분석 도구가 그대로 띄우는 쿼리입니다. 화면의 기본 배치(행 권역 › 국가, 열 없음)를 여기서도 같게 둡니다.

" ─────────────────────────────────────────────────────────────
" ZC_ArFxQuery : 분석 쿼리
" 나눈 이유: 필터 · 기본 배치 · 계산 측정값을 쿼리에 두어 도구가 달라도 같게 보이게 한다
" ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '외화 채권 다차원 분석'
@Analytics.query : true
define view entity ZC_ArFxQuery
  as select from ZI_ArFxCube
{
  @AnalyticsDetails.query.axis : #ROWS
  @Consumption.filter : { selectionType : #SINGLE, mandatory : true }
  key CompanyCode,
  @AnalyticsDetails.query.axis : #ROWS
  key Customer,
  @AnalyticsDetails.query.axis : #COLUMNS
  key Currency,
  @UI.lineItem : [{ position : 10 }]
  @AnalyticsDetails.query.decimals : 0
  BilledFc,
  @AnalyticsDetails.query.decimals : 0
  CollectedFc,
  @AnalyticsDetails.query.decimals : 1
  cast( 0 as abap.dec(5,1) ) as CollectRate   " 확인 필요 : 계산 측정값으로 정의(청구 대비 회수)
}

⑧ DCL — 집계를 읽는 자리에 건다

권한은 집계를 읽는 자리에 걸어야 합니다. 드릴스루에만 걸면 합계에서 뺄셈으로 남의 숫자가 새어 나옵니다.

" ─────────────────────────────────────────────────────────────
" ZI_ARFXCUBE : 통합 큐브 접근 제어
" 나눈 이유: 회사코드 · 영업조직을 집계 단계에서 제한한다
" ─────────────────────────────────────────────────────────────
@EndUserText.label : '외화 채권 큐브 권한'
@MappingRole : true
define role ZI_ARFXCUBE {
  grant select on ZI_ArFxCube
    where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

운영 시점에 해야 할 일

항목정할 것정하지 않으면맡을 곳
예정 원천 확정예정 환율 · 예정 청구 · 예정 회수를 어디서 가져오나"예정이 왜 이 숫자냐" 가 반복됩니다영업관리 · 자금
환율 유형 · 환산 시점청구 인식 환율과 회수 환율을 어느 유형 · 시점으로 보나표준 화면 금액과 어긋납니다자금 · 회계
순회수액 정의환가료 · 수수료 중 무엇을 뺄 것인가사람마다 순회수액이 다릅니다자금
부호 규칙대변 · 차변 표시와 환산 부호차이 표시 방향이 뒤집힙니다회계
차원 범위국가 · 권역 · 제품 · 사업부 등 어디까지 쓰나뷰를 고쳐 다시 이송해야 합니다영업관리
권한 설계회사코드 · 영업조직 범위남의 숫자가 합계로 드러납니다보안 · 권한
성능 기준집계를 DB 로 내리는 위치와 응답 시간 기준화면이 느려지고 재조회가 잦아집니다Basis · 개발
대사 체계어떤 표준 T-code 와 어느 주기로 맞출 것인가숫자가 틀려도 알 수 없습니다회계 · 영업관리
전송(TR) 순서테이블 → 뷰 → 쿼리 → DCL → 서비스 순서전송 후 활성화 오류가 납니다개발 · Basis
서비스 활성화와 주소 교체서비스 게시 후 manifest 서비스 주소를 바꿈화면이 샘플 데이터를 계속 읽습니다개발 · Basis
배치 등록에이전트를 부르는 배치 주기사람이 열 때만 점검됩니다Basis · 영업관리

합의가 먼저인 여섯 가지

정할 것안 정하면맡을 곳
예정 환율 · 예정 회수 비율 원천"예정이 왜 이 숫자냐" 가 반복됩니다영업관리 · 자금
환율 유형과 환산 시점외화 청구의 원화 환산이 표준 화면과 어긋납니다자금 · 회계
환가료·수수료 포함 범위순회수액 정의가 사람마다 달라집니다자금
쓸 차원 범위나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다영업관리
권한 기준전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다보안 · 권한
에이전트 실행 주기사람이 화면을 열 때만 점검이 돕니다Basis · 영업관리

위 여섯 가지는 코딩이 아니라 합의입니다. 합의가 끝나면 기술 작업은 CDS 뷰(큐브 · 예정 · 분석 쿼리 · 권한)를 만들고 화면을 올리는 일로, 블로그에 코드와 함께 공개해 두었습니다.

검토에서 자주 나오는 질문

구분질문답
숫자 신뢰리포트 숫자가 표준 화면 · 기존 보고서와 맞는가대사식 전수 검증 차이 0. VF03 · FBL5N 과 맞추는 절차를 운영 대사로 둡니다.
권한남의 영업조직 · 회사코드 숫자가 보이지 않는가회사코드 · 영업조직 권한을 집계 단계에 겁니다. 드릴스루에만 걸면 뺄셈으로 새어 나갑니다.
책임 소재법정 보고 · 공시 숫자를 이 앱이 만드는가아닙니다. 공시 · 감사 · 세무 신고 대응은 표준 거래에 둡니다. 이 앱은 분석과 점검용입니다.
업무 변화현업이 새로 배워야 하는 것이 많은가조회 → 축 끌어다 놓기 → 칸 누르기 세 가지입니다. 기존 리포트는 없애지 않고 함께 둡니다.
유지보수매달 손이 가는 곳이 어디인가예정 환율 · 예정 회수 비율의 원천 확정 하나입니다.
의존성외부 라이브러리 · 외부 전송이 있는가화면은 OpenUI5 표준 컨트롤과 직접 그린 차트만 씁니다. AI 해설은 규칙 기반이 기본이라 외부 전송이 없습니다.

검증 결과

대사식검사 건수차이
큐브 합계 = 원천 라인 합계(측정값 9종)90
축 배치 6가지에서 피벗 총합 = 큐브 총합60
칸 금액 = 드릴스루 합계120
요인 합 = 총차이(범위 6개)60
예정 + 총차이 = 실적(범위 6개)60
다중 선택 필터 합계 = 선택 값들의 큐브 합10

대사식 6종 전부 차이 0. 화면 쪽은 따로 자동화로 돌려 축을 바꿔도 합계가 변하지 않는지, 칸 금액과 문서 합계가 같은지를 다시 잽니다.

운영 데이터로 갈 때 — 청구 라인이 수천만 건이면

청구 라인이 수천만 건이 되면 브라우저가 큐브를 통째로 읽는 방식은 쓰지 못합니다. 집계는 반드시 DB(CDS 큐브)에서 하고, 화면은 조회조건으로 범위를 좁힌 결과만 받습니다. 청구월 · 회사코드는 필수 조회 파라미터로 두고 기간 범위를 제한합니다.

드릴스루는 한 번에 500행씩 끊어 읽습니다. 큐브 키에 쓰는 차원 필드에는 인덱스를 고려하고, 응답 시간 기준(예: 조회 3초 이내)을 합의해 기준을 넘는 조합은 범위를 좁히게 안내합니다. 이 기준은 환경마다 달라 확인 필요로 둡니다.

자주 묻는 질문

숫자와 산식

순회수액은 어떻게 정의하나요?

순회수액은 회수액(원화)에서 환가료·수수료를 뺀 값입니다. 계산항목으로 정의되어 서비스가 계산하고 화면은 읽기만 합니다. 환가료·수수료에 무엇을 넣을지는 고객사가 정해야 하며 그에 따라 값이 달라집니다.

환율 영향은 어떻게 나누나요?

실제 회수액(원화)에서 회수 외화를 예정 환율로 환산한 금액을 뺀 값이 환율 요인입니다. 이 자료에서는 +3,811백만원으로 총차이 −30,642백만원의 부족분을 오히려 줄였습니다. 환율이 불리하게 움직이면 같은 식에서 음수가 됩니다.

청구 규모와 회수율(지연) 요인은 무엇이 다른가요?

청구 규모는 예정보다 얼마나 더 청구했는지가 만드는 차이이고, 회수율(지연)은 청구한 것 중 기준일까지 얼마나 거둬들였는지가 만드는 차이입니다. 둘을 가르면 영업 문제인지 회수 문제인지 구분할 수 있습니다. 두 요인의 식은 설명서의 산출식 절에 있습니다.

예정이 없는 조합은 어떻게 보이나요?

예정 행이 없는 조합의 실적 순회수액은 미계획 요인으로 따로 나타나며 합계 검산에는 포함됩니다. 예정에 없던 고객 · 통화 · 방식 조합이 얼마나 되는지 한눈에 보입니다. 이 자료에서는 +12,771백만원입니다.

요인 합이 총차이와 다르면 어떻게 하나요?

정상 상태에서는 오차가 0 이며 화면이 매번 검산 줄로 보여 줍니다. 서로 다르다면 그 자체가 서비스 계산 로직 오류 신호이므로 점검이 필요합니다. 반올림 때문에 표시 합계가 1 정도 다를 수 있으나 내부 값은 일치합니다.

회수율이 7~9월에 낮은 것은 문제인가요?

샘플 데이터에서는 기준일 현재 결제 조건(30 · 60 · 90일)이 도래하지 않아 회수되지 않은 청구가 많기 때문입니다. 9월분은 전부 미회수입니다. 운영 데이터에서는 기준일과 연체 여부를 함께 보고 점검 필요 여부를 판단합니다.

화면과 조작

축을 바꾸면 서비스를 다시 부르나요?

부르지 않습니다. 조회조건으로 큐브를 한 번 읽어 두고 브라우저가 행 · 열 축대로 다시 묶습니다. 그래서 축을 바꿔도 총합이 변하지 않고 네트워크 요청이 생기지 않습니다.

행 축과 열 축은 몇 단계까지 되나요?

행 축은 최대 3단계, 열 축은 최대 2단계입니다. 열 조합이 36을 넘으면 더 추가하지 못하게 막고 범위를 좁히라는 안내를 띄웁니다. 반쯤 그린 표를 보여 주지 않습니다.

칸을 누르면 무엇이 열리나요?

그 금액을 만든 원천 청구 문서 라인이 열립니다. 행 경로와 열 조합이 조건이 되고 칸 값과 원천 합계가 같은지, 어떤 질의 조건으로 읽었는지가 머리에 표시됩니다. 기본 500행씩 읽고 더 보기로 이어 읽습니다.

변동 사유는 어디에 저장되나요?

서비스의 변동 사유 데이터에 조회 범위와 행 경로를 키로 저장됩니다. 축을 바꾸거나 새로 고침해도 같은 행이면 다시 보이고 CSV 와 AI 분석 근거에도 실립니다. 사유를 지우는 기능도 있습니다.

레이아웃은 무엇까지 저장하나요?

축 · 조회조건 · 측정값 · 표시 행 수 · 접힘 상태를 이름 붙여 저장합니다. 기본 레이아웃과 자동 조회를 지정할 수 있어, 기본 + 자동 조회로 저장하면 열 때 조회된 채로 시작합니다.

휴대폰에서도 쓸 수 있나요?

창이 좁아지면 차트를 감추지 않고 표 아래로 내립니다. 표는 좌우로 밀어 봅니다. 열 조합이 많은 분석은 넓은 화면이 편하므로 휴대폰에서는 요약 확인용으로 권합니다.

분석 기능

AI 분석은 숫자를 만드나요?

만들지 않습니다. 금액과 비율은 서비스가 계산하고 해설은 기본이 규칙 기반입니다. 모델 연결은 서비스 안 설정 하나로 켜며 기본은 꺼짐이고, API 키는 앱 · 설명서 · 블로그 어디에도 두지 않습니다.

이미 사유가 적힌 차이는 AI 분석에서 어떻게 되나요?

건너뜁니다. 이미 사람이 설명한 차이를 다시 해설하지 않기 위해서입니다. 건너뛴 항목은 따로 표시되어 무엇이 빠졌는지 확인할 수 있습니다.

PowerPoint 보고서에는 무엇이 담기나요?

현재 범위의 표지 · 요약 · 핵심 발견 · 기간별 표 · 차트 · 근거가 6장으로 담깁니다. 외부 라이브러리 없이 브라우저에서 만들며 PowerPoint 에서 열리는 .pptx 입니다.

에이전트는 하루에 몇 번 도나요?

하루 한 번만 실행합니다. 두 번째 호출은 서비스가 "하루 한 번 제한" 으로 건너뛰고 활동 기록만 남깁니다. 걸린 항목이 없어도 활동 기록은 남아 점검이 실제로 돌았음을 확인할 수 있습니다.

에이전트를 사람이 없는 시간에 돌릴 수 있나요?

화면 타이머는 화면이 열려 있는 동안만 하루 한 번 점검합니다. 사람이 없는 시간에는 운영 배치(SM36 또는 cron)가 같은 실행 호출을 부르는 방식을 권하며, 이 연결은 설명만 제공하고 샘플에는 포함하지 않았습니다.

도입과 운영

표준 T-code 와의 관계는 무엇인가요?

표준 실행은 SAP 표준 T-code 가 담당하고 이 화면은 조회 · 검증 관점을 더해 확장합니다. 청구 문서는 VF03, 미결 항목은 FBL5N, 오더 · 출하는 VA03 · VL03N, 수익성은 KE30 으로 이어 확인합니다.

기존 리포트를 없애야 하나요?

없애지 않습니다. 법정 · 감사 · 세무 신고 대응은 표준 화면에 남기고 이 화면은 분석과 점검용으로 함께 둡니다. 운영 초기에는 두 화면의 숫자를 대사해 신뢰를 쌓는 것을 권합니다.

데이터 원천과 정합성은 어떻게 확인하나요?

큐브 합계 = 원천 라인 합계 같은 대사식 6종을 전수로 돌려 모두 차이 0 임을 확인했습니다. 운영에서는 같은 대사식을 VF03 · FBL5N 과 맞추는 절차로 옮깁니다.

운영 데이터로 연결하는 절차와 소요는 어떻게 되나요?

예정 원천 확정, 환율 기준 합의, CDS 뷰 개발과 전송, 서비스 게시, 서비스 주소 교체 순서입니다. 소요는 합의 속도와 환경에 따라 달라 확인 필요이며, 개발보다 정하는 일이 많습니다.

권한과 보안은 어떻게 하나요?

회사코드와 영업조직 권한을 집계를 읽는 CDS 에 겁니다. 드릴스루에만 걸면 합계에서 남의 숫자가 뺄셈으로 드러나므로 집계 단계에서 거는 것이 핵심입니다. 화면은 표준 컨트롤과 직접 그린 차트만 씁니다.

대용량이면 성능은 어떤가요?

샘플은 브라우저가 큐브를 읽지만 운영에서는 집계를 CDS 로 내려 범위를 좁힌 결과만 받습니다. 청구월과 회사코드를 필수 조건으로 두고 드릴스루는 500행씩 읽습니다. 응답 시간 기준은 환경별로 합의합니다.

고객 · 국가 매핑이나 회수 방식이 바뀌면 어떻게 하나요?

고객 차원 뷰의 매핑만 고치면 큐브와 쿼리에 그대로 반영됩니다. 새 회수 방식이 생기면 방식 값과 환가료 규칙만 추가합니다. 화면 코드는 바꾸지 않습니다.

이 화면의 결과를 회계 · 감사 최종 근거로 써도 되나요?

이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고는 회사와 세무 대리인 · 관세사가 판단합니다. 이 화면의 AI 해설도 점검 필요 항목을 알려 줄 뿐 원인을 단정하지 않습니다.

적용 시기와 범위는 어떻게 되나요?

샘플 데이터 기준의 분석 화면이며 소개 영상과 화면은 그 결과입니다. 운영 환경 적용 범위와 시점은 환경 확인 후 정해지므로 현재 확인된 사실은 샘플 검증 결과까지입니다.