수출 솔루션 · 수출 은행 비용 분석

SAP 수출 은행 수수료·환가료 다차원 분석 리포트 — 네고·추심 때 은행에 내는 돈을 환가료부터 하자 수수료까지 계획 대비로 읽는 수출 대금 회수 비용 분석

큐브 한 번 조회 · 드래그 앤 드롭 축 구성 · 칸에서 네고 문서 라인까지의 드릴스루 · 계획 대비 차이와 아홉 요인분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면 31종, 그리고 CDS 코드까지

소개 영상화면 순서대로 · 자막 포함

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

수출 대금 회수 회의의 질문은 늘 비슷합니다. 은행에 얼마를 냈나, 어느 은행 · 어느 결제 방식에서 더 나갔나, 계획보다 은행 비용이 늘었다면 환가 일수가 길어서인가 요율이 올라서인가 서류 하자 때문인가. 지금 이 답은 판매오더(VA03) · 청구(VF03) 화면과 은행 통보서, G/L 개별 항목(FBL3N), 엑셀로 흩어져 있어 매달 숫자를 모아 맞추는 데 시간이 듭니다.

이 앱은 수출 매입(네고 · 추심) 품목을 은행 비용 관점으로 한 번 읽어 큐브로 만들고, 같은 큐브에서 표 · 차트 · 요약 · 드릴스루 · 계획 대비 · 요인분해를 모두 그립니다. 축을 바꿔도 서버를 다시 부르지 않고, 칸을 누르면 그 금액을 만든 네고 문서 라인이 열려 “어느 숫자가 맞나” 하는 회의를 줄입니다. 이 글의 모든 숫자는 가상의 검증용 샘플이며 환가료율 · 수수료율 · 임계값은 가정값입니다.

한 줄 요약 — 은행 비용 합계는 누구나 보여 줍니다. 이 앱의 값은 그 다음에 있습니다: 환가료와 수수료와 하자 수수료와 전신료를 따로 보이고, 계획과의 차이를 아홉 요인으로 가르고, 사유를 행에 남기고, 사람이 열지 않아도 감시하며, 그 숫자가 원천 문서와 1원도 어긋나지 않는지 매번 검산합니다.

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 갈라지지 않는 큐브매입월 · 거래은행 · 결제 방식 · 제품 그룹 · 고객 · 국가 등 11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 표 · 차트 · 요약이 한 번 읽은 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다.은행별 · 고객별 · 결제 방식별 리포트를 따로 만들고, 합계가 다르면 리포트를 맞추는 회의를 엽니다.
② 칸에서 네고 문서 라인까지표의 칸을 누르면 그 금액을 만든 청구 · 네고 문서 라인이 열리고, 칸 금액과 원천 합계가 같은지 그 자리에서 보입니다.리포트를 닫고 VF03 · FBL3N 을 다시 열어 조건을 손으로 맞추고 건건이 합산합니다.
③ 환가료가 따로 보인다은행이 먼저 내준 돈에 붙는 환가료를 매입액 · 환가 일수 · 환가료율로 계산해 수수료와 갈라 보여 줍니다. 검증용 샘플에서 환가료는 10,989백만원으로 총 은행 비용의 78%입니다.은행 비용이 한 계정에 섞여 있어 이자 성격의 비용과 수수료를 따로 가늠하지 못합니다.
④ 총차이를 아홉 요인으로매입 건수 · 건당 매입액 · 환가 일수 · 환가료율 · 하자 발생 비율 · 하자 건당 수수료 · 수수료율 · 미계획 매입 · 계획 미이행으로 가르고, 합이 총차이와 같은지 매번 검산합니다.엑셀로 밤새 분해하고 합계가 총차이와 맞는지 다시 손으로 맞춥니다.
⑤ 차이 사유가 행에 남는다사유는 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다시 열어도 그 행에 따라옵니다. CSV 와 AI 근거 표에도 함께 실립니다.같은 질문을 매달 다시 하고, 지난달 답은 메일함에서 찾습니다.
⑥ 사람이 열지 않아도 도는 감시감시 규칙 5개에 임계값과 받을 역할(CEO · CFO · 영업 · 자금)이 붙어 있습니다. 걸린 항목은 역할별 대기함에 올라가고 하루 한 번 제한은 서버가 판정합니다.은행 비용이 늘어난 날 아무도 화면을 열지 않으면 그대로 지나갑니다.
⑦ 보고서와 AI 해설까지 한 화면에서지금 범위의 표와 차트를 담은 PowerPoint 보고서가 브라우저에서 바로 만들어집니다. AI 는 서비스가 계산한 숫자를 읽어 설명만 하고, 넘긴 근거 표를 펼쳐 볼 수 있습니다.화면을 캡처하고 숫자를 옮겨 적어 보고서를 다시 만들며, AI 가 만든 숫자를 써도 되는지부터 따져야 합니다.

사례로 보는 효과 — 계획보다 237백만원 늘어난 은행 비용의 요인

검증용 샘플에서 총 은행 비용은 계획 13,802백만원, 실적 14,040백만원으로 총차이가 +237백만원(+1.7%) 였습니다. 합계만 보면 “조금 늘었다”에서 끝납니다. 아홉 요인으로 가르자 미계획 매입(+327백만원) 이 가장 크고, 계획했지만 이행되지 않은 매입은 −83백만원으로 차이를 줄이고 있었습니다. 서로 반대로 움직이는 두 요인이 합계 안에서 상쇄되고 있었다는 뜻입니다.

이야기 요소도 심어 두었습니다. 샘플의 E은행은 7월부터 환가료율이 0.32%p 올랐고, C은행은 6월부터 서류 하자 건당 수수료가 14% 올랐습니다. 거래은행 × 월 축으로 놓으면 이 두 은행이 어느 달부터 계획에서 벌어졌는지가 표에서 바로 보이고, 요인분해에서는 각각 환가료율 요인과 하자 건당 수수료 요인이 커집니다. 서류 하자 수수료는 실적 99백만원으로 계획 57백만원의 1.7배, 전신료는 295백만원으로 계획 239백만원보다 많았습니다. 이 숫자는 원인을 확정하지 않으며, 어디를 먼저 점검할지와 어떤 사유를 남길지를 정하는 단서입니다.

행 한 줄(은행 · 결제 방식 조합)마다
총 은행 비용 T = N·a·r·d/360 + N·a·c + N·σ·f + N·k

N 매입 건수 · a 건당 매입액 · r 환가료율(연 %) · d 환가 일수 · c 수수료율 · σ 하자 발생 비율 · f 하자 건당 수수료 · k 건당 전신료. 한 요인씩 계획 값을 실적 값으로 바꾸어 가면 마지막에 실적 T 와 같아지므로 요인의 합은 총차이와 정확히 같습니다.

분해에는 조건을 걸었습니다. 요인 합계와 총차이가 1원이라도 어긋나면 화면이 오류로 표시합니다. 같은 조합이 계획과 실적 한쪽에만 있으면 억지로 나누지 않고 미계획 매입 · 계획 미이행으로 따로 세웁니다. 회의에서 “이 숫자 맞아?”라는 질문에 바로 답할 수 있다는 뜻입니다.

도입하면 달라지는 것

  • 회의의 주제 — “어느 리포트 숫자가 맞나”가 아니라 “어느 은행 · 어느 결제 방식에서 계획이 벌어졌나”를 이야기합니다.
  • 분석 준비 — 차이 표 · 요인분해 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합과 화면 캡처가 줄어듭니다.
  • 다음 달로 이어지는 기록 — 사유와 레이아웃이 남아 매달 같은 설명을 처음부터 다시 하지 않습니다.
  • 놓치지 않는 점검 — 화면을 열지 않은 날에도 규칙에 걸린 항목은 받을 역할의 대기함에 올라갑니다.

이런 회사에 맞습니다

신용장 네고 · 서류인도 · 서류지급 방식을 섞어 수출 대금을 회수하고 거래은행이 여러 곳인 제조 · 유통 회사, 환가 일수와 서류 하자 때문에 은행 비용이 계획과 벌어지는 일이 잦은 자금 · 수출 담당 조직, 그리고 수출 은행 비용을 월 단위로 계획과 견주어 경영진에 설명해야 하는 경영지원 조직에 맞습니다. 거래 통화가 여러 개여도 통화별로 나누어 대사합니다.

