1. 무엇인가?

MBEW (Material Valuation - 현재 기준)

  • 자재의 현재 시점 재고 평가 데이터를 저장하는 테이블
  • Plant + Valuation Type 단위로 단 1건만 존재
  • 항상 최신 상태로 덮어씌워짐 → 이전 달 데이터 없음

MBEWH (Material Valuation History - 히스토리)

  • MBEW의 월별 스냅샷을 보관하는 히스토리 테이블
  • 결산(월마감) 시점에 MBEW → MBEWH로 복사되어 저장
  • 과거 월 데이터 조회 시 반드시 MBEWH 사용

2. 왜 이렇게 구조가 나뉘는가?

구분MBEWMBEWH
목적 현재 재고평가 최신값 유지 월별 히스토리 보관
건수 자재+Plant당 1건 자재+Plant+월별 N건
업데이트 시점 재고 이동 발생 때마다 월마감(MMPV/MMRV) 시점
조회 용도 현재 재고금액 과거 특정 월 재고금액

핵심 개념 MBEW는 "지금 이 순간의 재고 상태"이고 MBEWH는 "그 달이 끝났을 때 찍은 사진"이다


3. 가격 유형 구조 이해 (중요)

SAP ECC에서 자재는 가격 결정 방식(Price Control) 에 따라 두 가지로 나뉜다

Price Control = V → 이동평균가 (Moving Average Price)
Price Control = S → 표준가 (Standard Price)

 

MBEW 주요 가격 필드

필드의미Price Control
VERPR 이동평균가 (Moving Average Price) V 자재에서 실제 단가
STPRS 표준가 (Standard Price) S 자재에서 실제 단가
LBKUM 재고 수량 (Valuated Stock) 공통
SALK3 재고 총액 (이동평균 기준) V 자재 재고금액
STPRS × LBKUM 표준가 기준 재고금액 별도 필드 없음
PEINH 가격단위 (Price Unit) 공통

4. CKM3에서 보이는 현상 설명

사용자가 정확하게 파악한 내용을 구조적으로 정리한다

4-1. 결산 전 상태

CKM3 조회 시

현재 달 (결산 전)
├── 실제값(Actual) = 이동평균가 기준으로 표시
└── 예비평가(Preliminary Valuation) = 표준가(STPRS) 기준으로 표시

← 아직 실제원가결산(ML Settlement)이 완료되지 않았기 때문

 

4-2. 결산 후 상태

ML 결산(CKMLCP) 완료 후

현재 달
├── 실제값 = 이동평균가로 확정
└── 예비평가 → 실제값으로 교체됨

← Actual Costing이 이동평균가를 확정 단가로 계산 완료

 

4-3. 이전 달과 현재 달 가격 필드가 다른 이유

이전 달 (MBEWH에 저장된 값)
→ 해당 월 결산이 완료된 시점의 이동평균가로 확정 저장

현재 달 (MBEW에 있는 값)
→ 결산 전이므로 아직 표준가(STPRS)가 기준
→ 결산 완료 후 이동평균가로 교체

왜 이런 구조인가? SAP Actual Costing(ML)은 월 중에는 표준가로 잠정 평가하고 월말 결산 시 실제 원가를 계산해서 이동평균가로 확정하는 구조이기 때문


5. 표준평가 금액이 별도 관리되지 않는 이유

사용자가 정확히 짚은 부분이다. 이 구조를 깊게 이해해야 한다.

왜 표준가 재고금액 필드가 없는가?

SAP 설계 관점

SALK3 = Price Control 기준 현재 평가금액
        V 자재 → 이동평균가 기준
        S 자재 → 표준가 기준
        
STPRS = 표준가 단가 → 참조용

표준가 재고금액 = STPRS × LBKUM ÷ PEINH
→ 이건 "계산 가능한 값"이므로 SAP이 별도 필드로 저장하지 않음
→ 필요하면 직접 계산해야 함

 

표준가 재고금액 계산 공식

abap
" 표준가 기준 재고금액 계산
lv_std_amount = ( mbew-stprs / mbew-peinh ) * mbew-lbkum.

" 이동평균가 기준 재고금액 (SALK3가 이 값)
lv_map_amount = mbew-salk3.

" 검증: 이동평균가 역산
" VERPR = SALK3 / LBKUM * PEINH (수량이 0이 아닐 때)

6. 테이블 상세

MBEW Primary Key

MANDT  클라이언트
MATNR  자재번호
BWKEY  Valuation Area (= Plant in most cases)
BWTAR  Valuation Type (Split Valuation 사용 시)

 

MBEWH Primary Key

MANDT  클라이언트
MATNR  자재번호
BWKEY  Valuation Area
BWTAR  Valuation Type
LFGJA  회계연도 (Fiscal Year)
LFMON  회계월 (Posting Period)

MBEWH 조회 시 주의 LFMON은 회계월(Fiscal Period)이지 달력월이 아니다 회계연도 시작이 4월인 회사라면 4월 = Period 1 반드시 T009B(Fiscal Year Variant) 매핑 확인 필요


7. 값이 생성되고 업데이트되는 과정

이동평균가 업데이트 흐름

