수출 솔루션 · 수출 선수금 · 계약부채

수출 선수금 계약부채 다차원 분석 — IFRS 15 계약부채를 계획과 견주고 원천 문서까지 따라가는 수출 솔루션 화면

선수금 수령 대 계획 · 끌어다 놓는 축 구성 · 칸에서 원천 문서까지의 드릴스루 · 여섯 요인 차이 분해 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면 33종, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함

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

수출 계약을 맺고 선수금을 받는 순간부터 선적해 청구서를 발행하기 전까지, 그 돈은 매출이 아니라 계약부채입니다(관련 기준서는 IFRS 15, K-IFRS 제1115호). 영업은 “계획한 선수금이 들어왔는가”를, 자금은 “어느 통화로 얼마가 쌓여 있고 환급 보증은 있는가”를, 재무는 “수익으로 넘어가는 속도가 느려 잔액만 쌓이는 곳은 어디인가”를, 경영진은 “계획에서 얼마나 벗어났고 왜인가”를 묻습니다. 이 질문의 답은 판매 오더(VA03) · 청구 문서(VF03) · 고객 개별 항목(FBL5N) · 전표(FB03)에 나뉘어 있어서, 보통은 엑셀에 내려 계획 파일과 붙여 한 장으로 맞춥니다. 그 순간부터 숫자가 사람마다 달라집니다.

이 화면은 그 표를 한 번에 만듭니다. 선수금 수령 라인을 큐브로 묶어 한 번만 읽고, 이후의 축 전환 · 범위 좁히기 · 기준 대비 차이 · 여섯 요인 분해는 브라우저에서 다시 집계합니다. 칸을 누르면 그 금액을 만든 원천 문서 라인이 열려 합계가 맞는지 바로 보이고, 외화 금액은 통화별로 따로 대사해 환율 영향이 거래 영향과 섞이지 않게 합니다(외화 환산은 IAS 21, K-IFRS 제1021호가 다루는 영역과 맞닿아 있습니다). 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.

한 줄 요약 — 계획 대비 선수금 수령 차이와 미대체 계약부채 잔액을 한 화면에서 여섯 요인으로 가르고, 원천 문서까지 따라가 합계를 검산합니다.

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 계획 대비 수령 차이를 한 표에서선수금 수령과 연초 계획을 같은 차원 조합으로 나란히 놓고, 차이가 사업에 준 영향(유리 · 불리)으로 색을 칠합니다.수령 표와 계획 파일을 엑셀에서 맞춰 붙이고, 조합이 어긋난 행은 손으로 찾습니다.
② 끌어다 놓으면 표가 다시 짜인다11개 차원을 행 3단계 · 열 2단계까지 끌어다 놓습니다. 모두 같은 큐브에서 나오므로 합계가 갈라지지 않습니다.고객별 · 국가별 · 제품그룹별 리포트를 따로 만들고 합계를 따로 맞춥니다.
③ 금액 칸에서 원천 문서까지칸을 누르면 그 금액을 만든 선수금 수령 라인이 열리고, 칸 값과 원천 합계가 같은지 표시됩니다.리포트를 닫고 고객 개별 항목 화면을 열어 조건을 다시 입력합니다.
④ 차이를 여섯 요인으로물량 · 외화 단가 · 선수금율 · 환율 · 미계획 수령 · 계획 미이행으로 가르고, 합이 총차이와 같은지 매번 검산합니다. 사유는 행에 남습니다.“왜 늘었나” 를 엑셀로 분해하고 산식이 사람마다 달라집니다. 사유는 메일함에 남습니다.
⑤ 수익으로 넘어가는 속도와 잔액수익 대체율 · 미대체 잔액률을 계산항목으로 두고, 단계 보기로 수령 → 수익 대체 → 환불 → 잔액 순서를 한 표로 봅니다.청구 화면과 선수금 화면을 번갈아 열어 잔액이 쌓이는 곳을 추측합니다.
⑥ 통화를 섞지 않는 외화 대사USD · EUR · JPY · CNY 외화 금액을 통화별로 대사하고, 환율 영향을 별도 요인으로 분리합니다.원화 환산액만 비교해 환율 영향과 거래 영향이 한 숫자에 섞입니다.
⑦ 점검을 대신 돌리는 에이전트와 보고서감시 규칙 5개가 받을 역할별로 보고를 올리고, 보고 중인 범위가 PowerPoint 보고서로 바로 만들어집니다.회의 때마다 사람이 숫자를 뽑아 슬라이드를 새로 만듭니다.

사례로 보는 효과

2026년 1~9월 검증용 샘플 데이터에서 선수금 수령은 88,205백만원으로 계획 81,730백만원보다 6,475백만원(+7.9%) 많았습니다. 합계만 보면 계획을 넘긴 좋은 결과로 읽힙니다. 여섯 요인으로 가르면 선수금율 +3,254 · 미계획 수령 +3,641 · 외화 단가 +899 · 환율 +755 · 물량 +8, 그리고 계획했으나 들어오지 않은 선수금 −2,082(단위 백만원)입니다. 여섯 요인의 합은 총차이 6,475 와 같고, 화면이 그 등식을 매번 검산 줄로 보여 줍니다. 같은 기간 계약부채 잔액은 30,546백만원으로 수령 대비 미대체 잔액률 34.6% 입니다. 계획에 없던 수령이 차이를 가장 크게 키웠고, 동시에 들어오지 않은 계획분이 따로 있다는 구성은 합계만 보는 표에서는 보이지 않습니다. 화면은 원인을 단정하지 않고 점검 필요 항목으로 올립니다. 이 숫자들을 만드는 데 쓴 대사식은 14,960건을 검사해 차이가 0건이었습니다.

도입하면 달라지는 것

  • 마감 보고 준비 — 수령 · 계획 · 요인 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합과 캡처가 줄어듭니다.
  • 회의의 주제 — “어느 숫자가 맞나” 보다 “들어오지 않은 선수금을 어떻게 할 것인가” 를 이야기합니다.
  • 영업 · 자금 · 재무의 같은 숫자 — 역할마다 보는 카드는 다르지만 같은 큐브에서 나옵니다.
  • 놓치지 않는 점검 — 아무도 화면을 열지 않아도 규칙에 걸린 항목이 역할별 보고로 올라옵니다.

이런 회사에 맞습니다

수출 비중이 높고 계약금 · 중도금 · 사전 잔금 형태로 선수금을 받는 계약이 많은 제조 · 설비 · 플랜트형 수출 회사에 맞습니다. 외화 통화가 여러 개이고(샘플은 USD · EUR · JPY · CNY) 환급 보증 확보 여부를 영업 · 자금 · 재무가 함께 보는 조직, 판매 오더 · 청구 · 수금 데이터를 S/4HANA 또는 ECC 에서 쓰며 월 단위로 계획 대비 수령을 챙기는 회사라면 효과가 큽니다. 수출이 일부이고 선수금 거래가 드문 회사는 표준 화면으로 충분할 수 있습니다.

실행 화면

사용 방법

  1. 조회조건을 입력합니다. 회사코드(필수, 기본 1000)와 시작 · 종료 기간(필수, 기본 2026-01 ~ 2026-09)을 정합니다. 비교 기준은 연초 확정 선수금 수령 계획으로 고정되어 있습니다.
  2. 조회를 누릅니다. 조회 버튼을 누르거나 조건 칸에서 Enter 키를 누릅니다. 큐브를 한 번 읽은 뒤의 축 전환 · 범위 좁히기 · 역할 전환은 서버를 다시 부르지 않습니다.
  3. 요약을 확인합니다. 역할 단추로 CEO · CFO · 영업 책임자 · 자금 책임자 카드를 바꿔 가며 수령 · 잔액 · 미대체 잔액률 · 요인을 먼저 봅니다.
  4. 탭과 축을 옮깁니다. 차원 칩을 사용 안 함 · 행 · 열 칸으로 끌어다 놓습니다(칩을 눌러 메뉴로도 옮길 수 있습니다). 분석 항목과 보기 방식, 차원 값 선택으로 범위를 좁힙니다.
  5. 행이나 칸을 눌러 상세로 내려갑니다. 행을 펼쳐 하위 차원으로 내려가고, 칸을 누르면 그 금액을 만든 원천 문서 라인이 열립니다. 기준 대비 스위치를 켜면 차이 · 요인 · 사유가 붙습니다.
  6. AI 분석과 에이전트를 씁니다. AI 분석 단추로 해설과 근거 표를 보고, AI 에이전트 단추로 감시 규칙 · 받은 보고 · 실행 기록을 확인합니다.
  7. 내보냅니다. 보고서 단추는 PowerPoint 파일을, CSV 단추는 현재 표를 내려받습니다. 레이아웃 단추로 자주 쓰는 축과 항목을 이름 붙여 저장합니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤과 직접 그린 SVG 차트외부 라이브러리 반입 심사가 필요 없고, 사내망에서도 그대로 열립니다.
