수출 솔루션 · 수출 판매 수익성 분석

수출 제품 믹스 공헌이익 다차원 분석 리포트 — 계획 대비 차이를 물량·믹스·환율 요인으로 가르는 수출 수익성 점검

제품·국가·고객·인코텀즈 축 전환 · 칸에서 청구 문서까지의 드릴스루 · 계획 대비 공헌이익 차이의 8요인분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면 33종, 그리고 CDS 코드까지

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

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

수출 담당과 관리회계 담당이 계획 대비 실적을 볼 때 묻는 질문은 늘 같습니다. 계획 대비 공헌이익이 얼마나 벗어났나, 어느 국가·고객·제품에서 났나, 물량 때문인가 환율 때문인가 비용 때문인가. 지금은 이 답이 청구 문서 조회, 고객 항목 조회, 수익성 분석 보고서, 그리고 밤새 만든 엑셀에 흩어져 있습니다. 이 화면은 같은 수출 청구 데이터를 한 큐브에 모아 세 질문을 한 화면에서 답하도록 이어 붙입니다.

표준 화면(VA03 · VL03N · VF03 · FBL5N · KE30)은 각자 맡은 문서와 항목을 정확히 보여 줍니다. 다만 “제품 믹스가 바뀌어서인지, 환율이 움직여서인지”를 한 번에 가르는 자리는 표준 화면 사이에 있습니다. 이 앱은 표준 실행은 SAP 표준 T-code 에 그대로 두고, 그 사이를 조회·검증 관점으로 메웁니다. 판단은 숫자를 단정하지 않고 점검 필요 · 확인 필요로 남깁니다.

한 줄 요약 — 조회 리포트는 누구나 만듭니다. 이 앱의 값은 조회 다음에 있습니다: 계획 대비 공헌이익 차이를 여덟 요인으로 가르고, 환율과 계획에 없던 거래를 따로 세우고, 사유를 행에 남기고, 사람이 열지 않아도 감시하며, 합이 총차이와 어긋나지 않는지 매번 검산합니다.

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 갈라지지 않는 수출 피벗제품·국가·고객·인코텀즈를 끌어다 놓아 행 3단계·열 2단계로 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋나지 않습니다.축마다 리포트를 따로 만들고, 합계가 다르면 맞추는 회의를 엽니다.
② 칸에서 청구 문서까지 한 번에금액 칸을 누르면 그 금액을 만든 청구 문서 라인이 열리고, 합계가 칸 금액과 같은지 바로 보입니다.리포트를 닫고 VF03 을 열어 조건을 손으로 다시 맞춥니다.
③ 계획 대비 차이를 여덟 요인으로공헌이익 차이를 물량·믹스·외화 단가·환율·변동비·운임보험·수수료·미계획으로 가르고 합이 총차이와 같은지 검산합니다.엑셀로 분해하고, 합계가 총차이와 맞는지 다시 손으로 맞춥니다.
④ 환율과 계획에 없던 거래를 따로 세움환율 효과와 계획에 없던 고객·제품 조합이 영업 성과와 섞이지 않도록 요인을 따로 세워 점검할 자리를 좁힙니다."계획보다 잘 나왔다" 한 줄에 환율과 일회성 거래가 묻힙니다.
⑤ 변동 사유가 행에 남는다사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음 조회에도 그 행에 따라옵니다.같은 질문을 매번 다시 하고, 지난번 답은 메일함에서 찾습니다.
⑥ 숫자는 서비스가, 글은 AI가 쓰는 분석금액과 비율은 서비스가 계산하고 해설은 그 값을 옮깁니다. 규칙에 걸린 항목은 받을 역할의 대기함에 올라갑니다.AI 가 만든 숫자를 보고에 써도 되는지부터 따져야 합니다.
⑦ 보고서와 레이아웃을 그대로 재사용보고 있는 범위로 PowerPoint 보고서가 브라우저에서 만들어지고, 자주 쓰는 배치는 이름을 붙여 저장해 다시 엽니다.화면을 캡처하고 숫자를 옮겨 적어 보고서를 다시 만듭니다.

사례로 보는 효과 — 계획보다 잘 나온 숫자 안에 있는 것

검증용 샘플 데이터(2026년 1월~9월 수출 청구 3,294줄, 고객 14·제품 12·국가 8·통화 4)에서 공헌이익은 계획 3,159백만원, 실적 3,288백만원으로 총차이 +128백만원이 나왔습니다. 합계만 보면 계획을 웃돈 달입니다. 여덟 요인으로 가르자 모양이 달라집니다.

요인금액(백만원)읽는 법
물량+17전체 판매량이 계획과 달라서 생긴 차이
믹스−15어떤 제품이 더 팔렸는지 구성이 달라서 생긴 차이
외화 단가−17외화 판매가격 차이
환율+169환율 변동 효과 — 판매 성과와 분리해서 읽을 값
변동비−96EA당 변동비가 계획보다 높음 — 점검 필요
운임·보험−31EA당 운임·보험료가 계획보다 높음 — 점검 필요
수수료−4EA당 수수료가 계획보다 높음
미계획+105계획에 없던 고객·제품 조합의 실적 — 계획 반영 여부 확인 필요
합계+128총차이와 같음(검산 줄 오차 −0.01원, 반올림)

환율(+169)과 미계획(+105)을 빼면 나머지 여섯 요인의 합은 −146백만원입니다. 즉 “계획보다 128 잘 나왔다”는 숫자 안에는 비용 쪽에서 계획보다 덜 남은 몫이 들어 있습니다. 원인을 단정하지 않고 변동비·운임보험 단가를 점검해야 할 자리를 금액 순으로 올려 주는 것이 이 화면의 역할입니다. 요인 합계가 총차이와 같은지는 화면이 매번 검산하며, 이 샘플의 대사 검사 68건은 모두 차이 0건입니다(요인 합계는 원 단위 반올림 0.01원).

도입하면 달라지는 것

  • 회의의 주제 — “어느 숫자가 맞나” 가 아니라 “변동비와 운임을 어떻게 볼 것인가” 로 옮겨 갑니다.
  • 보고 준비 — 차이 표·요인분해·사유·보고서가 한 화면에서 나와 엑셀 취합과 캡처가 줄어듭니다.
  • 다음 조회로 이어지는 기록 — 사유와 레이아웃이 남아 같은 설명을 다시 하지 않습니다.
  • 놓치는 날이 없는 점검 — 아무도 화면을 열지 않아도 규칙에 걸린 항목이 받을 역할의 대기함에 올라옵니다.

이런 회사에 맞습니다

외화로 수출 청구를 내고 판매 계획을 제품·고객 단위로 세우는 제조·유통 회사에 맞습니다. 수출 국가가 여럿이고 통화가 둘 이상이라 환율 효과를 따로 읽어야 하며, 인코텀즈에 따라 운임·보험료가 매출 대비 비율로 크게 달라지는 곳일수록 효과가 큽니다. 수출 영업, 물류, 관리회계(또는 경영지원) 담당이 같은 숫자를 놓고 이야기해야 하는 조직, 그리고 월 단위로 계획 대비 점검 회의를 여는 조직을 염두에 두었습니다. 반대로 내수 위주이거나 계획을 제품 단위로 세우지 않는 회사는 계획 원천부터 정해야 합니다.

실행 화면

사용 방법

  1. 조회조건 입력 — 필수는 회사코드와 시작·종료 기간입니다(기본값 1000, 2026-01 ~ 2026-09). 계획 기준은 판매 계획 v1 로 고정이고, 저장된 레이아웃 선택은 선택 사항입니다.
  2. 조회 — 조회 단추는 조회조건 영역 오른쪽 끝에 있고, 회사코드 칸에서 Enter 키를 눌러도 같은 조회가 됩니다. 조회 전에도 레이아웃 보드와 피벗 틀이 먼저 보입니다. 기본 레이아웃에 자동 조회를 지정하면 화면을 열 때 조회된 채로 시작합니다.
  3. 요약 확인 — 표 위의 역할별 요약에서 경영자 · 재무 책임자 · 영업 책임자 · 물류 책임자를 바꾸면 앞세우는 지표 네 개와 쪼개 보는 차원이 함께 바뀝니다. 다시 조회하지 않습니다.
  4. 탭·축 이동 — 레이아웃 보드의 차원 단추를 쓰지 않는 차원 · 행 · 열 칸으로 끌어다 놓습니다. 행은 3단계, 열은 2단계까지이며, 브라우저가 가진 큐브를 바로 다시 묶습니다. 차원 필터 단추에서는 값을 여러 개 고릅니다.
  5. 행·셀 클릭 상세 — 행의 화살표로 하위 차원까지 내려가고, 금액 칸을 누르면 그 금액을 만든 청구 문서 라인이 열립니다. 위쪽 기간별 요약 단추는 월별 요약을 보여 줍니다.
  6. 분석 항목과 계획 대비 — 공헌이익·공헌이익률 같은 계산항목을 고르고, 계획 대비 스위치를 켜면 칸마다 실적 · 계획 · 차이 · 증감률이 붙습니다. 차이가 난 행에서 사유를 남기고, 차트의 차이 분해 탭에서 워터폴과 검산 줄을 봅니다.
  7. AI 분석·에이전트 — 위쪽 AI 분석에서 현재 범위의 해설과 근거 표를 읽고, AI 에이전트에서 감시 규칙 · 받은 보고 · 실행 기록 탭을 오가며 실행합니다.
  8. 내보내기 — AI 분석 창의 보고서 단추로 PowerPoint 보고서를, 위쪽 CSV 단추로 현재 표(사유 포함)를 내려받습니다. 레이아웃 메뉴에서는 현재 배치를 이름 붙여 저장합니다.

