솔루션 홈
재고 분석

SAP 재고 장기체류 점검 — 재고는 있는데, 언제부터 안 움직였는지부터 본다

재고 회전율만 보면 놓치는 자재가 있습니다. 최종 입출고일 기준으로 얼마나 오래 멈춰 있었는지부터 구간으로 나눠 봤습니다

재고 회전율이나 평균재고 지표는 전체 흐름은 잘 보여주지만, 특정 로트나 품목 하나가 오래 멈춰 있는 상황은 평균에 묻혀 잘 드러나지 않습니다. 그래서 자재·플랜트별로 최종 입출고일을 기준 삼아 지금까지 얼마나 지났는지를 구간으로 나눠 보는 방식을 OpenUI5 화면으로 구현했습니다.

경과일수를 0~30일 · 31~60일 · 61~90일 · 91~180일 · 181일 이상 다섯 구간으로 나누고, 플랜트·자재그룹별로 구간 금액을 집계해 91일 이상(장기체류) 비중을 바로 확인할 수 있게 했습니다. 표준 재고 조회·분석 기능이 담당하는 재고수량·평가금액 위에 경과일수라는 축 하나를 더한 셈입니다. 실제 구동 화면 6종을 함께 공개합니다.

SAP 표준 기능을 그대로 이어받은 부분

  • 재고 현황 — 재고 현황 조회(MMBE)의 플랜트·자재별 재고수량 구조를 그대로 이어받습니다
  • 창고 재고 목록 — 창고 재고 목록(MB52)의 재고수량·평가금액 조회 방식을 참고해 구간별 요약을 구성합니다
  • 기간별 조회 — 기간별 재고 조회(MB5B)의 스냅샷 개념을 월별 추이 탭으로 확장합니다
  • 재고 분석 — 재고 분석(MC.9)의 표준 분석 관점을 경과일수 기반 관점으로 보완합니다
항목내용
업무 영역구매(MM) · 재고 분석
Namespacezui5.stockage
셸 구조조회조건 영역(우측 조회) + 대사 요약 KPI 4종 + 탭 3개, 행 클릭 상세 Dialog
화면 수조회 화면 1개(탭 3개) + 상세 다이얼로그
SAP 표준 T-codeMMBE · MB52 · MB5B · MC.9
데이터 연동 방식OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩
성격조회·점검형 — 실제 처분·평가충당 판단은 회사가 수행
UI 테마sap_horizon 단일 적용

실제 화면 6종 둘러보기

기본 조건으로 조회하면 대사 요약과 구간별 요약이 뜹니다 → 품목별 명세 탭에서 자재 단위로 확인하고 → 월별 추이 탭에서 흐름을 보고 → 자재를 검색하거나 행을 클릭해 상세를 봅니다.

아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.

메인 화면
재고 장기체류 점검 메인 화면 — 조회조건과 재고금액·장기체류 비중 대사 요약
메인 화면 — 조회조건 · 대사 요약 · 구간별 요약이 한 화면에 뜹니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
구간별 요약
구간별 요약 탭 — 플랜트·자재그룹·경과구간별 집계
구간별 요약 — 플랜트·자재그룹·경과구간별 품목수·재고수량·재고금액·비중을 나란히 봅니다. 합계는 명세 합계와 같습니다.
품목별 명세
품목별 명세 탭 — 자재별 최종 입출고일·경과일수·상태
품목별 명세 — 자재별 최종 입출고일·경과일수·상태를 한 건씩 봅니다. 경과일수가 큰 순으로 정렬됩니다.
월별 추이
월별 추이 탭 — 플랜트별 장기체류 금액·비중 추이
월별 추이 — 최근 6개월간 플랜트별 총 재고금액과 장기체류(91일 이상) 금액·비중 추이를 봅니다.
검색 결과
자재 검색 후 조회 결과 화면
검색 결과 — 자재 검색어 입력 필드에서 Enter 키를 누르면 곧바로 조회됩니다.
품목 상세
품목별 명세 행 클릭 시 열리는 상세 다이얼로그
품목 상세 — 행을 클릭하면 해당 자재의 전체 항목이 다이얼로그로 펼쳐집니다.

