솔루션 홈
재고실사

SAP 재고실사 차이 현황 — 실사수량과 장부수량, 허용오차 안에서 갈렸는가

실사 담당자가 숫자를 입력했다고 끝이 아닙니다. 장부와 실사 사이의 차이가 계수 오차인지, 진짜 과부족인지, 그리고 그 차이가 정리됐는지를 한 화면에서 가릅니다.

재고실사는 숫자를 세는 일처럼 보이지만, 실제로는 판단의 연속입니다. 저울 눈금이나 낱개 계수에서 생기는 사소한 오차와, 분실·오출고·전산 미반영처럼 진짜로 짚어야 할 과부족을 같은 기준으로 섞어 보면 실사 담당자도 결산 담당자도 지칩니다. 실사수량은 MI04로 입력되고 차이는 MI07로 정리되지만, 그 사이에 "이 차이가 정리해야 할 차이인가"를 판단하는 화면은 따로 없는 경우가 많습니다.

이 화면은 실사문서와 실사품목의 표준 데이터 구조를 그대로 이어받아, 장부수량 대비 실사수량 차이를 허용오차 기준으로 미실사·일치·과잉·부족 4단계로 자동 판정하고, 과잉·부족 건에 대해서는 MI07 차이전기가 실행됐는지 여부까지 같은 줄에서 보여주도록 OpenUI5 화면으로 확장한 것이 ZLMM03000입니다. 인접한 재고 수불 조회 화면과 달리, 이 화면은 실사 결과의 "판정"과 "후속 처리 상태"를 분리해서 추적한다는 점이 다릅니다. 실제 구동 화면 3종을 함께 공개합니다.

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

  • 실사문서 원천 — 헤더(IKPF)와 품목(ISEG) 구조를 그대로 사용
  • 재고·평가 마스터 — 플랜트/저장위치별 재고(MARD), 자재 평가(MBEW)
  • 텍스트 — 자재(MAKT) · 플랜트(T001W) · 저장위치(T001L)
  • 차이 정리 여부 — 실사품목의 XDIFF 플래그(MI07 실행 결과)를 그대로 표시
  • 실사 프로세스 — 문서 생성(MI01)·수량 입력(MI04)·차이 정리(MI07) 표준 흐름은 그대로 유지
항목내용
업무 영역자재관리(MM) · 재고관리 · 재고실사
Namespacezui5.physinv
셸 구조조회조건 영역(우측 조회) + 플랜트·상태별 집계 패널 + 실사품목 목록, 실사품목 상세 Dialog
화면 수조회 화면 1개 + 상세 다이얼로그
T-code 근거MI01(실사문서 생성) · MI04(실사수량 입력) · MI07(차이 정리)
성격조회·검증형 — 실사문서 생성과 차이 전기는 표준 트랜잭션이 담당
UI 테마sap_horizon 단일 적용

실제 화면 3종 둘러보기

실사일·플랜트·저장위치·자재·차이상태를 넣고 조회하면 실사품목이 목록으로 뜹니다 → 조회조건 영역에서 조건을 좁히고 → 품목을 골라 상세에서 같은 문서 내 다른 품목까지 확인합니다.

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

Main.view.xml
재고실사 차이 현황 — 조회조건·집계·실사품목 목록
재고실사 차이 현황 메인 화면 — 실사일·플랜트·저장위치·자재·차이상태를 지정해 조회하면, 플랜트별·상태별 집계와 함께 실사품목 목록이 장부수량·실사수량·차이수량·차이금액·차이율·차이상태·차이정리 여부까지 한 줄에 표시됩니다.
조회조건 영역
조회조건 영역 — 조회·초기화 버튼 위치
조회조건 영역 확대 — 실사일·플랜트·저장위치·자재·차이상태 필터가 한 줄에 배치되고, 조회·초기화 버튼은 그 줄의 오른쪽 끝에 있습니다. 각 입력 필드에서 Enter 를 눌러도 동일하게 조회가 실행됩니다.
실사품목 상세
실사품목 상세 다이얼로그 — 같은 문서 내 다른 품목
실사품목 상세 다이얼로그 — 품목의 장부수량·실사수량·차이수량·차이금액·차이율·차이상태·차이정리 여부를 한 번에 보고, 같은 실사문서 내 다른 품목(최대 8건)을 함께 확인할 수 있습니다.

조작 방법

  1. 실사일(시작/종료) · 플랜트 · 저장위치 · 자재코드/자재명 · 차이상태를 조회조건 영역에서 지정합니다.
  2. "차이 발생 건만 보기" 체크박스를 켜면 미실사·일치를 제외하고 과잉·부족 건만 남습니다.
  3. 조회조건 입력필드에서 Enter 를 눌러도 바로 조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
  4. 플랜트별·상태별 집계 패널의 배지(예: "과잉 (50)")를 클릭하면 해당 조건이 즉시 필터에 반영됩니다.
  5. 목록 툴바의 차이금액 큰 순 정렬 토글로 절대 차이금액이 큰 건부터 확인할 수 있습니다.
  6. 목록 행의 상세 버튼을 누르면 해당 품목의 상세와 같은 실사문서 내 다른 품목(최대 8건)을 확인합니다.
  7. 목록은 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.