집계 · 판정 로직브라우저의 큐브 재집계 파일(열 조합 36 · 행 노드 500 상한, 금액 1천만원 · 증감률 5% 판정)축을 바꿀 때마다 서버를 부르지 않고도 모든 표가 같은 큐브에서 나옵니다.
보고서브라우저에서 PowerPoint 를 짓는 파일서버에 문서 생성 환경이 없어도 회의 자료가 나옵니다.
레이아웃축 · 항목 · 접힘 상태를 이름 붙여 저장하는 파일자주 쓰는 구성을 다음에 열 때 그대로 되살립니다.
데이터 서비스OData V2 서비스 한 벌 — 큐브 · 계획 · 차원 정의 · 원천 라인 · 사유 · 레이아웃 · 에이전트로 나뉜 엔티티셋과 세 개의 펑션(요인분해 · 해설 · 에이전트 실행)운영 전환 때는 같은 계약을 CDS 기반 서비스로 바꾸면 화면은 그대로 둘 수 있습니다.
테마sap_horizonSAP 표준 화면과 같은 결의 색과 글꼴로 보여 사용자가 낯설어하지 않습니다.
SAP 표준 기능을 그대로 이어받은 부분 — 판매 오더 · 청구 문서 · 고객 개별 항목의 필드 구조와 부호 규칙을 그대로 따르고, 원천 확인은 표준 T-code(VA03 · VF03 · FBL5N · FB03)로 이어집니다. 이 화면은 그 위에 비교 · 분해 · 검산 관점을 더해 확장합니다.

처음 열었을 때

조회 전의 빈 틀과 조회 직후의 표·차트, 그리고 차원 칩을 끌어다 놓는 레이아웃 보드를 먼저 봅니다.

조회 전 화면
조회 전 화면 — 화면을 처음 엽니다.

화면을 처음 엽니다. 조회조건, 사용 안 함·행·열 세 칸의 레이아웃 보드, 비어 있는 표 틀이 보입니다. 조회를 누르기 전에는 숫자가 없는 것이 기본 상태입니다.

조회 직후
조회 직후 — 조회 버튼을 누르거나 조건 칸에서 Enter 키를 누릅니다.

조회 버튼을 누르거나 조건 칸에서 Enter 키를 누릅니다. 역할별 요약 카드, 지역·국가 트리 표, 오른쪽 막대 차트가 한 화면에 나타납니다. 선수금 수령과 계약부채 잔액의 전체 값을 먼저 확인합니다.

차원 칩 메뉴
차원 칩 메뉴 — 차원 칩을 누릅니다.

차원 칩을 누릅니다. 행·열 칸으로 보내거나 쓰지 않는 칸으로 되돌리는 메뉴가 열립니다. 끌어다 놓기가 어려운 환경에서도 같은 조작을 메뉴로 할 수 있습니다.

행 축에 고객 추가
행 축에 고객 추가 — 고객 칩을 행 칸으로 끌어다 놓습니다.

고객 칩을 행 칸으로 끌어다 놓습니다. 행이 지역 › 국가 › 고객 세 단계로 늘어나고 표가 바로 다시 짜입니다. 서버를 다시 부르지 않고, 전체 합계는 그대로입니다.

열 축에 선수금 구분 추가
열 축에 선수금 구분 추가 — 선수금 구분 칩을 열 칸으로 끌어다 놓습니다.

선수금 구분 칩을 열 칸으로 끌어다 놓습니다. 계약금 · 중도금 · 사전 잔금 열과 합계 열이 생깁니다. 열 조합이 늘어도 합계 열은 이전 전체 합계와 같습니다.

조회조건 접기
조회조건 접기 — 조회 조건 머리를 눌러 접습니다.

조회 조건 머리를 눌러 접습니다. 조건 영역이 요약 한 줄로 줄고 표 영역이 넓어집니다. 표를 크게 보며 작업할 때 사용합니다. 요약 줄에 현재 축과 항목이 남습니다.

경영 요약 — 역할마다 같은 데이터를 다른 눈으로

CEO · CFO · 영업 책임자 · 자금 책임자 네 역할의 요약 카드와 기본 축을 바꿔 봅니다.

CEO 보기
CEO 보기 — 역할을 CEO 로 둡니다.

역할을 CEO 로 둡니다. 국가별 선수금 수령 · 계약부채 잔액 · 미대체 잔액률과 계획 미이행 요인이 카드로 요약됩니다. 계획했던 선수금이 들어오지 않은 규모가 전사 유동성에 미치는 영향을 봅니다.

CFO 보기
CFO 보기 — 역할을 CFO 로 바꿉니다.

역할을 CFO 로 바꿉니다. 수령 전기월별로 선수금 수령 · 수익 대체액 · 계약부채 잔액 · 수익 대체율이 보입니다. 수익으로 넘어가는 속도와 잔액이 쌓이는 월을 점검합니다.

영업 책임자 보기
영업 책임자 보기 — 역할을 영업 책임자로 바꿉니다.

역할을 영업 책임자로 바꿉니다. 국가 › 고객 단위의 수령, 물량 · 선수금율 · 계획 미이행 요인이 보입니다. 계획에 없던 수령이나 들어오지 않은 선수금이 어느 고객에 있는지 확인합니다.

자금 책임자 보기
자금 책임자 보기 — 역할을 자금 책임자로 바꿉니다.

역할을 자금 책임자로 바꿉니다. 환급 보증 · 통화별 잔액, 환불·취소액, 환율 요인이 보입니다. 보증이 없는 잔액과 환율 영향이 큰 통화를 점검합니다.

축 전환과 범위 — 끌어다 놓으면 표가 다시 짜인다

열을 두 단계로 두고, 값 도움말로 범위를 좁히고, 차트를 함께 봅니다. 모두 브라우저에서 다시 집계합니다.

열 두 단계
열 두 단계 — 열 칸에 선수금 구분을 올려 둡니다.

열 칸에 선수금 구분을 올려 둡니다. 선수금 구분별 열과 합계 열, 위쪽 안내 줄이 보입니다. 열에 차원을 올리면 첫 항목만 열에 펼치고 나머지는 숨긴다는 안내를 확인합니다.

차원 값 선택
차원 값 선택 — 차원 필터 단추를 누릅니다.

차원 필터 단추를 누릅니다. 값 목록과 값별 원천 줄 수, 검색 칸이 보이는 값 도움말이 열립니다. 큐브에 있는 값만 올라오고, 같은 차원 안에서는 or 조건입니다.

범위를 좁힌 결과
범위를 좁힌 결과 — 지역에서 두 곳을 골라 적용합니다.

지역에서 두 곳을 골라 적용합니다. 표가 선택한 지역의 국가 › 고객으로 줄어듭니다. 차원 사이는 and 조건이라 선택한 범위의 합계만 남습니다.

항목 비교 차트
항목 비교 차트 — 행을 수령 전기월로 바꿉니다.

행을 수령 전기월로 바꿉니다. 월별 선수금 수령 · 수익 대체액 · 계약부채 잔액 묶음 막대가 보입니다. 월별 흐름과 잔액 증가를 한눈에 봅니다. 차트는 표 오른쪽 SVG 입니다.

칸에서 원천 문서까지

표의 칸을 눌러 그 금액을 만든 원천 문서 라인으로 내려갑니다.

드릴스루
드릴스루 — 표의 칸을 누릅니다.

표의 칸을 누릅니다. 질의 조건과 원천 문서 라인 표, 위쪽에 칸 값과 원천 합계의 일치 여부가 보입니다. 칸 금액과 원천 합계가 같으면 일치로 표시됩니다. 기본 500줄씩 읽고 더 보기로 이어서 읽습니다.

기간별 요약
기간별 요약 — 기간별 요약 단추를 누릅니다.

기간별 요약 단추를 누릅니다. 수령 전기월별 줄 수 · 수령 · 계획 · 차이 · 잔액이 표로 나옵니다. 월별 계획 대비 흐름을 별도 표로 확인합니다.

계산항목

전기되지 않는 단계를 계산항목으로 세워 단계별 표로 봅니다.

단계 보기
단계 보기 — 보기 방식을 단계 보기로 바꿉니다.