무엇으로 만들었나

화면은 OpenUI5 표준 컨트롤과 직접 그린 SVG 차트로 짰고, 데이터는 OData V2 서비스 하나에서 읽습니다. 서비스 쪽에서 판정하는 일과 브라우저가 맡는 일을 아래처럼 나눴습니다.

자리무엇왜 그렇게 두었나
화면 컨트롤트리 테이블 피벗 · 레이아웃 보드(끌어다 놓기) · 역할 요약 · SVG 차트 · 대화상자 묶음외부 차트 라이브러리 없이 표준 컨트롤만 쓰면 사내망에서 반입 심사가 필요 없고, 차트가 표와 같은 값을 그립니다.
집계 로직읽어 온 큐브를 브라우저가 행·열 조합으로 다시 묶는 피벗 모듈큐브 자체가 엔티티셋이라 축을 바꿔도 서비스를 다시 부르지 않고, 어느 배치에서도 총합이 같습니다.
판정·분해 로직서비스가 계산하는 8요인분해 · 규칙 기반 해설 · 감시 규칙 실행금액과 비율은 서비스 한 곳에서만 계산해, 화면·AI 해설·보고서가 같은 숫자를 씁니다.
OData 서비스 구성기본 모델 하나(OData V2, 단방향 바인딩, 조회 건수는 응답에 포함) · 읽기 전용 집합 열두 개와 쓰기 집합 세 개 · 계산 펑션 세 개조회조건은 모두 필터 객체로 서비스에 넘기고, 사유·레이아웃·감시 규칙은 생성·수정·삭제로 저장합니다. 운영에서는 데이터 원천만 바꾸고 계약은 그대로 둡니다.
테마sap_horizon표준 Fiori 화면과 같은 색과 글꼴이라 사용자가 위화감 없이 오갑니다.

앱 정보

항목내용
솔루션 · 업무 영역수출 솔루션 · 수출 판매 수익성 분석 / 계획 대비 차이 점검
대상 영역수출 청구(매출 · 변동비 · 운임 · 보험 · 수수료)와 판매 계획의 공헌이익 비교. 특정 기준서의 요구사항을 직접 구현하는 화면은 아닙니다.
연계하는 SAP 표준 T-codeVA03 · VL03N · VF03 · FBL5N · KE30
화면 성격다차원 분석 리포트 — 피벗 · 드릴스루 · 기준 대비 차이 · 요인분해 · AI 분석 · AI 에이전트
데이터OData V2 — 검증용 샘플 데이터로 동작을 확인했습니다(청구 3,294줄 → 큐브 738건, 판매 계획 733건)
SAP 표준 기능을 그대로 이어받은 부분 — 청구 문서 번호·품목, 인코텀즈, 환율, 출하일 같은 필드는 표준 문서의 필드를 그대로 가져와 쓰고, 칸에서 연 문서 라인의 번호로 표준 청구 문서 조회 화면에서 원본을 찾을 수 있습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.

실제 브라우저에서 검증용 샘플 데이터로 찍은 화면 33종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리인지 아래에 적었습니다. 숫자는 모두 같은 자료에서 나온 것이라 화면끼리 맞춰 보셔도 됩니다.

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

처음 열었을 때에는 아직 서비스를 부르지 않은 상태에서도 화면의 뼈대가 보입니다. 조회 직후 한 화면에 표 · 차트 · 요약이 함께 뜹니다.

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

회사코드 · 시작·종료 기간 · 계획 기준 · 저장된 레이아웃과 그 아래 레이아웃 보드가 조회 전에도 먼저 뜹니다. 조회 단추는 조회조건 영역 오른쪽 끝에 있고, 회사코드 칸에서 Enter 키를 눌러도 같은 조회가 됩니다. 기본 배치는 행 지역 › 국가이며 열은 비어 있습니다.

조회 직후 — 피벗과 차트
조회 직후 — 피벗과 차트 — 한 번 읽은 큐브로 표와 차트와 요약이 함께 그려집니다

조회 한 번으로 큐브 738건(원천 청구 3,294줄)을 읽어 표 · 차트 · 역할 요약을 그립니다. 경영자 요약은 매출 12,660백만원 · 공헌이익 3,288백만원 · 공헌이익률 26.0%를 앞세우고 각 값 아래에 계획과 대비를 붙입니다. 표 왼쪽 화살표로 지역 아래 국가를 펼치면 차트도 함께 바뀝니다.

레이아웃 보드
레이아웃 보드 — 쓰지 않는 차원 · 행 · 열 세 칸

차원 단추를 끌어다 세 칸 사이에서 옮깁니다. 행은 3단계, 열은 2단계까지 쌓이고 단추 안쪽 지우기로 축을 뺄 수 있습니다. 어느 칸으로 옮겨도 서비스를 다시 부르지 않고 브라우저가 가진 큐브를 다시 묶습니다.

축을 끌어다 놓은 뒤
축을 끌어다 놓은 뒤 — 제품그룹은 행으로, 인코텀즈는 열로

행 지역 › 국가 › 제품그룹에 열 인코텀즈로 바꾼 모습입니다. 열에는 CIF · DAP · FOB 가 나란히 서고 오른쪽 끝에 합계가 붙습니다. 어떤 배치에서도 총합은 3,288백만원으로 같아야 하며 이 값이 갈라지는지를 배치 6가지로 시험했습니다.

머리 영역 접기
머리 영역 접기 — 조건은 한 줄 요약으로 남습니다

조회 조건 영역을 접으면 회사 · 기간 · 행·열 구성 · 항목 · 계획 대비 여부 · 필터 수가 한 줄에 남고 표와 차트가 화면을 더 씁니다. 다시 펼치면 조건이 그대로 있습니다.

경영 요약 — 역할 네 개

같은 큐브를 역할마다 다른 눈으로 읽습니다. 역할을 바꿔도 다시 조회하지 않고 앞세우는 지표와 쪼개 보는 차원만 바뀝니다.

경영자
경영자 — 국가별 매출과 공헌이익 기여를 계획과 견줍니다

경영자 역할은 매출 · 공헌이익 · 공헌이익률 · EA당 공헌이익을 계획과 나란히 보여 줍니다. 숫자 아래 계획 값과 대비(예: 104.1%)가 붙어 계획 대비 위치를 바로 읽습니다.

재무 책임자
재무 책임자 — 제품그룹 › 제품의 공헌이익과 변동비

재무 책임자는 제품그룹 › 제품으로 내려가며 공헌이익과 변동비 · 운임보험수수료를 봅니다. 제품그룹별 공헌이익률이 18.7%(산업용 소재)에서 31.2%(전자부품)까지 벌어지는 것이 표와 차트에서 한 번에 보입니다.

영업 책임자
영업 책임자 — 국가 › 고객별 달성

영업 책임자는 국가 › 고객 순으로 매출 · 공헌이익 · 수량 · 평균 판매단가를 봅니다. 국가별 공헌이익률이 21.5%(아랍에미리트)에서 31.6%(멕시코)까지 갈리는 모습이 보입니다.

물류 책임자
물류 책임자 — 인코텀즈 › 국가별 운임·보험·수수료

물류 책임자는 인코텀즈 › 국가별 운임·보험료와 수수료를 봅니다. 전체 운임·보험·수수료는 752백만원으로 매출의 5.9%이고, DAP 의 비율이 9.1%로 가장 높습니다. 비용이 늘면 빨강으로 보이도록 영향 방향을 따로 정해 두었습니다.

축 전환과 범위 — 열 2단계 · 다중 선택 · 차트 폭

축을 겹치고 값을 골라 범위를 좁히는 화면입니다. 모든 조작은 브라우저 안에서 일어나고 서비스를 다시 부르지 않습니다.

열 2단계
열 2단계 — 분기 아래 인코텀즈를 겹칩니다

열에 분기와 인코텀즈를 올려 열 조합 10개를 만든 모습입니다. 열 조합이 36개를 넘는 배치는 추가를 막고, 그 한도 안에서 표를 가로로 읽습니다. 오른쪽 차트는 열 축이 있으면 묶음 막대로 바뀝니다.

차원 값 다중 선택
차원 값 다중 선택 — 값마다 이름 · 코드 · 라인 수

차원 필터 단추를 누르면 값 목록이 열립니다. 값마다 이름과 코드, 원천 라인 수가 보이고 여러 개를 고를 수 있으며 큐브에 있는 값만 올라옵니다. 같은 차원 안에서는 또는, 다른 차원끼리는 그리고로 결합합니다.

필터를 건 결과
필터를 건 결과 — 일본과 미국만 남긴 표

국가에서 일본과 미국만 고른 결과입니다. 필터 단추에 선택 수(2)가 붙고 요약 · 표 · 차트가 선택 범위로 바뀝니다. 공헌이익 합계 1,131백만원은 큐브에서 두 국가 값을 직접 더한 것과 같습니다.

표와 차트 사이 손잡이
표와 차트 사이 손잡이 — 차트 폭을 끌어서 조절합니다

표와 차트 사이 손잡이를 끌면 차트 너비가 바뀌고, 브라우저가 그 값을 기억해 다음에도 같은 비율로 엽니다. 좁은 화면에서는 손잡이 대신 차트가 표 아래로 내려갑니다.

칸에서 원천 문서까지 — 드릴스루 · 문서 라인 · 기간별 요약

피벗의 숫자를 의심할 때 화면을 옮기지 않고 그 금액을 만든 청구 문서 라인까지 내려갑니다.