실사 차이 판정 로직 — 계수오차 허용범위와 4단계 신호등

재고실사는 "숫자가 다르면 무조건 차이"로 보지 않습니다. 저울 오차·낱개 계수 오차 등 실무적으로 허용되는 범위가 있기 때문에, 이 화면은 다음 규칙으로 4단계 상태를 판정합니다.

단계조건의미
미실사실사수량이 아직 입력되지 않음(NULL)MI04 실사수량 입력이 아직 안 된 품목
일치|실사수량 − 장부수량| ≤ 허용오차계수 오차 범위 내 — 별도 조치 불필요
과잉(실사수량 − 장부수량) > 허용오차장부보다 실사수량이 많음 — 차이 전기 시 재고 증가
부족(실사수량 − 장부수량) < −허용오차장부보다 실사수량이 적음 — 차이 전기 시 재고 감소

허용오차 공식: tolerance = max(1, round(장부수량 × 2%)) — 장부수량의 2%, 최소 1 단위. 장부수량이 100 EA 이면 허용오차는 2 EA 이므로, 실사수량이 98~102 EA 사이면 "일치"로 판정합니다.

판정과 정리 상태를 분리하는 이유

과잉·부족으로 판정된 품목은 별도로 차이정리(MI07 실행) 여부를 "정리대기/정리완료"로 함께 표시합니다. 판정 결과와 후속 처리 상태를 한 컬럼에 합쳐 버리면, 이미 정리된 과거 차이와 아직 손대지 않은 차이를 구분할 수 없기 때문입니다.

헤더-품목 조인부터 차이금액 환산까지 5단계 처리 흐름

  1. 헤더-품목 조인: 실사문서 헤더(IKPF: 실사일 · 실사자 · 플랜트 · 저장위치)와 실사품목(ISEG: 자재 · 배치 · 장부수량 · 실사수량)을 실사문서번호 기준으로 결합합니다.
  2. 마스터 매핑: 플랜트(T001W)·저장위치(T001L) 코드에 명칭을 매핑합니다.
  3. 차이수량 계산: 미실사가 아닌 모든 품목에 대해 차이수량 = 실사수량 − 장부수량을 계산합니다.
  4. 임계치 판정 및 금액 환산: 3장의 허용오차 규칙으로 상태를 판정하고, 자재평가단가(MBEW)를 곱해 차이금액과 차이율을 계산합니다.
  5. 필터·집계: 조회조건으로 필터링한 뒤 플랜트별/상태별 건수와 "차이정리 대기" 건수·금액(과잉·부족 중 미정리)을 재계산해 요약 패널에 반영합니다.

조회조건

필드구분설명
실사일(시작/종료)선택실사일 기준 기간 필터
플랜트선택전체 플랜트 또는 특정 플랜트만 조회
저장위치선택전체 저장위치 또는 특정 저장위치만 조회
자재코드/자재명선택부분일치 검색 (Enter로 조회)
차이상태선택전체/미실사/일치/과잉/부족
차이 발생 건만 보기선택미실사·일치를 제외하고 과잉·부족만 표시

결과 컬럼

컬럼의미 · 표시
실사문서 · 품목실사문서번호와 문서 내 품목번호
플랜트 · 저장위치코드와 명칭
자재코드 · 자재명 · 배치대상 자재 (배치 없으면 "-")
실사일YYYY.MM.DD 형식
장부수량 · 실사수량우측정렬, 단위 포함 (미입력 시 "미실사")
차이수량 · 차이금액 · 차이율파생 계산값, 부호 포함 우측정렬
차이상태미실사/일치/과잉/부족 신호등
차이정리정리대기/정리완료/해당없음

SAP 표준 기능 매핑

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

표준 기능T-code이 화면이 더하는 것
실사문서 생성MI01(변경 없음 — 표준 기능 그대로 사용)
실사수량 입력MI04(변경 없음 — 표준 기능 그대로 사용)
차이 정리(전기)MI07정리대기 건을 사전에 한눈에 식별해 MI07 대상 선별에 활용
실사 현황 리스트MI22/MI24 계열플랜트/상태별 집계, 임계치 기반 4단계 신호등, 차이금액 환산을 추가 제공

도입 시 확인이 필요한 부분

허용오차율(2%)과 최소 허용단위(1)는 자재군·업종에 따라 달라질 수 있어 고정값으로 두지 않고 설정값으로 관리하는 것을 권장합니다. 평가단가(MBEW) 기준도 이동평균가/표준가 중 회사 정책에 맞는 쪽으로 선택해야 합니다.

참고 CDS 뷰

운영 서비스로 연결할 때는 헤더와 품목에 자재·플랜트 명칭, 평가단가까지 붙인 뷰로 서빙하는 구성을 제안합니다.

