수입 솔루션 · 수입 원가 분석

SAP 수입 착지원가 다차원 분석 — 예정 대비 차이를 일곱 요인으로 가르고 B/L 라인까지 내려가는 수입 원가 화면

물품 대가·운임·관세·보험·통관·하역을 큐브로 묶어 축을 바꿔 보고 · 셀에서 B/L 품목 라인까지 드릴스루 · 예정 대비 차이를 일곱 요인으로 분해 · 변동 사유를 행에 남기고 · 숫자는 서비스가 계산하는 AI 분석과 에이전트 — 소개 영상과 검증용 샘플 데이터 화면 34종, 그리고 CDS 코드까지

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

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

수입 담당과 자금 담당이 마감 때마다 받는 질문은 비슷합니다. 이번 달 착지원가가 예정보다 왜 올랐는지, 환율 때문인지 단가 때문인지 운임 때문인지, 그 숫자를 만든 B/L 이 어느 것인지입니다. 지금은 구매오더 조회(ME23N), 입고(MIGO · MB51), 송장 검증(MIRO · MIR4), 비용 전표(FB03)를 차례로 열고 여기에 운임 · 관세 · 통관 자료를 엑셀로 붙여 맞춥니다. 화면마다 보는 축이 달라 합계가 어긋나면 어느 쪽이 맞는지부터 따지게 됩니다.

이 앱은 그 자리를 이어 붙입니다. B/L 품목 라인을 물품 대가 · 운임 · 관세 · 보험·통관·하역 큐브로 묶어 같은 숫자를 여러 축으로 보고, 칸을 누르면 그 칸을 만든 B/L 라인으로 내려가며, 예정과 실적의 총차이를 일곱 요인으로 가르고 합이 맞는지 매번 검산합니다. IAS 2 재고자산(K-IFRS 제1002호)이 요구하는 취득원가 구성 — 매입가에 운임 · 관세 같은 취득 부대비용을 더하는 구조 — 을 조회와 점검 관점에서 볼 수 있게 했을 뿐, 회계처리나 세무 판단은 하지 않습니다.

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

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 갈라지지 않는 피벗공급사 · 원산지 · 플랜트 · 운송수단 · 입항지 · 통화 · 자재 등 11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다.공급사별 · 통화별 · 자재별 엑셀을 따로 만들고, 합계가 다르면 어느 쪽이 맞는지부터 따집니다.
② 셀에서 B/L 라인까지 한 번에숫자 칸을 누르면 그 금액을 만든 B/L 품목 라인이 열리고, 칸의 값과 라인 합이 같은지 그 자리에서 보입니다.화면을 닫고 MB51 · FB03 을 다시 열어 조건을 손으로 맞춥니다.
③ 예정 대비 차이를 일곱 요인으로물량 · 외화 단가 · 환율 · 운임 · 관세율 · 보험·통관·하역 · 미계획 입고로 총차이를 가릅니다. 합은 총차이와 정확히 같고 검산 행이 매번 보여 줍니다.엑셀로 요인을 직접 나누고, 합이 총차이와 맞는지 다시 손으로 맞춥니다.
④ 변동 사유가 행에 남는다차이가 큰 행에 적은 사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음 달에도 따라옵니다.같은 질문을 매달 다시 하고, 지난달 답은 메일함에서 찾습니다.
⑤ 사람이 열지 않아도 도는 감시규칙 다섯 개가 임계값과 받을 역할(CFO · 자금 · 물류 · 구매)을 들고 있어, 걸리면 대기함에 보고가 올라갑니다. 하루 한 번 제한과 활동 기록이 서버에 남습니다.숫자가 나빠진 날 아무도 화면을 열지 않으면 그대로 지나갑니다.
⑥ 결재용 보고서를 바로지금 보는 범위의 표와 차트를 담은 파워포인트 보고서가 브라우저에서 바로 만들어집니다.화면을 캡처해 붙이고 숫자를 옮겨 적어 보고서를 다시 만듭니다.
⑦ 숫자는 서비스가, AI 는 설명만금액 · 비율은 서비스가 큐브에서 계산해 근거로 넘기고 모델은 읽어 설명만 합니다. 모델을 끄면 같은 근거로 규칙 기반 해설이 나옵니다.AI 가 만든 숫자를 보고에 써도 되는지부터 따져야 합니다.

사례로 보는 효과

이 샘플 범위(2026.04~2026.09, 가정값 기반 검증용 샘플 데이터)에서 착지원가는 예정 3조 4,773.09억원, 실적 3조 6,397.05억원으로 1,623.95억원(+4.7%) 높았습니다. 총차이만으로는 원인을 알 수 없지만 일곱 요인으로 가르면 순서가 보입니다.

요인금액읽는 법
외화 단가+756.63억가장 큰 몫 — 공급사 단가가 예정보다 높은 라인
환율+547.00억예정 환율 대비 실제 적용 환율
미계획 입고+261.02억예정에 없던 입고 50라인 전체
물량+42.14억입고 수량 차이
운임+11.16억예정 요율 대비
보험·통관·하역+6.91억부대비용 중 기타
관세율−0.90억(−8,996만원)유일하게 예정보다 낮은 요인

일곱 요인의 합은 총차이와 같고(반올림 차이 제외) 화면의 검산 행이 0원으로 확인합니다. 이 숫자가 어느 B/L 에서 났는지는 칸을 눌러 라인으로 내려가 확인합니다. 모두 검증용 샘플 데이터이며, 요인의 크기는 치환 순서의 영향을 받으므로 해석은 점검 필요 수준으로 읽습니다.

도입하면 달라지는 것

  • 마감 준비 — 차이 표 · 요인분해 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합과 캡처 붙여넣기가 줄어듭니다.
  • 회의의 주제 — "어느 숫자가 맞나" 대신 "이 요인을 어떻게 할 것인가" 를 이야기합니다.
  • 다음 달로 이어지는 기록 — 사유와 레이아웃이 남아 같은 설명을 되풀이하지 않습니다.
  • 놓치는 날이 없는 점검 — 사람이 열지 않아도 규칙에 걸린 항목이 담당 역할의 대기함에 올라갑니다.

이런 회사에 맞습니다

외화 원자재 · 부품을 수입하는 제조 · 유통 회사로, 공급사가 여러 곳이고 통화가 둘 이상이며, 운임 · 관세 · 통관 비용이 별도 전표로 쌓이는 곳에 맞습니다. 수입 구매팀 · 물류팀 · 자금팀 · 원가회계팀이 같은 숫자를 서로 다른 화면과 엑셀로 맞추고 있다면 효과가 큽니다. 반대로 수입 건수가 적고 통화가 하나라면 표준 화면과 엑셀로도 충분할 수 있습니다.

실행 화면 — 검증용 샘플 데이터로 찍은 34종

화면은 모두 검증용 샘플 데이터(가상 공급사 12곳 · 자재 14종 · 6개월)로 실제 브라우저에서 찍었습니다. 거래처 · B/L 번호 · 환율 · 요율은 가정값이며, 화면에 나오는 이름과 번호는 실제 거래와 관계가 없습니다. 이 글은 처음 열었을 때부터 좁은 화면까지 사용 순서대로 보여 줍니다.