1. 구매오더(PO) 생성 - EKKO/EKPO
        ↓
2. 입고 발생 (MIGO - 101)
        ↓
3. 자재문서 생성 - MKPF/MSEG
        ↓
4. 회계문서 생성 - BKPF/BSEG
        ↓
5. SAP이 이동평균가 재계산
   새 이동평균가 = (기존재고금액 + 입고금액) ÷ (기존수량 + 입고수량)
        ↓
6. MBEW 업데이트
   VERPR = 새 이동평균가
   SALK3 = 새 재고총액
   LBKUM = 새 수량

 

MBEWH 생성 흐름

월마감 실행 (MMPV)
        ↓
SAP이 현재 MBEW 값을 읽음
        ↓
MBEWH에 해당 연도/월로 Insert
(LFGJA = 회계연도, LFMON = 회계월)
        ↓
다음 달 MBEW 계속 업데이트

8. 프로그램 작성 시 실무 주의사항

8-1. 현재 월 vs 과거 월 처리

 
 
abap
" 현재 월 조회 → MBEW 사용
SELECT SINGLE *
  FROM mbew
  INTO ls_mbew
 WHERE matnr = lv_matnr
   AND bwkey = lv_plant.

" 과거 월 조회 → MBEWH 사용
SELECT SINGLE *
  FROM mbewh
  INTO ls_mbewh
 WHERE matnr = lv_matnr
   AND bwkey = lv_plant
   AND lfgja = lv_year
   AND lfmon = lv_period.

 

8-2. 결산 전 현재 달 조회 시 주의

결산 전 현재 달을 MBEWH에서 조회하면 → 데이터 없음
왜냐하면 아직 월마감이 실행되지 않았으므로 MBEWH에 Insert되지 않음

→ 현재 달은 반드시 MBEW에서 읽어야 함
→ 프로그램 작성 시 "조회 월이 현재 열린 기간인지" 체크 로직 필요

 

8-3. Split Valuation 주의

BWTAR(Valuation Type)가 있는 자재의 경우
MBEW에 동일 자재가 여러 건 존재 (Batch별 가격 다름)
Sum 처리 필요 여부를 업무 담당자와 확인 필수

 

8-4. PEINH(가격단위) 반드시 고려

abap
" 잘못된 계산 (PEINH 무시)
lv_amount = mbew-stprs * mbew-lbkum.  " 위험

" 올바른 계산
IF mbew-peinh > 0.
  lv_amount = ( mbew-stprs / mbew-peinh ) * mbew-lbkum.
ENDIF.

PEINH가 100인 경우 (예: 단가가 100개당 가격으로 등록된 경우) PEINH를 무시하면 재고금액이 100배로 계산되는 오류 발생


9. CKM3 정보를 프로그램에서 참조하려면

CKM3는 내부적으로 아래 테이블들을 사용한다

테이블설명
CKMLHD ML 헤더
CKMLCR ML 원가레코드 (기간별 단가)
CKMLPP ML 기간별 재고
CKMLPRKEPH ML 원가요소 명세
 
 
abap
" CKM3 기준 이동평균가 조회
SELECT SINGLE *
  FROM ckmlcr
  INTO ls_ckmlcr
 WHERE kalnr = lv_kalnr   " Costing Object Number (MBEW-KALN1)
   AND bdatj = lv_year
   AND poper = lv_period
   AND lbkum > 0.

MBEW-KALN1이 ML의 원가 오브젝트 번호와 연결되는 키 ML을 사용하는 시스템이라면 이 테이블에서 확정 이동평균가를 가져올 수 있음


10. 디버깅 포인트

목적T-CODE / 방법
현재 재고금액 확인 SE16N → MBEW
과거 월 재고금액 확인 SE16N → MBEWH
CKM3 기준 원가 확인 CKM3 직접 조회
ML 원가레코드 확인 SE16N → CKMLCR
이동평균가 변경 이력 CKM3 → Price History
월마감 상태 확인 MMPV / OMSY
회계기간 매핑 확인 OB52 / T009B

11. 추가로 알아두면 좋은 내용

수량은 있는데 금액이 0인 경우

원인 후보
1. 이동평균가가 0으로 등록된 자재 (MR21로 수동 0 입력된 경우)
2. GR 후 IR이 없어서 가격 보정이 안 된 경우
3. Split Valuation에서 특정 Valuation Type의 금액 누락
4. ML 사용 시스템에서 결산 전 잠정 평가금액이 0

→ MSEG에서 해당 자재 이동 이력을 추적해야 함

 

재고금액 불일치 발생 시 추적 순서

1. MBEW-SALK3 확인 (현재 재고총액)
2. MBEW-LBKUM × MBEW-VERPR ÷ MBEW-PEINH 계산값과 비교
3. 차이 발생 시 → MR21(수동 가격변경) 이력 확인
4. MSEG에서 최근 이동 이력 확인
5. CKM3에서 ML 결산 여부 확인
6. CKMLCR에서 확정 이동평균가 확인

 

 

해당 내용을 제가 정리한 내용을 AI에게 재정리한 내용입니다.
틀린 정보가 있다면 댓글 부탁드립니다.

+ Recent posts