드릴스루
드릴스루 — 칸을 누르면 그 금액을 만든 문서 라인이 열립니다

전체 합계 공헌이익 칸을 눌러 연 창입니다. 머리에 셀 값 3,288 = 원천 합계 3,288(원천 3,294줄) 일치가 표시되고 바로 아래에 이 목록을 만든 조회 조건이 그대로 보입니다. 기본 500행씩 보여 주고 더 보기로 넘깁니다.

문서 라인 목록
문서 라인 목록 — 청구 번호 · 품목 · 수주번호까지

아랍에미리트 칸의 문서 라인 273줄입니다. 청구 번호 · 품목 · 선적일 · 청구일 · 수주번호 · 고객 · 국가 · 제품 · 제품그룹 · 인코텀즈가 한 줄씩 나오고 셀 값 250 = 원천 합계 250 이 일치합니다. 이 번호로 표준 청구 문서 조회 화면에서 원본을 찾습니다.

기간별 요약
기간별 요약 — 월별로 같은 합계를 다시 확인합니다

월별 라인 수 · 수량 · 매출 · 변동비 · 운임·보험료 · 수수료 · 공헌이익 · 공헌이익률을 한 표로 보여 줍니다. 합계 행의 3,294줄 · 매출 12,660 · 공헌이익 3,288 · 25.97%는 큐브 합계와 같고, 이 표는 서비스가 원천 라인을 직접 합산한 값입니다.

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

매출에서 공헌이익까지는 한 줄로 전기되는 값이 아니라 계산 단계입니다. 서비스가 식으로 정의한 단계를 행이나 열로 세웁니다.

계산항목 단계 보기
계산항목 단계 보기 — 매출 → 변동비 → 운임·보험 → 수수료 → 공헌이익

분석 항목을 계산항목으로 두고 보기 방식을 단계 보기로 바꾸면 계산 단계가 위에서부터 행으로 펼쳐지고 열에는 국가가 놓입니다. 단계마다 어느 값에서 이익이 줄어드는지 한 번에 읽습니다.

계산항목을 열로
계산항목을 열로 — 공헌이익 · 공헌이익률 · EA당 공헌이익

계산항목 세 개를 열로 세운 표입니다. 제품그룹별 EA당 공헌이익이 3,936원(포장재)에서 21,485원(전자부품)까지 벌어지는 것이 보입니다. 식은 서비스의 계산항목 정의에 있고 화면은 식을 풀어 합산만 합니다.

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

계획 대비 스위치 하나로 같은 표가 차이 리포트가 됩니다. 색이 칠한 칸만 골라 원인을 쪼개 보고 사유를 남깁니다.

기준 대비 차이 모드
기준 대비 차이 모드 — 금액과 비율을 모두 넘는 칸만 색이 칠해집니다

칸마다 실적 아래에 계획 · 차이 · 증감률이 작게 붙습니다. 일본은 공헌이익 331백만원으로 계획 402보다 71백만원(−17.7%) 낮아 빨강입니다. 임계는 금액 1천만원과 비율 5%(비율 항목은 0.5퍼센트포인트)이며 둘 중 하나만 넘으면 색을 칠하지 않습니다.

변동 사유
변동 사유 — 차이 난 행에 사유를 남깁니다

차이가 난 행의 사유 단추를 누르면 사유 구분과 내용을 적는 창이 열립니다. 조회 범위와 행 경로(여기서는 중국)가 키로 저장되어 축을 바꿔도 같은 행에 따라오고, 저장한 사유는 CSV 와 AI 분석 근거에도 실립니다. 예시 사유는 검증용 샘플 문장입니다.

차이 워터폴
차이 워터폴 — 계획 3,159에서 실적 3,288까지 요인별로

차이 분해 탭의 워터폴입니다. 계획 3,159에서 시작해 물량 +17 · 믹스 −15 · 외화 단가 −17 · 환율 +169 · 변동비 −96 · 운임·보험 −31 · 수수료 −4 · 미계획 +105 를 거쳐 실적 3,288에 닿습니다. 초록은 공헌이익을 늘린 요인, 빨강은 줄인 요인입니다.

요인 합계 검산 줄
요인 합계 검산 줄 — 요인 합계 128 / 총차이 128

워터폴 아래 검산 줄은 요인을 모두 더한 값과 총차이가 같은지를 매번 계산해 보여 줍니다. 두 값의 오차는 −0.01원으로 원 단위 반올림에서 나옵니다. 합이 맞지 않으면 이 줄이 먼저 알려 줍니다.

AI 분석과 보고서 — 숫자는 서비스가, 글은 해설이

AI 는 숫자를 만들지 않습니다. 서비스가 계산한 값을 읽어 문장으로 정리하고 근거를 펼쳐 보여 줍니다.

AI 분석
AI 분석 — 현재 범위를 읽어 요약과 주요 발견을 씁니다

이 화면은 모델을 연결하지 않은 규칙 기반 해설입니다. 총차이 128백만원 가운데 환율(169백만원)의 영향이 가장 크다고 읽고 원인은 단정하지 않으며, 계획을 웃돈 인코텀즈(FOB +83 · DAP +35 백만원)를 주요 발견으로 올립니다. 하단 보고서 단추로 PowerPoint 보고서를 내려받습니다.

근거 수치
근거 수치 — 해설이 읽은 값을 표로 펼칩니다

근거 수치를 펼치면 해설이 읽은 실적 · 계획 공헌이익, 매출, 차이, 등록된 사유가 표로 나옵니다. 숫자는 서비스가 계산한 값이고 해설은 그 값을 옮긴 문장입니다. 이미 사유가 적힌 차이는 해설에서 건너뜁니다.

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

사람이 화면을 열지 않아도 규칙에 걸린 항목을 받을 역할에게 올리는 감시입니다. 실행은 서비스가 하고 하루 한 번 제한도 서비스가 판정합니다.

감시 규칙
감시 규칙 — 임계값 · 점검 주기 · 받을 역할

감시 규칙 다섯 개가 기준값 · 점검 주기 · 받을 역할 · 사용 여부와 함께 보입니다. 기준값은 화면에서 바꿔 저장하며 사용 스위치로 규칙을 끌 수 있습니다.

받은 보고
받은 보고 — 받을 역할 눈으로 다시 적은 보고

규칙에 걸린 항목이 받을 역할별 보고로 쌓인 대기함입니다. 역할 필터로 영업 책임자나 재무 책임자 몫만 볼 수 있고, 첫 실행에서 아홉 건이 올라왔습니다. 모든 문장은 점검 필요 · 확인 필요로 끝나 원인을 단정하지 않습니다.

실행 기록
실행 기록 — 하루 한 번 제한과 활동 기록

실행 기록 탭입니다. 첫 실행은 아홉 건을 올린 것으로, 같은 날 두 번째 실행은 하루 한 번 제한으로 건너뛴 것으로 남습니다. 걸린 것이 없어도, 건너뛰어도 활동 기록이 남고 호출 주체(사람 · 화면 타이머 · 배치)가 함께 적힙니다.

레이아웃 저장과 복원

자주 쓰는 배치를 이름 붙여 저장하고, 기본 + 자동 조회로 지정하면 화면을 열 때 조회된 채로 시작합니다.

레이아웃 저장
레이아웃 저장 — 현재 배치를 이름 붙여 저장합니다

저장 창에서 이름을 적고 기본 레이아웃 · 열 때 자동 조회를 고릅니다. 아래에 저장될 내용(행 · 열 · 기간 · 항목 · 계획 대비)을 미리 보여 줍니다.

레이아웃 관리
레이아웃 관리 — 기본 · 자동 조회 · 이름 바꾸기 · 삭제

저장한 레이아웃의 기본 지정과 자동 조회를 바꾸고, 적용 · 이름 바꾸기 · 삭제를 합니다. 여러 사람이 쓰는 환경에서는 사용자별로 목록이 나뉩니다.

새로 열면 복원
새로 열면 복원 — 국가 › 제품그룹 · 계획 대비 · 차이 분해까지

기본 + 자동 조회로 저장한 레이아웃은 화면을 새로 열면 조회된 상태로 시작합니다. 행 국가 › 제품그룹, 계획 대비 켬, 차이 분해 탭까지 복원된 모습입니다.

좁은 화면과 한계

휴대폰 폭에서는 차트가 표 아래로 쌓이고, 한 번에 그릴 수 있는 조합에는 상한이 있습니다.

390px 폭
390px 폭 — 조회조건과 보드가 한 열로 쌓입니다

폭 390px 에서는 조회조건 · 레이아웃 보드 · 분석 항목이 한 열로 쌓입니다. 조회 단추는 조회조건 영역 끝에 그대로 있습니다.

차트는 표 아래로
차트는 표 아래로 — 좁은 화면의 차트 위치

표를 지난 다음 차트가 이어서 나옵니다. 차트 폭 손잡이는 이 폭에서는 쓰지 않습니다.

범위 상한 안내
범위 상한 안내 — 반쯤 그린 표 대신 범위를 좁히라는 안내

행 조합이 500개(여기서는 1,573개)를 넘거나 열 조합이 36개(여기서는 96개)를 넘으면 표를 그리지 않고 행 · 열 차원을 줄이거나 필터를 걸라는 안내를 띄웁니다. 오해를 부르는 일부만 그린 표를 만들지 않기 위한 장치입니다.

화면 뒤에서 일어나는 일

축을 바꾸는 일과 문서로 내려가는 일은 서로 다른 경로를 씁니다.