실행 화면

사용 방법

  1. 조회조건 입력 — 회사코드(필수, 기본 1000)와 시작 · 종료 기간(필수, 기본 2026-01 ~ 2026-09)을 정합니다. 비교 기준은 은행 비용 계획 버전으로 고정돼 있어 바꿀 수 없습니다.
  2. 조회 — 조회 버튼은 조회조건 영역의 오른쪽 끝에 있고 입력칸에서 Enter 를 눌러도 됩니다. 조회는 큐브를 한 번 읽는 동작이며 이후 축을 바꿔도 다시 읽지 않습니다.
  3. 요약 확인 — “집계 N건 · 원천 N줄”으로 읽은 규모를 보고, 역할(CEO · CFO · 영업 책임자 · 자금 책임자)을 바꿔 앞세우는 지표를 확인합니다.
  4. 축과 항목 정하기 — 레이아웃 보드에서 차원 칩을 끌어 행 · 열 · 사용 안 함 칸에 놓습니다. 행은 최대 3단계, 열은 최대 2단계입니다.
  5. 표 읽기 — 행의 화살표로 아래 차원으로 내려가고, 기준 대비를 켜면 칸마다 계획 · 차이 · 증감률이 붙습니다.
  6. 필터 — 필터 버튼 줄에서 차원 값을 여러 개 고릅니다. 같은 차원 안은 or, 차원 사이는 and 입니다.
  7. 칸 · 행 클릭 상세 — 칸을 누르면 원천 문서 라인이 열립니다. 차이가 난 행에서는 변동 사유 버튼으로 사유를 남깁니다.
  8. 분석 도구 — 상단 버튼은 레이아웃 → AI 분석 → AI 에이전트 → 기간별 요약 → CSV 순서입니다. 보고서(PowerPoint)는 AI 분석 창에서 내려받습니다.
  9. 내보내기 — 지금 표의 행 · 열 · 항목 그대로 CSV 로 저장합니다.
  10. 자동 조회 — 기본 레이아웃에 자동 조회를 지정해 두면 화면을 여는 순간 조회된 채 시작합니다.

무엇으로 만들었나

화면은 OpenUI5 표준 컨트롤로 만들고, 금액과 판정은 서비스가 계산합니다. 화면은 서비스가 준 숫자를 합산하고 배치만 합니다.

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤 — 피벗은 TreeTable, 필터와 대화상자는 표준 컴포넌트SAP 표준 화면 구성 요소를 그대로 써서 사내 보안 심사에서 새로 볼 것을 줄이기 위해
피벗 · 차트브라우저 안 큐브 재집계와 직접 그린 SVG 차트축을 바꿀 때 서버를 다시 부르지 않고, 외부 차트 라이브러리 없이 CDN 이 막힌 환경에서도 같은 화면이 나오게 하려고
집계 · 판정 로직금액 · 비율 · 요인분해는 서비스 쪽에서 계산하고 화면은 합산과 배치만 합니다화면마다 계산이 달라 숫자가 갈라지는 일을 막으려고
OData 서비스 구성OData V2 모델 하나. 읽기 전용 집합(큐브 · 계획 · 차원 · 측정값 · 드릴스루 라인 · 검산)과 쓰기 집합(변동 사유 · 레이아웃 · 감시 규칙 임계값 · 대기함 · 활동 기록), 펑션 3종(요인분해 · 해설 · 에이전트 실행)운영 시스템으로 옮길 때 서비스 주소만 바꾸면 되도록 화면과 데이터 공급을 분리하려고
보고서브라우저에서 zip · XML 로 PowerPoint 파일을 직접 만듭니다서버에 파일을 남기지 않고, 외부 라이브러리 없이 현재 범위를 바로 내려받게 하려고
테마 · 접근성sap_horizon 테마, 키보드로 닫히는 대화상자SAP 표준 화면과 같은 모양과 조작감을 유지하려고
항목내용
솔루션수출 솔루션
업무 영역수출 대금 회수 — 네고 · 추심 은행 비용
관련 기준서 · 대상 영역관련 기준서 없음 · 대상 영역: 수출 은행 비용 분석
SAP 표준 T-codeVA03 · VF03 · VX03N · FBL5N · FBL3N
Namespacezui5.expbankfee
화면 성격업무 분석 — 다차원 분석 리포트
데이터 연동OData V2 (manifest dataSources)
테마sap_horizon

OData 서비스 이름은 소문자 expbankfee_srv 이고 엔티티셋 15개 · 펑션 3개로 구성됩니다. 앱 본체는 manifest 에 선언한 서비스만 바라보고, 샘플 데이터는 test/ 폴더 안에만 있습니다.

처음 열었을 때 — 조회 전에도 틀이 먼저 보입니다

조회조건 · 레이아웃 보드 · 피벗 틀은 조회 전부터 보입니다. 조회 한 번으로 큐브를 읽고 나면 축을 바꿔도 서버를 다시 부르지 않습니다.

조회 전 첫 화면
조회 전 첫 화면 — 조회조건 · 레이아웃 보드 · 피벗 틀이 먼저 보입니다.

회사코드와 시작·종료 기간만 정하면 되고, 기본값은 회사코드 1000 · 2026-01 ~ 2026-09 입니다. 쓰지 않는 차원 9개가 왼쪽 칸에, 행 축에는 제품 그룹 › 거래은행이 올라 있습니다. 아직 조회 전이라 표는 비어 있고 안내 문구만 보입니다. 조회 버튼은 조회조건 영역의 오른쪽 끝에 있고 Enter 로도 조회됩니다.

조회 직후 — 피벗과 차트
조회 직후 — 피벗과 차트 — 한 번 읽은 큐브가 표와 차트, 역할별 요약으로 동시에 나타납니다.

집계 1,237건(원천 7,734줄)을 한 번 읽어 표 · 오른쪽 차트 · 상단 지표 4개를 그립니다. 총 은행 비용은 14,040백만원, 은행 비용률은 청구액 대비 0.72%, 네고·추심 수수료는 2,656백만원입니다. 각 숫자 아래 작은 글씨는 계획 값과 대비입니다.

거래은행을 열 축으로
거래은행을 열 축으로 — 차원을 끌어다 놓으면 서버를 다시 부르지 않고 표가 다시 묶입니다.

거래은행을 열 축으로 옮긴 모습입니다. 총합은 그대로이고 열 머리글만 은행별로 바뀝니다. 이 동작은 네트워크 요청이 0건이며 브라우저에 올라온 큐브를 다시 묶는 것입니다.

조회 조건 접기
조회 조건 접기 — 머리 영역을 접으면 요약 한 줄만 남습니다.

표와 차트에 더 많은 공간을 주고 싶을 때 머리 영역을 접습니다. 접힌 줄에는 회사코드 · 기간 · 행 · 열 · 항목 수가 남아 지금 보고 있는 범위를 잊지 않게 합니다.

경영 요약 — 역할이 바뀌면 보는 숫자가 바뀝니다

역할은 CEO · CFO · 영업 책임자 · 자금 책임자 네 가지이고, 앞세우는 지표와 기본으로 쪼개 보는 차원이 달라집니다. 역할을 바꿔도 다시 조회하지 않습니다.

CFO 요약
CFO 요약 — 매입월별 총 은행 비용과 환가료, 네고·추심 수수료를 봅니다.

CFO 는 월별로 은행 비용이 어떻게 흘렀는지를 봅니다. 표는 매입월 단위로 풀리고, 지표는 총 은행 비용 · 환가료 · 네고·추심 수수료 · 서류 하자 수수료입니다.

영업 책임자 요약
영업 책임자 요약 — 수출 국가 · 고객별 매입 1건당 은행 비용을 봅니다.

영업 책임자는 은행 비용이 어느 고객 · 국가에서 크게 나가는지를 봅니다. 매입 1건당 은행 비용과 서류 하자 발생 비율이 지표입니다.

자금 책임자 요약
자금 책임자 요약 — 거래은행 · 결제 방식별 평균 환가 일수와 환가료 연 환산율을 봅니다.