보기 방식을 단계 보기로 바꿉니다. 선수금 수령 → 수익 대체 → 환불·취소 → 계약부채 잔액 → 미대체 잔액률 단계가 행으로 놓입니다. 계약부채가 줄어드는 순서와 잔액률을 한 표에서 읽습니다.

기준 대비 차이 — 같은 표가 계획 대비 회의 자료가 된다

기준 대비 스위치를 켜고 차이 · 요인 · 사유를 봅니다.

차이 모드
차이 모드 — 기준 대비 스위치를 켭니다.

기준 대비 스위치를 켭니다. 칸마다 실적 · 기준 · 차이 · 증감률이 보이고, 금액과 비율을 모두 넘는 칸만 색이 칠해집니다. 영향 방향 기준으로 초록(유리) · 빨강(불리)입니다. 색이 없는 칸은 임계 안의 차이입니다.

차이 워터폴과 요인분해
차이 워터폴과 요인분해 — 차트 쪽에서 차이 분해를 고릅니다.

차트 쪽에서 차이 분해를 고릅니다. 계획 → 물량 → 외화 단가 → 선수금율 → 환율 → 미계획 수령 → 계획 미이행 → 실적 워터폴이 나옵니다. 요인 합계와 총차이를 비교한 검산 줄이 위쪽에 표시됩니다.

차이 사유 입력
차이 사유 입력 — 차이가 큰 행의 사유 단추를 누릅니다.

차이가 큰 행의 사유 단추를 누릅니다. 사유 구분과 사유 내용을 적는 창이 열립니다. 사유는 조회 범위와 행 경로를 키로 저장되어 다음 조회에도 따라옵니다.

사유 저장 뒤
사유 저장 뒤 — 저장을 누릅니다.

저장을 누릅니다. 해당 행의 사유 단추가 저장됨 표시로 바뀝니다. AI 분석은 사유가 적힌 차이를 건너뜁니다.

AI 분석과 보고서

현재 범위를 읽어 규칙 기반 해설을 쓰고 근거 표와 파워포인트 보고서를 만듭니다.

AI 분석 요약
AI 분석 요약 — AI 분석 단추를 누릅니다.

AI 분석 단추를 누릅니다. 분석 방식 표시, 범위, 요약 문단과 핵심 발견이 나옵니다. 숫자는 서비스가 계산한 값만 쓰고, 원인은 단정하지 않고 점검 필요 항목으로 제시합니다.

근거 표
근거 표 — 근거 표 접이식을 펼칩니다.

근거 표 접이식을 펼칩니다. 해설이 읽은 대상별 값 · 계획 · 차이 · 요인이 표로 보입니다. 해설의 모든 숫자를 이 표에서 다시 확인할 수 있습니다.

보고서 만들기
보고서 만들기 — 보고서 단추를 누릅니다.

보고서 단추를 누릅니다. 브라우저에서 만든 파워포인트 파일이 내려받아지고 완료 안내가 뜹니다. 표 · 차트 · 요인 · 해설이 담긴 장표를 바로 회의에 쓸 수 있습니다.

AI 에이전트

감시 규칙, 받은 보고, 실행 기록을 확인합니다.

감시 규칙
감시 규칙 — AI 에이전트 단추를 누릅니다.

AI 에이전트 단추를 누릅니다. 규칙 다섯 개와 기준값 · 점검 주기 · 받는 역할 · 사용 스위치가 보입니다. 기준값은 바로 고쳐 저장할 수 있습니다.

받은 보고
받은 보고 — 지금 실행을 누릅니다.

지금 실행을 누릅니다. 규칙에 걸린 항목이 역할별 보고로 올라오고 역할 필터로 좁힐 수 있습니다. 받을 역할 관점의 문장으로 점검 필요 항목이 정리됩니다.

실행 기록
실행 기록 — 실행 기록 탭을 봅니다.

실행 기록 탭을 봅니다. 실행 번호 · 시각 · 실행 주체 · 결과 · 발견 건수가 남아 있습니다. 같은 날 두 번째 실행은 하루 1회 제한으로 건너뛴 기록이 남습니다.

레이아웃 저장과 복원

자주 쓰는 축과 항목, 접힘 상태를 이름 붙여 저장하고 다시 엽니다.

레이아웃 저장
레이아웃 저장 — 레이아웃 단추에서 저장을 누릅니다.

레이아웃 단추에서 저장을 누릅니다. 이름, 기본 지정, 열 때 자동 조회 선택과 현재 축 요약이 보입니다. 기본과 자동 조회를 함께 지정하면 다음에 열 때 조회된 채로 시작합니다.

레이아웃 관리
레이아웃 관리 — 레이아웃 관리를 누릅니다.

레이아웃 관리를 누릅니다. 저장된 레이아웃 목록과 기본 · 자동 조회 · 이름 바꾸기 · 삭제 단추가 보입니다. 기본 레이아웃은 한 개만 둘 수 있습니다.

새로 고친 뒤 복원
새로 고친 뒤 복원 — 브라우저를 새로 고칩니다.

브라우저를 새로 고칩니다. 저장해 둔 축과 항목으로 자동 조회된 상태에서 시작합니다. 저장한 사유도 새로 고친 뒤에 그대로 보입니다.

좁은 화면과 범위 상한

열 조합이 상한을 넘을 때의 안내와 휴대폰 폭의 배치를 봅니다.

범위 상한 안내
범위 상한 안내 — 열 조합이 36개를 넘게 올립니다.

열 조합이 36개를 넘게 올립니다. 반쯤 그린 표 대신 범위를 좁히라는 안내가 뜹니다. 열 차원이나 선택값을 줄여 다시 시도합니다.

휴대폰 폭
휴대폰 폭 — 화면 폭을 390픽셀로 줄입니다.

화면 폭을 390픽셀로 줄입니다. 조회조건 · 레이아웃 보드 · 요약 카드가 세로로 쌓입니다. 가로 스크롤 없이 위에서 아래로 읽습니다.

휴대폰 폭의 차트
휴대폰 폭의 차트 — 아래로 내립니다.

아래로 내립니다. 차트가 표 아래로 내려와 같은 너비로 보입니다. 좁은 화면에서는 표를 먼저 읽고 차트를 이어서 봅니다.

화면 뒤에서 일어나는 일

수출 선수금은 받는 순간 계약부채가 되고, 선적(통제 이전)해 청구할 때 수익으로 넘어가며, 계약이 취소되면 환불됩니다. 이 화면은 그 흐름을 큐브 하나로 묶어 보여 줍니다.

단계하는 일결정되는 것
① 계약판매 오더의 계약 수량과 외화 계약 금액선수금율의 분모, 물량 요인의 기준
② 선수금 수령고객 선수금이 전기되어 계약부채가 늘고, 외화 금액과 환산율로 원화 수령액이 정해집니다수령(원화), 환산율, 환율 요인의 기준
③ 선적 · 청구청구 문서에서 선수금이 정리되며 수익으로 넘어가고 계약부채가 줄어듭니다수익 대체액, 수익 대체율
④ 환불 · 취소계약이 취소되면 환불 · 취소액만큼 잔액이 줄어듭니다환불 · 취소액
⑤ 큐브 집계원천 라인을 수령 전기월 · 고객 · 제품그룹 · 인코텀즈 · 선수금 구분으로 묶습니다큐브 916행(원천 6,976줄)
⑥ 분석브라우저가 축대로 다시 묶고 계획과 견주어 여섯 요인으로 나눕니다차이 · 요인 · 검산 줄

판정 조건 — 점검 필요가 되는 때

화면은 분류 · 집계 · 대사를 돕는 점검 도구이며 원인을 단정하지 않습니다. 모든 표시는 점검 필요 · 확인 필요로 읽습니다.