사용 방법

  1. 조회조건 — 회사코드(필수)와 시작·종료 기간(입고월)을 정합니다. 차원 값은 선택이며 비우면 전체입니다.
  2. 조회 — 조회 버튼을 누르거나 입력칸에서 Enter 를 누릅니다. 큐브는 한 번만 읽습니다.
  3. 요약 확인 — 임원 요약에서 역할을 바꿔 앞세우는 지표를 바꿉니다. 다시 조회하지 않습니다.
  4. 탭 · 축 이동 — 칩을 행 축 · 열 축으로 끌어다 놓거나 화살표 버튼으로 옮기고, 비교를 "예정 대비" 나 "요인 워터폴" 로 바꿉니다.
  5. 행 · 셀 클릭 상세 — 행을 펼치고, 숫자 칸을 누르면 그 칸을 만든 B/L 품목 라인이 열립니다. 차이가 큰 행에는 사유를 적습니다.
  6. 내보내기 — 피벗과 드릴스루 목록은 CSV 로, AI 분석 결과는 파워포인트 보고서로 내려받습니다. 자주 쓰는 구성은 레이아웃으로 저장합니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤(TreeTable · 대화상자 · 칩 보드) 과 직접 그린 SVG 차트차트 라이브러리를 들이면 반입 심사가 따라오므로 표준 컨트롤과 SVG 로 한정했습니다.
큐브 재집계 로직조회한 큐브를 브라우저에서 축 배치대로 다시 묶는 모듈축을 바꿀 때마다 서버를 부르지 않아도 되고, 합계가 어느 축에서나 같음을 보장합니다.
집계 · 판정 로직요인분해 · 해설 · 에이전트 판정을 서비스 쪽 한 모듈이 계산화면과 서비스가 같은 계산 모듈을 쓰므로 검산 결과가 환경에 따라 달라지지 않습니다.
OData 서비스 구성큐브 · 예정 · 품목 라인 · 차원 · 측정값 · 계산항목 · 요약 · 검산 · 사유 · 레이아웃 · 에이전트 엔티티셋과 계산 함수 세 개로 이루어진 OData V2 서비스화면은 서비스 주소를 매니페스트 선언으로만 알고, 큐브와 예정은 한 번 읽어 재집계, 쓰기는 사유 · 레이아웃 · 에이전트 기록에 한정했습니다.
테마sap_horizonSAP 표준 시각 언어를 그대로 따라 현업이 낯설어하지 않게 했습니다.
SAP 표준 기능을 그대로 이어받은 부분 — 구매오더 · 입고 · 송장 · 비용 전표의 표준 데이터 구조(같은 테이블 · 같은 필드)를 그대로 이어받고, 표준 T-code 로 원천을 다시 확인할 수 있게 연결 지점을 남겼습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.

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

화면을 열면 조회조건 · 분석 축 · 임원 요약 · 차트와 피벗이 제자리에 서 있습니다. 조회 전에도 값만 비어 있을 뿐 틀은 그대로라, 처음 여는 사람도 무엇을 고르면 무엇이 채워지는지 먼저 봅니다. 샘플 기본 범위는 회사 1000, 2026.04~2026.09 입니다.

조회 전 — 틀이 먼저 보인다
조회 전 — 틀이 먼저 보인다 — 조회를 누르기 전에도 조회조건 · 축 · 요약 · 표가 제자리에 놓여 있습니다.

차원 목록과 측정값 정의는 조회조건과 상관없는 목록이라 화면을 열 때 먼저 읽습니다. 그래서 축을 미리 짜 두고 조회할 수 있습니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있고, 입력칸에서 Enter 를 눌러도 같습니다.

조회 직후 — 피벗과 오른쪽 차트
조회 직후 — 피벗과 오른쪽 차트 — 조회조건 · 요약 지표 · 피벗이 한 화면에 뜨고 표 오른쪽에 같은 값을 그린 차트가 붙습니다.

큐브(차원 조합별 집계)는 이때 한 번만 읽습니다. 기본 배치는 행 축 공급사 › 통화, 열 축 입고월입니다. 오른쪽 차트는 표와 같은 데이터를 그린 것이라 표를 읽기 전에 모양부터 눈에 들어옵니다.

레이아웃 보드와 조회조건
레이아웃 보드와 조회조건 — 분석 축을 칩으로 보여 주는 레이아웃 보드와 조회조건을 펼친 모습입니다.

조회조건은 회사코드(필수)와 기간, 그리고 차원별 값 선택입니다. 차원 값을 비우면 전체를 뜻합니다. 보드의 칩은 끌어다 놓거나 칩의 화살표 버튼으로 옮길 수 있습니다.

축을 끌어다 놓은 뒤
축을 끌어다 놓은 뒤 — 행 축과 열 축 배치를 바꾸면 서버를 다시 부르지 않고 브라우저에서 바로 다시 묶습니다.

칩을 행 축(최대 3단계)이나 열 축(최대 2단계)에 놓으면 표와 차트가 함께 바뀝니다. 큐브를 이미 읽어 두었기 때문에 요청은 나가지 않습니다. 합계는 어느 축으로 묶어도 같아야 합니다.

머리 영역을 접은 상태
머리 영역을 접은 상태 — 조회조건과 축 영역을 접어 피벗에 화면을 더 씁니다.

축을 짜는 동안에는 펼쳐 두고, 숫자를 들여다볼 때는 접어 둡니다. 접어도 현재 조회 범위와 축 요약은 한 줄로 남아 어떤 조건인지 잃어버리지 않습니다.

경영 요약 — 역할을 바꾸면 앞세우는 숫자가 바뀝니다

같은 큐브를 CFO · 구매 · 물류 · 자금 책임자의 눈으로 다르게 요약합니다. 역할을 바꿔도 다시 조회하지 않고, 앞세우는 지표와 쪼개 보는 차원만 달라집니다.

경영 요약 — CFO
경영 요약 — CFO — 착지원가 · 부대비용 합계 · 부대비용률을 예정과 나란히 보이고, 수령 플랜트별 초과 상위를 짚습니다.

착지원가 3,639,704.5 백만원, 예정 3,477,309.1 백만원, 차이 +162,395.5 백만원이 맨 앞에 옵니다. 수령 플랜트별로 예정을 넘긴 순서가 아래에 놓이고, 줄어든 쪽이 없으면 "해당 없음" 으로 적습니다. 금액 단위는 백만원이며 화면에서 바꿀 수 있습니다.

경영 요약 — 구매 책임자
경영 요약 — 구매 책임자 — 물품 대가 · 관세 · 관세 부담률을 앞세우고 공급사별 예정 초과 상위를 보입니다.

구매 책임자 보기는 공급사 기준으로 물품 대가(원화)를 봅니다. 물품 대가 3,432,249.2 백만원(예정 대비 +154,028.5), 관세 142,445.3 백만원, 관세 부담률 4.15% 가 앞에 오고, 아래에 공급사별로 예정을 넘긴 순서가 나옵니다.

경영 요약 — 물류 책임자
경영 요약 — 물류 책임자 — 운임 · 보험·통관·하역비 · 부대비용 합계를 앞세우고 운송수단별 예정 초과를 보입니다.

물류 책임자 보기는 운송수단 기준으로 운임을 봅니다. 운임 56,174.1 백만원(예정 대비 +1,713.2)이 앞에 오고, 벌크 · 컨테이너 · 항공 순으로 예정을 넘긴 크기가 아래에 나옵니다.

경영 요약 — 자금 책임자
경영 요약 — 자금 책임자 — 물품 대가 · 착지원가 · 톤당 착지원가를 앞세우고 통화별 예정 초과를 보입니다.

자금 책임자 보기는 통화 기준입니다. 위안 · 달러 · 유로 · 엔 순으로 물품 대가가 예정을 넘긴 크기를 보입니다. 환율 요인은 시점과 환율 유형에 따라 달라지므로 해석은 점검 필요 수준으로 읽습니다.

축 전환과 범위 — 보고 싶은 만큼만 좁힙니다

공급사 · 원산지 · 수령 플랜트 · 운송수단 · 입항지 · 통화 · 인코텀즈 · 자재그룹 · 자재 같은 열한 개 차원을 마음대로 조합합니다. 값 선택은 차원 안에서는 "또는", 차원끼리는 "그리고" 로 묶입니다.