자금 책임자는 돈을 앞당겨 받는 비용을 봅니다. 평균 환가 일수와 환가료 연 환산율이 지표이고, 표는 거래은행 › 결제 방식입니다.

축 전환과 범위 — 은행 · 결제 방식 · 고객을 끌어다 놓습니다

차원 칩을 끌어 행 · 열 · 사용 안 함 칸에 놓습니다. 행은 최대 3단계, 열은 최대 2단계이며 열 조합이 36개를 넘으면 안내하고 막습니다.

행을 펼친 표
행을 펼친 표 — 행의 화살표로 아래 차원으로 내려갑니다.

제품 그룹 아래로 거래은행이 펼쳐진 표입니다. 집계 행의 값은 아래 행의 합과 같고, 소계가 어긋나지 않는지는 검증 단계에서 차원별 43건을 따로 대사했습니다.

열 2단계
열 2단계 — 행 3단계 · 열 2단계까지 쌓을 수 있습니다.

열에 두 차원을 쌓은 모습입니다. 열 조합 수는 36개를 넘을 수 없고, 열 축에 차원이 있으면 분석 항목은 첫 항목만 펼쳐 보입니다.

차원 값 다중 선택
차원 값 다중 선택 — 값마다 이름 · 코드 · 라인 수가 보입니다.

필터 버튼 줄에서 차원을 누르면 값 목록이 열립니다. 이름과 코드, 원천 라인 수가 함께 보여 어느 값이 큰지 알고 고를 수 있습니다.

거래은행을 좁힌 결과
거래은행을 좁힌 결과 — 선택한 은행만 남긴 표입니다.

같은 차원 안에서는 or, 차원 사이에서는 and 로 걸립니다. 필터가 걸린 표와 차트와 요약이 같은 범위로 줄어듭니다.

표와 차트 너비 조절
표와 차트 너비 조절 — 가운데 손잡이를 끌어 너비를 바꾸고 브라우저가 기억합니다.

표와 차트 사이 손잡이를 끌어 너비를 바꿉니다. 바꾼 너비는 브라우저가 기억합니다.

칸에서 원천 문서까지 — 숫자의 출처를 바로 봅니다

칸을 누르면 그 금액을 만든 원천 네고 문서 라인이 열리고, 위쪽 줄이 칸 금액과 원천 합계가 같은지 알려 줍니다.

칸에서 네고 문서 라인까지
칸에서 네고 문서 라인까지 — 칸 금액과 원천 라인 합계가 같은지 머리에 표시합니다.

칸의 행 경로와 열 조합이 그대로 질의 조건이 되어 청구 문서 · 품목 단위 라인이 열립니다. 위쪽에 칸 금액과 원천 합계가 일치한다는 줄이 뜨고, 라인에는 매입액 · 환가 일수 · 환가료율 · 환가료 · 수수료가 보입니다.

기간별 요약
기간별 요약 — 매입월별 건수와 실적 · 계획을 한 표로 봅니다.

기간별 요약 대화상자는 월별 건수와 총 은행 비용의 실적 · 계획을 한 표로 보여 줍니다.

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

비율과 단가는 전표에 없으므로 계산항목으로 만들어 행에 올립니다. 분자와 분모를 먼저 합산한 뒤 나눠 소계에서도 맞습니다.

계산항목을 열로
계산항목을 열로 — 은행 비용률 · 매입 1건당 은행 비용 · 평균 환가 일수 · 환가료 연 환산율.

계산항목을 열로 놓은 표입니다. 평균 환가 일수는 매입액 가중 평균이고, 환가료 연 환산율은 환가료를 매입액 × 일수로 나눠 연 기준으로 바꾼 값입니다.

단계 보기
단계 보기 — 총 은행 비용을 환가료 · 수수료 · 하자 수수료 · 전신료로 풀어 봅니다.

단계 보기는 총 은행 비용을 구성 항목으로 풀어 한 열에 세로로 보여 줍니다. 어느 구성이 합계를 키웠는지 한눈에 봅니다.

계획 대비 차이 — 같은 표가 은행 비용 회의 자료가 됩니다

기준 대비 스위치를 켜면 칸마다 실적 · 계획 · 차이 · 증감률이 붙습니다. 금액 임계와 증감률 임계를 둘 다 넘을 때만 색을 칠합니다.

기준 대비 차이 모드
기준 대비 차이 모드 — 칸마다 실적 · 계획 · 차이 · 증감률을 보여 줍니다.

칸 안에 기준 값과 차이, 증감률이 작은 글씨로 붙습니다. 비용이 늘어난 칸은 빨강, 줄어든 칸은 초록입니다.

변동 사유 입력
변동 사유 입력 — 사유 구분과 내용을 남기면 다음 조회에도 따라옵니다.

차이가 난 행의 사유 버튼을 누르면 사유 구분과 내용을 적는 창이 열립니다. 사유는 조회 범위와 행 경로를 키로 저장됩니다.

변동 사유 저장 후
변동 사유 저장 후 — 저장된 행에는 사유 표시가 붙습니다.

저장한 행에는 표시가 붙고, 축을 바꾸거나 다시 열어도 같은 행에 따라옵니다. CSV 와 AI 근거 표에도 함께 실립니다.

워터폴과 요인분해
워터폴과 요인분해 — 계획에서 실적까지 요인별로 잇고 요인 합계와 총차이를 대조합니다.

선택한 행의 계획에서 실적까지를 아홉 요인으로 이은 워터폴입니다. 요인 합계와 총차이를 대조한 검산 줄이 함께 보이며, 어긋나면 오류로 표시합니다.

AI 분석과 보고서 — 같은 숫자를 읽고 설명합니다

AI 는 서비스가 계산한 숫자를 읽어 설명만 합니다. 기본은 규칙 기반 해설이며 외부 모델 연결은 꺼진 채 시작합니다.

AI 분석
AI 분석 — 현재 범위를 읽어 요약과 핵심 발견, 근거 표를 보여 줍니다.

현재 범위의 요약과 핵심 발견을 쓰고, 해설이 읽은 근거 표를 펼쳐 볼 수 있습니다. 숫자를 새로 만들지 않고 서비스가 준 값만 인용합니다.

보고서 내려받기
보고서 내려받기 — 해설이 읽은 숫자로 검토용 보고서(PPTX)를 만듭니다.

보고서 버튼을 누르면 브라우저가 현재 범위의 표와 차트를 담은 .pptx 파일을 직접 만들어 내려받습니다. 서버에 파일을 남기지 않습니다.

AI 에이전트 — 감시 규칙과 대기함

사람이 화면을 열지 않아도 규칙에 걸린 항목을 받을 역할의 대기함에 올립니다.

감시 규칙
감시 규칙 — 임계값과 주기, 받을 역할을 규칙마다 정합니다.

규칙은 5개입니다: 총 은행 비용 계획 차이 금액, 은행 비용률 상한, 평균 환가 일수 상한, 환가료 연 환산율 상한, 서류 하자 수수료 금액. 임계값과 사용 여부는 바꿀 수 있습니다.

대기함
대기함 — 규칙에 걸린 항목이 받을 역할별로 올라옵니다.

대기함의 보고는 받을 역할 · 규칙 · 대상 행 경로 · 금액을 담습니다. 행 경로로 이동해 해당 칸을 바로 점검합니다.

실행 기록
실행 기록 — 하루 한 번 제한은 서버가 판정합니다.

같은 날 두 번째 실행 요청은 서버가 건너뜀으로 판정하고, 사유와 첫 실행 번호를 기록합니다. 화면은 이를 안내 토스트로 보여 줍니다.

레이아웃 저장과 복원

축 · 조회조건 · 항목 · 접힘 상태를 이름 붙여 저장하고 기본 레이아웃과 자동 조회를 지정합니다.

레이아웃 저장
레이아웃 저장 — 축 · 조회조건 · 항목 · 접힘 상태를 이름 붙여 저장합니다.

이름을 붙여 저장하고, 기본으로 쓸지와 열 때 자동 조회할지를 고릅니다.

레이아웃 관리
레이아웃 관리 — 기본 지정 · 자동 조회 · 삭제를 관리합니다.

