수출 솔루션 · 영업(SD)

수출 컨테이너 체류·반납 지연 비용 다차원 분석 — 선사·고객·월로 돌려 보고 계획 대비 차이를 요인으로 가르는 수출 물류비 리포트

큐브 집계 · 축 전환 · 칸에서 선적 문서까지 드릴스루 · 계획 대비 차이와 여덟 요인분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 하루 한 번 도는 AI 에이전트 — 소개 영상과 실제 화면 32종, 그리고 CDS 코드까지

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

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

수출 담당과 물류 담당이 마감 때마다 받는 질문은 비슷합니다. 컨테이너 체류 비용이 계획보다 얼마나 늘었나, 어느 선사·어느 고객에서 났나, 프리타임을 넘긴 이유가 무엇이고 누가 줄일 수 있나. 지금은 선사 정산서, 선적 문서 조회 화면, 엑셀 취합표에 답이 흩어져 있어 숫자를 맞추는 데 먼저 시간이 갑니다. 이 화면은 같은 원천을 한 큐브로 묶어 축을 바꿔 보고, 칸에서 선적 문서까지 내려가며, 계획과의 차이를 요인으로 설명합니다.

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 선적·청구 문서를 그대로 이어받아 선사·고객·월 단위로 집계하므로 물류·영업·재무가 같은 숫자를 각자의 지표로 읽을 수 있습니다.

한 줄 요약 — 조회 화면은 누구나 만듭니다. 이 화면의 값은 조회 다음에 있습니다: 체류 비용의 차이를 요인으로 가르고, 사유를 행에 남기고, 사람이 열지 않아도 감시하며, 그 숫자가 원천과 어긋나지 않는다는 것을 매번 스스로 검산합니다.

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 합계가 갈라지지 않는 피벗선사·컨테이너 유형·제품 그룹·고객·수출 국가·월 등 11개 차원을 끌어다 놓아 행·열을 짭니다. 모든 축이 같은 큐브에서 나오므로 합계가 어긋날 자리가 없습니다.선사별·고객별·월별 리포트를 따로 만들고, 총액이 서로 다르면 숫자를 맞추는 회의를 엽니다.
② 숫자 칸에서 선적 문서 줄까지숫자를 누르면 그 칸을 이루는 선적 문서 줄이 열리고, 칸 값과 원천 합계가 같은지 그 자리에서 점검 문구로 보입니다.선사 정산서와 선적 문서를 엑셀에서 대조하며 어느 줄이 비용을 만들었는지 찾습니다.
③ 계획 대비 차이를 여덟 요인으로총차이를 선적 건수·건당 컨테이너 수·초과 발생 비율·초과 일수·일 요율·보관·부대·미계획 선적·계획 미이행으로 나눠, 합이 총차이와 같은지 매번 검산합니다."왜 계획보다 20퍼센트 넘게 썼나"를 엑셀로 밤새 분해하고 산식이 사람마다 달라집니다.
④ 사유가 행에 남는다차이가 큰 행에 변동 사유를 적으면 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도 따라옵니다.같은 질문을 매달 다시 하고, 지난달 답은 메일함에서 찾습니다.
⑤ 운영·재무·영업이 같은 표를 다른 눈으로CEO·CFO·영업 책임자·물류 책임자 요약이 같은 조회 결과를 역할에 맞는 지표로 다시 읽어 줍니다.역할마다 다른 리포트를 따로 받아 숫자 출처를 확인해야 합니다.
⑥ 사람이 열지 않아도 도는 감시총차이 금액·비용률·평균 초과 일수·초과 비율·디텐션 금액 5개 규칙에 걸리면 받을 역할의 대기함에 보고가 올라옵니다.체류 비용이 불어난 달에도 아무도 화면을 열지 않으면 그대로 지나갑니다.
⑦ 숫자를 모델에 맡기지 않는 AI와 보고서AI 분석은 서버가 계산한 숫자만 읽어 설명하고 근거 표를 펼쳐 보이며, 같은 범위를 PowerPoint 보고서로 바로 내려받습니다.화면을 캡처하고 숫자를 옮겨 적어 보고서를 다시 만듭니다.

사례로 보는 효과

검증용 샘플 데이터에서 2026년 1~9월 총 체류 비용은 6,000백만원으로 계획 4,963백만원보다 1,037백만원(20.9퍼센트) 많았습니다. 요인분해는 그 차이를 초과 발생 비율 +1,180백만원, 일 요율 +189백만원, 미계획 선적 +247백만원이 키웠고 초과 일수 −436백만원과 계획 미이행 −142백만원, 선적 건수 −60백만원이 줄였으며 건당 컨테이너 수 +15백만원, 보관·부대·반올림 +44백만원으로 설명했습니다. 합은 총차이 1,037백만원과 오차 0.00 으로 일치했고, 큐브와 원천을 맞추는 대사식 21건도 모두 차이 0건이었습니다. 총차이의 대부분이 선적 건수가 아니라 "프리타임을 넘기는 컨테이너가 계획보다 많았다"는 데서 나온다는 점이 한 화면에서 드러납니다.

도입하면 달라지는 것

  • 체류 비용 보고를 만들 때 선사 정산서·엑셀 취합과 화면 캡처가 줄어듭니다.
  • 회의 주제가 "어느 숫자가 맞나"에서 "어느 선사·고객의 초과를 줄일까"로 옮겨 갑니다.
  • 사유와 레이아웃이 남아 같은 설명을 매달 반복하지 않습니다.
  • 물류·영업·재무가 같은 표를 각자의 지표로 읽습니다.
  • 감시 규칙에 걸린 대상이 담당 역할의 대기함에 먼저 올라옵니다.

이런 회사에 맞습니다