행 3단계 · 열 2단계 축
행 3단계 · 열 2단계 축 — 행에 공급사 › 통화 › 자재, 열에 입고월 › 분기처럼 여러 단계를 겹쳐 놓은 모습입니다.

단계가 늘어나도 큐브에서 다시 묶을 뿐이라 응답이 늦어지지 않습니다. 차원 수에는 상한(행 3 · 열 2)이 있고, 넘기려 하면 안내가 뜹니다.

차원 값 다중 선택
차원 값 다중 선택 — 한 차원에서 값을 여러 개 골라 범위를 좁히는 대화상자입니다.

공급사 세 곳과 통화 두 개처럼 골라 담으면 표 위 조건 요약이 바뀝니다. 값 목록은 차원 값 엔티티에서 읽으며, 각 값 옆에 해당 B/L 품목 라인 수가 붙어 있습니다.

범위를 좁힌 결과
범위를 좁힌 결과 — 선택한 공급사와 통화만 남은 피벗입니다.

합계도 좁힌 범위의 합으로 바뀝니다. 범위를 풀면 처음 합계로 돌아오므로, 좁히는 것은 계산이 아니라 걸러 보기입니다.

피벗을 펼친 화면
피벗을 펼친 화면 — 행을 펼쳐 하위 차원으로 내려가고, 오른쪽 차트가 같이 바뀝니다.

공급사 행을 펼치면 통화별 행이 나오고, 각 열은 입고월입니다. 차트도 펼친 행 기준으로 다시 그려집니다. 붉은 숫자는 이 범위에서 점검할 만한 칸입니다.

표 · 차트 너비 손잡이
표 · 차트 너비 손잡이 — 표와 차트 사이 손잡이로 너비를 조절합니다.

넓은 표를 볼 때는 차트를 줄이고, 모양이 중요할 때는 차트를 키웁니다. 조절한 너비는 그 브라우저에 남아 다음에 열어도 이어집니다.

칸에서 B/L 까지 — 숫자를 만든 원천 라인을 바로 봅니다

피벗의 숫자 칸을 누르면 그 칸을 만든 B/L 품목 라인이 열립니다. 칸의 값과 읽어 온 라인의 합이 같은지도 그 자리에서 표시합니다.

칸에서 원천 B/L 라인으로
칸에서 원천 B/L 라인으로 — 공급사 · 입고월 칸을 누르면 B/L 번호 · 품목 · 선적일 · 입고일 · 외화 금액 라인이 열립니다.

대화상자 머리에는 칸의 값과 읽은 라인의 합이 나란히 있고, 같으면 녹색 확인 표시가 붙습니다. 라인이 많으면 "71 / 71건 읽음" 처럼 읽은 건수를 알려 줍니다. CSV 로 내려받을 수도 있습니다.

다른 칸의 드릴스루
다른 칸의 드릴스루 — 다른 공급사 · 월의 칸에서 같은 방식으로 라인을 엽니다.

칸마다 조건이 다르므로 열리는 라인이 달라집니다. 조건은 행의 차원 경로와 열 조합이 그대로 조회 조건이 됩니다.

검산과 입고월 요약
검산과 입고월 요약 — 큐브 합계와 B/L 품목 라인 합계를 측정값별로 견주는 검산 패널과 입고월 요약입니다.

검산 패널은 측정값마다 큐브 합과 라인 합과 차이를 적습니다. 샘플에서는 전부 0 입니다. 차이가 생기면 확인 필요로 표시하고 범위나 단위부터 확인하게 합니다.

계산항목 — 부대비용률처럼 식으로 만든 열

측정값을 더하고 나누어 만든 계산항목을 표 열로 놓을 수 있습니다. 식은 서비스가 정의하고 화면은 같은 식을 칸마다 적용합니다.

계산항목 — 부대비용률
계산항목 — 부대비용률 — 표시 항목에서 계산항목(부대비용률 등)을 골라 열로 놓은 피벗과 막대 차트입니다.

선택할 수 있는 계산항목은 부대비용 합계 · 부대비용률 · 착지원가 계산 · 톤당 착지원가 · 관세 부담률 다섯 가지입니다. 부대비용률은 (운임+관세+보험·통관·하역)÷물품 대가×100 입니다. 환급 가능한 수입 부가가치세는 취득원가에 넣지 않으므로 이 식에서 빠져 있고, 회사 기준에 맞는지는 확인 필요입니다. 수량이 0 이면 톤당 값은 표시하지 않습니다.

예정 대비 차이 — 같은 표가 원가 점검 리포트가 됩니다

비교 기준을 "예정" 으로 바꾸면 칸마다 실적 · 예정 · 차이 · 증감률이 붙습니다. 금액과 비율 임계를 둘 다 넘는 칸만 색이 칠해지고, 착지원가가 늘어난 방향은 붉게 표시해 점검 필요 신호로 씁니다.

비교 기준을 예정으로
비교 기준을 예정으로 — 비교 선택을 실적만에서 예정 대비로 바꾼 상태입니다.

예정은 구매오더 조건(외화 단가 · 환율 · 요율)으로 계산한 기준 값입니다. 모든 가정은 검증용 샘플 데이터의 가정값입니다. 비교를 바꿔도 다시 조회하지 않습니다.

예정 대비 차이 피벗과 요인 워터폴
예정 대비 차이 피벗과 요인 워터폴 — 왼쪽은 예정 3조 4,773억원에서 실적 3조 6,397억원까지를 일곱 요인으로 가른 워터폴, 오른쪽은 칸마다 차이가 붙고 임계를 넘은 칸에 색이 입혀진 피벗입니다.

피벗의 색은 금액과 증감률이 모두 임계 이상일 때만 입힙니다. 줄어든 방향으로 임계를 넘으면 초록으로 표시해 단가나 환율 반영이 맞는지 확인 필요로 알려 줍니다. 워터폴은 예정 조건에서 실적 조건으로 한 가지씩 바꿔 가며 같은 식으로 다시 계산하는 순차 치환이라 합이 총차이와 정확히 같고, 맨 위 "검산: 요인 합 − 총차이 = 0원" 이 매번 표시됩니다. 요인의 크기는 순서의 영향을 받으므로 해석은 점검 필요 수준입니다.

변동 사유 입력
변동 사유 입력 — 차이가 큰 행에 사유 구분과 내용을 적는 대화상자입니다.

사유의 키는 축 배치가 아니라 조회 범위와 행 경로입니다. 그래서 축을 바꾸거나 행을 다시 펼쳐도 같은 행이면 사유가 따라옵니다.

사유 저장 후
사유 저장 후 — 저장한 행에 "사유 있음" 표시가 붙고 CSV 와 AI 분석 근거에 함께 실립니다.

사유는 서비스의 사유 엔티티셋에 쌓이므로 화면을 닫아도 남습니다. 다음 달에 같은 범위를 열면 지난달 사유가 보입니다.

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

AI 분석은 지금 보고 있는 범위를 읽어 줍니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 넘기고, 모델은 그 숫자를 읽어 설명만 합니다. 모델을 끄면 같은 숫자의 규칙 기반 해설이 나옵니다.

AI 분석 해설
AI 분석 해설 — 현재 범위의 요약 · 점검 대상 · 근거를 문장으로 보여 줍니다.

해설 문장마다 어느 행(경로)과 어느 금액에서 나왔는지 근거가 따라붙습니다. 기본은 규칙 기반이며 모델 연결은 서비스 설정에서만 켭니다.

AI 근거 표
AI 근거 표 — 해설의 근거가 되는 행 · 금액을 표로 나열합니다.