사용 방법

  1. 화면에 들어오면 전체 조건으로 자동 조회가 1회 실행되어 구간별 요약·품목별 명세·월별 추이가 함께 채워집니다.
  2. 조회조건 영역에서 플랜트·자재그룹·경과구간을 선택합니다(선택하지 않으면 전체). 자재/자재명은 검색어 입력 필드에 직접 입력합니다(선택 입력).
  3. 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 자재 검색어 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 모든 조건을 지우고 다시 조회합니다.
  4. 상단 카드에서 전체 재고금액 · 장기체류(91일 이상) 금액 · 장기체류 비중 · 조회 품목 수를 먼저 확인합니다.
  5. 탭을 옮겨 구간별 요약 → 품목별 명세 → 월별 추이 순으로 봅니다.
  6. 품목별 명세에서 행을 클릭하면 해당 자재의 상세 항목이 다이얼로그로 열립니다.
  7. 품목별 명세 탭의 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장합니다.

경과구간 판정 기준

판정 조건(최종 입출고일 기준 경과일수)결과 상태사용자 조치
0 ~ 90일정상조치 없음
91 ~ 180일확인 필요담당자가 수요·처분 계획을 확인
181일 이상점검 필요장기체류 사유·평가충당 필요 여부를 점검

위 구간·판정은 조회·점검을 돕기 위한 기준이며, 실제 폐기·평가충당 여부는 화면이 단정하지 않고 담당자와 관련 부서의 검토를 거칩니다.

구간화·집계 처리 절차

단계내용
1단계자재·플랜트별 최종 입출고일을 기준일과 비교해 경과일수를 산출
2단계경과일수를 5개 구간(0~30 / 31~60 / 61~90 / 91~180 / 181일 이상)으로 분류
3단계플랜트·자재그룹·구간 조합으로 품목수·재고수량·재고금액을 집계
4단계구간별 집계금액을 플랜트 합계로 나눠 플랜트 내 비중을 계산(구간별 비중의 합 = 100%)
5단계월별로 총 재고금액과 91일 이상(장기체류) 금액·비중을 별도 집계해 추이 구성

조회조건

필드필수설명
플랜트선택전체면 조건 제외
자재그룹선택원재료 · 포장재 · 제품 · 소모성자재 — 전체면 조건 제외
경과구간선택5개 구간 중 선택 — 구간별 요약·품목별 명세에만 적용
자재/자재명선택자재코드 또는 자재명 일부로 검색 — 품목별 명세에만 적용

결과 컬럼

컬럼설명
플랜트 · 자재그룹 · 경과구간구간별 요약의 집계 축
품목수 · 재고수량 · 재고금액구간에 속한 자재 건수와 수량·금액 합계
플랜트 내 비중플랜트 합계 대비 구간 금액 비중
자재 · 자재명 · 자재그룹품목별 명세의 자재 식별 정보
최종 입출고일 · 경과일수구간화 산출 기준
상태정상 · 확인 필요 · 점검 필요
총 재고금액 · 장기체류 금액 · 비중월별 추이의 플랜트별 집계

SAP 표준 기능 매핑

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 경과일수 기반 조회·점검 관점을 더해 확장합니다.

표준 T-code표준 기능이 화면이 더한 것
MMBE재고 현황 조회플랜트·자재별 재고수량 위에 경과일수·구간 축을 더합니다
MB52창고 재고 목록재고수량·평가금액을 구간별로 재집계합니다
MB5B기간별 재고 조회기간 스냅샷 개념을 월별 장기체류 추이로 확장합니다
MC.9재고 분석표준 재고 분석 관점을 경과일수 기반 장기체류 관점으로 보완합니다

분석 지표 정의표

대상 영역지표정의원천 데이터
재고 분석경과일수기준일 − 최종 입출고일자재이동 최종일자
재고 분석장기체류 비중91일 이상 구간 금액 ÷ 전체 재고금액재고평가금액
재고 분석구간별 비중구간 금액 ÷ 플랜트 합계재고평가금액

참고 CDS 뷰

원천 테이블주요 필드쓰임
MARA / MAKTMATNR · MATKL · MAKTX자재 마스터 — 자재·자재그룹·자재명
MARDWERKS · LABST플랜트별 재고 — 가용재고수량
MBEWVERPR · STPRZ · SALK3자재 평가 — 단가·재고금액
MSEG / MKPFBUDAT자재 이동 — 최종 이동전기일 산출
define view entity ZI_StockAgingItem
  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
    left outer join ( select mseg.matnr, mseg.werks, max( mkpf.budat ) as budat
                       from mseg inner join mkpf on mkpf.mblnr = mseg.mblnr and mkpf.mjahr = mseg.mjahr
                       group by mseg.matnr, mseg.werks ) as mv
      on mv.matnr = d.matnr and mv.werks = d.werks
{
  key d.werks                as Plant,
  key d.matnr                as Material,
      t.maktx                as MaterialText,
      m.matkl                as MatlGroup,
      mv.budat                as LastMovementDate,
      d.labst                as StockQty,
      w.verpr                as UnitPrice,
      d.labst * w.verpr       as StockValue
}