수출 비중이 높아 컨테이너 선적이 매월 수백 건 이상이고, 선사 두세 곳 이상과 거래하며 해상 운임과 별도로 디머리지·디텐션이 청구되는 회사에 맞습니다. 정산 통화가 여러 개이고 선사별 프리타임 계약이 다르며, 물류팀과 영업팀, 재무팀이 같은 체류 비용을 다른 표로 보고 있는 조직이라면 효과가 큽니다. 수출 물량이 적어 선적이 월 수십 건 이하이면 표준 화면과 엑셀로 충분할 수 있습니다.

실행 화면

사용 방법

  1. 조회 조건 입력 — 필수는 회사코드와 시작·종료 기간이고 비교 기준과 저장된 레이아웃은 선택입니다. 기본값은 회사 1000, 2026-01~2026-09, 비교 기준은 체류 비용 계획입니다.
  2. 조회 — 조회 조건 줄 오른쪽 위의 조회 버튼을 누르거나 입력란에서 Enter 키를 누릅니다. 자동 조회는 하지 않으며, 저장한 기본 레이아웃에 자동 실행을 켜 둔 경우에만 열자마자 조회됩니다.
  3. 요약 확인 — 역할별 요약(CEO·CFO·영업 책임자·물류 책임자)에서 총 체류 비용과 기준 대비를 먼저 봅니다.
  4. 탭·축 이동 — 차원 버튼을 행·열·사용 안 함으로 옮기고, 필터 버튼으로 값을 고르며, 분석 항목과 보기 방식(차원 보기·단계 보기)을 바꿉니다.
  5. 칸 클릭 상세 — 숫자 칸을 누르면 원천 선적 문서 줄이 열리고 점검 문구가 일치 여부를 알려 줍니다. 상세 창에서 기간별 요약도 열 수 있습니다.
  6. 내보내기 — 위쪽 CSV 버튼으로 현재 표를 내려받고, AI 분석 창에서 PowerPoint 보고서를 받습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤sap.ui.table.TreeTable 피벗, 차원 버튼 영역, 분석 항목 선택, 역할별 요약 줄표준 컨트롤만 쓰므로 sap_horizon 테마를 그대로 따르고 외부 라이브러리 반입 심사가 필요 없습니다.
집계·판정 로직큐브 재집계(브라우저), 계산항목 평가, 차이 요인 합산, 점검 문구축 변경은 서버를 다시 부르지 않고 읽어 둔 큐브를 브라우저에서 다시 묶어 즉시 반응합니다.
OData 서비스 구성OData V2 서비스 1개. 큐브·계획을 한 번 읽고, 칸 클릭 때 원천 줄을 조건으로 읽으며, 사유·레이아웃은 같은 모델로 저장합니다.읽기와 쓰기를 한 서비스로 모아 운영 전환 때 서비스 한 곳만 바꾸면 됩니다.
서비스 로직날짜·값 조건 해석, 정렬·페이징, 요인분해, AI 해설, 에이전트 실행을 한 파일에 모은 서비스 로직화면과 서버가 같은 계산 코드를 쓰므로 두 곳의 숫자가 어긋나지 않습니다.
테마sap_horizon다른 SAP 화면과 같은 시각 언어를 쓰려는 선택입니다.

앱 정보

항목내용
솔루션수출 솔루션
업무 영역영업(SD) · 수출 운송 후속 비용
대상 영역컨테이너 체류(디머리지)·반납 지연(디텐션)·보관료·재반입 비용
관련 기준서해당 없음(업무 분석 앱)
SAP 표준 T-codeVA03 · VL03N · VF03 · FBL1N · FB03
Namespacezui5.expdemdet
화면 성격다차원 분석(큐브 + 피벗 + 요인분해)
데이터 연동OData V2 서비스
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 판매오더·납품·송장·공급업체 항목 같은 표준 데이터 구조를 그대로 읽어 쓰고, 법정 장부와 세무 신고에 쓰는 처리는 표준 화면에 남깁니다.

처음 열었을 때 — 조회 조건과 선사·제품 그룹 표

조회 조건을 정하고 조회를 누르면 선사와 제품 그룹별 표와 막대 차트가 열립니다.

처음 연 화면 — 조회 전
처음 연 화면 — 조회 전 — 조회 조건과 행·열 차원 버튼이 먼저 보이고 표는 비어 있습니다.

회사코드, 시작·종료 기간, 비교 기준(체류 비용 계획), 저장된 레이아웃을 고른 뒤 오른쪽 위의 조회 버튼을 누릅니다. 기본값은 회사 1000, 2026-01~2026-09, 행은 제품 그룹과 선사입니다. Enter 키로도 조회됩니다.

조회 결과 — 선사·제품 그룹별 표
조회 결과 — 선사·제품 그룹별 표 — 총 체류 비용 6,000백만원, 계획 대비 120.9퍼센트의 표와 막대 차트가 열립니다.

위쪽 요약 줄은 선택한 역할(CEO·CFO·영업·물류 책임자)에 맞춘 지표입니다. 표는 트리 모양이라 전체 합계에서 선사, 제품 그룹으로 펼칩니다. 집계 1,857건은 원천 6,111줄을 큐브로 묶은 행 수입니다.

경영 요약 — 같은 표를 네 가지 눈으로

같은 조회 결과를 역할만 바꿔 다른 지표 묶음으로 읽습니다. 물류는 초과 비율과 평균 초과 일수를, 재무는 월별 비용 항목을, 영업은 고객·국가별 부담을 봅니다.

경영 요약 — CEO
경영 요약 — CEO — 제품 그룹·선사별 총 체류 비용과 운임 대비 체류 비용률을 봅니다.

운임 대비 체류 비용률은 총 체류 비용 ÷ 해상 운임 × 100 입니다. 같은 조회 결과를 역할만 바꿔 다른 지표 묶음으로 읽습니다.

경영 요약 — CFO
경영 요약 — CFO — 반납월별로 디머리지와 디텐션, 보관·장치료의 흐름을 봅니다.