해설에 적힌 숫자를 이 표에서 그대로 확인할 수 있습니다. 표와 차트를 담은 파워포인트 보고서(표지 · 요약 · 핵심 발견 · 차트 · 표 · 근거)도 이 화면에서 내려받습니다.

AI 에이전트 — 규칙이 곧 받을 사람

감시 규칙 다섯 개가 임계값과 받을 역할을 함께 들고 있습니다. 규칙에 걸리면 대기함에 역할별 보고가 올라가고, 하루에 한 번만 도는 제한과 활동 기록이 서버에 남습니다.

AI 에이전트 — 규칙
AI 에이전트 — 규칙 — 부대비용률 상한 · 환율 영향 · 운임 예정 초과 · 관세 예정 초과 · 단가 예정 상승 다섯 규칙과 임계값입니다.

규칙마다 대상 역할(CFO · 자금 · 물류 · 구매)과 임계값, 사용 스위치가 있고 화면에서 고쳐 저장합니다. 화면을 열어 둔 동안 한 시간마다 실행하는 스위치가 맨 위에 있습니다(기본 꺼짐).

AI 에이전트 — 대기함
AI 에이전트 — 대기함 — 규칙에 걸린 항목이 역할별 보고로 쌓인 대기함입니다.

각 보고는 제목 · 받을 역할 · 근거 금액을 갖고, 받은 사람이 사유를 확인합니다. 보고는 판단이 아니라 점검 요청입니다.

에이전트 첫 실행
에이전트 첫 실행 — 지금 실행을 눌러 처음 돌린 결과입니다.

실행하면 대기함에 새 보고가 올라가고 활동 기록에 실행 행이 남습니다. 판정과 기록은 화면이 아니라 서비스에 있어, 사람이 자리에 없을 때는 배치가 같은 호출을 할 수 있습니다.

하루 한 번 제한
하루 한 번 제한 — 같은 날 다시 실행하면 제한 안내가 뜨고 새 보고를 만들지 않습니다.

하루 한 번 제한도 서버 기록이 판정합니다. 화면에서 여러 번 눌러도 같은 날 같은 보고가 쌓이지 않습니다.

활동 기록
활동 기록 — 누가 언제 무엇을 실행했는지 남은 기록입니다.

호출한 주체(사용자 · 배치)와 시각, 결과 상태가 한 줄씩 쌓입니다. 감사에서 자동 점검이 실제로 돌았는지 보여 줄 때 씁니다.

레이아웃 저장과 복원 — 자주 쓰는 구성을 이름으로

짜 둔 축과 표시 항목을 이름을 붙여 저장하고, 기본 레이아웃과 자동 조회로 지정할 수 있습니다.

레이아웃 저장
레이아웃 저장 — 현재 축 · 표시 · 비교 설정을 이름 붙여 저장하는 대화상자입니다.

기본 레이아웃으로 지정하면 열 때 그 배치로 시작하고, 자동 조회를 켜면 열자마자 조회된 상태입니다. 저장 값은 서비스의 레이아웃 엔티티셋에 남습니다.

새로 고친 뒤 복원
새로 고친 뒤 복원 — 브라우저를 새로 고쳐도 저장한 배치가 그대로 복원됩니다.

부서마다 자주 보는 축이 다르므로 레이아웃을 여러 개 두고 골라 씁니다. 복원 확인은 새로 고침 뒤 같은 배치가 나오는지로 봤습니다.

좁은 화면과 한계 — 휴대폰에서도 같은 리포트

창이 좁으면 차트를 감추지 않고 표 아래로 내려 같은 리포트를 봅니다. 한계는 한계대로 화면에 알려 줍니다.

390px 좁은 화면
390px 좁은 화면 — 폭 390px 에서 조회조건과 요약이 한 줄 흐름으로 쌓입니다.

가로 스크롤 없이 조회조건 · 요약 · 표가 위에서 아래로 놓입니다. 표가 폭을 넘으면 표 영역 안에서 가로로 움직입니다.

좁은 화면 결과
좁은 화면 결과 — 좁은 화면의 조회 결과입니다.

차트는 표 아래로 내려오고, 버튼은 손가락으로 누르기 쉬운 크기로 유지됩니다. 상세 대화상자도 화면 폭에 맞춰 열립니다.

축 상한 안내
축 상한 안내 — 축 단계 상한을 넘겨 놓으려 할 때 뜨는 안내입니다.

행은 3단계, 열은 2단계까지입니다. 넘기려 하면 토스트로 한도를 알려 주고 배치는 바뀌지 않습니다. 열 축 한도 경고 문구는 운영 환경에서 확인 필요로 남겨 둡니다.

화면 뒤에서 일어나는 일

화면이 서비스를 부르는 때를 단계로 풀면 아래와 같습니다. 조회는 큐브를 한 번 읽는 것이 전부이고, 축을 바꿔도 서버를 다시 부르지 않습니다.

단계무슨 일이 일어나나결과
조회큐브 · 예정 엔티티셋을 범위(회사 · 기간)로 한 번 읽음요청 한두 번으로 축 전환이 모두 처리됨
다시 묶기브라우저가 축 배치대로 합산서버 호출 0 — 합계는 모든 축에서 같음
드릴스루품목 라인 엔티티셋을 칸의 조건으로 필터칸 값과 라인 합 비교
요인분해 · 해설 · 에이전트서비스의 함수 호출숫자는 서비스가 계산, 화면은 표시
사유 · 레이아웃쓰기 엔티티셋 저장화면을 닫아도 남음

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

판정 조건결과 상태사용자 조치
실적−예정 차이의 절대 금액과 비율이 모두 임계 이상(착지원가가 늘어난 방향)붉게 표시 — 점검 필요행의 사유 쓰기, 요인 워터폴로 원인 요인 확인
금액과 비율 중 하나만 임계 이상색 없음(정보)필요하면 임계를 조정
착지원가가 줄어든 방향으로 임계를 넘음초록 표시 — 확인 필요단가 · 환율 반영 여부 확인
요인 합 − 총차이 ≠ 0검산 행에 차이 금액 표시 — 확인 필요범위 · 예정 연결 확인(샘플에서는 0)
예정에 없던 입고 라인미계획 입고 요인으로 전액 분리구매오더 연결 확인
큐브 칸 값 ≠ B/L 라인 합드릴스루 머리에 불일치 표시 — 확인 필요범위 · 단위 확인
에이전트 규칙 임계 초과(규칙 5개)대기함에 역할별 보고받을 역할이 사유 확인

요인분해 처리 단계와 대사식

  1. 예정 조건(외화 단가 · 환율 · 요율 · 수량)에서 시작해 한 가지씩 실적 조건으로 바꿔 가며 같은 식으로 착지원가를 다시 계산합니다.
  2. 바꿀 때마다 늘어난 착지원가가 그 요인의 몫입니다. 순서는 물량 → 외화 단가 → 환율 → 운임 → 관세율 → 보험·통관·하역 → 미계획 입고입니다.
  3. 착지원가 = 물품 대가 + 운임 + 관세 + 보험·통관·하역, 부대비용률 = 부대비용 합계 ÷ 물품 대가 × 100.
  4. 대사식: 큐브 칸 합 = 같은 조건의 B/L 품목 라인 합, 일곱 요인의 합 = 총차이(검산 행).

요인의 크기는 치환 순서의 영향을 받으므로, 해석은 점검 필요 수준으로 읽고 순서가 달라지면 크기가 달라질 수 있음을 알고 보아야 합니다.

조회조건

조건필수기본값조회 방식
회사코드필수샘플 1000Bukrs eq 1000
시작·종료 기간필수2026.04 ~ 2026.09입고월 ge · le
차원 값(공급사 · 원산지 · 플랜트 · 운송수단 · 입항지 · 통화 · 인코텀즈 · 자재그룹 · 자재)선택전체차원 안 or · 차원 간 and
금액 단위선택백만원화면 표시 단위(조회에 영향 없음)
비교선택실적만실적만 · 예정 대비 · 요인 워터폴