판정 조건결과 상태사용자 조치
금액 항목 : |차이| ≥ 10백만원 이고 |증감률| ≥ 5% (둘 다 넘을 때만)영향 방향이 유리하면 초록, 불리하면 빨강 칸색이 칠해진 칸의 사유 단추로 사유를 남기고 요인 분해로 원인 요인을 좁힙니다.
비율 항목(미대체 잔액률 등) : |차이| ≥ 0.5%포인트같은 방식으로 색칠잔액이 쌓이는 월 · 고객을 드릴스루로 확인합니다.
단가 항목 : |증감률| ≥ 5%같은 방식으로 색칠외화 단가 요인과 환율 요인을 나눠 확인합니다.
방향이 중립인 항목(수량 등)의 기준 초과주황(점검 필요)계획 수량과 실제 계약 수량을 비교합니다.
계획이 없는 칸 : 기준 0 으로 보고 |차이| ≥ 10백만원색칠 + 요인 “미계획 수령” 에 전액 반영계획에 없던 고객 · 제품 조합인지 영업 책임자와 확인합니다.
실적이 없는 계획 칸요인 “계획 미이행” 에 계획 전액을 음수로 반영들어오지 않은 선수금의 사유(보증서 대기 · 일정 변경)를 확인합니다.
요인 합계 ≠ 총차이검산 줄이 경고 색으로 바뀜(정상이면 오차 0.00 ✓)서비스 계산을 확인 필요로 두고 보고하지 않습니다.
드릴스루 칸 값 ≠ 원천 합계머리 줄이 경고 색으로 바뀜(정상이면 일치 표시)조회 조건을 확인하고 원천 라인을 직접 대조합니다.
열 조합 > 36 또는 행 노드 > 500표를 그리지 않고 범위를 좁히라는 안내열 차원이나 선택값을 줄입니다.
AI 해설 : 사유가 적힌 차이해설에서 건너뜀사유를 지우면 다시 해설 대상이 됩니다.

차이 요인분해 — 여섯 요인

계획(P)과 실적(A)의 수량 Q, 외화 단가 P = 계약금액 ÷ 수량, 선수금율 r = 선수금 ÷ 계약금액, 환산율 X = 원화 수령 ÷ 선수금(외화)를 기준으로 순차 대체합니다. 앞 요인부터 실적 값으로 하나씩 바꿔 가므로 합은 항상 총차이와 같습니다.

요인산식뜻
물량(Qa − Qp) × Pp × rp × Xp계약 수량이 계획과 달라서 생긴 차이
외화 단가Qa × (Pa − Pp) × rp × Xp외화 단가가 달라서 생긴 차이
선수금율Qa × Pa × (ra − rp) × Xp계약 대비 선수금 비율이 달라서 생긴 차이
환율총차이 − 위 세 요인(나머지)환산율 변화와 원 단위 반올림 잔차
미계획 수령계획이 없는 칸의 실적 전액계획에 없던 수령
계획 미이행실적이 없는 계획 칸의 계획 전액(음수)계획했으나 들어오지 않은 선수금

AI 에이전트 감시 규칙

감시 규칙은 5개이며 기준값은 화면에서 바로 고쳐 저장합니다. 규칙에 걸린 항목은 받을 역할의 관점으로 다시 적은 보고가 되어 대기함에 올라오고, 하루 한 번만 실행되도록 서비스가 판정합니다.

규칙조건기준값받는 역할
R1고객별 계획 대비 수령 차이 금액 초과150백만원영업 책임자
R2국가별 계획 미이행 선수금 금액 초과100백만원CEO
R3제품그룹별 미대체 잔액률 상한 초과45%CFO
R4고객별 보증 미설정 잔액 금액 초과300백만원자금 책임자
R5통화별 환율 영향 임계 초과25백만원자금 책임자

조회조건

필드필수기본값$filter 로 가는 모양
회사코드필수1000Bukrs eq '1000'
시작 기간필수2026-01Period ge '2026-01'
종료 기간필수2026-09Period le '2026-09'
비교 기준고정연초 확정 선수금 수령 계획Version eq 'PLN26'
저장된 레이아웃선택-저장해 둔 목록에서 선택
차원 필터(11개 차원)선택전체같은 차원 안에서는 or, 차원 사이는 and

결과 컬럼

컬럼의미산출
선수금 수령원화 기준 선수금 전기 합계원천 라인 합계
수익 대체액선적 청구로 선수금이 정리되어 수익으로 넘어간 금액청구 연계 정리 라인 합계
환불 · 취소액계약 취소 등으로 돌려준 금액환불 · 취소 라인 합계
계약부채 잔액아직 수익으로 넘어가지 않은 선수금수령 − 수익 대체 − 환불 · 취소
미대체 잔액률수령 대비 잔액의 비율잔액 ÷ 수령 × 100
수익 대체율수령 대비 수익으로 넘어간 비율수익 대체액 ÷ 수령 × 100
계약 수량계약 품목 수량품목 수량 합계
요인 6종기준 대비 차이를 가른 몫앞의 산식 표

좁은 화면에서 달라지는 것

화면 폭이 700픽셀 이하로 줄면 조회조건 · 레이아웃 보드 · 요약 카드가 세로로 쌓이고 머리 줄의 단추는 아이콘만 남습니다. 가로 스크롤 없이 위에서 아래로 읽고, 차트는 표 아래로 내려옵니다. 열 조합이 36개를 넘으면 반쯤 그린 표 대신 범위를 좁히라는 안내가 뜹니다.

파일 구성

index.html · Component.js · manifest.json
controller/   Main.controller.js · BaseController.js
view/         Main.view.xml · fragments/ (값 도움말 · 드릴스루 · 사유 · AI · 에이전트 · 레이아웃 · 기간 요약)
model/        cube.js(피벗 재집계) · chart.js(SVG 차트) · pptx.js(보고서) · layout.js · formatter.js · ErrorHandler.js
css/ · i18n/
odata/        서비스 정의와 구현, 엔티티셋별 데이터
media/        소개 영상 · 포스터 · 재생 지점

SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.

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

하고 싶은 일SAP 표준표준에서 걸리는 자리이 앱이 하는 일
계약 수량 · 금액 확인VA03오더를 한 건씩 열어야 하고 고객 · 제품그룹 합계는 따로 만들어야 합니다계약 수량과 금액을 큐브에 얹어 축으로 합산합니다
고객별 선수금 전기 내역FBL5N · FB03고객 한 곳씩 조건을 넣어 열고, 계획과 나란히 놓을 수 없습니다수령 라인을 큐브로 묶어 계획과 나란히 봅니다
청구와 선수금 정리VF03 · F-39정리된 금액이 월별 · 고객별로 합쳐져 있지 않습니다수익 대체액과 수익 대체율을 같은 표에 둡니다
선수금 전기 입력F-29입력 화면이라 분석 관점은 없습니다입력은 표준에 남기고 결과를 읽습니다
차이의 원인 분해없음표준에 없습니다. 보통 엑셀로 만듭니다여섯 요인으로 가르고 합계를 검산합니다
통화별 잔액 · 보증 점검FBL5N통화와 보증 여부를 겹쳐 보려면 별도 정리가 필요합니다통화 · 환급 보증을 축으로 올려 겹쳐 봅니다

T-code 별 연계 지점

T-code이름연계 지점
VA03판매 오더 조회이어받는 데이터는 오더의 계약 수량과 계약 금액(외화)입니다. 화면의 계약 수량 · 선수금율은 이 값에서 나옵니다. 화면 숫자를 의심하면 해당 오더를 VA03 으로 열어 수량 · 금액을 대조합니다. 오더 변경 · 승인은 표준에 남깁니다.
VF03청구 문서 조회선적 청구로 선수금이 수익으로 넘어간 금액(수익 대체액)의 원천입니다. 월별 수익 대체액이 청구 문서 합계와 맞는지 대사하고, 틀리면 해당 청구 문서를 VF03 으로 엽니다. 청구 발행과 취소는 표준에 남깁니다.
FBL5N고객 개별 항목선수금 전기 라인과 환불 · 취소의 원천입니다. 드릴스루로 열린 라인의 문서번호를 FBL5N 에서 고객 · 기간으로 다시 조회해 합계를 맞춥니다. 법정 · 감사 대응용 고객 원장은 표준 화면을 씁니다.
FB03전표 조회드릴스루 라인의 문서번호로 회계 전표를 열어 계정 · 통화 · 금액을 확인합니다. 화면에서 FB03 으로, FB03 에서 화면의 같은 라인으로 오가며 확인합니다.
F-29고객 선수금 전기선수금이 계약부채로 쌓이는 입력 지점입니다. 입력 방식(특별 G/L 지시자)이 화면의 선수금 구분 매핑의 기준이 됩니다. 입력은 표준에 남기고 이 화면은 결과를 읽습니다.
F-39고객 선수금 정리청구와 선수금을 정리하는 지점입니다. 정리 방식에 따라 수익 대체액의 원천 라인이 달라지므로 운영 전환 때 매핑을 확인합니다(정리 세부는 확인 필요).
기존 표준 리포트를 없애야 하나요? 없애지 않습니다. 법정 · 감사 · 세무 신고 대응과 개별 문서 처리는 표준 T-code 에 그대로 두고, 월간 계획 대비 점검과 원인 분해만 이 화면이 맡습니다. 두 화면의 숫자는 위 대사 지점에서 맞춰 봅니다.

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