월별 행으로 바뀌어 비용 항목이 어느 달에 몰렸는지 한눈에 보입니다.

경영 요약 — 영업 책임자
경영 요약 — 영업 책임자 — 수출 국가·고객별 총 체류 비용과 선적 1건당 비용을 봅니다.

영업 관점에서는 고객과 국가별로 체류 비용이 거래 조건과 어떻게 이어지는지 확인합니다.

경영 요약 — 물류 책임자
경영 요약 — 물류 책임자 — 선사·컨테이너 유형별 프리타임 초과 컨테이너와 평균 초과 일수를 봅니다.

프리타임 초과 컨테이너 비율과 초과 컨테이너당 평균 초과 일수가 운영 지표로 올라옵니다.

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

차원 버튼을 행과 열로 옮기고 필터로 값을 좁히면 큐브를 브라우저에서 다시 묶어 표가 바로 바뀝니다.

축 전환 — 차원 메뉴
축 전환 — 차원 메뉴 — 차원 버튼의 메뉴에서 행으로, 열로, 사용 안 함으로 옮깁니다.

버튼을 끌어 행·열 영역에 놓아도 같은 결과입니다. 이동은 브라우저 안에서 큐브를 다시 묶는 일이라 서버 호출이 없습니다.

축 전환 — 열로 옮긴 결과
축 전환 — 열로 옮긴 결과 — 차원을 열로 옮기면 표가 교차표로 바뀝니다.

행 차원 수와 열 조합 수가 한도를 넘지 않는지 계속 검사합니다.

열 차원 두 개
열 차원 두 개 — 열에 차원을 두 개 쌓아 조합별 칸을 만듭니다.

열 조합이 36개를 넘으면 표를 그리지 않고 경고를 보여 줍니다.

값 선택 — 여러 선사
값 선택 — 여러 선사 — 필터 버튼으로 선사 값을 여러 개 고릅니다.

선택한 값만 표에 남고 합계도 그 범위로 다시 계산됩니다.

필터 적용 결과
필터 적용 결과 — 필터가 걸린 범위의 요약과 표입니다.

필터 개수가 조회 조건 줄에 표시되어 어떤 범위의 숫자인지 잊지 않게 합니다.

핸들로 표 영역 조절
핸들로 표 영역 조절 — 표와 차트 사이 핸들을 끌어 비율을 바꿉니다.

넓은 표를 볼 때는 차트를 줄이고, 발표할 때는 차트를 키웁니다.

칸에서 선적 문서까지

집계 숫자가 의심될 때 가장 먼저 필요한 것은 원천입니다. 칸을 누르면 그 칸의 조건 그대로 선적 문서 줄이 열립니다.

칸에서 원천 문서까지
칸에서 원천 문서까지 — 숫자 칸을 누르면 그 칸을 이루는 선적 문서 줄이 열립니다.

맨 위 점검 문구가 칸 값과 원천 합계의 일치 여부를 알려 줍니다. 계산 값(비율)은 원천 줄을 다시 계산해 맞춰 봅니다.

원천 줄 — 비용 항목 열
원천 줄 — 비용 항목 열 — 오른쪽으로 넘기면 초과 일수, 요율, 환율, 항목별 금액이 보입니다.

줄마다 디머리지 = 초과 컨테이너 수 × 항만 초과 일수 × 일 요율 × 환율 이 그대로 확인됩니다.

기간별 요약
기간별 요약 — 기간별 요약 창에서 월별 선적 건수와 금액을 계획과 함께 봅니다.

월별 계획 행 수와 금액이 같이 나와 계획 대비 흐름을 따로 읽을 수 있습니다.

계산항목 — 합계가 아닌 값은 분자·분모로

운임 대비 체류 비용률처럼 합계로 더할 수 없는 값은 분자와 분모를 각각 더한 뒤 나눕니다.

계산항목 — 비율과 평균
계산항목 — 비율과 평균 — 계산항목을 항목으로 고르면 비율과 평균을 표에서 바로 봅니다.

운임 대비 체류 비용률, 선적 1건당 비용, 초과 1일당 비용 등은 합계가 아니라 분자·분모를 합친 뒤 나눈 값입니다.

계산 단계
계산 단계 — 계산항목의 산식 단계를 풀어서 보여 줍니다.

합계 행에서도 분자와 분모를 각각 더한 뒤 나누므로 행 평균과 다를 수 있습니다.

계획 대비 차이 — 같은 표가 체류 비용 차이 리포트가 된다

비교 기준을 켜면 칸마다 기준 값과 차이가 붙고, 차이 분해는 그 총차이를 여덟 요인으로 쪼갭니다.

기준 대비 — 계획과의 차이
기준 대비 — 계획과의 차이 — 기준 대비를 켜면 칸마다 기준 값과 차이, 차이 비율이 붙습니다.

전체 총차이는 +1,037백만원(+20.9퍼센트)입니다. 차이 방향이 불리하면 붉게 표시됩니다.

변동 사유 입력
변동 사유 입력 — 차이가 큰 행에 사유 코드와 설명을 적어 남깁니다.

저장한 사유는 행 경로와 함께 보관되고 다음에 열어도 표시됩니다. AI 해설은 사유가 있는 차이는 건너뜁니다.

차이 분해 — 폭포 차트
차이 분해 — 폭포 차트 — 선택한 선사의 계획에서 실적까지 요인별 증감을 폭포로 보여 줍니다.

요인은 선적 건수, 건당 컨테이너 수, 초과 발생 비율, 초과 일수, 일 요율, 보관·부대 비용, 미계획 선적, 계획 미이행 8가지입니다.

요인 합계 점검
요인 합계 점검 — 요인 합계가 총차이와 같은지 숫자로 확인합니다.

전체 범위에서 요인 합계 1,037백만원, 총차이 1,037백만원, 오차 0.00 으로 일치합니다.