결과 컬럼

컬럼의미 · 산출식비고
물품 대가(원화)외화 단가 × 수량 × 환율큐브 합
운임 · 관세 · 보험·통관·하역비용 전표에서 이어받은 값큐브 합
착지원가물품 대가 + 운임 + 관세 + 보험·통관·하역측정값
예정 · 차이 · 증감률실적 − 예정, 차이 ÷ 예정비교가 예정일 때
부대비용률(운임+관세+보험·통관·하역) ÷ 물품 대가 × 100계산항목
톤당 착지원가착지원가 ÷ 입고 수량(톤)수량 0 이면 표시 안 함

좁은 화면에서 달라지는 것

폭이 600px 보다 좁으면 조회조건 · 요약 · 표가 위에서 아래로 쌓이고, 차트는 표 아래로 내려옵니다. 큰 피벗은 표 영역 안에서만 가로로 움직이며 페이지 전체에는 가로 스크롤이 생기지 않습니다. 대화상자도 화면 폭에 맞춰 열립니다.

파일 구성

index.html · Component.js · manifest.json
controller/   화면 제어 (Main · 공통 BaseController)
view/         Main 뷰 · 조각 뷰(AI 분석 · 에이전트 · 드릴스루 · 레이아웃 · 사유)
model/        큐브 재집계 · 차트 · 레이아웃 · 서식 · 보고서(pptx) 생성 · 오류 처리
css/ · i18n/  스타일 · 문구
odata/        서비스 정의 · 구현 · 샘플 데이터 (모델 구성 수준으로만 소개)

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

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 표준 데이터 구조를 그대로 이어받아 같은 테이블 · 같은 필드를 읽습니다.

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

하고 싶은 일표준 화면으로이 앱이 더하는 관점
착지원가가 얼마인가구매오더 · 입고 · 송장 · 비용 전표를 각각 조회 · 대조하면 가능B/L 품목 라인 단위로 물품 · 운임 · 관세 · 부대비용을 한 큐브에서 봄
왜 예정보다 올랐나표준 화면에는 요인으로 가르는 기능이 없고 보통 엑셀로 만듦일곱 요인으로 분해하고 합계를 검산
이 숫자의 원천 라인표준 T-code 를 열어 조건을 다시 입력칸을 눌러 그 칸의 B/L 라인을 바로 엶
원가 확정 · 전기표준 실행(입고 · 송장 · 비용 전기)이 담당하지 않음 — 조회 · 점검 전용
법정 · 공시 · 세무 신고회사와 감사인, 세무 대리인 · 관세사의 몫하지 않음 — 확인 필요 신호까지만

T-code 별 연계 지점

T-code이름연계
ME23N구매오더 조회예정 조건(외화 단가 · 수량 · 인코텀즈)의 출처. 이 앱의 품목 라인 값과 같은 필드를 읽어 와, 라인의 구매오더를 표준에서 바로 확인합니다.
MIGO입고 처리입고 수량 · 입고일 확인. 이 앱의 입고월 기준 라인과 같은 문서에서 나옵니다.
MB51자재 문서 목록입고 문서 라인과 이 앱의 라인 수 · 수량을 대조하는 지점.
MIRO송장 검증송장 단가 · 환율이 예정과 다른 라인을 확인. 송장 기준 외화 단가가 큐브 값과 같은지 견주는 대사 지점.
MIR4송장 문서 조회송장 문서 확인 — 이 앱에서 의심한 공급사 라인을 송장 문서로 되짚을 때.
FB03전표 조회운임 · 관세 · 통관 비용 전표 확인. 이 앱의 운임 · 관세 값과 전표 금액을 맞춰 보는 지점.

오가는 방법 — 이 앱에서 의심스러운 칸을 눌러 B/L 라인을 열고, 라인의 구매오더 · 입고 문서 · 송장 · 비용 전표를 위 표준 T-code 로 원천 확인합니다. 반대로 표준 화면에서 본 금액은 이 앱에서 같은 공급사 · 입고월 칸을 열어 다시 봅니다. 표준에 남겨 둘 일 — 원가 확정 · 전기 · 법정 · 공시 · 세무 신고 대응은 표준에 남기고, 운영 전환 때 기존 표준 리포트를 없앨 필요는 없습니다. 둘을 나란히 두고 대사하며 쓰는 것이 기본입니다.

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

S/4HANA 의 표준 분석 쿼리와 Fiori 분석 앱, Analysis for Office 는 표준 데이터 모델 위에서 재고 · 구매 · 자금 관점을 폭넓게 다루는 도구입니다. 이 화면은 그것들을 대체하는 것이 아니라, 수입 착지원가라는 한 주제에서 차원을 자유롭게 바꾸고 예정과의 차이를 요인으로 가르는 자리를 더합니다. 운영 환경의 표준 CDS 분석 쿼리나 Fiori 앱 중 쓸 수 있는 것이 있는지는 확인 필요이며, 확인하지 못한 앱 이름은 적지 않았습니다.

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

자리무엇을 정하나손대는 곳
부대비용 조건 유형운임 · 관세 · 보험 · 통관 · 하역이 구매오더 조건 유형과 비용 전표 어디에 쌓이는지매핑 테이블에 적고 큐브가 합산
배부 기준부대비용을 품목에 나누는 기준(수량 · 금액 · 중량)회사 기준에 맞춤 — 확인 필요
예정 원천예정 단가 · 환율 · 요율을 어떤 구매 조건 · 버전에서 읽는지예정 큐브 정의
확장 필드회사 고유의 분석 차원(프로젝트 · 용도 등)CDS 확장 · 필드 추가(커스텀 필드 · BAdI 는 확인 필요)
권한회사코드 · 플랜트 · 구매조직 기준 보기 제한접근 제어(DCL)와 PFCG 역할

분석 지표 정의

지표산식 · 판정 기준대응 기능원천 데이터비고
착지원가물품 대가 + 운임 + 관세 + 보험·통관·하역큐브 · 피벗B/L 품목 라인원화 환산 후 합산
부대비용률(운임+관세+보험·통관·하역) ÷ 물품 대가 × 100계산항목 · 에이전트 규칙B/L 품목 라인환급 가능 세액 제외 — 확인 필요
예정 대비 차이실적 착지원가 − 예정 착지원가차이 모드구매오더 조건 기반 예정금액 · 비율 임계 동시 초과
요인 분해일곱 요인 순차 치환워터폴 · 검산 행B/L 품목 라인 + 예정 조건요인 합 = 총차이
톤당 착지원가착지원가 ÷ 입고 수량(톤)계산항목입고 수량수량 0 이면 표시 안 함

CDS 구성 — 코드와 운영에서 할 일

아래 CDS 는 실제로 만들 구조를 보이는 설계 코드입니다. 표준 뷰 이름은 환경마다 달라 원천 테이블 기준으로 적었고, 실제 필드 연결과 표준 CDS 뷰 사용 여부는 확인 필요입니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZIMP_COSTMAP (조건 유형 → 비용 구분 매핑 테이블)구매 조건 유형 · 비용 전표 계정을 운임 · 관세 · 기타로 분류분류가 회사마다 달라 코드가 아니라 데이터로 둠
차원ZI_ImpSupplier · ZI_ImpMaterial 등공급사 · 자재 · 플랜트 이름 · 계층이름 변경이 큐브에 번지지 않게 분리
문서 흐름ZI_ImportLandedItem구매오더 · 입고 · 송장 · 비용 전표를 B/L 품목 라인 단위로 한 줄에 모음드릴스루의 원천이자 모든 집계의 바닥
큐브ZI_ImportLandedCube · ZI_ImportPlanCube차원 조합별 실적 · 예정 집계분석 쿼리가 얹히는 층 — 집계 위치를 한곳에 고정
쿼리ZC_ImportLandedCostQuery필터 · 표시 항목 · 계산항목 선언화면이 읽는 소비 층
권한ZC_ImportLandedCostQuery (DCL)회사코드 · 플랜트 기준 접근 제한집계 단계에 걸어야 합계로 새지 않음
서비스ZUI_ImportLandedCost (정의 · 바인딩)OData V2 로 게시화면이 부르는 단 하나의 입구