S/4HANA 에는 CDS 기반 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 도구가 있습니다. 이 화면은 그것들과 겹치지 않는 자리를 맡습니다 — 표준 분석 도구가 준비된 질문에 답한다면, 이 화면은 계획 대비 수령 차이를 여섯 요인으로 가르고 칸에서 원천 문서까지 따라가는 질문에 답합니다. 운영 전환 때는 8번 절의 뷰 레이어(기준 → 차원 → 큐브 → 쿼리 → 권한)를 같은 방식으로 세우므로, 표준 분석 쿼리와 같은 서비스 층에 놓입니다. 확인하지 못한 Fiori 앱 이름은 적지 않았습니다.

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

확장 지점무엇을 손대나비고
선수금 구분 매핑특별 G/L 지시자 · 문서유형 · 적요 중 무엇으로 계약금 · 중도금 · 사전 잔금을 가를지현업이 직접 유지하는 매핑 테이블
환급 보증 구분보증서 확보 · 발급 대기 · 미설정의 원천 위치원천은 회사마다 달라 확인 필요
수익 대체 · 환불 인식청구 연계 정리 라인 중 어느 것을 수익 대체로 볼지인코텀즈별 통제 이전 시점과 함께 정함
확장 필드프로젝트 · 사업부 같은 회사 고유의 차원커스텀 필드를 큐브 차원으로 추가
권한회사코드 · 고객 · 국가 단위 조회 권한집계 단계에 걸어야 합계로 새지 않음
환율 유형수령 시점 환율 대 기준 환율환율 요인의 의미가 달라짐

관련 기준서와 대응 기능

기준서 해석과 인식 시점의 판단은 회사와 감사인의 몫입니다. 아래는 화면이 다루는 영역과의 대응만 적은 것입니다.

관련 기준서다루는 영역대응 기능비고
IFRS 15 (K-IFRS 제1115호) 고객과의 계약에서 생기는 수익고객이 대가를 먼저 지급했으나 수익으로 인식하기 전의 계약부채 잔액과 수익으로 넘어가는 시점계약부채 잔액, 수익 대체율, 미대체 잔액률, 단계 보기인식 시점 판단은 회사와 감사인의 몫이며 화면은 점검 도구
IAS 21 (K-IFRS 제1021호) 환율변동효과외화 거래의 원화 환산과 환율 변동의 영향환율 요인, 통화별 외화 대사환산 정책과 환율 유형은 회사 정책을 따름

분석 지표 정의표

지표산식판정 기준대응 기능원천 데이터비고
선수금 수령(원화)선수금 전기 라인 합계획 대비 |차이| ≥ 10백만원 · 5%큐브 · 기준 대비ACDOCA(또는 BSEG) 선수금 전기 라인특별 G/L 식별은 확인 필요
수익 대체액청구 연계 정리 라인 합계획 대비 같은 기준단계 보기청구 문서 연계 정리 라인확인 필요
환불 · 취소액환불 · 취소 전표 라인 합같은 기준(불리 방향)단계 보기고객 개별 항목 라인확인 필요
계약부채 잔액수령 − 수익 대체 − 환불 · 취소같은 기준(불리 방향)큐브 · 요약 카드파생-
미대체 잔액률잔액 ÷ 수령 × 100|차이| ≥ 0.5%포인트 · 에이전트 규칙 상한 45%계산항목 · 에이전트파생-
수익 대체율수익 대체액 ÷ 수령 × 100|차이| ≥ 0.5%포인트계산항목파생-
평균 선수금율선수금(외화) ÷ 계약금액(외화) × 100|차이| ≥ 0.5%포인트계산항목 · 선수금율 요인판매 오더 금액, 선수금 외화통화를 섞지 않음
요인 6종 합계물량 + 외화 단가 + 선수금율 + 환율 + 미계획 수령 + 계획 미이행총차이와 같아야 함차이 분해 · 검산 줄파생(서비스)합이 어긋나면 경고

CDS 구성

운영 데이터로 가는 길의 뷰 레이어와 코드 전문입니다. SAP 표준 CDS 뷰 이름은 확인한 것만 쓰고, 나머지는 원천 테이블 기준으로 적었으며 확인이 필요한 부분은 코드 주석에 표시했습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZEADV_MAP특별 G/L 지시자를 선수금 구분 · 보증 구분으로 옮깁니다값을 코드에 박지 않고 현업이 유지하게 합니다
차원ZI_ExpAdvItem전기 라인에 고객 · 국가 · 구분 · 통화를 붙입니다드릴스루가 읽는 원천 라인과 큐브가 같은 뿌리를 쓰게 합니다
정리ZI_ExpAdvClearing수익 대체와 환불 · 취소 라인을 뽑습니다잔액의 줄어드는 쪽을 따로 두어 대사를 쉽게 합니다
큐브(실적)ZI_ExpAdvCube수령 · 수익 대체 · 환불 · 잔액을 차원 조합으로 집계합니다화면이 들고 묶던 일을 DB 로 내립니다
큐브(계획)ZI_ExpAdvPlan연초 확정 계획을 같은 차원 조합으로 맞춥니다실적과 같은 키여야 기준 대비가 성립합니다
쿼리ZC_ExpAdvQuery화면이 읽는 소비 뷰 — 필터 · 정렬 · 집계 지시화면 요구를 큐브와 분리해 둡니다
권한ZC_ExpAdvQuery DCL회사코드 · 고객 · 국가 권한집계 단계에서 걸러 합계로 새지 않게 합니다
서비스ZUI_EXPADV서비스 정의와 바인딩(OData V2)화면의 서비스 주소를 이 바인딩으로 바꿉니다

① 기준 테이블 — 선수금 구분 · 환급 보증 매핑

전기 라인의 특별 G/L 지시자가 계약금인지 중도금인지, 환급 보증이 있는지를 결정하는 자리입니다. 이 매핑이 틀리면 이후의 모든 집계가 틀리므로, 코드에 박지 않고 현업이 유지하는 테이블로 둡니다.

" ──────────────────────────────────────────────────────────
" ZEADV_MAP — 선수금 구분 · 환급 보증 매핑 (기준 테이블)
" 역할 : 전기 라인의 특별 G/L 지시자를 분석 차원 값으로 옮긴다.
" 이렇게 나눈 이유 : 값을 코드에 박지 않고 현업이 직접 유지하게 한다.
" ──────────────────────────────────────────────────────────
@EndUserText.label : '선수금 구분 · 보증 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zeadv_map {
  key client     : abap.clnt not null;
  key bukrs      : bukrs not null;
  key umskz      : umskz not null;      " 특별 G/L 지시자
  adv_type       : abap.char(4);        " DEP 계약금 · MID 중도금 · FIN 사전 잔금
  guar_type      : abap.char(4);        " 환급 보증 구분 (확인 필요 : 원천은 회사마다 다름)
  valid_from     : abap.dats;
}

② 원천 라인 뷰 — 선수금 전기 라인에 차원 붙이기

드릴스루로 열리는 원천 라인과 큐브가 같은 뿌리를 쓰도록 라인 단위 뷰를 먼저 만듭니다. 고객의 국가는 고객 마스터에서, 선수금 구분은 위 매핑에서 가져옵니다.

" ──────────────────────────────────────────────────────────
" ZI_ExpAdvItem — 수출 선수금 원천 라인
" 역할 : 선수금 전기 라인을 고객 · 국가 · 구분 · 통화 차원과 함께 내려 준다.
" 이렇게 나눈 이유 : 큐브와 드릴스루가 같은 라인을 읽어 합계가 어긋나지 않게 한다.
" ──────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 선수금 원천 라인'
define view entity ZI_ExpAdvItem
  as select from acdoca as a
    inner join zeadv_map as m on  m.bukrs = a.rbukrs
                              and m.umskz = a.umskz
    left outer join kna1 as c on c.kunnr = a.kunnr
{
  key a.rbukrs as CompanyCode,
  key a.gjahr  as FiscalYear,
  key a.belnr  as AccountingDocument,
  key a.docln  as LedgerLine,
      a.poper  as FiscalPeriod,
      a.budat  as PostingDate,
      a.kunnr  as Customer,
      c.land1  as Country,
      m.adv_type  as AdvanceType,
      m.guar_type as GuaranteeType,
      a.rhcur  as LocalCurrency,
      @Semantics.amount.currencyCode: 'LocalCurrency'
      a.hsl    as AmountInLocalCurrency,
      a.zuonr  as ClearingKind,      " 정리 구분(B 청구 정리 · R 환불) — 원천 필드는 운영 시점에 확정(확인 필요)
      a.rwcur  as TransactionCurrency,
      @Semantics.amount.currencyCode: 'TransactionCurrency'
      a.wsl    as AmountInTransactionCurrency
}
where a.rldnr = '0L'
  and a.koart = 'D'     " 고객 계정 라인만 (선수금 식별 조건은 운영 시점에 확정)