AI 분석과 보고서 — 숫자는 서버가, 설명은 규칙이

AI 분석은 현재 보이는 범위를 읽어 요약과 핵심 발견을 적습니다. 숫자는 서버가 계산한 값만 쓰고 근거 표를 펼쳐 보입니다.

AI 분석 — 요약과 핵심 발견
AI 분석 — 요약과 핵심 발견 — 현재 범위를 읽고 요약과 핵심 발견 문장을 만듭니다.

기본은 규칙 기반 해설이며 숫자는 서버가 계산한 값만 씁니다. 모델 연결은 서비스 설정으로만 켜고 기본은 꺼져 있습니다.

AI 근거 표
AI 근거 표 — 해설에 쓴 근거 표를 펼쳐 숫자의 출처를 확인합니다.

AI 는 숫자를 만들지 않으므로 해설 문장의 모든 숫자는 이 표에서 찾을 수 있습니다.

PowerPoint 보고서 내려받기
PowerPoint 보고서 내려받기 — 현재 범위의 표와 차트를 담은 보고서를 브라우저에서 만들어 내려받습니다.

외부 라이브러리 없이 브라우저가 파일을 만듭니다. 서버로 데이터를 보내지 않습니다.

AI 에이전트 — 규칙이 곧 받을 역할

감시 규칙마다 임계값과 받을 역할이 붙어 있고, 걸린 대상은 역할별 대기함에 쌓입니다.

AI 에이전트 — 감시 규칙
AI 에이전트 — 감시 규칙 — 총차이 금액, 비용률, 평균 초과 일수 등 5개 규칙과 임계값을 둡니다.

임계값은 검증용 샘플 데이터 분포에서 정했으며 운영에서는 회사 기준으로 바꿉니다.

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

실행 한 번에 규칙 5개가 평가되어 걸린 건이 보고로 쌓입니다.

실행 기록
실행 기록 — 실행 시각과 호출 주체(사람·화면 타이머·배치)가 남습니다.

하루 한 번 제한은 서버가 판정하며 두 번째 호출은 건너뜀으로 기록됩니다.

레이아웃 저장과 복원

자주 쓰는 축 구성에 이름을 붙여 저장하고, 기본으로 지정하면 다음에 다시 불러옵니다.

레이아웃 저장
레이아웃 저장 — 현재 축 구성에 이름을 붙여 저장합니다.

기본으로 지정하면 다음 조회에서 자동으로 불러올 수 있습니다.

레이아웃 관리
레이아웃 관리 — 저장한 레이아웃을 적용·수정·삭제합니다.

같은 이름은 중복 저장되지 않습니다.

다시 열었을 때
다시 열었을 때 — 화면을 새로 열고 조회하면 기본 레이아웃이 복원됩니다.

변동 사유는 저장되어 그대로 남습니다.

좁은 화면과 한계

휴대폰 폭에서는 조회 조건이 세로로 쌓이고, 표가 너무 커지면 그리지 않고 안내합니다.

좁은 화면(휴대폰 폭)
좁은 화면(휴대폰 폭) — 390픽셀 폭에서는 조회 조건이 세로로 쌓입니다.

표는 가로로 넘기고, 조작 버튼은 그대로 사용할 수 있습니다.

표 크기 한도 경고
표 크기 한도 경고 — 행이 500개를 넘으면 표를 그리지 않고 안내합니다.

행 차원을 줄이거나 필터를 걸어 범위를 좁힙니다.

화면 뒤에서 일어나는 일

단계내용
1. 읽기조회를 누르면 큐브(차원 조합별 합계 1,857행)와 계획(1,829행)을 한 번 읽습니다.
2. 묶기행·열 차원 조합으로 큐브를 브라우저에서 다시 묶어 트리를 만듭니다.
3. 계산합계 행은 분자·분모를 합친 뒤 계산항목 산식을 적용합니다.
4. 비교기준 대비를 켜면 같은 경로의 계획을 붙여 차이와 비율을 계산합니다.
5. 원천 대사칸을 누르면 원천 줄을 조건으로 읽어 칸 값과 합계를 비교합니다.

판정 조건 → 결과 상태 → 사용자 조치

판정 조건결과 상태사용자 조치
칸 값 = 원천 합계일치(녹색 문구)그대로 사용
칸 값 ≠ 원천 합계확인 필요(붉은 문구)원천 줄과 계산항목 산식 점검
요인 합계 = 총차이일치(오차 0.00)요인별 사유 입력
요인 합계 ≠ 총차이점검 필요요인 구성 확인
행 500개 초과 또는 열 조합 36개 초과표를 그리지 않고 경고차원 줄이기·필터
감시 규칙 임계값 초과대기함에 보고 등록담당 역할이 원인 확인
오늘 이미 실행건너뜀 기록다음 날 실행

산출·대사 단계

  1. 디머리지·디텐션·보관·수수료를 각각 계산합니다.
  2. 네 항목의 합이 총 체류 비용과 같은지 점검합니다(항등식).
  3. 큐브 합계가 원천 합계와 같은지 측정값마다 대사합니다.
  4. 총차이(실적 − 계획)를 여덟 요인으로 나누고 합이 같은지 확인합니다.

조회조건

필드필수기본값조건
회사코드필수1000회사 = '1000'
시작 기간필수2026-01반납월 ≥ 시작
종료 기간필수2026-09반납월 ≤ 종료
비교 기준선택체류 비용 계획계획 버전 = 선택값
차원 필터선택없음선사·유형·제품 그룹·고객 등 값 목록

결과 컬럼

