SAP 재고 회전율 점검 — 자재그룹 평균보다 느리게 도는 재고부터 가른다
평균 재고금액과 출고금액만으로 회전율을 다시 계산해, 자재그룹 안에서 유독 느리게 도는 자재를 먼저 골라냅니다
재고 회전율은 "출고금액 ÷ 평균재고금액"이라는 단순한 식이지만, 자재 수백 종을 늘어놓고 눈으로 훑어 느린 재고를 골라내기는 쉽지 않습니다. 특히 소모성자재처럼 종류는 많고 건당 금액은 작은 자재군은 평균과 비교하지 않으면 무엇이 상대적으로 느린지 가늠하기 어렵습니다.
자재별로 기초·입고·출고·기말 수량과 금액을 재구성해 회전율과 재고일수(DIO)를 산출하고, 같은 자재그룹·같은 기간의 평균 회전율과 비교해 뚜렷하게 느린 자재를 자동으로 표시하는 화면을 OpenUI5로 구현했습니다. 표준 재고 조회가 수량·금액 현황을 보여준다면, 이 화면은 그 위에 자재그룹 내 상대 비교라는 점검 관점을 더합니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 재고 수량·금액 조회 — 기간별 재고 수량·금액(
MB5B)의 기초·입고·출고·기말 구조를 그대로 이어받습니다 - 플랜트별 재고 현황 — 재고 현황 조회(
MMBE)의 플랜트·자재그룹 축을 조회조건으로 씁니다 - 재고 회전·범위 분석 — 재고관리 정보시스템(
MC.9)의 회전율 분석 개념을 자재그룹 상대 비교로 확장합니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 구매·재고(MM) · 재고 분석 |
| 관련 기준서 | — (재고 관리 상시 점검 도구) |
| Namespace | zui5.stockturn |
| 셸 구조 | 조회조건 영역(우측 조회) + 회전율·저회전 후보 요약 KPI + 탭 2개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | MB5B · MMBE · MC.9 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋을 조회해 바인딩 |
| 성격 | 조회·대사·점검형 — 실제 재고 정책 판단은 회사가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 회전율·저회전 후보 요약과 자재별 명세가 뜹니다 → 자재그룹 요약 탭에서 그룹별 합계를 확인하고 → 행을 클릭해 증감 상세와 검증식을 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 플랜트·자재그룹(선택)과 회계연도·시작기간·종료기간(필수)을 입력합니다. 선택 조건을 비워 두면 전체가 조회 대상입니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 화면을 열면 기본 조건으로 한 번 자동 조회됩니다.
- 요약(KPI)에서 조회 건수·저회전 후보 건수·평균 회전율을 먼저 확인합니다.
- 탭을 옮겨 자재별 회전율 명세와 자재그룹 요약을 함께 봅니다.
- 명세에서 행을 클릭하면 증감 상세와 검증식이 다이얼로그로 열립니다.
- "CSV 다운로드"(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
저회전 후보 판정 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 자재의 회전율이 같은 자재그룹·같은 기간 평균 회전율의 60% 미만 | 확인 필요 | 과잉재고·저속이동 여부를 담당자가 함께 점검 |
| 그 밖의 경우(그룹 평균의 60% 이상) | 정상 | 조치 없음 |
기준값(60%)은 자재그룹 내 상대 비교를 위한 조회 로직이며, 회사 정책에 맞게 바꿔 쓸 수 있습니다.
재고 증감·회전율 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 기말수량 = 기초수량 + 입고수량 − 출고수량 (금액도 같은 구조로 검증) |
| 2단계 | 평균재고금액 = (기초금액 + 기말금액) ÷ 2 |
| 3단계 | 회전율 = 출고금액 ÷ 평균재고금액 |
| 4단계 | 재고일수(DIO, 해당 기간 30일 기준 추정) = 30 ÷ 회전율 |
| 5단계 | 자재그룹 회전율 = 그룹 내 출고금액 합계 ÷ 그룹 내 평균재고금액 합계 |
| 6단계 | 자재 회전율을 그룹·기간 평균과 비교해 저회전 후보를 표시 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 플랜트 | 선택 | 전체면 조건 제외 |
| 자재그룹 | 선택 | 전체면 조건 제외 |
| 회계연도 | 필수 | 4자리 연도 |
| 시작기간 / 종료기간 | 필수 | 두 값이 모두 있으면 구간 조건으로 조회 |
| 저회전 후보만 보기 | 선택 | 판정이 "확인 필요"인 자재만 표시 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 플랜트 · 자재 · 자재그룹 · 기간 | 식별 정보 |
| 기초수량 · 입고수량 · 출고수량 · 기말수량 | 수량 증감 |
| 평균재고금액 · 출고금액 | 회전율 계산의 분모·분자 |
| 회전율 · 재고일수(DIO) | 출고금액÷평균재고금액, 30÷회전율 |
| 판정 | 정상 · 확인 필요 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 회전율 산출과 자재그룹 상대 비교라는 조회·점검 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
MB5B | 기간별 재고 수량·금액 조회 | 같은 증감 구조에 회전율·재고일수를 더해 산출합니다 |
MMBE | 플랜트별 재고 현황 조회 | 플랜트·자재그룹 필터의 기준 정보로 참고합니다 |
MC.9 | 재고관리 정보시스템(회전·범위 분석) | 회전율을 자재그룹·기간 평균과 상대 비교해 저회전 후보를 가려냅니다 |
분석 지표 정의표
| 지표 | 정의 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 재고 회전율 | 출고금액 ÷ 평균재고금액 | 자재별 회전율 명세 | 재고 이동·평가 데이터 | 기간(월) 단위 값 |
| 재고일수(DIO) | 30 ÷ 회전율 | 자재별 회전율 명세 | 회전율에서 파생 | 해당 기간 기준 추정치, 연환산 아님 |
| 저회전 후보 판정 | 자재그룹·기간 평균 대비 60% 미만 | 판정 컬럼 | 자재별 회전율 집계 | 확인 필요로 표시, 최종 판단은 담당자 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
MARA / MAKT | MATNR · MAKTX | 자재 마스터 — 자재번호·자재명 |
MARC | MATNR · WERKS · MATKL | 플랜트별 자재 데이터 — 자재그룹 |
MARD | WERKS · MATNR · LABST | 플랜트·저장위치별 재고 수량 |
MBEW | MATNR · BWKEY · VERPR | 자재 평가 — 이동평균가 |
MSEG / MKPF | MATNR · WERKS · MENGE · BWART | 자재 이동 전표 — 입고·출고 수량 |
define view entity ZI_StockTurnover
as select from mard
inner join mara on mara.matnr = mard.matnr
inner join marc on marc.matnr = mard.matnr and marc.werks = mard.werks
inner join mbew on mbew.matnr = mard.matnr and mbew.bwkey = mard.werks
{
key mard.werks as Plant,
key mard.matnr as Matnr,
marc.matkl as MatGroup,
mard.labst as ClosingQty,
mard.labst * mbew.verpr as ClosingValue
}
자재그룹 구분은 예시 체계이며, 실제 원천 필드·이동유형 매핑은 회사 환경에 맞춰 확인이 필요합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 회전율 요약 KPI · IconTabBar 2개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고, 화면은 조회 시 엔티티셋을 읽어 온 결과를 화면 전용 모델에 담아 바인딩합니다 |
| 조회조건 | sap.ui.model.Filter 로 조립합니다. 기간처럼 같은 프로퍼티에 두 조건(이상·이하)이 걸릴 때는 하나의 Filter 로 묶어 전달합니다. 전체를 고른 조건은 필터를 만들지 않습니다 |
| 명세 표 | sap.ui.table.Table — 컬럼이 많은 명세, 행 클릭(cellClick)으로 상세 다이얼로그 |
| 집계 표 | sap.m.Table — 자재그룹 요약 소량 집계 |
| 예외 메시지 | 메타데이터 실패·요청 실패·빈 결과를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.stockturn · 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 | 화면 문구 |
검증 결과
검증용 샘플 데이터(자재 26종 × 플랜트 2개 × 3개월, 168건)를 기준으로 대사식을 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 기초 + 입고 − 출고 = 기말 (수량·금액, 168건) | 통과(차이 0) |
| 평균재고금액 = (기초금액+기말금액)/2 (168건) | 통과(차이 0) |
| 회전율 = 출고금액 ÷ 평균재고금액 (168건) | 통과(차이 0) |
| 자재그룹 회전율 = 그룹 출고금액 합계 ÷ 그룹 평균재고 합계, 그룹 합계 = 자재별 합계 (15건) | 통과(차이 0) |
| 저회전 후보 판정 재현(그룹·기간 평균의 60% 미만) | 통과(43건 확인 필요) |
| 조회조건 전달 — $filter·$orderby·$top 실동작, 기간 구간(BT) 조건 | 확인 |
| 화면 요약 합계 = 검증 스크립트 합계(조회 건수 168 · 저회전 후보 43) | 일치 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면은 언제, 어떤 범위에 쓰나요?
특정 기준서의 시행일과는 무관한 상시 재고 관리 도구입니다. 플랜트·자재그룹·회계기간을 선택해 해당 범위의 재고 회전율을 조회·점검할 때 씁니다.
판정이 "확인 필요"로 나오면 바로 문제가 있는 재고인가요?
아닙니다. 같은 자재그룹·같은 기간의 평균 회전율보다 뚜렷하게 낮다는 신호일 뿐입니다. 계절성이나 안전재고 정책처럼 정상적인 이유도 있을 수 있어, 이 화면은 점검을 돕는 조회 도구이고 최종 판단은 재고를 관리하는 담당 부서가 내립니다.
재고일수(DIO)는 연간 기준인가요?
아닙니다. 조회 기간(월, 30일 가정)을 기준으로 한 추정치이며 연환산 값이 아닙니다. 월별로 비교할 때 참고하는 보조 지표로 활용해 주세요.
회전율 계산에 안전재고나 발주점 같은 정책 값도 반영되나요?
아닙니다. 이 화면은 실적 수량·금액(기초·입고·출고·기말)만으로 회전율을 계산합니다. 안전재고·발주점 등 정책 값과 비교하는 것은 별도 검토가 필요합니다.