③ 정리 라인 뷰 — 수익 대체와 환불 · 취소

계약부채가 줄어드는 쪽입니다. 청구 문서로 정리된 금액은 수익 대체로, 취소로 돌려준 금액은 환불 · 취소로 갈라 둡니다. 어느 라인을 수익 대체로 볼지는 인코텀즈별 통제 이전 시점과 함께 운영 시점에 정합니다.

" ──────────────────────────────────────────────────────────
" ZI_ExpAdvClearing — 선수금 정리 라인
" 역할 : 수익 대체(청구 정리)와 환불 · 취소 금액을 라인 단위로 내려 준다.
" 이렇게 나눈 이유 : 잔액이 줄어드는 쪽을 따로 두어 대사식을 단순하게 한다.
" ──────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '수출 선수금 정리 라인'
define view entity ZI_ExpAdvClearing
  as select from ZI_ExpAdvItem as i
{
  key i.CompanyCode, key i.FiscalYear, key i.AccountingDocument, key i.LedgerLine,
      i.Customer, i.Country, i.AdvanceType, i.GuaranteeType, i.FiscalPeriod,
      i.LocalCurrency,
      @Semantics.amount.currencyCode: 'LocalCurrency'
      case when i.AmountInLocalCurrency < 0 and i.ClearingKind = 'B'
           then abs( i.AmountInLocalCurrency ) else 0 end  as TransferredAmount,
      @Semantics.amount.currencyCode: 'LocalCurrency'
      case when i.AmountInLocalCurrency < 0 and i.ClearingKind = 'R'
           then abs( i.AmountInLocalCurrency ) else 0 end  as RefundedAmount
}
" ClearingKind 는 청구 정리(B) / 환불(R) 구분 — 원천 필드는 운영 시점에 확정(확인 필요)

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

화면이 들고 묶던 일을 DB 로 내리는 뷰입니다. 수령 · 수익 대체 · 환불 · 잔액을 같은 키로 집계하고, 외화 금액은 통화별로 따로 보존합니다. 잔액 = 수령 − 수익 대체 − 환불 항등식이 이 뷰에서 정해집니다.

" ──────────────────────────────────────────────────────────
" ZI_ExpAdvCube — 수출 선수금 실적 큐브
" 역할 : 수령 · 수익 대체 · 환불 · 잔액을 차원 조합으로 집계한다.
" 이렇게 나눈 이유 : 화면은 이 큐브를 한 번 읽고 이후 재집계는 브라우저가 한다.
" ──────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
@EndUserText.label: '수출 선수금 실적 큐브'
define view entity ZI_ExpAdvCube
  as select from ZI_ExpAdvItem as i
    left outer join ZI_ExpAdvClearing as k
      on  k.CompanyCode = i.CompanyCode and k.FiscalYear = i.FiscalYear
      and k.AccountingDocument = i.AccountingDocument and k.LedgerLine = i.LedgerLine
{
  key i.CompanyCode,
  key i.FiscalPeriod,
  key i.Customer,
  key i.Country,
  key i.AdvanceType,
  key i.GuaranteeType,
  key i.TransactionCurrency,
      i.LocalCurrency,
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'LocalCurrency'
      sum( i.AmountInLocalCurrency )                                    as Received,
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'LocalCurrency'
      sum( coalesce( k.TransferredAmount, 0 ) )                         as Transferred,
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'LocalCurrency'
      sum( coalesce( k.RefundedAmount, 0 ) )                            as Refunded,
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'LocalCurrency'
      sum( i.AmountInLocalCurrency
         - coalesce( k.TransferredAmount, 0 )
         - coalesce( k.RefundedAmount, 0 ) )                            as ContractLiability,
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'TransactionCurrency'
      sum( i.AmountInTransactionCurrency )                              as ReceivedForeign
}
group by i.CompanyCode, i.FiscalPeriod, i.Customer, i.Country, i.AdvanceType,
         i.GuaranteeType, i.TransactionCurrency, i.LocalCurrency

⑤ 계획 큐브 — 실적과 같은 키로 맞추기

기준 대비 차이가 성립하려면 계획이 실적과 같은 차원 조합이어야 합니다. 계획 값이 어디서 오는지(연초 확정 계획 버전)는 운영 시점에 정하고, 이 뷰는 어느 원천이든 같은 키로 내려 줍니다.

" ──────────────────────────────────────────────────────────
" ZI_ExpAdvPlan — 수출 선수금 계획 큐브
" 역할 : 연초 확정 계획을 실적 큐브와 같은 차원 조합으로 내려 준다.
" 이렇게 나눈 이유 : 계획이 같은 키를 가져야 미계획 수령 · 계획 미이행이 판정된다.
" ──────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@Analytics.dataCategory: #CUBE
@EndUserText.label: '수출 선수금 계획 큐브'
define view entity ZI_ExpAdvPlan
  as select from zeadv_plan as p
{
  key p.bukrs   as CompanyCode,
  key p.version as PlanVersion,
  key p.period  as FiscalPeriod,
  key p.kunnr   as Customer,
  key p.land1   as Country,
  key p.adv_type  as AdvanceType,
  key p.guar_type as GuaranteeType,
      p.waers   as LocalCurrency,
      @Semantics.amount.currencyCode: 'LocalCurrency'
      p.plan_amt as PlannedReceived,
      p.plan_qty as PlannedQuantity
}

⑥ 분석 쿼리 — 화면이 읽는 소비 뷰

화면이 실제로 읽는 뷰입니다. 필터 가능한 필드와 기본 정렬, 집계 지시를 여기서 정해 큐브를 화면 요구와 분리합니다.