동작서비스 호출하는 일
조회큐브 · 계획 · 기간별 요약 · 차원 · 측정값 · 계산항목 · 검산을 한 번씩 읽기피벗의 원료와 카탈로그를 받아 둡니다
축 바꾸기 · 순서 바꾸기 · 행↔열 교환없음받아 둔 큐브를 브라우저에서 다시 묶습니다
차원 값 고르기없음선택 값으로 걸러 다시 묶습니다(같은 차원 안은 또는, 다른 차원끼리는 그리고)
칸 누르기(드릴스루)문서 라인 읽기(조건 = 칸이 속한 차원 값 + 기간)그 조합의 청구 문서 라인만 받아 합계를 칸 금액과 비교합니다
계획 대비 켜기없음(이미 읽은 계획 사용) · 차이 분해 탭을 열면 분해 펑션 호출칸마다 실적·계획·차이·증감률을 붙이고 임계를 넘은 칸만 칠합니다
사유 · 레이아웃 · 감시 규칙 저장생성 · 수정 · 삭제저장 키는 조회 범위와 행 경로, 사용자, 규칙 이름입니다

차이 모드의 색 판정

색은 금액의 부호가 아니라 공헌이익에 준 영향 방향으로 칠합니다. 비용이 계획보다 덜 나가면 차이는 음수지만 이익에는 보탬이라 초록입니다.

판정 조건결과 상태사용자 조치
차이 금액 1천만원 이상이고 증감률 5% 이상(공헌이익률 같은 비율 항목은 0.5퍼센트포인트 이상), 손익을 늘리는 방향초록(좋은 방향)원인을 사유로 남기고 반복 가능한지 확인 필요
같은 임계를 넘고 손익을 줄이는 방향빨강(점검 필요)차이 분해 탭에서 큰 요인을 보고 드릴스루로 원천 라인 확인
금액과 비율 중 하나만 넘음색 없음필요하면 값만 참고
계획이 없는 칸(실적만 있음)금액 임계만 적용미계획 요인으로 따로 잡히므로 계획 반영 여부 확인 필요

8요인분해의 산식

실적과 계획이 모두 있는 칸(기간·고객·제품·인코텀즈 조합)마다 아래 식으로 계산해 더합니다. 합이 총차이와 같도록 식을 닫아 두었고, 화면은 합계와 총차이의 차이를 검산 줄로 매번 보여 줍니다.

요인산식읽는 법
물량(실적 수량 합 ÷ 계획 수량 합 − 1) × 계획 공헌이익전체 판매량이 계획과 달라서 생긴 차이
믹스(실적 수량 − 계획 수량 × 전체 수량비) × EA당 계획 공헌이익어떤 제품이 더 팔렸는지 구성이 달라서 생긴 차이
외화 단가(실적 외화 단가 − 계획 외화 단가) × 실적 수량 × 계획 환율외화 판매가격 차이
환율(실적 환율 − 계획 환율) × 실적 외화 매출환율 변동 효과
변동비 · 운임보험 · 수수료−(실적 EA당 비용 − 계획 EA당 비용) × 실적 수량단위당 비용 차이(비용이 늘면 마이너스)
미계획계획이 없는 칸의 실적 공헌이익 전액계획에 없던 고객·제품·조건 조합 — 확인 필요

실적 없이 계획만 있는 칸은 계획 공헌이익과 물량 요인만큼을 믹스 요인에서 되돌려 합이 맞도록 처리합니다. 원인을 단정하지 않고 점검할 요인과 금액만 제시합니다.

AI 에이전트 감시 규칙

규칙판정 조건(기본 임계)받을 역할사용자 조치
공헌이익률 하락제품그룹 공헌이익률이 계획보다 0.8퍼센트포인트 이상 낮음재무 책임자점검 필요 — 해당 그룹의 요인분해 확인
국가별 공헌이익 계획 미달국가 공헌이익이 계획보다 6천만원 이상 적음영업 책임자확인 필요 — 고객·제품 단위로 내려가 확인
환율 영향 임계통화별 환율 요인이 5천만원 이상 손실경영자확인 필요 — 결제·환 정책 담당과 공유
운임·보험·수수료율 상승국가별 비율이 계획보다 0.3퍼센트포인트 이상 높음물류 책임자확인 필요 — 인코텀즈·운임 조건 점검
계획 없는 거래 발생고객별 미계획 공헌이익이 1천만원 이상영업 책임자점검 필요 — 계획 반영 여부 확인

실행은 하루 한 번만 허용되며(서비스가 판정), 걸린 항목이 없어도 활동 기록이 남습니다. 운영에서는 배치 작업이 같은 실행 펑션을 부르도록 연결하면 됩니다.

산출·대사식

대사식의미
Σ 청구 라인 = Σ 큐브매출 · 변동비 · 운임 · 수수료 · 수량 · 라인 수를 요청 시점에 다시 합산해 비교합니다
공헌이익 = 매출(원화) − 변동비 − 운임·보험료 − 수수료공헌이익률 = 공헌이익 ÷ 매출 × 100, EA당 공헌이익 = 공헌이익 ÷ 수량
피벗 총합 = 큐브 총합축을 어떻게 바꿔도 총합은 같습니다(브라우저는 합산과 배치만 합니다)
계획 대비 차이 = 실적 공헌이익 − 계획 공헌이익 = 8요인의 합합과 총차이의 차이는 검산 줄에 0 에 가깝게 표시됩니다
칸 금액 = 드릴스루 합계칸을 눌러 연 문서 라인의 합이 칸 금액과 같은지 머리에 표시합니다

조회조건

구분항목필수기본값서비스 조건($filter)
조회조건회사코드필수1000Bukrs eq
조회조건시작·종료 기간필수2026-01 ~ 2026-09Period ge · Period le
조회조건계획 기준고정판매 계획 v1Version eq (계획 집합)
조회조건저장된 레이아웃선택기본 레이아웃(있으면)레이아웃 집합에서 사용자별로 읽어 축·조건·측정값 복원
차원 필터지역 · 국가 · 고객 · 인코텀즈 · 제품그룹 · 제품 · 통화 · 사업부선택전체브라우저에서 걸러 서비스를 다시 부르지 않음(같은 차원 안은 또는, 차원 간 그리고)
표시분석 항목 · 보기 방식 · 계획 대비 · 표시 행 수선택공헌이익 · 차원 보기 · 끔측정값·계산항목 선택, 차원 보기/단계 보기, 차이 모드

날짜 조건은 datetime'2026-06-01T00:00:00' 형태로 쓰고, 페이지는 $top · $skip · $inlinecount=allpages 로 넘깁니다.

결과 컬럼

컬럼의미산출식
매출(원화)청구 품목의 원화 환산 매출외화 매출 × 환율
변동비청구 품목의 변동 원가Σ 품목 원가 금액
운임·보험료 / 수수료청구 품목의 해당 가격 조건 금액Σ 조건 금액
공헌이익매출에서 비용 세 가지를 뺀 이익매출 − 변동비 − 운임·보험료 − 수수료
공헌이익률(%)매출 대비 공헌이익공헌이익 ÷ 매출 × 100(차이는 퍼센트포인트)
EA당 공헌이익(원)수량 한 단위당 이익공헌이익 ÷ 수량
운임·보험·수수료율(%)매출 대비 물류성 비용(운임·보험료 + 수수료) ÷ 매출 × 100
계획 · 차이 · 증감률차이 모드에서 칸마다 붙는 값차이 = 실적 − 계획, 증감률 = 차이 ÷ 계획

좁은 화면에서 달라지는 것

폭 390px 같은 휴대폰 화면에서는 조회조건 · 레이아웃 보드 · 분석 항목이 한 열로 쌓이고, 차트는 표 오른쪽이 아니라 표 아래로 내려옵니다. 표와 차트 사이의 폭 손잡이는 이 폭에서 쓰지 않습니다. 표는 가로로 밀어 읽고, 조회 단추는 조회조건 영역 끝에 그대로 있습니다. 또한 행 조합이 500개, 열 조합이 36개를 넘는 배치는 어느 폭에서나 일부만 그린 표 대신 범위를 좁히라는 안내를 띄웁니다.

파일 구성

index.html · Component.js · manifest.json · readme.html
controller/   Main.controller.js · BaseController.js
view/         Main.view.xml · fragments/ (대화상자 조각)
model/        cube.js(피벗) · chart.js(SVG 차트) · pptx.js(PowerPoint 보고서) · layout.js · formatter.js · ErrorHandler.js
css/          style.css
i18n/         i18n.properties · i18n_ko.properties
odata/        engine.js · service.js · metadata.xml · json/ (집합별 샘플 데이터)
media/        소개 영상 · 포스터 · 재생 지점 자막

SAP 표준 기능 확장 포인트

이 화면은 표준 T-code 를 대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 같은 수출 청구 데이터를 조회·검증 관점으로 묶어 확장합니다.

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

하고 싶은 일표준 화면으로이 앱이 더하는 관점
청구 문서 한 건의 내용과 흐름VF03 에서 문서·품목·가격 조건을 확인청구 문서 라인을 칸 단위로 모아 금액이 칸 금액과 같은지 대사
출하·선적 일정VL03N 에서 출하 문서와 수량을 확인선적일과 인코텀즈별 운임·보험 비율을 같은 표에서 비교
수주 조건 · 계획 가격 확인VA03 에서 오더 가격·수량 조건 확인수주번호로 계획 조건과 실적 조건을 맞춰 보는 자리(계획 원천은 확인 필요)
고객 대금 흐름FBL5N 에서 고객 항목 확인고객 축 공헌이익과 이어 점검(회수 상태 판정은 하지 않음)
수익성 분석KE30 에서 수익성 보고서 실행공헌이익 합계를 나란히 놓고 대사, 제품 믹스·환율 요인으로 분해
계획 대비 차이의 원인표준 화면만으로는 요인 분해까지 이어지지 않음8요인분해 · 변동 사유 기록 · 감시 규칙