① 비용 구분 매핑 테이블 — 무엇이 운임이고 무엇이 관세인가

부대비용을 어느 조건 유형 · 계정이 어느 비용 구분인지 데이터로 두는 곳입니다. 여기서 착지원가의 구성이 결정되고, 운영에서 가장 먼저 합의해야 하는 표입니다.

" ───────────────────────────────────────────────────────────────
" ZIMP_COSTMAP — 수입 부대비용 구분 매핑 (DDIC 투명 테이블)
" 역할  : 구매 조건 유형 · 비용 전표 계정 → 비용 구분(운임/관세/기타)
" 왜    : 분류는 회사마다 다르고 자주 바뀌므로 코드에 박지 않는다
" ───────────────────────────────────────────────────────────────
@EndUserText.label : '수입 부대비용 구분 매핑'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zimp_costmap {
  key client    : abap.clnt not null;
  key cost_src  : abap.char(1) not null;   " C=구매 조건 유형, A=비용 전표 계정
  key cost_key  : abap.char(10) not null;  " 조건 유형 또는 계정 번호
  cost_class    : abap.char(3) not null;   " FRT 운임 · DTY 관세 · OTH 보험/통관/하역
  alloc_basis   : abap.char(1);            " 배부 기준 Q 수량 · V 금액 · W 중량 (확인 필요)
  valid_from    : abap.dats;
}

② B/L 품목 라인 뷰 — 모든 집계의 바닥

구매오더 품목 · 입고 문서 · 송장 · 비용 전표를 B/L 품목 한 줄로 모읍니다. 드릴스루가 읽는 곳이며 큐브는 이 뷰만 바라봅니다. 표준 뷰 이름은 환경마다 달라 원천 테이블 기준으로 적었고, 실제 연결 필드는 확인 필요입니다.

" ───────────────────────────────────────────────────────────────
" ZI_ImportLandedItem — B/L 품목 한 줄 (문서 흐름 뷰)
" 역할  : EKPO · MSEG · 비용 전표 → 품목 단위 착지원가 구성
" 왜    : 큐브 · 드릴스루가 같은 바닥을 보게 해 합계를 일치시킨다
" ───────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '수입 B/L 품목 라인'
define view entity ZI_ImportLandedItem
  as select from ekpo as po
    inner join   mseg as gr on  gr.ebeln = po.ebeln
                            and gr.ebelp = po.ebelp
                            and gr.bwart = '101'
{
  key po.ebeln                      as PurchaseOrder,
  key po.ebelp                      as PurchaseOrderItem,
  key gr.mblnr                      as MaterialDocument,
  po.werks                          as Plant,
  po.matnr                          as Material,
  po.matkl                          as MaterialGroup,
      @Semantics.quantity.unitOfMeasure : 'BaseUnit'
  gr.menge                          as Quantity,
  gr.meins                          as BaseUnit,
      @Semantics.amount.currencyCode : 'DocCurrency'
  cast( gr.dmbtr as abap.curr(23,2) ) as GoodsAmountLocal,
  gr.waers                          as DocCurrency
  // 운임·관세·부대비용은 ZIMP_COSTMAP 으로 분류한 비용 전표를 association 으로 붙임(생략)
}

③ 큐브 뷰 — 집계가 일어나는 단 한 곳

차원 조합별 물품 대가 · 운임 · 관세 · 기타를 합산합니다. 환산(통화)과 합산 위치를 여기에 고정해야 분석 쿼리가 몇 개가 되어도 합계가 같습니다.