" ──────────────────────────────────────────────────────────
" ZC_ExpAdvQuery — 수출 선수금 분석 쿼리
" 역할 : 큐브를 화면 요구(필터 · 정렬 · 집계)에 맞게 내려 준다.
" 이렇게 나눈 이유 : 큐브를 건드리지 않고 화면 요구만 바꿀 수 있게 한다.
" ──────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@Analytics.query: true
@EndUserText.label: '수출 선수금 분석 쿼리'
@UI.chart: [{ qualifier: 'Waterfall', chartType: #WATERFALL }]
define view entity ZC_ExpAdvQuery
  as select from ZI_ExpAdvCube
{
  @Consumption.filter: { selectionType: #SINGLE, mandatory: true }
  key CompanyCode,
  @Consumption.filter: { selectionType: #RANGE, mandatory: true }
  key FiscalPeriod,
  @AnalyticsDetails.query.axis: #ROWS
  key Customer,
  @AnalyticsDetails.query.axis: #ROWS
  key Country,
  @AnalyticsDetails.query.axis: #COLUMNS
  key AdvanceType,
  key GuaranteeType,
  key TransactionCurrency,
  @UI.lineItem: [{ position: 10 }]
  Received,
  @UI.lineItem: [{ position: 20 }]
  Transferred,
  @UI.lineItem: [{ position: 30 }]
  Refunded,
  @UI.lineItem: [{ position: 40, criticality: 'Critical' }]
  ContractLiability,
  ReceivedForeign
}

⑦ 권한 — DCL

권한은 집계 단계에 걸어야 합니다. 드릴스루에만 권한을 걸면 전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다. 회사코드와 국가 단위로 권한 오브젝트와 묶습니다.

" ──────────────────────────────────────────────────────────
" ZC_ExpAdvQuery 접근 제어 — 회사코드 · 국가 권한
" 역할 : 조회자가 볼 수 있는 회사코드와 국가로 결과를 제한한다.
" 이렇게 나눈 이유 : 집계 전에 거르지 않으면 합계로 권한 밖 숫자가 새어 나간다.
" ──────────────────────────────────────────────────────────
@EndUserText.label: '수출 선수금 분석 접근 제어'
@MappingRole: true
define role ZC_ExpAdvQuery {
  grant select on ZC_ExpAdvQuery
    where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' )
      and ( Country )     = aspect pfcg_auth( ZEADV_CTRY, LAND1, ACTVT = '03' );
}

⑧ 서비스 정의와 바인딩

화면이 부르는 서비스입니다. 운영 전환은 이 바인딩을 게시하고 화면의 서비스 주소를 바꾸는 일로 끝납니다. 사유 · 레이아웃 · 에이전트 같은 쓰기 대상은 RAP 관리형 객체로 따로 만듭니다.

" ──────────────────────────────────────────────────────────
" ZUI_EXPADV — 서비스 정의 · 바인딩 (OData V2)
" 역할 : 쿼리와 쓰기 대상을 하나의 서비스로 묶어 화면에 내준다.
" 이렇게 나눈 이유 : 서비스 주소만 바꾸면 화면은 그대로 운영 데이터를 읽는다.
" ──────────────────────────────────────────────────────────
@EndUserText.label: '수출 선수금 분석 서비스'
define service ZUI_EXPADV {
  expose ZC_ExpAdvQuery   as CubeSet;
  expose ZI_ExpAdvPlan    as PlanSet;
  expose ZI_ExpAdvItem    as ItemSet;
  expose ZR_ExpAdvReason  as ReasonSet;     " 차이 사유 — RAP 관리형
  expose ZR_ExpAdvLayout  as LayoutSet;     " 레이아웃 — RAP 관리형
}
" 서비스 바인딩 : 유형 OData V2 - UI, 게시 후 /IWFND/MAINT_SERVICE 에서 활성화

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래는 운영으로 가기 전에 정해야 하는 것들입니다.

해야 할 일무엇을 정하나정하지 않으면누가
선수금 전기 식별어떤 특별 G/L 지시자 · 계정을 선수금으로 볼지일반 채권 수금이 섞여 수령액이 부풀거나 빠집니다회계팀
선수금 구분 매핑지시자 · 문서유형 · 적요 중 무엇으로 계약금 · 중도금 · 사전 잔금을 가를지구분 열이 비거나 기타로 쏠립니다회계팀 · 영업관리
수익 대체 · 환불 인식 기준청구 연계 정리 라인 중 수익 대체로 볼 것, 인코텀즈별 통제 이전 시점 기준미대체 잔액률이 실제와 어긋납니다회계팀 · 영업관리
환율 유형 · 환산 시점수령 시점 환율 대 기준 환율, 환산 반올림 규칙환율 요인이 사람마다 달라집니다자금팀 · 회계팀
계획 원천 · 버전연초 확정 계획의 위치와 버전, 차원 조합미계획 수령 · 계획 미이행이 과다하게 잡힙니다기획팀
환급 보증 정보 원천보증서 확보 · 발급 대기 · 미설정의 저장 위치보증 미설정 잔액 규칙이 틀립니다자금팀 · 무역금융
차원 범위쓸 차원과 값의 범위나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다현업 · IT
권한 설계회사코드 · 고객 · 국가 권한과 집계 단계 적용합계로 권한 밖 숫자가 드러납니다보안 · 권한
성능 기준한 번에 읽을 큐브 행 수와 응답 시간 기준첫 조회가 느려 화면이 외면받습니다IT
대사 체계FBL5N · FB03 과 맞출 항목과 주기운영 중 차이가 생겨도 원인을 추적하기 어렵습니다회계팀
전송(TR) 순서매핑 테이블 → 뷰 → 쿼리 → 권한 → 서비스 순서활성화 오류가 납니다IT
서비스 활성화 · 주소 교체바인딩 게시와 /IWFND/MAINT_SERVICE 활성화, 화면의 서비스 주소 교체화면이 운영 서비스에 연결되지 않습니다IT
배치 등록AI 에이전트 점검을 하루 한 번 돌리는 잡사람이 화면을 열 때만 점검이 돕니다Basis · IT

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

대사식검사 건수차이
큐브 합계 = 원천 라인 합계 (수령 전기월 9개 × 6개 측정값)540
원천 라인별 수령 − 수익 대체 − 환불 · 취소 = 잔액6,9760
큐브 행별 같은 항등식9160
원천 라인별 선수금(외화) × 환산율 = 수령(원화)6,9760
통화별(USD · EUR · JPY · CNY) 외화 금액 큐브 = 원천40
요인 합 = 총차이, 계획 + 총차이 = 실적 (17개 범위)340
서비스의 큐브 검산 12개 축120

검사 건수 합계 14,972건(대사식 14,960건 + 서비스 검산 12건), 차이 0건, 의도적 예외 0건. 화면 쪽은 칸 값과 원천 합계가 같은지 드릴스루로 따로 대조해 일치를 확인했습니다.

운영 데이터로 갈 때

운영 데이터는 전표가 수천만 건이라 집계 위치가 결정적입니다. 큐브는 DB 에서 집계해 화면에는 차원 조합 수만 올라오게 하고, 회사코드 · 기간은 반드시 필수 조건으로 둡니다. 화면의 열 조합 36개 · 행 노드 500개 상한은 그대로 두고, 드릴스루는 500줄씩 끊어 읽습니다. 첫 조회가 오래 걸리면 기간 단위 선집계나 사전 계산 뷰를 검토합니다. 응답 시간 기준은 운영 시점에 합의해야 하며 이 글의 샘플로는 확인할 수 없습니다(확인 필요).

자주 묻는 질문

도입을 검토하시는 분들이 자주 묻는 질문을 숫자와 산식 · 화면과 조작 · 분석 기능 · 도입과 운영으로 나눠 정리했습니다.

숫자와 산식

선수금 수령과 계약부채 잔액은 어떻게 다릅니까?

선수금 수령은 고객에게서 받은 돈 전체이고, 계약부채 잔액은 그중 아직 수익으로 넘어가지 않은 몫입니다. 화면은 잔액을 수령 − 수익 대체 − 환불 · 취소 로 정의하고, 이 항등식이 원천 라인 6,976줄과 큐브 916행 모두에서 성립하는지 검사합니다. 수령 대비 잔액의 비율은 미대체 잔액률로 따로 보여 줍니다.

요인 합이 총차이와 항상 같은 이유는 무엇입니까?

순차 대체 방식이기 때문입니다. 물량 → 외화 단가 → 선수금율 순서로 계획 값을 실적 값으로 하나씩 바꾸고, 환율 요인은 총차이에서 앞 세 요인을 뺀 나머지로 두어 원 단위 반올림 잔차까지 흡수합니다. 미계획 수령과 계획 미이행은 계획이 없거나 실적이 없는 칸의 전액이라 따로 더해집니다. 그래서 합은 구조적으로 총차이와 같고, 어긋나면 검산 줄이 경고 색으로 바뀝니다.

환율 요인을 나머지로 두면 부정확하지 않습니까?

환율 요인에는 환산율 변화와 원 단위 반올림 잔차가 함께 들어갑니다. 대신 외화 금액은 통화별로 따로 대사해(샘플은 4개 통화) 거래 자체의 차이가 환율 요인으로 새지 않는지 확인합니다. 환산 시점과 환율 유형은 회사 정책에 따라 달라지므로 운영 시점에 정해야 하는 항목입니다.

여러 통화를 합쳐서 보여 줍니까?

원화 금액은 합산해 보여 주고, 외화 금액은 통화를 섞어 더하지 않습니다. 달러와 엔을 그냥 더한 숫자는 의미가 없기 때문에 외화 선수금은 통화별 대사에서만 씁니다. 화면의 칸 금액은 모두 원화 기준이며, 외화 단가 요인과 환율 요인이 통화에서 오는 영향을 따로 보여 줍니다.

색은 무엇을 기준으로 칠해집니까?

금액 부호가 아니라 영향 방향 입니다. 수령이 계획보다 많으면 유리라 초록이고, 환불 · 취소나 잔액이 계획보다 크면 불리라 빨강입니다. 금액 항목은 차이가 10백만원 이상이고 증감률이 5% 이상일 때만 칠해, 작은 차이로 화면이 알록달록해지는 것을 막습니다.

계획에 없던 고객이 선수금을 보내오면 어떻게 표시됩니까?

기준을 0 으로 보고 차이 전액을 미계획 수령 요인에 반영합니다. 차이가 10백만원 이상이면 칸에도 색이 칠립니다. 반대로 계획은 있는데 실적이 없는 칸은 계획 전액이 음수로 계획 미이행 요인에 들어갑니다.

화면 숫자와 표준 화면의 숫자가 다르면 어디부터 봅니까?

먼저 칸을 눌러 드릴스루의 머리 줄에서 칸 값과 원천 합계가 일치하는지 봅니다. 일치하면 화면은 원천 라인을 정확히 합산한 것이므로, 열린 라인의 문서번호를 FB03 · FBL5N 에서 조회해 조회 조건(회사코드 · 기간 · 고객)과 선수금 식별 기준이 같은지 대조합니다. 대부분의 차이는 선수금으로 보는 범위(특별 G/L 지시자)의 정의 차이에서 나옵니다.

화면과 조작

서버를 다시 부르지 않고 축을 바꿀 수 있는 이유는 무엇입니까?

조회 때 큐브 전체를 한 번 읽어 브라우저에 두고, 축을 바꾸면 그 큐브를 다시 묶기 때문입니다. 샘플 기준 큐브는 916행이고 계획은 883행입니다. 그래서 행 3단계 · 열 2단계까지의 전환이 즉시 일어나며, 모든 표의 합계가 같은 큐브에서 나옵니다.

열 조합이 너무 많아지면 어떻게 됩니까?

열 조합이 36개를 넘거나 행 노드가 500개를 넘으면 반쯤 그린 표를 보여 주지 않고 범위를 좁히라는 안내를 띄웁니다. 열 차원을 줄이거나 차원 값 선택으로 범위를 좁히면 됩니다. 상한은 화면이 느려지거나 읽기 어려운 표가 나오는 것을 막기 위한 것입니다.

끌어다 놓기가 어려운 환경에서도 쓸 수 있습니까?

차원 칩을 누르면 행 · 열 · 사용 안 함으로 보내는 메뉴가 열려 같은 조작을 할 수 있습니다. 터치 화면이나 끌어다 놓기가 막힌 사내 환경에서도 쓸 수 있도록 두었습니다.

휴대폰에서도 열립니까?

열립니다. 화면 폭이 700픽셀 이하로 줄면 조회조건 · 레이아웃 보드 · 요약 카드가 세로로 쌓이고 머리 줄의 단추는 아이콘만 남습니다. 가로 스크롤 없이 위에서 아래로 읽도록 했고, 넓은 표는 확대해서 봐야 하므로 휴대폰은 요약 확인용으로 권합니다.

레이아웃을 저장하면 무엇이 남습니까?

행 · 열 축, 분석 항목, 보기 방식, 접힘 상태가 이름과 함께 남습니다. 기본 레이아웃과 자동 조회를 함께 지정하면 다음에 화면을 열 때 저장해 둔 조건으로 곧바로 조회된 상태에서 시작합니다. 기본 레이아웃은 한 개만 둘 수 있습니다.

표를 파일로 내려받을 수 있습니까?

현재 표를 CSV 로 내려받는 단추와, 표 · 차트 · 요인 · 해설을 담은 PowerPoint 보고서를 만드는 단추가 있습니다. 두 파일 모두 브라우저에서 만들어지므로 서버에 문서 생성 환경이 필요하지 않습니다.

분석 기능

AI 분석이 숫자를 지어내지는 않습니까?

숫자는 서비스가 큐브에서 계산한 값만 씁니다. 해설은 그 값을 읽어 문장으로 풀 뿐이며, 모든 숫자는 근거 표에서 다시 확인할 수 있습니다. 모델을 연결하지 않아도(기본 설정) 같은 근거로 규칙 기반 해설이 나옵니다. 원인은 단정하지 않고 점검 필요 항목으로 제시합니다.

차이 사유는 어디에 어떻게 남습니까?

사유는 조회 범위와 행 경로를 키로 저장됩니다. 그래서 축을 바꿔도, 다음에 같은 범위를 조회해도 따라옵니다. 사유가 적힌 차이는 AI 해설에서 건너뛰므로 같은 설명을 반복하지 않고, 사유를 지우면 다시 해설 대상이 됩니다.

AI 에이전트는 어떤 규칙으로 점검합니까?

규칙 5개입니다. 고객별 계획 대비 수령 차이 금액(기준 150백만원, 영업 책임자), 국가별 계획 미이행 금액(100백만원, CEO), 제품그룹별 미대체 잔액률 상한(45%, CFO), 고객별 보증 미설정 잔액(300백만원, 자금 책임자), 통화별 환율 영향(25백만원, 자금 책임자)입니다. 기준값은 화면에서 고쳐 저장하며 모두 샘플 기본값입니다.

에이전트가 같은 날 여러 번 돌면 보고가 중복됩니까?

하루 한 번만 실행되도록 서비스가 판정합니다. 같은 날 두 번째 실행은 건너뛰고, 건너뛴 기록이 실행 기록에 남습니다. 받은 보고는 역할별로 걸러 볼 수 있습니다.

기준 대비는 무엇과 비교합니까?

연초에 확정한 선수금 수령 계획 하나로 고정되어 있습니다. 계획은 실적과 같은 차원 조합(수령 전기월 · 고객 · 제품그룹 · 인코텀즈 · 선수금 구분)으로 맞춰야 칸 단위 비교가 성립하므로, 운영 전환 때 계획 원천과 버전을 정하는 일이 가장 먼저 필요합니다.

단계 보기는 무엇을 보여 줍니까?

전기되지 않는 단계를 계산항목으로 세워 행으로 놓습니다. 선수금 수령 → 수익 대체 → 환불 · 취소 → 계약부채 잔액 → 미대체 잔액률 순서로 읽으면 계약부채가 줄어드는 속도와 잔액이 쌓이는 곳이 한눈에 보입니다.

도입과 운영

어떤 회사와 사용자에게 맞습니까?

선수금을 받는 수출 계약이 많은 제조 · 설비 · 플랜트형 회사의 영업 책임자 · 자금 책임자 · 재무 담당과 경영진에게 맞습니다. 역할마다 보는 요약 카드가 달라서 한 화면을 여러 부서가 같은 숫자로 씁니다. 수출 선수금 거래가 드문 회사는 표준 화면으로 충분할 수 있습니다.

SAP 표준 T-code 와는 어떤 관계입니까?

대체하지 않고 이어집니다. 계약 수량 · 금액은 VA03, 수익 대체는 VF03, 선수금 전기와 환불은 FBL5N · FB03, 입력은 F-29, 정리는 F-39 가 맡고, 이 화면은 그 데이터를 한 큐브로 모아 비교 · 분해 · 검산합니다. 법정 · 감사 · 세무 신고 대응은 표준에 그대로 둡니다.

데이터 원천과 정합성은 어떻게 보장합니까?

샘플 데이터 기준으로 큐브 합계와 원천 라인 합계, 라인별 항등식, 통화별 외화 대사, 요인 합과 총차이를 모두 전수 대사해 14,960건을 검사했고 차이는 0건이었습니다. 운영에서는 같은 대사식을 FBL5N · FB03 과 맞추는 절차를 운영 대사로 정해야 합니다.

운영 시스템에 연결하려면 어떤 절차가 필요하고 얼마나 걸립니까?

매핑 테이블 → 원천 라인 뷰 → 큐브 → 쿼리 → 권한 → 서비스 순서로 CDS 를 세우고, 서비스를 게시한 뒤 화면의 서비스 주소를 운영 서비스로 바꿉니다. 코드보다 선수금 식별 · 수익 대체 기준 · 환율 유형 같은 합의가 시간을 좌우하므로 소요 기간은 회사별 합의 속도에 달려 있어 일률적으로 말씀드리기 어렵습니다(확인 필요).

권한과 보안은 어떻게 설계합니까?

회사코드 · 국가 단위 권한을 CDS 접근 제어로 집계 단계에 겁니다. 드릴스루에만 걸면 전사 합계와 자기 몫의 차이로 남의 숫자가 드러나기 때문입니다. 화면은 OpenUI5 표준 컨트롤과 직접 그린 SVG 차트만 써서 외부 라이브러리 반입 심사가 필요 없고, AI 모델 연결은 기본 꺼짐이라 외부 전송이 없습니다.

전표가 수천만 건이어도 됩니까?

큐브를 DB 에서 집계해 차원 조합 수만 화면에 올리는 구조로 가야 합니다. 회사코드와 기간은 필수 조건으로 두고, 드릴스루는 500줄씩 끊어 읽습니다. 이 글의 샘플은 원천 6,976줄이라 대용량 응답 시간은 확인하지 못했고, 운영 규모의 성능 기준은 합의가 필요합니다.

선수금 식별이나 구분 매핑이 바뀌면 어떻게 합니까?

매핑 테이블 한 곳만 고치면 됩니다. 특별 G/L 지시자나 선수금 계정이 새로 생기면 어느 선수금 구분 · 보증 구분인지만 현업이 적어 주고, 뷰와 화면은 그대로 둡니다. 다만 매핑이 바뀐 기간의 과거 숫자를 어떻게 볼지는 미리 정해 두어야 합니다.

이 화면의 점검 표시를 근거로 결산이나 신고를 확정해도 됩니까?

화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고는 회사와 세무 대리인 · 관세사가 판단합니다. 화면은 원인을 단정하지 않고 점검 필요 항목을 올려 판단 시간을 줄이는 데 목적이 있습니다.