저장한 레이아웃 목록에서 기본 지정을 바꾸거나 삭제합니다.

다시 열었을 때
다시 열었을 때 — 저장한 기본 레이아웃으로 조회된 채 시작합니다.

자동 조회를 지정해 두면 화면을 여는 순간 저장한 축으로 조회된 채 시작합니다.

좁은 화면과 한계 — 표를 반쯤 그리지 않습니다

좁은 화면에서는 차트가 표 아래로 내려가고, 열 조합이 한도를 넘으면 안내하고 막습니다.

390px 폭 화면
390px 폭 화면 — 조회 영역은 세로로 쌓입니다.

폭 390px 에서는 조회조건과 레이아웃 보드가 세로로 쌓입니다.

좁은 화면의 차트
좁은 화면의 차트 — 차트는 표 아래로 내려갑니다.

차트가 표 오른쪽에서 아래로 내려오고 표는 가로로 스크롤됩니다.

범위 상한 안내
범위 상한 안내 — 열 조합이 36개를 넘으면 안내하고 막습니다.

열 조합이 36개를 넘으면 안내 문구를 띄우고 표를 반쯤 그리지 않습니다. 행 노드 500개 초과도 같습니다.

화면 뒤에서 일어나는 일

금액과 비율은 모두 서비스가 계산합니다. 아래는 화면이 색을 칠하고 검산하고 감시하는 규칙입니다. 임계값은 검증용 샘플에서 정한 가정값입니다.

칸 색칠 · 검산 · 감시 판정 로직

판정 조건결과 상태사용자 조치
비용 항목에서 계획 대비 증가가 2,000만원 이상이고 증감률도 3% 이상(비율 항목은 0.05%p 이상)빨강 — 점검 필요행의 변동 사유 버튼으로 사유를 남기거나 요인분해에서 원인 요인을 확인
같은 조건에서 비용이 감소초록 — 유리한 차이계획 미이행 · 건수 감소 여부를 확인
금액과 비율 중 하나만 임계를 넘음색 없음숫자만 확인
요인 합계와 총차이가 1원 이상 다름검산 줄 오류 표시 — 확인 필요범위 · 필터를 확인하고 서비스 담당자에게 문의
칸 금액과 드릴스루 합계가 다름경고 줄 — 확인 필요조회 범위와 질의 조건 확인
열 조합 36개 초과 또는 행 노드 500개 초과안내 문구 · 표 생략열 · 행 차원을 줄이거나 필터로 범위를 좁힘
감시 규칙 R1 ~ R5 임계 도달대기함에 보고 등록(받을 역할별)대기함 보고의 행 경로로 이동해 점검
같은 날 두 번째 에이전트 실행하루 한 번 제한으로 건너뜀활동 기록의 첫 실행 번호 확인

산출식과 대사식

순서식설명
①환가료 = 매입액 × 환가료율(연 %) × 환가 일수 ÷ 360원천 라인(청구 품목)마다 계산
②네고 · 추심 수수료 = 매입액 × 수수료율(최저 금액 적용)수수료율 · 최저 금액은 가정값
③서류 하자 수수료 = 하자 건수 × 건당 수수료하자가 난 매입 건에만 부과
④전신료 · 우편료 = 건당 고정액가정값
⑤총 은행 비용 = 환가료 + 수수료 + 하자 수수료 + 전신료대사식 — 원천 라인 7,734줄 전수
⑥은행 비용률 = 총 은행 비용 ÷ 청구액(원화) × 100계산항목
⑦평균 환가 일수 = Σ(매입액 × 일수) ÷ Σ 매입액분자 · 분모를 먼저 합산
⑧환가료 연 환산율 = 환가료 × 360 ÷ Σ(매입액 × 일수) × 100계산항목

조회조건

조건필수기본값$filter 로 변환
회사코드필수1000Bukrs eq '1000'
시작 기간필수2026-01Period ge '2026-01'
종료 기간필수2026-09Period le '2026-09'
비교 기준(계획 버전)고정BNK26Version eq 'BNK26' (PlanSet)
드릴스루 질의자동칸의 행 경로 + 열 조합ItemSet?$filter=... · $top=500 · $skip

결과 컬럼

항목의미단위
총 은행 비용환가료 · 네고·추심 수수료 · 서류 하자 수수료 · 전신료의 합원(표는 백만원)
환가료 · 네고·추심 수수료은행이 먼저 내준 돈에 붙는 이자와 취급 수수료원
서류 하자 수수료 · 전신료하자 건수와 건당 고정 비용원
청구액(원화)수출 청구 금액의 원화 환산원
계산항목 6종은행 비용률 · 매입 1건당 은행 비용 · 평균 환가 일수 · 환가료 연 환산율 · 수수료 비중 · 하자 발생 비율% · 원 · 일
요인 9종매입 건수 · 건당 매입액 · 환가 일수 · 환가료율 · 하자 발생 비율 · 하자 건당 수수료 · 수수료율 · 미계획 매입 · 계획 미이행원

좁은 화면에서 달라지는 것

폭이 좁아지면 조회조건과 레이아웃 보드가 세로로 쌓이고 차트는 표 아래로 내려갑니다. 표는 가로로 스크롤되며, 열 조합이 한도를 넘으면 표를 반쯤 그리지 않고 안내합니다.

파일 구성

(앱 폴더)
├─ index.html · Component.js · manifest.json
├─ controller/  BaseController.js · Main.controller.js
├─ view/        Main.view.xml · fragments/ (조회 · 사유 · AI · 에이전트 · 레이아웃 · 필터 대화상자)
├─ model/       cube.js(피벗) · chart.js(SVG 차트) · pptx.js(보고서) · layout.js · formatter.js · ErrorHandler.js
├─ css/ · i18n/
├─ odata/expbankfee_srv/   metadata.xml · service.js · engine.js · json/
├─ media/       intro.mp4 · intro_poster.jpg · intro_chapters.vtt
├─ test/        검증 전용 — 샘플 데이터로 화면을 띄우는 진입점
└─ readme.html

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

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 그래서 운영으로 옮긴 뒤에도 기존 표준 리포트를 없앨 필요가 없고, 법정 · 감사 · 신고 대응에 쓰던 화면은 그대로 둔 채 이 앱을 분석과 월간 회의용으로 병행합니다.

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

하고 싶은 일SAP 표준이 앱이 더하는 관점
판매오더 · 청구 문서의 조회 · 변경VA03 · VF03 으로 충분합니다. 문서 하나를 열어 조건 · 수량 · 금액을 봅니다.문서 수천 건을 거래은행 · 결제 방식으로 묶어 계획과 견주는 일은 문서 화면 하나로는 끊깁니다.
신용장 · 서류 관련 금융 문서VX03N 으로 금융 문서를 조회합니다(구성에 따라 확인 필요).이 앱은 금융 문서 자체를 바꾸지 않고, 은행 비용을 집계해 보여 주기만 합니다.
고객 미수 · 수금FBL5N 이 담당합니다.이 앱은 은행에서 대금을 받은 이후 단계를 읽지 않습니다.
은행 수수료 · 이자 비용 전표FBL3N 으로 G/L 계정 개별 항목을 봅니다.이 앱의 합계와 전표 합계를 계정 단위로 맞춰 보는 대사 지점이 됩니다.
계획 대비 은행 비용의 요인 분해표준 화면에는 같은 방식의 요인분해가 정의돼 있지 않아 보통 엑셀로 만듭니다(확인 필요).아홉 요인으로 가르고 합이 총차이와 같은지 검산합니다.
차이 사유와 감시표준 문서의 적요 · 배치 잡으로 일부 가능합니다.집계 행에 사유를 남기고, 규칙에 걸린 항목을 받을 역할의 대기함에 올립니다.

T-code 별 연계 지점