T-code 별 연계 지점

T-code이름연계
VA03판매오더 조회이어받는 데이터 수주번호(SoNo)로 계획 가격·수량 조건과 비교합니다. 대사 지점 계획의 수량·단가·환율 기준. 오가는 방법 칸의 문서 라인에서 수주번호 확인 → VA03 에서 오더 조건 확인. 표준에 남길 일 오더 변경·승인. 계획 값의 원천은 확인 필요.
VL03N출하 문서 조회이어받는 데이터 출하일(ShipDate) · 출하 수량. 대사 지점 선적일 기준 기간 합계와 청구일 기준 기간 합계의 차이. 오가는 방법 문서 라인의 선적일 → VL03N 에서 출하 문서 확인. 표준에 남길 일 출하 처리·선적 증빙.
VF03청구 문서 조회이어받는 데이터 청구 번호(BillDoc) · 품목(Item)의 매출·환율, 드릴스루 문서 라인의 원본. 대사 지점 칸 금액 = 문서 라인 합계. 오가는 방법 이 앱 결과 → 청구 번호 → VF03. 표준에 남길 일 청구 문서 생성·취소, 통관·세무 신고 근거 확인.
FBL5N고객 항목 조회이어받는 데이터 고객(Customer)별 대금 흐름. 대사 지점 고객 축 매출과 고객 항목의 청구 금액. 오가는 방법 고객 축으로 내려간 뒤 FBL5N 에서 같은 고객의 미결·결제 항목 확인. 회수 상태는 이 화면에서 판정하지 않습니다.
KE30수익성 분석 보고서 실행이어받는 데이터 공헌이익 합계 대조. 대사 지점 같은 기간·같은 범위의 수익성 보고서 합계와 이 화면의 공헌이익 합계. 오가는 방법 두 화면 합계를 나란히 놓고 차이가 있으면 수익성 분석 구성(값 필드·조건 유형)부터 확인 필요.

기존 리포트를 없애야 하나요? 없애지 않습니다. 법정·감사·세무 신고 대응은 표준 화면과 표준 리포트에 그대로 남기고, 이 화면은 월 단위 점검 회의에서 계획 대비 차이를 설명하는 용도로 나란히 씁니다. 두 화면의 합계가 어긋나면 어느 쪽이 틀렸다고 단정하지 말고 위 대사 지점부터 확인 필요로 놓고 맞춰 갑니다.

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

S/4HANA 는 CDS 뷰 위에 분석 쿼리를 올려 Fiori 분석 앱과 Analysis for Office 로 읽는 구조를 갖고 있습니다. 이 앱의 CDS 구성(아래 CDS 구성 절)은 같은 분석 쿼리 층에 올라가는 것이라, 운영에서는 같은 큐브와 쿼리를 표준 분석 도구가 읽고 이 화면이 끌어다 놓기·드릴스루·요인분해·AI 분석을 더하는 식으로 나란히 쓸 수 있습니다. 판매·수익성 영역의 표준 분석 앱 이름과 제공 여부는 릴리스마다 달라 이 글에서는 이름을 적지 않으며, 도입 시 확인 필요 항목입니다.

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

자리무엇을 손대나어디서
국가·지역·제품그룹 매핑국가 → 지역, 제품 → 제품그룹 묶음. 새 국가나 제품이 생기면 어느 묶음인지만 적습니다매핑 테이블(현업이 직접)
운임·보험·수수료 조건 유형비용 세 가지에 어떤 가격 조건 유형을 넣을지큐브 뷰의 조건 분류(확인 필요)
인코텀즈 · 통제 이전 기준청구일 기준으로 볼지 선적일 기준으로 볼지, 인코텀즈별 예외기준 뷰와 정책 문서
판매 계획 원천계획 데이터가 어디에 있는지, 어떤 버전을 쓸지(수량 포함 여부)계획 뷰와 계획 테이블
확장 필드청구 문서에 회사별 확장 필드가 있으면 차원으로 추가커스텀 필드 · BAdI · 기준 뷰
환율 유형계획 환율과 실적 환율의 유형과 환산 시점큐브 뷰의 통화 환산
권한회사코드 · 영업조직 · 판매그룹 단위 접근 제어권한 객체와 접근 제어 정의

분석 지표 정의

지표산식·판정 기준대응 기능원천 데이터비고
매출(원화)Σ 청구 품목의 원화 환산 매출피벗 · 역할 요약청구 품목 순액 × 환율환산 방식 확인 필요
변동비Σ 청구 품목의 변동 원가피벗 · 변동비 요인청구 품목 원가 금액원가 구성 확인 필요
운임·보험료 · 수수료Σ 청구 품목의 해당 가격 조건 금액피벗 · 운임보험·수수료 요인가격 조건 금액조건 유형 코드 확인 필요
공헌이익매출 − 변동비 − 운임·보험료 − 수수료계산항목 · 차이 · 워터폴위 네 값
공헌이익률(%)공헌이익 ÷ 매출 × 100계산항목 · 감시 규칙위 값차이는 퍼센트포인트
EA당 공헌이익(원)공헌이익 ÷ 수량계산항목 · 믹스 요인청구 수량
운임·보험·수수료율(%)(운임·보험료 + 수수료) ÷ 매출 × 100물류 책임자 요약 · 감시 규칙위 값

CDS 구성

이 샘플의 화면은 청구 3,294줄을 큐브 738건으로 묶어 브라우저가 들고 있습니다. 데모라서 되는 일이고, 운영 데이터에서는 그렇게 하지 않습니다. 운영으로 올릴 때 가장 먼저 하는 일은 집계를 CDS 로 내리는 것입니다. 아래는 그때 만드는 뷰의 층 구성과 코드입니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스·환경에 따라 다르므로 그대로 붙여 넣기 전에 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다. 표준 CDS 뷰는 이름을 단정하지 않고 원천 테이블 기준으로 적었습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준(매핑)ZEXPMIX_MAP국가→지역, 제품→제품그룹 묶음묶음은 늘 늘어납니다. 코드에 박으면 늘어날 때마다 개발자를 부르게 됩니다.
기준(청구)ZI_ExpMixBillItem청구 품목 한 줄, 외화·환율·수량 그대로문서 구조를 아는 뷰를 하나로 모읍니다.
차원ZI_ExpMixDim품목 + 국가·지역·제품그룹·기간큐브에서 join 을 한 번만 걸고 값 도움말이 이 뷰를 봅니다.
큐브(실적)ZI_ExpMixCube차원 조합으로 집계 + 원화 환산화면이 하던 집계를 DB 로 내리고 환산 규칙을 한 곳에 둡니다.
큐브(계획)ZI_ExpMixPlan계획을 같은 키 모양으로키가 어긋나면 계획이 실적 옆에 붙지 않고 미계획으로 따로 뜹니다.
쿼리ZC_ExpMixQuery기본 배치 · 필터 · 공헌이익 계산표준 분석 도구가 그대로 띄웁니다.
권한ZC_ExpMixQuery (DCL)회사코드 · 영업조직집계를 읽는 자리에 걸어야 합계에서 빼는 방식으로 새지 않습니다.
서비스ZUI_ExpMixSrv쿼리·계획을 OData V2 로 노출화면은 서비스 계약만 알고 뷰 이름은 모릅니다.

① 매핑 테이블 — 현업이 늘리는 묶음

분석용 묶음(국가→지역, 제품→제품그룹)은 마스터에 없습니다. 이 테이블 한 장이 그 묶음을 맡고, 정하지 않으면 그룹 합계가 기존 보고서와 맞지 않습니다. 매핑이 없는 값은 아래 차원 뷰에서 UNMAPPED 로 남겨 합계에서 사라지지 않게 합니다.

// ─────────────────────────────────────────────────────────────
// ZEXPMIX_MAP : 국가→지역, 자재→제품그룹 매핑 (기준)
// 하는 일 : 마스터에 없는 "분석용 묶음"을 현업이 직접 관리하는 테이블
// 이렇게 나눈 이유 : 새 국가·제품이 생길 때마다 뷰를 고치면 전송이 필요하다.
//   테이블이면 현업이 행만 추가한다. (국가·자재 마스터 필드는 확인 필요)
// ─────────────────────────────────────────────────────────────
@EndUserText.label : '수출 분석 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zexpmix_map {
  key client   : abap.clnt not null;
  key map_type : abap.char(1) not null;     // C=국가→지역, M=제품→제품그룹
  key map_key  : abap.char(18) not null;    // 국가코드 또는 자재번호
  map_value    : abap.char(10);             // 지역 또는 제품그룹 코드
  map_text     : abap.char(40);
}

② 기준 뷰 — 청구 품목 한 줄

여기서 결정되는 것은 "어떤 청구를 수출 실적으로 볼 것인가"입니다. 취소 문서 제외와 수출 청구 유형 한정 조건이 이 뷰의 where 에 들어가고, 이 조건이 달라지면 이후 모든 숫자가 달라지므로 운영에서 가장 먼저 합의합니다.