컬럼의미·산출식
총 체류 비용디머리지 + 디텐션 + 보관·장치료 + 재반입·서류 수수료
디머리지초과 컨테이너 수 × 항만 초과 일수 × 일 요율 × 환율
디텐션초과 컨테이너 수 × 반납 초과 일수 × 일 요율 × 환율
보관·장치료초과 컨테이너 수 × 항만 초과 일수 × 보관 일 요율 × 환율
재반입·서류 수수료초과 컨테이너 수 × 건당 수수료 × 환율(초과가 있을 때만)
해상 운임(원화)송장 운임 환산 금액
운임 대비 체류 비용률(%)총 체류 비용 ÷ 해상 운임 × 100
프리타임 초과 컨테이너 비율(%)초과 컨테이너 수 ÷ 컨테이너 수 × 100

좁은 화면에서 달라지는 것

  • 조회 조건과 차원 영역이 세로로 쌓이고 표는 가로로 넘깁니다.
  • 표 아래로 내려간 차트도 같은 값을 그립니다.
  • 행이 500개를 넘으면 표를 그리지 않고 경고합니다.

파일 구성

(앱 폴더)
├─ index.html · Component.js · manifest.json
├─ view/ · controller/ · model/ · css/ · i18n/
├─ 서비스 로직 폴더 — 서비스 로직 · 계산 엔진 · 서비스 정의 · 데이터 파일
├─ media/ — 소개 영상
└─ readme.html

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

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

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

하고 싶은 일SAP 표준표준에서 걸리는 자리이 화면이 더하는 것
선적·청구 숫자를 문서 단위로 확인VA03 · VL03N · VF03문서를 하나씩 열어야 해서 선사·월 단위 집계는 따로 만들어야 합니다선적 문서 줄을 큐브로 묶어 여러 축으로 봅니다
선사 청구 체류 비용 확인FBL1N · FB03공급업체 항목 목록이라 계획과의 차이와 원인 분해가 없습니다계획 대비 차이를 여덟 요인으로 가릅니다
월 마감 비용 보고FB03전표 단위라 집계 행에 사유를 붙일 곳이 없습니다행 경로에 변동 사유를 남깁니다
초과 컨테이너 감시—표준 화면에 프리타임 초과 감시 규칙은 없습니다규칙마다 받을 역할이 붙은 에이전트

T-code 별 연계 지점

T-code이름연계
VA03판매오더 조회이 화면의 선적 줄이 이어받는 오더 수량·인코텀즈를 판매오더에서 확인합니다. 화면 값과 오더 값이 다르면 오더 변경 이력을 봅니다.
VL03N납품 조회선적일과 납품 수량을 이어받습니다. 칸을 눌러 열린 선적 문서 번호를 납품 조회에서 그대로 확인합니다.
VF03송장 조회해상 운임 금액의 원천입니다. 화면의 운임 합계와 송장 금액을 환율 기준으로 맞춰 봅니다.
FBL1N공급업체 개별 항목선사가 청구한 체류 비용이 쌓이는 자리입니다. 선사별 디머리지·디텐션 합계를 이 화면의 선사 행과 대사합니다.
FB03회계 전표 조회비용 전표 한 장을 열어 계정·금액을 확인합니다. 법정 장부와 세무 신고는 표준 화면에 남겨 둡니다.

이 화면 결과에서 표준 화면으로는 칸의 선적 문서 번호를 가지고 이동해 원천을 확인하고, 표준 화면의 값은 이 화면의 같은 선사·월 칸에서 다시 봅니다. 운영 전환 때 기존 리포트와 표준 화면을 없앨 필요는 없습니다. 법정·감사·세무 신고 대응은 표준에 남기고 이 화면은 원인 분석과 월 마감 설명에 씁니다.

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

  • 표준 CDS 분석 쿼리와 Fiori 분석 앱은 회사가 이미 쓰는 표준 지표를 그대로 보여 주는 자리입니다. 이 화면은 같은 원천 위에서 선사·고객·월을 자유롭게 바꿔 보고 계획과의 차이를 요인으로 설명하는 자리를 맡습니다.
  • Analysis for Office 같은 도구는 큐브를 엑셀에서 다룰 때 쓰고, 이 화면은 같은 큐브를 브라우저에서 바로 열어 사유와 감시까지 이어 줍니다.
  • 확인하지 못한 표준 앱 이름은 적지 않았습니다. 고객사 환경에서 쓰는 표준 분석 앱이 있다면 이 화면과 숫자를 맞춰 보는 대사 지점을 정하면 됩니다.

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

지점무엇을 정하나이 화면에서 손대는 곳
부대비용 조건 유형선사 청구 항목(디머리지·디텐션·보관료)을 어느 조건 유형으로 받는지CDS 큐브의 비용 항목 매핑 한 곳
프리타임·요율 마스터선사·컨테이너 유형·항구별 프리타임 일수와 일 요율요율 기준 테이블(고객사 정의, 확인 필요)
환율 유형·환산 시점선적일 환율인지 청구일 환율인지큐브의 통화 환산 식
확장 필드·BAdI반납 예정일·실반납일 같은 컨테이너 이벤트 필드원천 뷰의 확장 필드
권한회사·영업 조직·선사별 조회 범위DCL 권한 객체

분석 지표 정의

지표산식·판정 기준대응 기능원천 데이터비고
총 체류 비용디머리지 + 디텐션 + 보관·장치료 + 재반입·서류 수수료피벗·차트선적 문서 줄(VL03N)큐브와 원천 합계 대사
운임 대비 체류 비용률(%)총 체류 비용 ÷ 해상 운임 × 100계산항목송장 금액(VF03)분자·분모 합산 후 나눔
프리타임 초과 컨테이너 비율(%)초과 컨테이너 수 ÷ 컨테이너 수 × 100계산항목·에이전트납품 데이터(VL03N)프리타임은 계약 기준(확인 필요)
초과 컨테이너당 평균 초과 일수초과 컨테이너·일 ÷ 초과 컨테이너 수계산항목반납일·프리타임—
기준 대비 차이실적 − 계획기준 대비·요인분해계획 버전계획 원천은 고객사 정의

CDS 구성 — 최대한 자세히