계정·마스터 구성은 가상 데이터 기준 스케치입니다. 최종 입출고일은 자재이동 명세의 최종 전기일을 별도 산출한 값입니다.

OpenUI5 구성

기능사용 컨트롤 · 구성
화면 골격sap.m.Page + 조회조건 패널 · 대사 요약 KPI · IconTabBar 3개 탭
데이터 연동manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다
조회조건sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 전체를 고른 조건은 필터를 만들지 않습니다. 정렬은 Sorter, 총건수는 인라인 카운트로 받습니다
구간별 요약 · 품목별 명세sap.m.Table — 행 클릭(press)으로 상세 다이얼로그를 엽니다
예외 메시지메타데이터 실패·요청 실패·빈 결과를 구분해 안내하는 전용 처리기

파일 구성

경로역할
index.htmlOpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결
Component.js모델 초기화, 예외 메시지 처리기 연결
manifest.json앱 디스크립터 — zui5.stockage · ko 로케일, OData 서비스와 모델 선언
view/Main.view.xml조회조건 · 대사 요약 · 3개 탭
view/DetailDialog.fragment.xml품목 상세 다이얼로그
controller/Main.controller.js조회조건 조립 · 바인딩 · 다이얼로그 · CSV
controller/BaseController.jsCSV 다운로드 공통 처리
model/formatter.js · model/ErrorHandler.js표시 서식 · 예외 메시지 처리
i18n/i18n_ko.properties화면 문구

검증 결과

검증용 샘플 데이터(자재 52건, 플랜트 2개)를 기준으로 대사식을 전수 검증했습니다. 정렬·판정 동작을 확인하기 위해 경과일수 400일을 초과하는 극단값 2건을 의도적으로 포함했습니다.

검증 항목결과
구간별 요약 합계 = 품목별 명세 합계 (30건 — 구간×그룹×플랜트)통과(차이 0)
플랜트 내 비중 합계 = 100% (플랜트 2개)통과(반올림 오차 0.03%p 이내)
월별 추이 최근월 합계 = 구간별 요약 현재 합계 (플랜트 2개)통과(차이 0)
조회 조건 전달 — 플랜트·자재그룹·경과구간 필터 · 경과일수 내림차순 정렬 · 총건수 표시확인
표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현0건
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지확인

모든 데이터는 검증용으로 구성한 가상 데이터입니다.

자주 묻는 질문

경과일수는 어떤 기준으로 계산하나요?

자재·플랜트별 최종 입출고일과 조회 시점(기준일)의 차이를 일수로 계산합니다. 이동 이력이 없던 신규 자재 등 최종 입출고일을 확인할 수 없는 경우는 화면에서 확인 필요로 남습니다.

"점검 필요"로 표시되면 바로 폐기·평가충당 대상인가요?

아닙니다. 이 화면은 조회·점검을 돕는 도구이며, 폐기·평가충당 등 최종 판단은 담당자와 관련 부서가 별도 절차와 증빙을 근거로 결정합니다.

재고 회전율 점검과는 어떻게 다른가요?

회전율은 일정 기간의 출고금액과 평균재고를 비교하는 지표이고, 이 화면은 자재 한 건 한 건의 최종 입출고일로부터 지금까지 경과한 일수를 구간으로 나눠 봅니다. 회전율이 낮지 않아도 특정 로트·품목만 오래 멈춰 있는 경우를 함께 확인할 수 있습니다.

장기체류 비중은 어떻게 계산되나요?

경과구간이 91일 이상(91~180일, 181일 이상)인 재고금액의 합을 전체 재고금액으로 나눈 값입니다. 플랜트별로도 동일한 방식으로 별도 산출됩니다.

재고 조회, 경과일수 관점을 하나 더 붙여 보세요

재고수량·회전율만으로는 놓치기 쉬운 개별 품목의 장기체류를 구간별로 미리 걸러 두면, 처분·재평가 검토를 더 일찍 시작할 수 있습니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

재고 장기체류재고 에이징재고 분석구매(MM)OpenUI5