@AbapCatalog.sqlViewName: 'ZCPHYSINV'
@EndUserText.label: '재고실사 차이 조회용 (Z)'
define view Z_C_PHYSINV_VARIANCE
  as select from iseg as Item
    inner join      ikpf as Header     on  Header.iblnr = Item.iblnr
    left outer join makt as MatText    on  MatText.matnr = Item.matnr
                                       and MatText.spras = 'K'
    left outer join mbew as Valuation  on  Valuation.matnr = Item.matnr
                                       and Valuation.bwkey = Item.werks
{
  key Item.iblnr,
  key Item.zeili,
      Item.werks,
      Item.lgort,
      Item.matnr,
      MatText.maktx,
      Item.charg,
      Header.zldat,
      Header.ernam,
      Item.buchm,
      Item.zaehl,
      Item.zaehl - Item.buchm                        as DiffQty,
      ( Item.zaehl - Item.buchm ) * Valuation.verpr   as DiffValue,
      Item.xdiff
      // 임계치 판정(미실사/일치/과잉/부족)은 소비 계층에서 tolerance 규칙으로 계산
}

매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 평가 기준(이동평균가/표준가)과 허용오차 정책에 맞춰 조정합니다.

OpenUI5 구성

기능사용 컨트롤
화면 골격sap.m.Panel 3단 — 조회조건 · 집계 · 목록
조회조건sap.m.DatePicker · sap.m.Select · sap.m.Input — 우측 끝에 조회 버튼
결과 목록sap.ui.table.Table — 16개 컬럼, 스크롤/고정헤더 대응
상세 화면sap.m.Dialog + sap.ui.layout.form.SimpleForm + sap.m.Table
Mock 데이터 계층ModelMock.js — localdata JSON 을 fetch 로 읽어 Promise 로 반환
CSV 다운로드BaseController.downloadCsv() 공통 헬퍼 (UTF-8 BOM)

파일 구성

경로역할
index.htmlOpenUI5 부트스트랩 — sap_horizon · lodash · moment
Component.js디바이스 모델 초기화 · ErrorHandler 연결
manifest.json앱 디스크립터 — 앱 ID(zui5.physinv) · ko 로케일
view/Main.view.xml조회조건 + 집계 패널 + 실사품목 목록
view/DetailDialog.fragment.xml실사품목 상세 + 같은 문서 내 다른 품목
controller/Main.controller.js판정 로직 · 필터 · 집계 · CSV
model/ModelMock.jslocaldata JSON 읽기(Promise)
model/formatter.js수량 · 금액 · 비율 · 상태 포맷
i18n/i18n_ko.propertiesko 로케일 리소스
localdata/*.json실사문서 · 실사품목 · 플랜트 · 저장위치 검증용 데이터

검증 결과

화면 구성에 쓴 데이터는 실사문서 18건 · 실사품목 190건이며, 미실사 30건 · 일치 73건 · 과잉 50건 · 부족 37건, 차이정리 대기 87건입니다.

검증 항목결과
XML/JSON 전량 파싱 무결성통과
정적 리소스 전 경로 HTTP 200 (로컬 서버 기준)통과
뷰 사용 i18n 키 45개 전량 정의 (누락 0건)통과
뷰 참조 이벤트 핸들러 8개 전량 구현통과
차이상태-차이수량 부호 불일치 0건통과
미실사 건에 차이전기(XDIFF) 플래그 모순 0건통과
플랜트/저장위치 참조무결성 오류 0건통과
화면 렌더링 — 실브라우저에서 조회 → 상세 다이얼로그 실동작 후 캡처3/3
조회조건 버튼 배치 — 필터 행 우측 끝(하단 바 아님)통과
sap_horizon 테마 적용 확인통과

플랜트·자재·수량·금액은 모두 검증용 데이터입니다.

자주 묻는 질문

실사수량과 장부수량이 조금만 달라도 전부 "차이"로 표시되나요?

아니요. 장부수량의 2%(최소 1단위)까지는 계수 오차로 보고 "일치"로 판정합니다. 그 이상 벗어난 경우만 과잉/부족으로 분류합니다.

"정리대기"와 "차이상태(과잉/부족)"는 어떻게 다른가요?

차이상태는 장부 대비 실사수량의 방향성(과잉/부족)을 판정한 결과이고, 정리 여부는 그 차이에 대해 MI07 차이전기가 실제로 실행되었는지를 별도로 추적하는 값입니다. 과잉이어도 이미 MI07이 실행됐다면 "정리완료"로 표시됩니다.

이 화면에서 실사수량을 직접 입력하거나 차이를 전기할 수 있나요?

아니요. 이 화면은 조회 전용입니다. 실사수량 입력은 MI04, 차이 전기는 MI07 표준 트랜잭션에서 수행하며, 이 화면은 그 결과를 모아서 검증하는 용도입니다.

배치(Batch) 관리 대상이 아닌 자재는 어떻게 표시되나요?

배치번호가 없는 자재는 배치 컬럼에 "-" 로 표시됩니다.

재고실사 차이 관리, 지금 쓰는 SAP 위에서 확장해 보세요

실사 후 차이 정리가 늦어지면 재고 신뢰도 자체가 흔들립니다. 판정과 정리 상태를 한 화면에서 추적할 수 있으면 결산 전 대응 시간이 줄어듭니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

재고실사차이정리MI01MI04MI07ISEGIKPFOpenUI5