뷰 레이어 구성

레이어뷰·테이블하는 일왜 나누나
기준ZDEM_RATE · ZDEM_CARRIER프리타임·요율·선사 매핑계약이 바뀌어도 뷰를 고치지 않고 테이블만 바꾸려고
차원ZI_Carrier · ZI_Customer · ZI_ContType선사·고객·컨테이너 유형 텍스트와 키차원 이름을 한 곳에서 관리하려고
원천ZI_ExpCntrItem선적 문서 줄 + 반납 이벤트 + 요율 결합비용 산식을 한 곳에서만 계산하려고
큐브ZI_ExpDemDetCube차원 조합별 합계집계를 서버에서 끝내려고
계획ZI_ExpDemDetPlan계획 버전별 합계실적과 같은 차원으로 맞추려고
쿼리ZC_ExpDemDetQuery화면용 분석 쿼리·필터화면이 필요한 모양만 내보내려고
권한ZR_ExpDemDetAuth역할별 접근 제한집계 단계에서 걸어 새지 않게 하려고
서비스ZUI_ExpDemDetSrvOData V2 서비스 게시화면이 읽을 문을 하나로 두려고

① 요율 기준 테이블 — 프리타임·요율을 고객사 계약대로 둔다

체류 비용 산식에서 가장 자주 바뀌는 것은 코드가 아니라 선사 계약입니다. 프리타임 일수와 일 요율을 테이블로 분리하면 계약이 바뀔 때 뷰를 건드리지 않습니다.

" ───────────────────────────────────────────
" ZDEM_RATE — 선사·컨테이너 유형·항구별 프리타임과 일 요율
" 이렇게 나눈 이유: 계약 변경을 데이터로만 처리하려고
" ───────────────────────────────────────────
@EndUserText.label : '체류 요율 기준'
@AbapCatalog.tableCategory : #TRANSPARENT
define table zdem_rate {
  key client    : abap.clnt not null;
  key carrier   : abap.char(10) not null;
  key cont_type : abap.char(3) not null;
  key port      : abap.char(5) not null;
  free_port_day : abap.int1;
  free_ret_day  : abap.int1;
  dem_rate      : abap.dec(13,2);
  det_rate      : abap.dec(13,2);
  stor_rate     : abap.dec(13,2);
  adm_fee       : abap.dec(13,2);
  currency      : abap.cuky;
}

② 차원 뷰 — 선사 텍스트와 키를 한 곳에서

차원 뷰는 키와 텍스트만 가집니다. 화면의 선사·고객·컨테이너 유형 버튼과 값 도움말이 모두 이 뷰에서 나옵니다.

" ZI_Carrier — 선사 차원
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'Carrier'
define view entity ZI_Carrier
  as select from lfa1
{
  key lifnr as Carrier,
      @Semantics.text: true
      name1 as CarrierText
}

③ 원천 뷰 — 선적 줄과 반납 이벤트, 요율을 결합

체류 비용 산식은 이 뷰에서만 계산합니다. 큐브는 이 뷰의 금액을 더하기만 하므로 산식이 두 곳에 퍼지지 않습니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
define view entity ZI_ExpCntrItem
  as select from ZI_ExpShipLine  as s
  inner join zdem_rate           as r
     on  r.carrier = s.Carrier and r.cont_type = s.ContType and r.port = s.Port
{
  key s.ShipDoc, key s.Item,
  s.Period, s.Carrier, s.ContType, s.ProdGroup, s.Customer, s.Incoterms,
  s.CntrN, s.DelayN, s.PortExcessDays, s.ReturnExcessDays,
  @Semantics.amount.currencyCode: 'Currency'
  cast( s.DelayN * s.PortExcessDays   * r.dem_rate  as abap.curr(15,2) ) as DemAmt,
  cast( s.DelayN * s.ReturnExcessDays * r.det_rate  as abap.curr(15,2) ) as DetAmt,
  cast( s.DelayN * s.PortExcessDays   * r.stor_rate as abap.curr(15,2) ) as StorAmt,
  cast( case when s.DelayN > 0 then s.DelayN * r.adm_fee else 0 end as abap.curr(15,2) ) as AdmAmt,
  r.currency as Currency
}

④ 큐브 — 차원 조합별 집계

큐브는 키 차원과 합계만 가집니다. 계산항목(비율·평균)은 합계로 더할 수 없으므로 여기서 계산하지 않고 쿼리에서 분자·분모로 둡니다.

@Analytics.dataCategory: #CUBE
@ObjectModel.modelingPattern: #ANALYTICAL_CUBE
define view entity ZI_ExpDemDetCube
  as select from ZI_ExpCntrItem
{
  key Period, key Carrier, key ContType, key ProdGroup, key Customer, key Incoterms,
  @Aggregation.default: #SUM
  @Semantics.amount.currencyCode: 'Currency'
  DemAmt + DetAmt + StorAmt + AdmAmt as TotalAmt,
  @Aggregation.default: #SUM DemAmt, @Aggregation.default: #SUM DetAmt,
  @Aggregation.default: #SUM CntrN, @Aggregation.default: #SUM DelayN,
  Currency
}

⑤ 계획 큐브 — 실적과 같은 차원

계획은 실적과 같은 키 차원으로 맞춰야 기준 대비가 칸마다 붙습니다. 계획 버전이 키에 들어 있어 여러 버전을 비교할 수 있습니다.

@Analytics.dataCategory: #CUBE
define view entity ZI_ExpDemDetPlan
  as select from zdem_plan
{
  key plan_version as Version, key period as Period, key carrier as Carrier,
  key cont_type as ContType, key prod_group as ProdGroup,
  key customer as Customer, key incoterms as Incoterms,
  @Semantics.amount.currencyCode: 'Currency'
  plan_total as PlanTotalAmt, currency as Currency
}