" ───────────────────────────────────────────────────────────────
" ZI_ImportLandedCube — 차원 조합별 착지원가 집계
" 역할  : 품목 라인을 공급사 · 월 · 통화 · 자재 단위로 합산
" 왜    : 집계 위치를 하나로 고정해 합계 불일치를 막는다
" ───────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.dataCategory : #CUBE
@ObjectModel.usageType : { serviceQuality : #D, sizeCategory : #XL, dataClass : #TRANSACTIONAL }
@EndUserText.label : '수입 착지원가 큐브'
define view entity ZI_ImportLandedCube
  as select from ZI_ImportLandedItem as it
{
  key it.Plant,
  key it.Material,
  key it.PostingMonth,
  key it.DocCurrency,
      @Semantics.amount.currencyCode : 'DocCurrency'
      @DefaultAggregation : #SUM
      sum( it.GoodsAmountLocal )                         as GoodsAmount,
      @DefaultAggregation : #SUM
      sum( case it.CostClass when 'FRT' then it.CostAmount else 0 end ) as FreightAmount,
      @DefaultAggregation : #SUM
      sum( case it.CostClass when 'DTY' then it.CostAmount else 0 end ) as DutyAmount,
      @DefaultAggregation : #SUM
      sum( case it.CostClass when 'OTH' then it.CostAmount else 0 end ) as OtherAmount,
      @DefaultAggregation : #SUM
      sum( it.Quantity )                                 as Quantity
}
group by it.Plant, it.Material, it.PostingMonth, it.DocCurrency

④ 예정 큐브 — 같은 차원의 비교 기준

실적 큐브와 같은 차원 키로 예정 값을 만듭니다. 키가 같아야 칸마다 차이가 계산됩니다. 예정이 없는 라인은 미계획 입고 요인으로 따로 분리하는 근거가 됩니다.

" ───────────────────────────────────────────────────────────────
" ZI_ImportPlanCube — 예정 착지원가 (구매오더 조건 기준)
" 역할  : 구매오더 예정 조건으로 계산한 예정 착지원가를 같은 키로 집계
" 왜    : 실적 큐브와 키가 같아야 칸 단위 차이가 나온다
" ───────────────────────────────────────────────────────────────
@Analytics.dataCategory : #CUBE
@EndUserText.label : '수입 예정 착지원가 큐브'
define view entity ZI_ImportPlanCube
  as select from ZI_ImportPlanItem as pl
{
  key pl.Plant,
  key pl.Material,
  key pl.PostingMonth,
  key pl.DocCurrency,
      @DefaultAggregation : #SUM
      sum( pl.PlanGoodsAmount )  as PlanGoodsAmount,
      @DefaultAggregation : #SUM
      sum( pl.PlanFreight )      as PlanFreight,
      @DefaultAggregation : #SUM
      sum( pl.PlanDuty )         as PlanDuty
}
group by pl.Plant, pl.Material, pl.PostingMonth, pl.DocCurrency

⑤ 분석 쿼리 — 화면이 읽는 소비 층

필터와 표시 항목, 계산항목(부대비용률)을 선언합니다. 화면의 조회조건과 이 쿼리의 필터가 짝을 이룹니다.

" ───────────────────────────────────────────────────────────────
" ZC_ImportLandedCostQuery — 분석 쿼리(소비 층)
" 역할  : 큐브 위에 필터 · 표시 항목 · 계산항목을 선언
" 왜    : 화면 조건이 바뀌어도 큐브는 건드리지 않는다
" ───────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@Analytics.query : true
@EndUserText.label : '수입 착지원가 다차원 분석'
define view entity ZC_ImportLandedCostQuery
  as select from ZI_ImportLandedCube
{
  @AnalyticsDetails.query.axis : #ROWS
  @Consumption.filter : { selectionType : #RANGE, mandatory : true }
  key Plant,
  @AnalyticsDetails.query.axis : #ROWS
  key Material,
  @AnalyticsDetails.query.axis : #COLUMNS
  @Consumption.filter.selectionType : #INTERVAL
  key PostingMonth,
  @Consumption.filter.hidden : true
  key DocCurrency,
  @AnalyticsDetails.query.axis : #COLUMNS
  GoodsAmount,
  FreightAmount,
  DutyAmount,
  OtherAmount,
  @AnalyticsDetails.query.formula : '(FreightAmount + DutyAmount + OtherAmount) / GoodsAmount * 100'
  @EndUserText.label : '부대비용률(%)'
  cast( 0 as abap.dec(9,2) ) as AdditionalCostRate
}

⑥ 접근 제어 — 합계로 새지 않게 집계 단계에서

회사코드 · 플랜트 권한은 드릴스루에만 걸면 안 됩니다. 합계에서 자기 몫을 빼면 남의 숫자가 드러나기 때문입니다. 집계 뷰에서 같은 조건으로 막습니다.

" ───────────────────────────────────────────────────────────────
" ZC_ImportLandedCostQuery — 접근 제어(DCL)
" 역할  : 플랜트 권한 객체(M_BEST_WRK 계열)로 조회 제한 (객체명 확인 필요)
" 왜    : 드릴스루만 막으면 합계 − 자기 몫 으로 남의 숫자가 보인다
" ───────────────────────────────────────────────────────────────
@EndUserText.label : '수입 착지원가 접근 제어'
@MappingRole : true
define role ZC_ImportLandedCostQuery {
  grant select on ZC_ImportLandedCostQuery
    where ( Plant ) = aspect pfcg_auth( M_BEST_WRK, WERKS, ACTVT = '03' );
}

⑦ 서비스 정의와 바인딩 — 화면이 부르는 입구

쿼리를 OData V2 서비스로 노출합니다. 운영에서는 이 서비스를 활성화(/IWFND/MAINT_SERVICE)하고, 화면 매니페스트의 서비스 주소를 이 서비스로 바꿉니다.

" ───────────────────────────────────────────────────────────────
" ZUI_ImportLandedCost — Service Definition / Binding
" 역할  : 쿼리 · 큐브 · 품목 라인을 OData 로 노출
" 왜    : 화면은 서비스 주소만 알면 되고 CDS 구조는 몰라도 된다
" ───────────────────────────────────────────────────────────────
@EndUserText.label : '수입 착지원가 서비스'
define service ZUI_ImportLandedCost {
  expose ZC_ImportLandedCostQuery as LandedCostQuery;
  expose ZI_ImportLandedItem      as LandedItem;
  expose ZI_ImportPlanCube        as PlanCube;
}
" Service Binding: ZUI_ImportLandedCost_V2  (바인딩 유형 OData V2 - UI)
" 게시 후 서비스 활성화는 /IWFND/MAINT_SERVICE 에서 확인

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래 열한 가지는 코딩이 아니라 합의이고, 정하지 않으면 첫 회의에서 막히는 것들입니다.

해야 할 일무엇을 정하나정하지 않으면누가
부대비용 조건 유형 · 비용 계정 매핑어느 구매 조건 유형 · 계정이 운임 · 관세 · 기타인가착지원가 구성이 기존 보고서와 어긋나 첫 회의에서 막힘구매 · 회계
배부 기준부대비용을 품목에 수량 · 금액 · 중량 중 무엇으로 나누나품목별 원가가 사람마다 다르게 나옴원가회계
환율 유형 · 환산 시점입고일 · 송장일 중 어느 환율, 어느 유형을 쓰나환율 요인이 담당자마다 다르게 계산됨자금 · 회계
부호 규칙공제 · 환급 · 크레딧 라인을 어느 방향으로 두나합계는 맞는데 구성이 어긋남회계
예정 원천 확정예정 단가 · 환율 · 요율을 어느 구매 조건 · 버전에서 읽나"예정이 왜 이 숫자냐" 가 반복됨구매
차원 범위쓸 차원(공급사 · 원산지 · 플랜트 · 자재 등)과 추가 차원나중에 늘리려면 뷰를 고쳐 다시 이송현업 · 원가
권한 설계회사코드 · 플랜트 · 구매조직 기준 접근 범위합계 − 자기 몫으로 남의 숫자 노출보안 · 권한
성능 기준월 라인 수 · 응답 시간 목표 · 집계 위치조회가 느려 현업이 엑셀로 돌아감Basis · IT
대사 체계표준 T-code(ME23N · MIGO · MB51 · MIRO · FB03)와 맞출 항목과 주기숫자 신뢰 논쟁이 되풀이됨회계 · IT
전송(TR) 순서와 서비스 활성화테이블 → 뷰 → 쿼리 → DCL → 서비스 순서, /IWFND/MAINT_SERVICE 활성화, 매니페스트 서비스 주소 교체일부만 이송되어 화면이 빈 값으로 열림Basis
에이전트 배치 등록SM36 배치로 에이전트 호출 주기 등록사람이 열 때만 점검이 돔Basis · 담당 부서

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

예정 3조 4,773.09억원과 실적 3조 6,397.05억원의 차이 1,623.95억원을 가른 위 사례와 같은 데이터에서 대사식을 전수로 돌렸습니다.

대사식검사 건수차이
라인 착지원가 = 물품 + 운임 + 관세 + 보험·통관7,7600
큐브 칸 = B/L 라인 합(칸별)10,4100
통화별 물품 대가 합40
예정 큐브 칸 = 예정 라인 합6,9400
큐브 합계 검산 집합(측정값별)60
입고월 요약 착지원가60
요인 합 − 총차이(전체 범위)10

의도적 예외 — 예정이 없는 입고 라인 50개(착지원가 26,101,728,865원)는 미계획 입고 요인으로 따로 세웠고 위 차이 건수와 별개입니다. 모두 검증용 샘플 데이터 기준입니다.

운영 데이터로 갈 때

운영 데이터는 B/L 품목 라인이 수천만 건까지 갈 수 있습니다. 이때는 큐브 집계를 화면이 아니라 CDS(또는 HANA 쪽)에서 하고, 회사코드와 기간을 필수 파라미터로 고정해 읽는 범위를 좁히며, 조회 키 필드에 인덱스를 두고, 큐브를 한 번 읽어 재집계하는 현재 방식이 감당할 행 수(차원 조합 수만~수십만)를 응답 시간 기준으로 정합니다. 상한을 넘으면 기간을 나누어 읽거나 사전 집계 테이블을 두는 선택을 합니다. 구체 수치는 운영 환경에서 측정해 정해야 하며 현재는 확인 필요입니다.

자주 묻는 질문

궁금해하시는 질문을 주제별 네 묶음으로 나눠 적었습니다. 모든 숫자는 검증용 샘플 데이터 기준입니다.

숫자와 산식

착지원가는 어떻게 구성되나요?

착지원가 = 물품 대가(원화 환산) + 운임 + 관세 + 보험·통관·하역비입니다. 이 구성은 IAS 2 재고자산(K-IFRS 제1002호)의 취득원가가 매입가에 운임 · 관세 같은 취득 부대비용을 더하는 구조를 참고했습니다.

환급 가능한 수입 부가가치세는 취득원가에 넣지 않으므로 이 식에서 빠져 있습니다. 회사의 실제 처리 기준과 맞는지는 확인 필요이며, 이 화면은 최종 원가 확정을 하지 않습니다.

칸의 숫자를 어떻게 믿을 수 있나요?

칸을 누르면 그 칸을 만든 B/L 품목 라인이 열리고 칸의 값과 읽은 라인 합이 같은지 표시됩니다. 별도 검산 패널은 측정값마다 큐브 합과 라인 합을 견줍니다.

검증용 샘플 데이터 3,880라인과 큐브 10,410칸을 전수로 맞춰 본 결과 차이는 0 이었습니다(아래 "검증 결과" 표).

요인분해는 어떤 순서로 계산하나요?

예정 조건에서 실적 조건으로 한 가지씩 바꿔 가며 같은 식으로 다시 계산하는 순차 치환입니다. 순서는 물량 → 외화 단가 → 환율 → 운임 → 관세율 → 보험·통관·하역 → 미계획 입고입니다.

매 단계의 차이가 한 요인의 몫이므로 합이 총차이와 정확히 같습니다. 다만 요인의 크기는 순서에 영향을 받으므로 해석은 점검 필요 수준으로 읽습니다.

미계획 입고는 무엇인가요?

예정(구매오더 조건)이 없는 입고 라인입니다. 샘플에서는 50라인, 착지원가 26,101,728,865원입니다. 예정과 짝을 지을 수 없으므로 물량이나 단가 요인으로 억지로 나누지 않고 별도 요인으로 전액 분리합니다.

실제 환경에서는 구매오더 연결이 누락됐는지 확인하는 단서가 됩니다.

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

샘플은 USD · EUR · JPY · CNY 네 통화이며, 예정 환율은 가정값입니다. 큐브에는 원화 환산 값이 들어 있고 통화별 검산(통화별 물품 대가 합)이 있습니다.

운영에서는 환율 유형과 환산 시점(입고일 · 송장일)을 먼저 정해야 환율 요인이 담당자마다 달라지지 않습니다.

화면과 조작

조회 조건은 무엇이고 어떻게 조회하나요?

회사코드(필수)와 기간(입고월)이 조회조건이고, 차원 값은 선택입니다. 조회 버튼을 누르거나 입력칸에서 Enter 를 누릅니다.

큐브는 이때 한 번만 읽고, 이후 축 변경과 범위 좁히기는 브라우저에서 처리합니다.

축은 몇 개까지, 어떻게 바꾸나요?

열한 개 차원 중 행 축 3단계, 열 축 2단계까지 놓을 수 있습니다. 칩을 끌어다 놓거나 칩의 화살표 버튼으로 옮깁니다. 한도를 넘기면 안내가 뜨고 배치는 바뀌지 않습니다.

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

숫자 칸을 누르면 B/L 품목 라인 목록이 열립니다. B/L 번호 · 품목 · 선적일 · 입고일 · 외화 금액이 보이고, 머리에 칸의 값과 라인 합의 일치 여부가 표시됩니다. CSV 로 내려받을 수 있습니다.

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

서비스의 사유 엔티티셋에 저장됩니다. 키는 조회 범위와 행 경로라서 축 배치를 바꿔도 같은 행이면 따라옵니다. 저장한 사유는 CSV 와 AI 분석 근거에 함께 실립니다.

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

축 배치 · 표시 항목 · 비교 설정을 이름 붙여 저장합니다. 기본 레이아웃으로 지정하면 열 때 그 배치로 시작하고, 자동 조회를 켜면 열자마자 조회됩니다.

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

폭 600px 보다 좁으면 조회조건 · 요약 · 표가 위에서 아래로 쌓이고 차트는 표 아래로 내려옵니다. 가로 스크롤은 표 영역 안에서만 생깁니다. 390px 폭에서 확인했습니다.

분석 기능

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

아닙니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 넘기고, 해설은 그 숫자를 문장으로 옮길 뿐입니다. 기본은 규칙 기반이며 모델 연결은 서비스 설정에서만 켭니다(기본 꺼짐). 모델을 켜도 숫자의 출처는 같습니다.

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

감시 규칙 다섯 개(부대비용률 상한 · 환율 영향 · 운임 예정 초과 · 관세 예정 초과 · 단가 예정 상승)를 점검해 임계를 넘으면 담당 역할의 대기함에 보고를 올립니다. 판단이 아니라 점검 요청입니다.

하루 한 번만 도는 제한과 활동 기록은 서버가 관리합니다. 사람이 자리에 없을 때는 SM36 배치가 같은 호출을 하도록 등록할 수 있습니다.

규칙의 임계값은 바꿀 수 있나요?

화면의 에이전트 규칙 탭에서 규칙마다 임계값과 사용 여부를 고쳐 저장합니다. 임계값은 회사 기준에 맞게 정해야 하며 샘플 값은 예시입니다.

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

AI 분석 화면에서 지금 보는 범위의 표와 차트를 담은 파워포인트 파일이 브라우저에서 바로 만들어집니다. 외부 서버로 데이터를 보내지 않습니다.

도입과 운영

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

표준 실행은 SAP 표준 T-code(ME23N · MIGO · MB51 · MIRO · MIR4 · FB03 등)가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 의심한 칸의 B/L 라인을 표준 T-code 로 되짚어 원천을 확인하는 흐름입니다. 기존 표준 리포트를 없앨 필요는 없습니다.

도입하면 어떤 효과가 있나요?

마감 때 엑셀로 합치고 대조하던 시간이 줄고, 회의가 "어느 숫자가 맞나" 에서 "이 요인을 어떻게 할까" 로 옮겨 갑니다. 다만 이 글의 숫자는 검증용 샘플 데이터이며, 시간 절감 같은 효과 수치는 회사 환경에서 측정해야 하므로 약속하지 않습니다.

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

매핑 테이블 · 문서 흐름 뷰 · 큐브 · 예정 큐브 · 쿼리 · DCL · 서비스를 만들고(위 CDS 구성), 서비스를 활성화한 뒤 화면 매니페스트의 서비스 주소를 바꿉니다. 개발보다 정해야 할 것(비용 구분 · 배부 기준 · 환율 유형 · 권한)이 많습니다. 소요 기간은 환경마다 달라 확인 필요입니다.

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

회사코드 · 플랜트 · 구매조직 표준 권한을 집계 뷰의 접근 제어(DCL)에 겁니다. 드릴스루에만 걸면 합계에서 자기 몫을 뺄셈해 남의 숫자를 알 수 있으므로 집계 단계에서 막습니다. 화면은 표준 컨트롤과 직접 그린 차트만 써서 외부 라이브러리 반입이 없습니다.

수천만 건이면 느려지지 않나요?

현재 구조는 큐브를 한 번 읽어 브라우저에서 다시 묶으므로 차원 조합 수가 크면 한계가 있습니다. 운영에서는 집계를 CDS 에서 하고, 기간 · 회사코드를 필수로 고정하고, 인덱스와 사전 집계를 둡니다. 구체 기준은 운영 환경 측정 후 정합니다.

계정 체계나 매핑이 바뀌면 어떻게 하나요?

비용 구분 매핑 테이블 한 곳만 고치면 큐브가 새 분류로 합산합니다. 코드에 분류를 박지 않았기 때문입니다. 변경 이력과 적용 시점은 회사 기준에 맞게 정해야 합니다.

이 화면의 결과로 회계 · 세무 판단을 해도 되나요?

이 화면은 조회 · 점검 도구입니다. 원가 확정과 회계처리의 최종 판단은 회사와 감사인이, 관세 · 세무 신고는 회사와 세무 대리인 · 관세사가 확인합니다. 화면의 붉은 표시와 "확인 필요" 는 점검 신호이지 결론이 아닙니다.

샘플 데이터는 실제 거래인가요?

아닙니다. 모든 공급사 · B/L 번호 · 환율 · 요율은 가정값인 검증용 샘플 데이터입니다. 실제 거래처 이름과 번호는 쓰지 않았습니다.