// ─────────────────────────────────────────────────────────────
// ZI_ExpMixBillItem : 청구 품목 한 줄 (기준 뷰)
// 하는 일 : VBRK/VBRP 를 품목 단위로 평평하게 만들고 외화·환율·수량을 그대로 둔다
// 이렇게 나눈 이유 : 이 뷰 하나만 문서 구조를 알게 하고 위의 뷰는 평평한 줄만 본다.
// 확인 필요 : 취소 문서 제외 조건(FKSTO), 운임·수수료 조건 유형 코드
// ─────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 청구 품목'
define view entity ZI_ExpMixBillItem
  as select from vbrp
    inner join   vbrk on vbrk.vbeln = vbrp.vbeln
{
  key vbrk.gjahr                         as FiscalYear,
  key vbrp.vbeln                         as BillDoc,
  key vbrp.posnr                         as Item,
      vbrk.bukrs                         as CompanyCode,
      vbrk.kunrg                         as Customer,
      vbrk.fkdat                         as BillDate,
      vbrk.waerk                         as DocCurrency,
      vbrk.kurrf                         as ExchRate,
      vbrp.matnr                         as Material,
      vbrp.aubel                         as SalesOrder,
      vbrp.spart                         as Division,
      @Semantics.quantity.unitOfMeasure: 'Unit'
      vbrp.fkimg                         as BillQty,
      vbrp.vrkme                         as Unit,
      @Semantics.amount.currencyCode: 'DocCurrency'
      vbrp.netwr                         as NetAmount,
      @Semantics.amount.currencyCode: 'DocCurrency'
      vbrp.wavwr                         as CostAmount
}
where vbrk.fksto = ''

③ 차원 뷰 — 국가·지역·제품그룹·기간

고객에서 국가를, 국가와 자재에서 묶음을 붙입니다. left outer join 과 coalesce 로 매핑이 빠진 행도 버리지 않는 것이 요점입니다. 기간 문자열을 여기서 만들어 두면 큐브와 계획이 같은 키 모양을 갖습니다.

// ─────────────────────────────────────────────────────────────
// ZI_ExpMixDim : 차원 뷰 (고객→국가→지역, 자재→제품그룹)
// 하는 일 : 청구 품목에 분석 차원을 붙인다. 매핑이 없으면 "미분류" 로 남긴다.
// 이렇게 나눈 이유 : 큐브에서 join 을 한 번만 걸고, 값 도움말과 텍스트가 이 뷰를 본다.
// ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 분석 차원'
define view entity ZI_ExpMixDim
  as select from ZI_ExpMixBillItem as b
    left outer join kna1            as c on c.kunnr = b.Customer
    left outer join zexpmix_map     as r on  r.map_type = 'C'
                                         and r.map_key  = c.land1
    left outer join zexpmix_map     as g on  g.map_type = 'M'
                                         and g.map_key  = b.Material
{
  key b.FiscalYear,
  key b.BillDoc,
  key b.Item,
      b.CompanyCode,
      b.Customer,
      c.land1                                     as Country,
      coalesce( r.map_value, 'UNMAPPED' )         as Region,
      coalesce( g.map_value, 'UNMAPPED' )         as ProdGroup,
      b.Material                                  as Product,
      concat( left( cast( b.BillDate as abap.char(8) ), 4 ),
        concat( '-', substring( cast( b.BillDate as abap.char(8) ), 5, 2 ) ) ) as Period
}

④ 실적 큐브 — 합산과 원화 환산

화면이 브라우저에서 하던 합산을 DB 로 내리는 뷰입니다. 원화 환산을 이 뷰 한 곳에서만 하므로 환율 유형·시점을 바꿔도 다른 뷰는 건드리지 않습니다. 운임·보험료와 수수료는 가격 조건 조인으로 같은 방식으로 합산하며 조건 유형 코드는 확인 필요입니다.

// ─────────────────────────────────────────────────────────────
// ZI_ExpMixCube : 실적 큐브 — 기간·고객·제품·인코텀즈 단위로 합산
// 하는 일 : 화면이 브라우저에서 묶던 일을 DB 로 내린다. 원화 환산도 여기서 한 번만 한다.
// 이렇게 나눈 이유 : 환산 규칙(환율 유형·시점)이 이 뷰 한 곳에만 있어야 숫자가 갈라지지 않는다.
// 확인 필요 : 인코텀즈 필드(헤더 INCO1), 환산 방식(문서 환율 × 금액 vs 환산 함수)
// ─────────────────────────────────────────────────────────────
@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XXL, dataClass: #TRANSACTIONAL }
@EndUserText.label: '수출 실적 큐브'
define view entity ZI_ExpMixCube
  as select from ZI_ExpMixDim as d
    inner join   ZI_ExpMixBillItem as b
      on  b.FiscalYear = d.FiscalYear and b.BillDoc = d.BillDoc and b.Item = d.Item
    inner join   vbrk as h on h.vbeln = b.BillDoc
{
  key d.CompanyCode,
  key d.Period,
  key d.Customer,
  key d.Product,
  key h.inco1                                  as Incoterms,
      d.Country,
      d.Region,
      d.ProdGroup,
      @Semantics.currencyCode: true
      cast( 'KRW' as abap.cuky )               as Currency,
      @Aggregation.default: #SUM
      count(*)                                 as Lines,
      @Aggregation.default: #SUM
      cast( sum( b.BillQty ) as abap.dec(15,3) ) as Qty,
      @Semantics.amount.currencyCode: 'Currency'
      @Aggregation.default: #SUM
      cast( sum( b.NetAmount * b.ExchRate ) as abap.curr(23,2) ) as Sales,
      @Semantics.amount.currencyCode: 'Currency'
      @Aggregation.default: #SUM
      cast( sum( b.CostAmount ) as abap.curr(23,2) )             as VarCost
      // 운임·보험료, 수수료는 가격 조건(PRCD_ELEMENTS) 조인으로 같은 방식으로 합산 (조건 유형 확인 필요)
}
group by d.CompanyCode, d.Period, d.Customer, d.Product, h.inco1,
         d.Country, d.Region, d.ProdGroup

⑤ 계획 큐브 — 실적과 같은 키 모양

계획의 키가 실적과 어긋나면 요인분해에서 모두 미계획과 계획 없음으로 갈립니다. 계획 원천(어느 테이블, 어느 버전, 수량이 있는지)은 도입 전에 확정할 항목입니다.

// ─────────────────────────────────────────────────────────────
// ZI_ExpMixPlan : 판매 계획 큐브 — 실적 큐브와 같은 키 모양
// 하는 일 : 계획 데이터를 실적과 같은 차원 조합으로 맞춘다.
// 이렇게 나눈 이유 : 키가 어긋나면 계획이 실적 옆에 붙지 않고 "미계획" 으로 따로 뜬다.
// 확인 필요 : 계획 원천(판매 계획 테이블 또는 계획 버전), 수량 보유 여부
// ─────────────────────────────────────────────────────────────
@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 판매 계획 큐브'
define view entity ZI_ExpMixPlan
  as select from zexpmix_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.product   as Product,
  key p.incoterms as Incoterms,
      @Aggregation.default: #SUM
      p.qty       as Qty,
      @Semantics.amount.currencyCode: 'Currency'
      @Aggregation.default: #SUM
      p.sales     as Sales,
      @Semantics.amount.currencyCode: 'Currency'
      @Aggregation.default: #SUM
      p.var_cost  as VarCost,
      p.currency  as Currency
}

⑥ 분석 쿼리 — 서비스가 노출하는 모양

필터 중 필수로 둘 것(회사코드, 기간)과 기본 행·열 배치, 공헌이익 계산식을 정의합니다. 계산식을 쿼리에 두면 표준 분석 도구와 이 화면이 같은 식을 씁니다.

// ─────────────────────────────────────────────────────────────
// ZC_ExpMixQuery : 분석 쿼리 — 기본 행·열 배치와 계산 측정값
// 하는 일 : 서비스가 노출할 필터와 기본 배치, 공헌이익·공헌이익률 계산 정의
// 이렇게 나눈 이유 : 표준 분석 도구가 이 쿼리를 그대로 읽는다. 계산식은 여기 한 곳에서만 정의한다.
// ─────────────────────────────────────────────────────────────
@Analytics.query: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수출 제품 믹스 공헌이익'
@UI.chart: [{ qualifier: 'Mix', chartType: #COLUMN_STACKED,
              dimensions: ['Country'], measures: ['Contribution'] }]