T-code이름연계 — 같은 데이터 · 대사 지점 · 오가는 방법 · 표준에 남길 일
VA03판매오더 조회드릴스루 라인의 판매오더 번호 · 인코텀즈 · 결제 조건이 판매오더 헤더 · 품목(VBAK · VBAP)과 같은 필드에서 옵니다. 이 앱 라인 → VA03 에서 오더 조건을 확인하고, 오더 조건이 바뀌면 이 앱에서 다시 조회합니다. 어떤 결제 조건이 어떤 결제 방식(네고 · 추심)에 해당하는지는 회사의 기준을 따르며 이 앱은 단정하지 않습니다.
VF03청구 문서 조회청구 금액 · 통화 · 청구일은 VBRK · VBRP 와 같은 필드입니다. 이 앱 칸의 청구액과 VF03 청구 문서의 금액을 문서 단위로 맞춰 보는 것이 가장 기본적인 대사입니다. 법정 청구 처리는 VF03 · 표준 청구 프로세스에 그대로 둡니다.
VX03N금융 문서 조회신용장 · 서류 상태가 필요할 때 이 앱의 결제 방식 · 매입일과 같은 문서를 열어 상태를 확인합니다. 금융 문서의 구성은 회사마다 달라 어느 필드가 거래은행 · 매입일인지는 도입 때 확인해야 합니다(확인 필요).
FBL5N고객 개별 항목이 앱은 대금 입금 이후 상태를 읽지 않습니다. 고객별 미수 · 수금 현황은 FBL5N 에서 확인하고, 이 앱의 고객 차원 값과 같은 고객 코드로 이어서 봅니다.
FBL3NG/L 계정 개별 항목은행 수수료 · 이자 비용 계정의 전표를 기간 · 은행별로 합산해 이 앱의 환가료 + 수수료 합계와 견줍니다. 차이가 나면 계정 매핑 또는 전기 시점 차이를 먼저 의심합니다. 어느 계정에 전기하는지는 회사의 계정 설계를 따릅니다(확인 필요).

정리하면 이 앱 결과의 숫자가 의심스러울 때는 칸 → 원천 라인 → 문서 번호 → 해당 표준 T-code 순서로 내려가고, 표준 화면의 값을 이 앱에서 다시 보려면 같은 문서의 청구일 · 고객 · 거래은행으로 조회 범위를 좁힙니다.

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

대상관계
표준 CDS 분석 쿼리 · Fiori 분석 앱청구 문서나 G/L 전표를 집계하는 표준 분석 앱이 있다면 같은 문서를 다른 방식으로 봅니다. 구체적인 앱 이름은 확인하지 못해 싣지 않았습니다(확인 필요).
Analysis for Office표준 분석 쿼리를 엑셀로 가져와 쓰는 방식입니다. 이 앱의 CDS 쿼리를 같은 방식으로 노출할 수도 있습니다.
이 앱이 서는 자리큐브 하나를 브라우저에서 다시 묶는 방식이라, 분석 앱이 정한 축 밖에서 “은행 · 결제 방식 · 고객”을 자유롭게 바꾸고 계획 대비 차이를 사유와 함께 남기는 쪽을 맡습니다.

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

자리무엇을 바꾸나바꿔도 그대로인 것
은행 약정 기준 테이블은행 · 결제 방식별 환가료율 · 수수료율 · 최저 수수료 · 전신료 · 하자 수수료화면 코드 · 큐브 구조
매입 품목 뷰의 매핑거래은행 · 결제 방식 · 매입일 · 만기까지 일수를 어느 필드에서 가져올지차원 이름 · 요인 산식
계획 뷰계획 값의 원천과 버전실적 큐브
감시 규칙 임계값규칙 5개의 임계값 · 받을 역할 · 사용 여부(서비스 데이터로 변경)규칙 판정 로직
AI 모델 연결서비스 설정으로만 켭니다(기본 꺼짐)숫자는 항상 서비스가 계산

분석 지표 정의

지표정의쓰는 곳비고
총 은행 비용환가료 + 수수료 + 하자 수수료 + 전신료피벗 · 차트 · 드릴스루요율은 가정값
은행 비용률총 은행 비용 ÷ 청구액(원화) × 100계산항목 · 감시 규칙 R2분자 · 분모를 먼저 합산
평균 환가 일수Σ(매입액 × 일수) ÷ Σ 매입액계산항목 · 감시 규칙 R3일수 기준은 확인 필요
환가료 연 환산율환가료 × 360 ÷ Σ(매입액 × 일수) × 100계산항목 · 감시 규칙 R4360일 기준은 가정값
서류 하자 수수료하자 건수 × 건당 수수료피벗 · 감시 규칙 R5하자 사유는 단정하지 않음
총차이 요인순차 대체 9요인, 합 = 총차이워터폴 · 요인분해 펑션원인을 단정하지 않음

CDS 구성 — 뷰 · 코드 · 운영 작업까지

아래 코드는 운영 시스템에 옮길 때의 출발점으로 쓰는 스케치입니다. 표준 데이터 구조(청구 · 판매오더 문서)를 그대로 읽고, 회사마다 달라지는 지점은 “확인 필요”로 표시했습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준은행 약정 기준 테이블환가료율 · 수수료율 · 전신료 같은 기준값을 코드가 아니라 데이터로 둡니다은행 약정이 바뀔 때 뷰를 고치지 않으려고
기본네고 품목 뷰청구 · 오더를 한 줄로 합쳐 라인마다 환가료 · 수수료를 파생합니다모든 집계가 같은 라인에서 출발하게 하려고
차원거래은행 · 결제 방식 등 차원 뷰텍스트 · 값 도움말을 제공합니다필터와 레이아웃 보드의 값 목록을 같은 곳에서 읽으려고
큐브실적 큐브차원 조합별로 합계를 만듭니다(통화 환산 포함)화면이 한 번에 읽는 단위를 작게 하려고
계획계획 뷰같은 차원 조합으로 계획 값을 맞춥니다실적과 계획을 같은 축에서 견주려고
쿼리분석 쿼리UI 주석 · 필터 · 분석 세부 설정분석 도구가 읽는 입구를 하나로 하려고
권한접근 제어(DCL)판매 조직 표준 권한을 집계에 겁니다전사 합계로 남의 숫자가 새는 일을 막으려고
서비스서비스 정의 · 바인딩OData V2 로 게시합니다화면이 부르는 주소를 한 곳에서 관리하려고

① 은행 약정 기준 테이블 — 환가료율과 수수료율을 정하는 곳

은행 비용은 약정이 정합니다. 환가료율 · 수수료율 · 최저 수수료 · 전신료를 뷰 안에 숫자로 박아 두면 약정이 바뀔 때마다 뷰를 고쳐 이송해야 하므로 테이블로 뺍니다. 샘플은 가정값이며, 운영에서는 은행과 맺은 약정을 넣습니다.

@EndUserText.label : '수출 은행 약정 기준'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zebf_bankterm {
  " ─────────────────────────────────────────────────────────────
  "  ZEBF_BANKTERM — 거래은행 · 결제 방식별 약정 요율
  "  이렇게 나눈 이유: 요율은 은행과 회사가 정하는 값이라 코드가 아니라 데이터로 둔다.
  " ─────────────────────────────────────────────────────────────
  key client    : abap.clnt not null;
  key bank      : abap.char(10) not null;    " 거래은행 코드
  key instr     : abap.char(3)  not null;    " LCN 신용장 네고 · DAB 서류인도 · DPB 서류지급
  key valid_from: abap.dats not null;
  disc_rate     : abap.dec(7,4);             " 환가료율(연 %)
  comm_rate     : abap.dec(7,4);             " 네고 · 추심 수수료율(%)
  min_comm      : abap.dec(13,2);            " 최저 수수료
  cable_fee     : abap.dec(13,2);            " 전신 · 우편료(건당)
  dscr_fee      : abap.dec(13,2);            " 서류 하자 수수료(건당)
  waers         : abap.cuky;
}

② 네고 품목 뷰 — 라인마다 환가료와 수수료를 파생하는 기본 뷰