⑥ 분석 쿼리 — 화면이 쓰는 모양

쿼리는 필터와 표시 속성을 선언합니다. 회사코드와 기간은 필수 파라미터로 두어 대용량에서 전체 읽기를 막습니다.

@Analytics.query: true
@VDM.viewType: #CONSUMPTION
define view entity ZC_ExpDemDetQuery
  with parameters
    @Consumption.defaultValue: '1000' P_Company : bukrs,
    P_PeriodFrom : abap.char(7), P_PeriodTo : abap.char(7)
  as select from ZI_ExpDemDetCube
{
  @AnalyticsDetails.query.axis: #ROWS    Carrier,
  @AnalyticsDetails.query.axis: #ROWS    ProdGroup,
  @AnalyticsDetails.query.axis: #COLUMNS Period,
  @UI.lineItem: [{ position: 10 }]       TotalAmt,
  @Consumption.filter.selectionType: #SINGLE Customer
}
where Period between $parameters.P_PeriodFrom and $parameters.P_PeriodTo

⑦ 권한 — 집계 단계에서 건다

드릴스루에만 권한을 걸면 합계에서 뺄셈으로 다른 사업부 숫자가 드러납니다. 큐브 집계 단계에서 회사·영업 조직을 걸어 둡니다.

@EndUserText.label: '수출 체류 비용 권한'
@MappingRole: true
define role ZR_ExpDemDetAuth {
  grant select on ZI_ExpDemDetCube
    where ( Company ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑧ 서비스 정의·바인딩 — 화면이 읽는 문

서비스 정의는 큐브·계획·쿼리를 한 서비스로 노출합니다. 바인딩을 OData V2 로 게시하면 화면의 서비스 주소만 바꿔 운영으로 옮길 수 있습니다.

@EndUserText.label: '수출 체류 비용 서비스'
define service ZUI_ExpDemDetSrv {
  expose ZC_ExpDemDetQuery;
  expose ZI_ExpDemDetPlan;
  expose ZI_Carrier;
  expose ZI_Customer;
}
" 바인딩: ZUI_ExpDemDetSrv_O2 — 유형 OData V2 - UI, 게시 후 서비스 활성화

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다.

해야 할 일무엇을 정하나정하지 않으면누가
선사 계약 프리타임·요율선사·컨테이너 유형·항구별 프리타임과 일 요율체류 비용이 계약과 어긋나 첫 대조에서 막힙니다물류팀 · 구매팀
부대비용 조건 유형선사 청구 항목을 어느 조건 유형으로 받는지비용 항목별 합계가 선사 청구서와 맞지 않습니다회계팀
환율 유형·환산 시점선적일 환율인지 청구일 환율인지외화 청구액과 원화 비용이 달라집니다재무팀
계획 원천 확정계획 버전과 작성 주체"계획이 왜 이 숫자냐"가 반복됩니다기획팀
차원 범위쓸 차원과 값 목록나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다현업 · 물류
권한 설계회사·영업 조직·선사별 조회 범위전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다보안 · 권한
성능 기준필수 파라미터와 응답 시간 목표전체 읽기로 응답이 느려집니다Basis
대사 체계표준 T-code 와 맞출 항목과 주기숫자 신뢰 논쟁이 끝나지 않습니다회계팀
전송(TR) 순서테이블 → 원천 뷰 → 큐브 → 쿼리 → 권한 → 서비스활성화 오류로 이송이 반복됩니다Basis
서비스 활성화서비스 게시와 화면의 서비스 주소 교체운영에서 화면이 샘플 데이터에 머뭅니다Basis · 개발
배치 등록에이전트 실행 주기(하루 1회)화면을 여는 사람이 없으면 점검이 돌지 않습니다Basis · 물류

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

원천 6,111줄을 큐브 1,857행으로 묶은 검증용 샘플 데이터에서 대사식 21건을 전수로 돌렸고, 의도적 예외는 0건입니다. 요인 합계는 총차이 1,037백만원과 같습니다.

대사식검사 건수차이
측정값 11종(총 체류 비용·운임·디머리지·디텐션·보관·수수료·초과 수·컨테이너 수·초과 일수·수량·선적 건수)110
항등식 5종(항목 합 = 총액 계획·실적, 산식 3종)50
요인 합 = 총차이10
외화 청구액(CNY·EUR·JPY·USD)40

운영 데이터로 갈 때

선적 문서가 수천만 건이면 집계는 큐브(서버)에서 끝내고, 회사코드와 기간을 필수 파라미터로 두어 전체 읽기를 막습니다. 큐브 키 차원에는 인덱스 대상 필드를 우선 둡니다. 화면의 행 500개·열 36개 한도는 브라우저 보호용이며 운영에서는 서버 응답 시간 기준을 따로 정합니다.

자주 묻는 질문 — 최대한 자세히

숫자와 산식, 화면과 조작, 분석 기능, 도입과 운영 순서로 정리했습니다.

숫자와 산식

총 체류 비용은 어떻게 계산하나요?

디머리지, 디텐션, 보관·장치료, 재반입·서류 수수료를 더한 값입니다. 디머리지는 초과 컨테이너 수 × 항만 초과 일수 × 일 요율 × 환율이며 디텐션은 반납 초과 일수를 씁니다. 재반입·서류 수수료는 초과가 있을 때만 건당 수수료를 곱합니다. 네 항목의 합이 총액과 같은지는 대사식으로 매번 점검합니다.

운임 대비 체류 비용률은 합계 행에서 어떻게 계산되나요?

행 평균이 아니라 분자(총 체류 비용)와 분모(해상 운임)를 각각 더한 뒤 나눕니다. 그래서 합계 행의 비율은 하위 행 비율을 단순 평균한 값과 다를 수 있습니다. 계산 단계 창에서 분자와 분모를 풀어 볼 수 있습니다.

칸 값과 원천 합계가 다르면 어떻게 하나요?

점검 문구가 붉게 바뀌고 확인 필요로 표시됩니다. 원천 줄과 계산항목 산식을 순서대로 확인하고, 선사 정산서·표준 화면과 대사합니다. 검증용 샘플 데이터에서는 6개 칸을 점검해 모두 일치했습니다.

외화와 환율은 어떻게 처리하나요?

선사 청구는 원래 통화(USD·EUR·JPY·CNY)로 받고 환율을 곱한 원화 금액으로 집계합니다. 외화 청구액은 통화별로 합계를 따로 점검합니다. 환율 유형과 환산 시점(선적일 또는 청구일)은 고객사가 정해야 하는 확인 필요 항목입니다.

프리타임 일수는 어디서 오나요?

선사·컨테이너 유형·항구별 계약에 따라 달라지므로 요율 기준 테이블에서 관리합니다. 샘플 데이터에서는 임의 값으로 구성했고 운영에서는 선사 계약을 그대로 옮겨야 합니다.

계획 값은 어디서 오나요?

체류 비용 계획 버전(연초 계획)을 실적과 같은 차원으로 맞춰 읽습니다. 계획 작성 주체와 버전 관리는 고객사가 확정해야 합니다.

화면과 조작

조회는 언제 되나요?

조회 버튼이나 Enter 키로만 됩니다. 저장한 기본 레이아웃에 자동 실행을 켜 둔 경우에만 열자마자 조회합니다.

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

부르지 않습니다. 읽어 둔 큐브를 브라우저에서 다시 묶으므로 즉시 바뀝니다. 다만 행이 500개를 넘거나 열 조합이 36개를 넘으면 표를 그리지 않고 경고합니다.

표를 내려받을 수 있나요?

위쪽 CSV 버튼으로 현재 표를 내려받습니다. 변동 사유가 있는 행은 사유도 함께 담깁니다.

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

조회 조건이 세로로 쌓이고 표는 가로로 넘기는 방식으로 쓸 수 있습니다. 큰 표를 다루는 분석은 넓은 화면을 권합니다.

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

이름과 함께 서버에 저장되며 기본 지정과 자동 실행 여부를 고를 수 있습니다. 같은 이름은 중복 저장되지 않습니다.

분석 기능

요인분해의 여덟 요인은 무엇인가요?

선적 건수, 건당 컨테이너 수, 초과 발생 비율, 초과 일수, 일 요율, 보관·부대 비용과 반올림, 미계획 선적(계획 없이 생긴 선적), 계획 미이행(계획만 있고 실적이 없는 건)입니다. 여덟 요인의 합은 총차이와 같아야 하며 화면이 매번 오차를 적습니다.

변동 사유는 어떻게 남나요?

차이가 큰 행에서 사유 코드와 설명을 적으면 조회 범위와 행 경로에 묶여 저장됩니다. 축을 바꿔도 같은 행이면 따라오고 AI 해설은 사유가 있는 차이를 건너뜁니다.

AI 분석은 숫자를 만들어 내나요?

만들지 않습니다. 금액과 비율은 서버가 계산하고 해설은 그 숫자를 읽어 문장으로 적습니다. 기본은 규칙 기반 해설이며 모델 연결은 서비스 설정 하나로 켜고 기본은 꺼져 있습니다. 근거 표를 펼쳐 숫자의 출처를 확인할 수 있습니다.

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

브라우저 안에서 만들어지고 서버로 데이터를 보내지 않습니다. 현재 범위의 표와 차트가 담깁니다.

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

하루 한 번입니다. 한도는 서버가 판정하며 같은 날 두 번째 호출은 건너뜀으로 기록됩니다. 사람·화면 타이머·배치 어느 쪽이 불렀는지도 실행 기록에 남습니다.

도입과 운영

이 화면은 표준 T-code 를 대체하나요?

대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고 이 화면은 조회·검증 관점을 더해 확장합니다. 기존 리포트와 표준 화면은 그대로 두고 함께 씁니다.

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

검증용 샘플 데이터로 확인한 화면이며 운영 적용 시기와 범위는 확인된 사실이 없습니다. 고객사의 선사 계약, 계획 원천, 권한 기준을 정한 뒤 일정을 잡습니다.

운영 데이터에 연결하려면 무엇이 필요한가요?

요율 기준 테이블, 원천·큐브·쿼리 뷰, 권한, 서비스 게시, 화면의 서비스 주소 교체입니다. 개발보다 계약 요율과 계획 원천을 정하는 합의가 더 오래 걸립니다.

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

회사·영업 조직·선사 기준 권한을 큐브 집계 단계에 겁니다. 드릴스루에만 걸면 합계에서 뺄셈으로 다른 범위가 드러날 수 있습니다. 외부 라이브러리를 쓰지 않아 반입 심사가 필요 없습니다.

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

선적 문서가 수천만 건이면 집계는 서버(CDS 큐브)에서 끝내고 회사코드와 기간을 필수 조건으로 둡니다. 화면의 행 500개·열 36개 한도는 브라우저를 보호하는 장치입니다.

선사나 계정 체계가 바뀌면 어떻게 하나요?

선사 매핑과 요율 기준은 테이블이라 데이터만 바꾸면 됩니다. 새 차원이 필요하면 원천 뷰와 큐브를 확장하고 이송합니다.

최종 판단은 누가 하나요?

이 화면은 점검 도구이며 최종 판단은 회사와 감사인(세무 신고는 회사와 세무 대리인·관세사)이 합니다. 선사 청구의 정산과 회계 처리는 표준 화면과 회사 절차를 따릅니다.

도입 효과는 어떻게 가늠하나요?

검증용 샘플 데이터에서는 총차이 1,037백만원이 요인으로 설명되고 대사식 21건이 모두 일치했습니다. 시간 절감률 같은 수치는 고객사 데이터로 측정해야 하므로 제시하지 않습니다.