SAP 재고 평가금액 점검 — 표준원가와 이동평균원가, 같은 재고에 왜 다른 값이 붙는지부터 본다
재고수량은 하나인데 평가금액은 계산 기준마다 달라집니다. 표준원가·이동평균원가 두 기준으로 나란히 계산해 차이가 큰 자재부터 가려냅니다
재고자산은 같은 수량이라도 어떤 단가로 계산하느냐에 따라 금액이 달라집니다. SAP 는 자재마다 표준원가(계획된 고정 단가)와 이동평균원가(입고 때마다 재계산되는 단가)를 함께 관리할 수 있는데, 두 값이 벌어질수록 재무제표와 원가 분석에 미치는 영향도 커집니다. 그래서 플랜트·자재별 재고수량에 두 단가를 각각 곱해 평가금액을 산출하고, 나란히 대사하는 화면을 OpenUI5로 구현했습니다.
평가차이율(표준평가액과 이동평균평가액의 차이를 이동평균평가액으로 나눈 값)의 절대값이 8% 이상이면 확인을 권고하고, 15% 이상이면 확인이 필요한 자재로 자동 판정합니다. 표준 재고·평가 조회 기능이 담당하는 수량·단가 조회 위에, 두 평가기준의 차이를 계산·정렬해 보여주는 점검 관점을 더한 셈입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 수량·금액 비교 — 기간별 재고 수량·금액 비교(
MB5B)의 재고수량·평가금액 조회 구조를 그대로 이어받습니다 - 재고 현황 — 재고 현황 조회(
MMBE)의 플랜트·자재별 재고수량 구조를 이어받습니다 - 마스터 조회 — 자재 마스터 조회(
MM03)의 표준가·이동평균가 회계뷰 필드를 그대로 활용합니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 구매(MM) · 재고 분석 |
| Namespace | zui5.stockvalue |
| 셸 구조 | 조회조건 영역(우측 조회) + 대사 요약 KPI 4종 + 탭 2개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | MB5B · MMBE · MM03 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 평가방법 적용 여부의 최종 판단은 회사가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 요약 KPI가 뜹니다 → 명세 탭에서 자재 단위로 확인하고 → 플랜트별 집계 탭에서 전체 경향을 본 뒤 → 행을 클릭해 상세 산출식을 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 전체 조건으로 자동 조회가 1회 실행되어 대사 요약(KPI)과 명세 목록이 함께 채워집니다.
- 조회조건 영역에서 플랜트·자재그룹·평가클래스를 선택합니다(선택하지 않으면 전체). 예외만 보기 스위치로 확인 필요 건만 남길 수 있습니다(모두 선택 입력).
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 조건 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 모든 조건을 전체로 되돌립니다.
- 상단 대사 요약(KPI) 4개 값(표준평가액 합계·이동평균평가액 합계·평가차이 합계·확인 필요 건수)은 조회조건과 무관하게 전사 총계로 표시됩니다.
- 탭을 옮겨 명세 → 플랜트별 집계 순으로 봅니다.
- 명세 탭에서 행을 클릭하면 해당 자재의 산출 근거가 다이얼로그로 열립니다.
- 명세 탭의 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
평가차이 판정 기준
| 판정 조건(평가차이율 = 평가차이금액 ÷ 이동평균평가액 × 100) | 결과 상태 | 사용자 조치 |
|---|---|---|
| |평가차이율| < 8% | 정상 | 조치 없음 |
| 8% ≤ |평가차이율| < 15% | 확인 권고 | 표준원가 갱신 주기·이동평균 변동 사유를 1차 확인 |
| |평가차이율| ≥ 15% | 확인 필요 | 구매단가·표준원가 재설정 여부, 입고단가 이상치 여부를 확인 |
위 구간·판정은 조회·점검을 돕기 위한 기준이며, 실제 평가방법 적용·원가 조정 여부는 화면이 단정하지 않고 담당자와 관련 부서의 검토를 거칩니다.
평가액 산출 순서
| 단계 | 내용 |
|---|---|
| 1단계 | 자재·플랜트별 재고수량(Labst)에 표준단가(Stprs)를 곱해 표준평가액을 산출 |
| 2단계 | 같은 재고수량에 이동평균단가(Verpr)를 곱해 이동평균평가액을 산출 |
| 3단계 | 표준평가액−이동평균평가액으로 평가차이금액을, 이를 이동평균평가액으로 나눠 평가차이율을 계산 |
| 4단계 | 평가차이율 구간에 따라 판정(정상 / 확인 권고 / 확인 필요)을 부여 |
| 5단계 | 플랜트별로 라인 항목의 표준평가액·이동평균평가액·평가차이금액을 합산해 집계(집계 합계 = 명세 합계) |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 플랜트 | 선택 | 전체면 조건 제외 |
| 자재그룹 | 선택 | 포장재 · 원자재 · 부자재 · 반제품 · 예비부품 — 전체면 조건 제외 |
| 평가클래스 | 선택 | MBEW 평가클래스 코드 기준 — 전체면 조건 제외 |
| 예외만 보기 | 선택(스위치) | 점검 상태가 확인 필요인 건만 표시 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 플랜트 · 자재번호 · 자재명 · 자재그룹 · 평가클래스 | 식별 정보 |
| 재고수량 | 플랜트 재고수량(기본단위 포함) |
| 표준단가 · 표준평가액 | 표준원가 기준 단가 및 평가금액 |
| 이동평균단가 · 이동평균평가액 | 이동평균원가 기준 단가 및 평가금액 |
| 평가차이금액 · 평가차이율(%) | 표준평가액−이동평균평가액 및 그 비율 |
| 최종전기일 · 상태 | 재고 마지막 전기 일자, 정상/확인 필요 |
| 플랜트별 집계 — 점검건수 · 평가액 합계 · 평가차이 합계 · 예외건수 | 플랜트 단위 요약 컬럼 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 평가방법 간 비교 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
MB5B | 기간별 재고 수량·금액 비교 | 재고수량·평가금액 조회 위에 표준원가·이동평균원가 두 기준의 차이 계산·정렬을 더합니다 |
MMBE | 재고 현황 조회 | 플랜트·자재별 재고수량 구조를 그대로 이어받습니다 |
MM03 | 자재 마스터 조회(회계뷰) | 표준가·이동평균가 마스터 필드를 평가액 산출에 활용합니다 |
분석 지표 정의표
| 대상 영역 | 지표 | 정의 | 원천 데이터 |
|---|---|---|---|
| 재고 분석 | 표준평가액 | 재고수량 × 표준단가 | 재고, 평가 마스터 |
| 재고 분석 | 이동평균평가액 | 재고수량 × 이동평균단가 | 재고, 평가 마스터 |
| 재고 분석 | 평가차이율 | (표준평가액−이동평균평가액) ÷ 이동평균평가액 × 100 | 산출값 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
MARA / MAKT | MATNR · MATKL · MAKTX | 자재 마스터 — 자재·자재그룹·자재명 |
T001W | WERKS | 플랜트 마스터 |
MARD | WERKS · LABST | 플랜트별 재고 — 재고수량 |
MBEW | BWKEY · BKLAS · STPRS · VERPR | 자재 평가 — 평가클래스·표준가·이동평균가 |
define view entity ZC_StockValueCheck
as select from mard as d
inner join mara as m on m.matnr = d.matnr
inner join makt as t on t.matnr = d.matnr and t.spras = 'K'
inner join mbew as w on w.matnr = d.matnr and w.bwkey = d.werks
{
key d.werks as Plant,
key d.matnr as Material,
t.maktx as MaterialText,
m.matkl as MatlGroup,
w.bklas as ValClass,
d.labst as StockQty,
w.stprs as StdPrice,
w.verpr as MovingAvgPrice
}
계정·마스터 구성은 가상 데이터 기준 스케치입니다. 평가금액·차이금액은 화면에서 계산하는 파생값입니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 요약 KPI · IconTabBar 2개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 전체를 고른 조건은 필터를 만들지 않습니다. 정렬은 Sorter, 총건수는 인라인 카운트로 받습니다 |
| 명세 | sap.ui.table.Table — 컬럼이 10개를 넘어 가상 스크롤 테이블을 사용, 행 클릭으로 상세 다이얼로그를 엽니다 |
| 플랜트별 집계 | sap.m.Table — 소량 집계 목록 |
| 예외 메시지 | 메타데이터 실패·요청 실패를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.stockvalue · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 요약 KPI · 2개 탭 |
view/DetailDialog.fragment.xml | 평가 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(자재 78건, 플랜트 3개)를 기준으로 대사식을 전수 검증했습니다. 판정 동작을 확인하기 위해 이동평균단가가 표준단가 대비 크게 벌어지도록 설계한 예외 사례 5건을 의도적으로 포함했습니다.
| 검증 항목 | 결과 |
|---|---|
| 라인 대사 — 수량×표준단가=표준평가액, 수량×이동평균단가=이동평균평가액 (78건 전수) | 통과(차이 0) |
| 플랜트별 집계 합계 = 명세 라인 합계 (3개 플랜트) | 통과(차이 0) |
| 의도적 예외(확인 필요) 건수 | 5건 |
| 조회 조건 전달 — 플랜트·자재그룹·평가클래스 필터 · 평가차이율 내림차순 정렬 · 총건수 표시 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
표준원가와 이동평균원가 중 어느 쪽이 맞는 값인가요?
둘 다 SAP 표준 평가방법입니다. 표준원가는 계획된 고정 단가, 이동평균원가는 입고 시점마다 재계산되는 단가로, 서로 다른 목적을 가진 값입니다. 이 화면은 둘 중 하나가 틀렸다고 판정하지 않고, 차이가 큰 자재를 확인하도록 가려낼 뿐입니다.
평가차이가 크게 나오면 그 자체로 문제가 있다는 뜻인가요?
아닙니다. 표준원가 갱신 주기나 구매단가 변동만으로도 차이가 발생할 수 있습니다. 이 화면은 점검을 돕는 조회 도구이며, 최종 판단은 회사와 감사인이 재고 평가방법과 원가계산 기준을 함께 검토해 결정합니다.
표준평가액과 이동평균평가액은 각각 어떻게 계산되나요?
재고수량에 표준단가를 곱하면 표준평가액, 이동평균단가를 곱하면 이동평균평가액입니다. 두 값의 차이가 평가차이금액이고, 이를 이동평균평가액으로 나눈 값이 평가차이율입니다.
CSV로 내려받은 파일은 어떤 조건 기준인가요?
명세 탭에 현재 조회되어 있는 조건과 결과 그대로 CSV(UTF-8 BOM)로 저장됩니다. 조건을 바꿔 다시 조회한 뒤 내려받으면 그 시점의 결과가 반영됩니다.