모든 집계는 이 뷰의 한 줄(청구 품목)에서 출발합니다. 청구 헤더 · 품목과 판매오더를 연결하고 약정 기준표를 붙여 라인마다 환가료 · 수수료 · 하자 수수료 · 전신료를 만듭니다. 거래은행 · 결제 방식 · 매입일 · 만기까지 일수를 어느 필드에서 가져올지는 회사 구성에 따르므로 주석에 확인 필요로 남겼습니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 네고 품목(은행 비용 관점)'
@ObjectModel.usageType: { serviceQuality: #X, sizeCategory: #XXL, dataClass: #TRANSACTIONAL }
define view entity ZI_ExportBankFeeItem
  as select from vbrp
    inner join   vbrk on vbrk.vbeln = vbrp.vbeln
    left outer join zebf_bankterm as _t
        on  _t.bank  = vbrp.zz_bank            " 확인 필요 — 거래은행 필드
        and _t.instr = vbrp.zz_instr           " 확인 필요 — 결제 방식 필드
{
  " ─────────────────────────────────────────────────────────────
  "  ZI_ExportBankFeeItem — 청구 품목 한 줄 = 매입(네고 · 추심) 한 줄
  "  이렇게 나눈 이유: 큐브 · 계획 · 쿼리가 모두 같은 라인에서 출발해야 합계가 갈라지지 않는다.
  " ─────────────────────────────────────────────────────────────
  key vbrp.vbeln                      as BillDoc,
  key vbrp.posnr                      as Item,
      vbrk.fkdat                      as BillDate,
      vbrp.zz_negdate                 as NegDate,       " 매입일 — 확인 필요
      vbrk.kunag                      as Customer,
      vbrk.inco1                      as Incoterms,
      vbrp.matkl                      as ProdGroup,
      vbrp.aubel                      as SoDoc,
      vbrk.waerk                      as Currency,
      vbrp.zz_bank                    as Bank,
      vbrp.zz_instr                   as Instr,
      vbrp.zz_days                    as Days,          " 매입일부터 회수 예정일까지 일수
      @Semantics.amount.currencyCode: 'Currency'
      vbrp.netwr                      as FcValue,
      vbrp.zz_negamt_krw              as NegAmt,        " 매입액(원화)
      _t.disc_rate                    as DiscRt,
      cast( vbrp.zz_negamt_krw * _t.disc_rate / 100 * vbrp.zz_days / 360
            as abap.dec(15,0) )       as Disc,          " 환가료
      cast( greatest( vbrp.zz_negamt_krw * _t.comm_rate / 100, _t.min_comm )
            as abap.dec(15,0) )       as Comm,          " 네고 · 추심 수수료
      cast( case when vbrp.zz_dscr_flag = 'X' then _t.dscr_fee else 0 end
            as abap.dec(15,0) )       as Dscr,          " 서류 하자 수수료
      cast( _t.cable_fee as abap.dec(15,0) ) as Cable   " 전신료
}
where vbrk.fkart = 'F2'        " 청구 유형 — 수출 청구 유형은 회사 정함, 확인 필요

③ 차원 뷰 — 거래은행 · 결제 방식의 값과 텍스트

레이아웃 보드와 필터가 보여 주는 값 목록은 차원 뷰가 줍니다. 값과 텍스트를 한 곳에서 내려 주면 화면의 값 도움말, 큐브의 그룹 기준, 쿼리의 필터가 같은 목록을 바라봅니다.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 은행 비용 차원 — 거래은행'
@Search.searchable: true
define view entity ZI_ExportBankFeeBankDim
  as select distinct from ZI_ExportBankFeeItem
{
  @ObjectModel.text.element: ['BankName']
  key Bank                              as Bank,
      @Search.defaultSearchElement: true
      @Semantics.text: true
      cast( Bank as abap.char(40) )      as BankName      " 은행 이름은 은행 마스터에서 — 확인 필요
}

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 은행 비용 차원 — 결제 방식'
define view entity ZI_ExportBankFeeInstrDim
  as select distinct from ZI_ExportBankFeeItem
{
  key Instr                             as Instr,
      case Instr when 'LCN' then '신용장 네고'
                 when 'DAB' then '서류인도(D/A)'
                 when 'DPB' then '서류지급(D/P)' end  as InstrName
}

④ 큐브 — 차원 조합별 합계와 통화 환산

큐브는 라인을 차원 조합으로 묶어 합계를 만듭니다. 화면은 이 결과를 한 번 읽어 브라우저에서 다시 묶으므로, 읽는 단위가 문서 수가 아니라 조합 수에 비례합니다.

@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 은행 비용 큐브(실적)'
define view entity ZI_ExportBankFeeCube
  as select from ZI_ExportBankFeeItem
{
  " ─────────────────────────────────────────────────────────────
  "  ZI_ExportBankFeeCube — 매입월 × 은행 × 결제 방식 × 제품 × 고객 × 인코텀즈
  "  이렇게 나눈 이유: 합계는 여기서 한 번만 만든다. 화면 · 쿼리 · 보고서가 같은 값을 읽는다.
  " ─────────────────────────────────────────────────────────────
  key substring( NegDate, 1, 6 )      as Period,
  key Bank, key Instr, key ProdGroup, key Customer, key Incoterms,
      @DefaultAggregation: #SUM  sum( Disc )   as Disc,
      @DefaultAggregation: #SUM  sum( Comm )   as Comm,
      @DefaultAggregation: #SUM  sum( Dscr )   as Dscr,
      @DefaultAggregation: #SUM  sum( Cable )  as Cable,
      @DefaultAggregation: #SUM  sum( Disc + Comm + Dscr + Cable ) as Total,
      @DefaultAggregation: #SUM  sum( NegAmt ) as NegAmt,
      @DefaultAggregation: #SUM  sum( NegAmt * Days ) as DayAmt,   " 평균 환가 일수의 분자
      @DefaultAggregation: #SUM  count( * )    as Lines
}
group by substring( NegDate, 1, 6 ), Bank, Instr, ProdGroup, Customer, Incoterms

⑤ 계획 뷰 — 실적과 같은 차원 조합으로 맞춘 비교 기준

계획은 실적과 같은 차원 조합으로 맞춰야 칸마다 차이가 나옵니다. 어느 한쪽에만 있는 조합은 억지로 나누지 않고 미계획 매입 · 계획 미이행 요인으로 따로 세웁니다.

@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 은행 비용 계획'
define view entity ZI_ExportBankFeePlan
  as select from zebf_plan                  " 계획 원천은 회사 정함 — 확인 필요
{
  key version  as Version,                  " 예: BNK26
  key period   as Period,
  key bank     as Bank, key instr as Instr,
  key prodgrp  as ProdGroup, key customer as Customer, key inco1 as Incoterms,
      @DefaultAggregation: #SUM  sum( plan_total ) as Total,
      @DefaultAggregation: #SUM  sum( plan_negamt ) as NegAmt,
      @DefaultAggregation: #SUM  sum( plan_lines )  as Lines
}
group by version, period, bank, instr, prodgrp, customer, inco1

⑥ 분석 쿼리 — 화면이 읽는 하나의 입구

화면과 분석 도구가 읽는 입구를 쿼리 하나로 모읍니다. 회사코드와 기간은 필수 변수로 두어 전체를 읽지 않게 합니다.

@Analytics.query: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 은행 비용 분석'
define view entity ZC_ExportBankFeeQuery
  as select from ZI_ExportBankFeeCube
{
  @AnalyticsDetails.query.axis: #ROWS    @AnalyticsDetails.query.display: #KEY_TEXT  Bank,
  @AnalyticsDetails.query.axis: #ROWS    Instr,
  @AnalyticsDetails.query.axis: #COLUMNS Total,
  @AnalyticsDetails.query.axis: #COLUMNS Disc,
  @AnalyticsDetails.query.axis: #COLUMNS Comm,
  @Consumption.filter: { selectionType: #INTERVAL, mandatory: true }  Period,
  Customer, ProdGroup, Incoterms
}

⑦ 접근 제어(DCL) — 합계로 남의 숫자가 새지 않게

권한은 큐브 이전 단계인 기본 뷰에 겁니다. 드릴스루 라인에만 걸면 전사 합계에서 자기 몫을 빼는 방식으로 남의 숫자가 드러날 수 있기 때문입니다.

@EndUserText.label: '수출 은행 비용 — 판매 조직 권한'
@MappingRole: true
define role ZI_ExportBankFeeItem {
  grant select on ZI_ExportBankFeeItem
    where ( VKORG ) = aspect pfcg_auth( V_VBRK_VKO, VKORG, ACTVT = '03' );
    " 판매 조직 표준 권한 오브젝트 — 회사 권한 설계에 따라 확인 필요
}

⑧ 서비스 정의와 바인딩 — 화면이 부르는 주소

쿼리와 차원 뷰를 서비스로 노출하고 OData V2 로 바인딩합니다. 화면은 manifest 의 서비스 주소만 알면 되므로, 운영으로 옮길 때 이 주소만 바꿉니다.

@EndUserText.label: '수출 은행 비용 분석 서비스'
define service ZUI_ExportBankFee {
  expose ZC_ExportBankFeeQuery as CubeSet;
  expose ZI_ExportBankFeePlan  as PlanSet;
  expose ZI_ExportBankFeeBankDim  as BankDim;
  expose ZI_ExportBankFeeInstrDim as InstrDim;
  expose ZI_ExportBankFeeItem  as ItemSet;
}
" 서비스 바인딩: OData V2 - UI, 이름 expbankfee_srv (소문자) — 활성화 후 manifest 주소 교체

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래는 정하지 않으면 막히는 순서대로 적었습니다.

해야 할 일무엇을 정하나정하지 않으면누가
은행 약정 요율은행 · 결제 방식별 환가료율 · 수수료율 · 최저 수수료 · 전신료 · 하자 수수료은행 비용 합계가 은행 통보서 · 전표와 어긋납니다자금 · 수출
거래은행 · 결제 방식 판정 필드어느 필드가 거래은행 · 결제 방식(네고 · 서류인도 · 서류지급)인가은행별 집계가 은행 자료와 맞지 않습니다자금 · 수출
환가 일수 기준매입일부터 무엇까지를 일수로 세는가, 연 환산 일수(360 · 365)환가료와 평균 환가 일수가 은행 계산과 달라집니다자금 · 재무
하자 판정어느 시점의 은행 통보를 하자로 보고 어느 필드에 남기나하자 발생 비율과 하자 수수료 요인이 흔들립니다수출 · 영업관리
비용 계정 매핑환가료 · 수수료가 전기되는 계정과 전기 시점FBL3N 전표 합계와 맞출 수 없습니다재무 · 회계
환율 유형 · 환산 시점청구 통화를 원화로 바꾸는 환율과 시점매입액 환산이 회계 전표와 어긋납니다재무
계획 원천 확정계획 값이 어디서 오고 버전은 무엇인가“계획이 왜 이 숫자냐”가 반복됩니다기획
차원 범위11개 차원 중 운영에서 쓸 것나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다현업 · IT
권한 설계판매 조직 · 회사코드 단위 권한 범위전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다보안 · 권한
성능 기준조회 응답 시간과 최대 기간대용량에서 화면이 기다림만 남깁니다IT
대사 체계표준 T-code 와 맞출 항목 · 주기숫자가 맞는지 아무도 확인하지 않습니다경영지원 · 회계
전송(TR) 순서 · 서비스 활성화기준 테이블 → 뷰 → 쿼리 → 권한 → 서비스 순서, 서비스 게시와 manifest 서비스 주소 교체서비스가 켜져도 권한 없이 열리거나 화면이 옛 주소를 봅니다Basis · IT
배치 등록에이전트 실행 주기(SM36 배치 등)사람이 화면을 열 때만 점검이 돕니다Basis · 자금

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

검증용 샘플 전수에 대해 대사식을 돌렸고 차이는 모두 0건이며 의도적 예외는 없습니다. 도입 포인트의 사례와 같은 숫자입니다.

대사식검사 건수차이 건수
큐브 합계 = 원천 라인 합계 (총 은행 비용 · 청구액 · 환가료 · 수수료 · 하자 수수료 · 전신료 · 건수 · 매입액 등 12항목)120
환가료 + 수수료 + 하자 수수료 + 전신료 = 총 은행 비용 (실적 · 계획 · 원천 라인 합)30
요인 9종의 합 = 총차이 (실적 − 계획)10
외화 청구액 통화별 대사 (USD · EUR · JPY · CNY)40
원천 라인 항등식 (환가료 + 수수료 + 하자 + 전신료 = 총 은행 비용)7,7340

큐브 대사식 20종은 모두 차이 0이고, 원천 라인 7,734줄의 항등식도 차이 0입니다. 화면 쪽은 축을 바꿔도 합계가 변하지 않는지, 칸 금액과 원천 합계가 같은지를 실제 브라우저로 따로 확인했습니다.

운영 데이터로 갈 때

청구 문서가 수천만 건이 되면 집계 위치가 가장 먼저 중요해집니다. 큐브는 데이터베이스에서 집계하고 화면은 집계 결과만 읽습니다. 회사코드와 기간은 필수 조건으로 두어 전체를 읽지 않게 하고, 필요하면 월 단위 사전 집계 뷰를 둡니다. 인덱스는 청구일 · 판매 조직 · 고객 중심으로 점검하고, 드릴스루는 500줄씩 이어 읽습니다. 응답 시간 기준과 최대 조회 기간은 도입 시 함께 정합니다.

자주 묻는 질문

도입을 검토하시는 분들이 가장 자주 물으시는 질문을 숫자와 산식 · 화면과 사용 · 분석 기능 · 도입과 운영 순으로 모았습니다.

숫자와 산식

이 화면은 어느 시점 · 어느 범위의 데이터로 동작하나요?

공개한 화면은 검증용 샘플 데이터(2026-01 ~ 2026-09, 회사코드 1000)로 동작합니다. 샘플은 가상이며 원천 라인 7,734줄을 차원 조합 1,237행의 큐브로 묶고, 계획 1,237행을 맞춰 두었습니다.

운영 시스템에 연결할 때는 화면의 서비스 주소만 바꾸고, 서비스가 같은 형식으로 청구 · 은행 약정 · 네고 데이터를 내려 주면 됩니다. 환가료율 · 수수료율 · 임계값은 모두 가정값입니다.

총 은행 비용은 무엇을 더한 값인가요?

환가료 + 네고·추심 수수료 + 서류 하자 수수료 + 전신료입니다. 환가료는 매입액 × 환가료율(연 %) × 환가 일수 ÷ 360 으로 라인마다 계산합니다.

이 항등식은 원천 라인 7,734줄 모두에서 1원 이내로 맞는지 전수로 검사했고 차이가 0건입니다.

환가료와 환가료 연 환산율은 어떻게 다른가요?

환가료는 실제로 낸 금액이고, 연 환산율은 그 금액을 ‘매입액 × 일수’로 나눠 연 기준으로 바꾼 값입니다. 같은 금액이라도 오래 앞당겨 받으면 연 환산율은 낮아집니다.

그래서 은행 비교는 금액이 아니라 연 환산율과 평균 환가 일수를 함께 봅니다. 360일 기준은 가정값이며 은행 약정에 따라 다를 수 있습니다.

평균 환가 일수는 단순 평균인가요?

아닙니다. Σ(매입액 × 일수) ÷ Σ 매입액 으로 매입액 가중 평균입니다. 분자와 분모를 먼저 합산한 뒤 나누기 때문에 어느 소계에서도 맞고, 건수가 적은 큰 금액이 평균을 정확히 끌어올립니다.

총차이를 아홉 요인으로 가르는 방식은 무엇인가요?

순차 대체입니다. 계획의 건수를 실적 값으로 바꾸고, 다음에 건당 매입액, 환가 일수, 환가료율, 하자 발생 비율, 하자 건당 수수료, 수수료율 · 전신료 순서로 한 요인씩 실적 값으로 바꿔 가며 총 은행 비용의 변화를 나눕니다. 마지막 단계에서 실적 합계와 같아지므로 요인의 합은 총차이와 같습니다.

원 단위 반올림 차이는 수수료 요인에 모읍니다. 순서가 바뀌면 요인별 값이 달라질 수 있어 순서를 고정해 두었습니다.

“미계획 매입”과 “계획 미이행”은 무엇인가요?

같은 차원 조합이 실적에만 있으면 미계획 매입, 계획에만 있으면 계획 미이행입니다. 억지로 나누지 않고 전체를 한 요인으로 세웁니다. 샘플에서는 미계획 매입이 +327백만원, 계획 미이행이 −83백만원이어서 합계 +237백만원 안에서 서로 상쇄되고 있었습니다.

계산이 맞는지 어떻게 아나요?

큐브 합계와 원천 라인 합계를 12개 항목으로, 환가료 + 수수료 + 하자 + 전신료 = 총 은행 비용을 실적 · 계획 · 원천에서, 요인 합 = 총차이, 통화별 외화 청구액을 매번 대사합니다. 모두 차이 0입니다. 화면에서도 칸 금액과 드릴스루 합계, 요인 합계와 총차이를 줄로 보여 줍니다.

화면과 사용

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

부르지 않습니다. 조회 한 번으로 큐브를 읽고, 이후 행 · 열 · 필터 변경은 브라우저에서 다시 묶습니다. 헤드리스 브라우저로 확인했을 때 축 이동에서 네트워크 요청이 0건이었습니다.

열 조합에 한도가 있는 이유는 무엇인가요?

열 조합이 많아지면 표가 읽을 수 없게 되고 브라우저가 느려집니다. 열 조합 36개와 행 노드 500개를 넘으면 표를 반쯤 그리지 않고 안내하며 막습니다. 필터로 범위를 좁히거나 차원을 줄이면 됩니다.

칸을 눌렀을 때 열리는 문서 라인은 어떻게 정해지나요?

칸의 행 경로와 열 조합이 그대로 질의 조건이 됩니다. 칸이 정한 차원 값을 모두 조건으로 걸어 원천 네고 문서 라인을 500줄씩 읽고, 위쪽 줄에서 칸 금액과 원천 합계가 같은지 알려 줍니다.

역할(CEO · CFO · 영업 · 자금)을 바꾸면 무엇이 달라지나요?

앞세우는 지표와 기본으로 쪼개 보는 차원이 달라집니다. CEO 는 제품 그룹 › 거래은행, CFO 는 매입월, 영업 책임자는 국가 · 고객, 자금 책임자는 거래은행 › 결제 방식입니다. 역할을 바꿔도 다시 조회하지 않으며, 레이아웃 보드에서 직접 바꾼 축은 그대로 둡니다.

변동 사유는 어디에 저장되고 어떻게 따라오나요?

사유는 조회 범위와 행 경로를 키로 저장됩니다. 그래서 축을 바꾸거나 화면을 다시 열어도 같은 행에 따라오고, CSV 와 AI 근거 표에도 함께 실립니다. 규칙이나 기준이 바뀐 기간에는 해당 범위의 사유를 다시 검토하는 것이 좋습니다.

좁은 화면이나 모바일에서도 쓸 수 있나요?

폭 390px 에서 조회 영역이 세로로 쌓이고 차트가 표 아래로 내려가는 것을 확인했습니다. 표는 가로로 스크롤됩니다. 다만 열 조합이 많은 분석은 넓은 화면이 편합니다.

분석 기능

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

만들지 않습니다. 서비스가 계산한 숫자를 읽어 요약과 핵심 발견을 쓰고, 읽은 근거 표를 펼쳐 볼 수 있게 합니다. 기본은 규칙 기반 해설이며 외부 모델 연결은 서비스 설정으로만 켜고 기본은 꺼져 있습니다.

AI 에이전트는 무엇을 감시하나요?

규칙 5개입니다. 총 은행 비용의 계획 차이 금액(거래은행별), 은행 비용률 상한(고객별), 평균 환가 일수 상한(거래은행별), 환가료 연 환산율 상한(수출 국가별), 서류 하자 수수료 금액(고객별)입니다. 걸린 항목은 받을 역할의 대기함에 올라갑니다. 임계값은 샘플 분포에서 정한 가정값입니다.

에이전트를 하루에 한 번만 실행하는 이유는 무엇인가요?

같은 보고가 하루에 여러 번 쌓이지 않게 하려는 것입니다. 두 번째 요청은 서버가 건너뜀으로 판정하고 사유와 첫 실행 번호를 기록합니다. 판정을 화면이 아니라 서버가 하므로 어느 화면에서 눌러도 같습니다.

PowerPoint 보고서는 어떻게 만들어지나요?

AI 분석 창의 보고서 버튼을 누르면 브라우저가 현재 범위의 표와 차트를 담은 .pptx 파일을 직접 만들어 내려받습니다. 서버에 파일을 남기지 않고 외부 라이브러리도 쓰지 않습니다. 샘플로 만든 파일을 슬라이드 6장 구성으로 열어 확인했습니다.

레이아웃 저장에는 무엇이 들어가나요?

축 · 조회조건 · 분석 항목 · 접힘 상태 · 표시 행 수가 들어갑니다. 기본 레이아웃으로 지정하고 자동 조회를 켜면 화면을 여는 순간 저장한 축으로 조회된 채 시작합니다.

도입과 운영

표준 T-code 와는 어떤 관계인가요? 기존 리포트를 없애야 하나요?

없애실 필요가 없습니다. 표준 실행은 SAP 표준 T-code(VA03 · VF03 · VX03N · FBL5N · FBL3N)가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 법정 · 감사 · 신고 대응에 쓰던 화면은 그대로 두고, 이 앱은 월간 은행 비용 분석과 회의용으로 병행하는 것이 안전합니다.

운영 시스템에 연결하는 데 무엇이 필요하고 얼마나 걸리나요?

필요한 것은 기준값 정하기(은행 약정 요율 · 거래은행 · 결제 방식 필드 · 환가 일수 기준 · 하자 판정), CDS 뷰 8벌 만들기, 서비스 게시, 화면의 서비스 주소 교체입니다. 소요 기간은 회사의 데이터 구성과 합의 속도에 달려 있어 일반 수치를 드릴 수 없습니다.

개발보다 정하는 일이 많으며, 정해야 할 항목은 CDS 구성 절의 표에 정리했습니다.

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

권한은 큐브 이전 단계인 기본 뷰에 겁니다. 드릴스루 라인에만 걸면 전사 합계에서 자기 몫을 빼는 방식으로 남의 숫자가 드러날 수 있기 때문입니다. 판매 조직 단위의 표준 권한을 기본으로 설계합니다.

화면은 외부 차트 라이브러리와 외부 전송 없이 동작하며, AI 모델 연결은 꺼진 채 시작합니다.

청구 문서가 수천만 건이면 어떻게 되나요?

큐브 읽기 단위가 차원 조합이라 문서 수가 아니라 조합 수에 비례합니다. 그래도 운영 규모에서는 기간을 필수 조건으로 두고, 집계는 데이터베이스에서 하며, 필요하면 월 단위로 미리 집계하는 뷰를 둡니다. 드릴스루는 500줄씩 이어 읽습니다.

응답 시간 기준과 최대 조회 기간은 도입 시 함께 정합니다.

은행 약정이 바뀌면 어떻게 하나요?

환가료율 · 수수료율 같은 요율은 기준 테이블 값을, 거래은행 · 결제 방식 판정은 기본 뷰의 매핑을 고치면 됩니다. 값이 바뀌어도 화면 코드는 바뀌지 않습니다. 이미 남겨 둔 변동 사유는 조회 범위와 행 경로에 묶여 있어 약정이 바뀐 기간에는 해당 범위의 사유를 다시 검토하는 것이 좋습니다.

거래은행 · 결제 방식 · 환가 일수는 SAP 의 어디에서 가져오나요?

신용장이나 서류 관련 금융 문서, 또는 고객사 확장 필드에서 가져오는 구성이 일반적이지만 회사마다 다릅니다. 이 글의 매핑은 샘플 기준이며, 운영에서는 어느 필드를 쓸지 먼저 확인해야 합니다(확인 필요).

이 화면의 결과로 회계 · 세무 처리를 확정할 수 있나요?

확정할 수 없습니다. 이 화면은 조회 · 점검 도구이며, 최종 판단은 회사와 감사인이 하고 세무 신고는 회사와 세무 대리인이 합니다. 은행 비용의 계정 분류나 전기 시점 같은 기준도 회사의 정책과 전문가 판단에 따라 정합니다. 화면은 원인을 단정하지 않고 점검 필요 항목으로만 표시합니다.