define view entity ZC_ExpMixQuery
  as select from ZI_ExpMixCube
{
  @AnalyticsDetails.query.axis: #ROWS
  @Consumption.filter: { selectionType: #RANGE, multipleSelections: true, mandatory: true }
  key CompanyCode,

  @AnalyticsDetails.query.axis: #ROWS
  @Consumption.filter: { selectionType: #INTERVAL, mandatory: true }
  key Period,

  @AnalyticsDetails.query.axis: #COLUMNS
  @Consumption.filter.selectionType: #SINGLE
  key Incoterms,

  Country, Region, ProdGroup, Customer, Product,

  @AnalyticsDetails.query.axis: #COLUMNS
  Sales,
  VarCost,
  @AnalyticsDetails.query.formula: 'Sales - VarCost'
  @EndUserText.label: '공헌이익'
  Contribution
}

⑦ 접근 제어 — 집계에 거는 권한

대용량 집계 뷰에서는 권한이 집계 뒤에 걸리면 합계에서 빼는 방식으로 남의 숫자가 드러날 수 있습니다. 그래서 쿼리가 읽는 자리에 접근 제어를 겁니다.

// ─────────────────────────────────────────────────────────────
// ZC_ExpMixQuery : 접근 제어 (DCL)
// 하는 일 : 회사코드·영업조직 단위로 읽을 수 있는 행을 제한한다.
// 이렇게 나눈 이유 : 집계를 읽는 자리에 걸어야 합계에서 빼는 방식으로 남의 숫자가 새지 않는다.
// 확인 필요 : 회사 권한 객체 외에 영업조직 권한을 쓸지 여부
// ─────────────────────────────────────────────────────────────
@EndUserText.label: '수출 공헌이익 접근 제어'
@MappingRole: true
define role ZC_ExpMixQuery {
  grant select on ZC_ExpMixQuery
    where ( CompanyCode ) = aspect pfcg_auth( F_VBRK_BUK, BUKRS, ACTVT = '03' );
}

⑧ 서비스 정의 — 화면이 부르는 계약

화면은 이름 붙인 집합과 펑션만 압니다. 뷰 이름이 바뀌어도 서비스 정의에서 노출 이름을 유지하면 화면은 바뀌지 않습니다. 게시는 서비스 바인딩이나 게이트웨이 서비스 활성화로 하고, 화면의 서비스 주소만 교체합니다.

// ─────────────────────────────────────────────────────────────
// 서비스 정의와 바인딩 : 화면이 부르는 OData V2 서비스
// 하는 일 : 쿼리와 계획 큐브를 노출하고 OData V2 로 게시한다.
// 이렇게 나눈 이유 : 화면은 서비스 계약(엔티티셋·펑션)만 알고, 뷰 이름은 모른다.
// 확인 필요 : 게시는 Service Binding(OData V2 - UI) 또는 /IWFND/MAINT_SERVICE 활성화
// ─────────────────────────────────────────────────────────────
@EndUserText.label: '수출 제품 믹스 서비스'
define service ZUI_ExpMixSrv {
  expose ZC_ExpMixQuery as CubeSet;
  expose ZI_ExpMixPlan  as PlanSet;
  expose ZI_ExpMixDim   as ItemSet;
}

⑨ 요인분해 뷰 — 같은 키로 만나는 칸

실적과 계획이 같은 키로 만나는 칸에서 8요인을 계산하는 자리입니다. 전체 수량비를 쓰는 믹스 요인은 상위 집계가 필요해 단계를 나누어 구현하며, 구현 방식(CDS 함수·RAP 함수·ABAP 클래스)은 확인 필요입니다.

// ─────────────────────────────────────────────────────────────
// 요인분해 계산 (사용자 정의 CDS 함수 또는 RAP 함수 — 구현 방식은 확인 필요)
// 하는 일 : 실적·계획이 같은 키로 만나는 칸마다 8요인을 계산해 합산한다.
// 이렇게 나눈 이유 : 화면·AI 해설·보고서가 같은 분해 결과를 쓰도록 계산을 서비스 한 곳에 둔다.
// ─────────────────────────────────────────────────────────────
define view entity ZI_ExpMixVariance
  as select from ZI_ExpMixCube  as a
    inner join   ZI_ExpMixPlan  as p
      on  p.CompanyCode = a.CompanyCode and p.Period = a.Period
      and p.Customer = a.Customer and p.Product = a.Product and p.Incoterms = a.Incoterms
{
  key a.CompanyCode, key a.Period, key a.Customer, key a.Product, key a.Incoterms,
      // 물량 요인 = (실적 수량 합 ÷ 계획 수량 합 − 1) × 계획 공헌이익  (전체 합 기준 계산은 상위 뷰)
      a.Qty                                          as ActualQty,
      p.Qty                                          as PlanQty,
      ( a.Sales - a.VarCost )                        as ActualContribution,
      ( p.Sales - p.VarCost )                        as PlanContribution
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래를 정하지 않고 뷰부터 만들면 첫 대사 회의에서 막힙니다.

해야 할 일무엇을 정하나정하지 않으면누가
매출 인식 기준청구일 기준인지, 인코텀즈별 통제 이전 시점 기준인지청구 기준과 선적 기준 숫자가 어긋남회계 · 영업
매핑 확정국가→지역, 제품→제품그룹 묶음그룹 합계가 기존 보고서와 다름관리회계
계획 원천 확정계획 테이블, 버전, 수량 보유 여부요인분해가 물량·단가로 갈리지 않음기획 · 영업
비용 조건 유형운임·보험료·수수료로 분류할 가격 조건 유형비용 세 가지가 섞임물류 · SD
환율 유형과 환산 시점계획·실적에 같은 유형을 쓸지환율 요인의 의미가 흔들림자금 · 회계
부호 규칙비용이 늘면 마이너스로 보일지 여부색 판정이 거꾸로 보임관리회계
차원 범위쓸 차원 10종 안팎나중에 늘리려면 뷰를 고쳐 다시 이송현업 · 관리회계
권한 설계회사코드, 영업조직 단위 접근 범위남의 숫자가 보임보안 · 권한
성능 기준응답 시간 목표와 필수 파라미터전 기간 조회로 응답이 늘어남IT
대사 체계표준 T-code 와 맞출 항목과 주기숫자가 틀렸는지 판단할 기준이 없음관리회계 · IT
전송(TR) 순서매핑 테이블 → 기준 → 차원 → 큐브 → 쿼리 → 권한 → 서비스활성화 오류IT
서비스 활성화서비스 바인딩 게시 또는 게이트웨이 활성화, 화면의 서비스 주소 교체화면이 샘플 서비스를 계속 부름IT
배치 등록감시 규칙 실행을 하루 한 번 부르는 배치 작업사람이 화면을 열 때만 점검이 돎IT

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

사례에서 본 숫자(계획 3,159 → 실적 3,288, 총차이 +128)는 아래 대사식 전수 검사를 통과한 값입니다.

대사식검사 건수차이 건수
큐브 합계 = 원천 라인 합계(매출 · 변동비 · 운임 · 수수료 · 수량 · 라인 수 · 통화별 외화 매출)100
요인 합계 = 총차이(전체 · 국가 · 제품그룹 · 고객 · 기간 · 통화 구간)400
피벗 총합 = 큐브 총합(축 배치 6가지)60
칸 금액 = 드릴스루 합계(칸 11개)110
필터 선택 합계 = 큐브 선택 값 합(일본 · 미국)10
합계680

검사 68건 모두 차이 0건(요인 합계는 원 단위 반올림 0.01원). 계획 없는 실적 조합 22건과 실적 없는 계획 조합 17건은 미계획·믹스 요인 점검용으로 일부러 둔 예외입니다. 화면 쪽은 실제 브라우저에서 기능 15개 점검을 따로 돌려 모두 통과했습니다.

운영 데이터로 갈 때

수출 청구가 연 수십만 줄, 문서 흐름까지 수천만 건이 되면 지금의 "큐브 전체를 읽어 브라우저에서 묶는" 방식은 막힙니다. 먼저 집계 위치를 DB(큐브 뷰)로 내리고, 기간과 회사코드를 필수 파라미터로 둬 전 기간 조회를 막습니다. 드릴스루는 칸의 차원 값과 기간을 모두 조건으로 걸어 문서 라인을 쪽 단위로 읽고(기본 500행), 청구일과 고객 기준 인덱스 또는 사전 집계 테이블을 둡니다. 응답 시간 기준(예: 조회 몇 초 이내)은 도입 전에 정하고, 화면의 행 500개·열 36개 상한은 운영에서도 그대로 둡니다.

자주 묻는 질문

도입 상담과 데모에서 나올 만한 질문을 네 묶음으로 나눠 적었습니다.

숫자와 산식

이 화면은 언제부터, 어디까지 적용되나요?

이 글의 동작과 수치는 검증용 샘플 데이터로 확인한 결과입니다. 실제 운영 데이터 연결 시점과 대상 범위(사업장 · 기간 · 계획 데이터 원천)는 회사별로 확인 필요 항목입니다.

도입 순서는 보통 계획 원천과 매핑을 확정하고, 뷰를 만들어 서비스를 게시한 뒤 화면의 서비스 주소만 바꾸는 순입니다.

공헌이익은 어떻게 계산하나요?

공헌이익은 매출(원화) − 변동비 − 운임·보험료 − 수수료입니다. 공헌이익률은 공헌이익 ÷ 매출 × 100, EA당 공헌이익은 공헌이익 ÷ 수량입니다.

매출의 원화 환산 방식(문서 환율을 곱할지, 환산 함수를 쓸지)과 변동비 구성은 회사마다 달라 운영 연결 때 확인 필요 항목으로 남겨 두었습니다.

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

화면의 검산 줄에 두 값의 차이가 표시됩니다. 원 단위 반올림 때문에 1원 안쪽(샘플에서는 0.01원)으로 차이가 날 수 있고, 그보다 크면 조회 범위와 계획 기준을 확인 필요합니다.

합이 맞지 않는 것 자체가 오류 신호라서, 화면이 말없이 넘어가지 않고 검산 줄로 먼저 알려 줍니다.

계획에 없는 거래는 어떻게 처리하나요?

계획이 없는 칸의 공헌이익은 미계획 요인으로 따로 잡혀 믹스 요인과 섞이지 않습니다. 샘플에서는 계획 없는 실적 조합이 22건이고 미계획 요인은 +105백만원입니다.

감시 규칙(계획 없는 거래 발생)이 고객별 미계획 공헌이익이 1천만원 이상일 때 영업 책임자의 대기함에 올릴 수 있습니다. 계획에 반영할 거래인지는 사람이 확인해야 합니다.

환율 요인은 무엇을 뜻하나요?

환율 요인은 (실적 환율 − 계획 환율) × 실적 외화 매출로, 판매 성과가 아니라 환율 변동의 효과를 뜻합니다. 샘플에서는 +169백만원으로 총차이 +128보다 큽니다.

환율 요인과 미계획을 빼고 나머지 여섯 요인을 합하면 −146백만원입니다. 그래서 환율 효과를 분리해서 읽는 것이 중요하지만, 환율 정책이나 헤지 판단은 이 화면이 하지 않습니다.

외화와 원화는 어떻게 다루나요?

청구 품목의 외화 매출(USD · EUR · JPY · CNY)과 문서 환율을 그대로 들고 있고, 원화 매출은 외화 매출에 환율을 곱해 만듭니다. 외화 단가 요인과 환율 요인이 따로 있는 이유가 이것입니다.

계획의 환율을 어떤 유형으로 잡았는지, 실적 환율과 같은 유형인지는 도입 전에 정해야 하는 항목입니다. 정하지 않으면 환율 요인의 의미가 사람마다 달라집니다.

화면과 조작

조회 단추는 어디에 있나요?

조회조건 영역의 오른쪽 끝에 있고, 회사코드 칸에서 Enter 키를 눌러도 같은 조회가 됩니다. 조회 전에도 레이아웃 보드와 피벗 틀이 먼저 보이므로 처음 여는 사람도 무엇을 고르면 무엇이 채워지는지 볼 수 있습니다.

기본 레이아웃에 자동 조회를 지정하면 화면을 열 때 조회된 채로 시작합니다.

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

부르지 않습니다. 조회 한 번으로 받은 큐브를 브라우저가 행 3단계 · 열 2단계로 다시 묶을 뿐이라 축을 바꾸는 동안 서비스 호출은 0회입니다. 그래서 어떤 배치에서도 총합은 같아야 하고, 이를 배치 6가지로 시험했습니다.

다시 부르는 것은 칸을 눌러 문서 라인을 읽을 때, 요인분해 · AI 해설 · 감시 규칙을 실행할 때, 사유 · 레이아웃을 저장할 때입니다.

열이나 행이 너무 많아지면 어떻게 되나요?

열 조합이 36개를 넘는 배치는 추가가 막히고, 행 조합이 500개를 넘으면 표 대신 범위를 좁히라는 안내가 나옵니다. 샘플 검증에서는 행 4단계로 1,573개를 만들어 안내가 나오는 것을 확인했습니다.

일부만 그린 표가 전체인 것처럼 읽히는 일을 막기 위한 장치이며, 운영에서도 같은 상한을 둡니다.

차이 표시의 색은 무엇을 뜻하나요?

색은 금액의 부호가 아니라 공헌이익에 준 영향으로 칠합니다. 비용이 계획보다 덜 나가면 차이는 음수지만 이익에는 보탬이라 초록입니다. 금액 1천만원 이상이고 증감률 5% 이상(비율 항목은 0.5퍼센트포인트 이상)일 때만 칠하며 하나만 넘으면 칠하지 않습니다.

빨강은 점검 필요, 초록은 반복 가능한지 확인 필요라는 뜻이며 원인을 단정하지 않습니다.

셀 금액과 문서 라인 합계가 정말 같은가요?

같습니다. 큐브가 청구 라인을 더해 만든 값이기 때문입니다. 전체 합계 칸을 누르면 셀 값 3,288 = 원천 합계 3,288(원천 3,294줄)이 머리에 표시되고, 샘플 칸 11개를 눌러 모두 같은지 시험했습니다.

눈으로 믿으라는 것이 아니라 화면이 매번 두 값을 나란히 보여 주는 방식입니다.

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

폭 390px 에서 조회조건 · 레이아웃 보드가 한 열로 쌓이고 차트는 표 아래로 내려옵니다. 표는 가로로 밀어 읽습니다.

화면 설계는 사무실에서 큰 화면으로 쓰는 것을 기준으로 했고, 좁은 화면에서는 숫자 확인과 사유 입력 정도를 염두에 두었습니다.

분석 기능

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

만들지 않습니다. 금액과 비율은 서비스가 큐브에서 계산하고, 해설은 그 값을 문장으로 옮깁니다. 근거 수치를 펼치면 해설이 읽은 값이 표로 나옵니다.

이 샘플은 모델을 연결하지 않은 규칙 기반 해설이며, 모델 연결은 설정 한 곳이고 기본은 꺼짐입니다. 해설은 원인을 단정하지 않고 점검할 요인과 금액만 제시합니다.

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

사유는 조회 범위와 행 경로를 키로 저장됩니다. 그래서 축을 바꿔도 같은 행에 따라오고 CSV 와 AI 분석 근거에도 함께 실립니다.

사용자별이 아니라 범위별 기록이므로 누가 언제 바꿨는지가 함께 남고, 이미 사유가 적힌 차이는 AI 해설에서 건너뜁니다. 예시 사유는 모두 검증용 샘플 문장입니다.

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

감시 규칙 다섯 개를 실행해 걸린 항목을 받을 역할(재무 · 영업 · 물류 · 경영자)의 대기함에 보고로 올립니다. 보고는 받는 사람의 눈으로 다시 적고, 모든 문장이 점검 필요 · 확인 필요로 끝납니다.

실행은 하루 한 번만 허용되며 서비스가 판정합니다. 걸린 항목이 없거나 건너뛰어도 활동 기록(시각 · 호출 주체 · 결과)이 남습니다.

감시 규칙의 기준값은 바꿀 수 있나요?

기준값 · 점검 주기 · 받을 역할 · 사용 여부는 화면에서 바꿔 저장합니다. 기본 기준은 제품그룹 공헌이익률 −0.8퍼센트포인트, 국가 공헌이익 6천만원 미달, 환율 손실 5천만원, 운임·보험·수수료율 +0.3퍼센트포인트, 미계획 1천만원입니다.

기준값은 예시이므로 회사의 실제 점검 기준에 맞게 정해야 합니다.

PowerPoint 보고서는 서버에 저장되나요?

저장되지 않습니다. 보고 있는 범위의 표와 차트로 보고서를 브라우저가 직접 만들어 내려받게 합니다. 파일에는 조회 범위와 차이 요인, 등록된 사유가 들어갑니다.

결재선에 올리는 용도로 만든 초안이므로 최종 문구와 판단은 담당자가 확인해야 합니다.

레이아웃은 어디까지 저장되나요?

행 · 열 · 기간 · 분석 항목 · 계획 대비 여부 · 선택한 탭이 이름을 붙여 저장되고, 기본 레이아웃과 자동 조회를 지정할 수 있습니다. 새로 열면 조회된 상태로 시작해 국가 › 제품그룹 · 계획 대비 · 차이 분해까지 복원됩니다.

여러 사람이 쓰는 환경에서는 사용자별로 목록이 나뉩니다.

도입과 운영

표준 T-code 와는 어떤 관계인가요?

표준 실행은 VA03 · VL03N · VF03 · FBL5N · KE30 이 맡고, 이 화면은 같은 데이터를 조회·검증 관점으로 묶어 확장합니다. 칸에서 연 문서 라인의 번호로 표준 청구 문서 조회 화면에서 원본을 찾을 수 있습니다.

기존 표준 리포트는 없애지 않고 나란히 둡니다. 두 화면의 합계가 어긋나면 어느 쪽이 틀렸다고 단정하지 않고 대사 지점부터 확인 필요로 놓습니다.

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

필요한 것은 매핑 확정, 계획 원천 확정, 비용 조건 유형 분류, 환율 유형 합의, 권한 설계입니다. 이 중 합의가 오래 걸리고 뷰를 만드는 일 자체는 상대적으로 짧습니다.

소요 기간은 계획 데이터가 어디에 있는지에 크게 좌우되므로 이 글에서는 기간을 약속하지 않습니다. 서비스를 게시한 뒤에는 화면의 서비스 주소만 교체합니다.

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

집계를 읽는 쿼리에 접근 제어를 걸어 회사코드 · 영업조직 단위로 읽을 수 있는 행을 제한하는 설계입니다. 집계 뒤에 거는 방식이면 합계에서 빼는 방식으로 남의 숫자가 드러날 수 있어 읽는 자리에 겁니다.

화면은 OpenUI5 표준 컨트롤과 직접 그린 차트만 쓰고 외부 라이브러리를 들이지 않습니다. 모델을 연결하면 그 시점에 외부 전송 범위를 별도로 심사해야 합니다.

데이터가 아주 많으면 느리지 않나요?

샘플은 큐브를 브라우저에서 묶지만 운영에서는 집계를 CDS 큐브로 내리고, 기간과 회사코드를 필수 조건으로 둡니다. 문서 라인은 칸의 조건을 모두 걸어 500행씩 쪽 단위로 읽습니다.

응답 시간 목표와 인덱스 · 사전 집계 여부는 실제 데이터 규모를 보고 정해야 하며 확인 필요 항목입니다.

국가·제품 매핑이 바뀌면 어떻게 하나요?

매핑은 현업이 행을 추가하거나 고치는 테이블이라 뷰를 바꾸지 않습니다. 매핑이 없는 값은 UNMAPPED 로 남아 합계에서 사라지지 않고, 새 국가나 제품이 생기면 어느 묶음인지만 적으면 됩니다.

매핑을 바꾸면 과거 기간의 그룹 합계도 바뀌므로 변경 이력과 적용 시점을 정해 두는 것이 좋습니다.

이 화면의 결과를 회계·세무 판단의 근거로 써도 되나요?

이 화면은 집계 · 비교 · 점검을 돕는 도구이며, 최종 판단은 회사와 감사인이 하고 세무 신고는 회사와 세무 대리인 · 관세사가 판단합니다. 화면의 “점검 필요” · “확인 필요” 표시는 원인을 단정하지 않습니다.

법정 · 감사 · 세무 신고 대응은 표준 화면과 표준 리포트에 남겨 두는 것을 전제로 설계했습니다.