[SAP] 🟦 MM 자재수불부 - ABAP 예제 📦📊

SAP 자재수불부 만들기 —  ABAP 예제 코드

1. 개요

MM의 핵심이자 꽃이면서 항상 문제가되는 자재 수불입니다. 

SAP 자재수불부는 자재의 입고📥, 출고📤, 이동, 재고변동 내역을

기간·플랜트·저장위치별로 추적하기 위한 핵심 리포트로 사용되며 MM 외에 생산이나 CO/FI 재무 등 다양한 곳에서 활용될 수 있습니다. 

 

일자별 기초재고 - 입고 (+) 요소 - 출고 ( - ) 요소 - 기말재고를 계산하여 재고를 관리할수도 있습니다.

만약 물류 시스템이나 타 SAP가 아닌 WMS 등을 활용하고 있다면, ERP 와 연계하여 재고 이력 및 재고 수량이 일치하는 지 점검해야 합니다. (일 단위 혹은 월 결산)


2. 자재수불 생성의 목적 및 활용

  • 자재별 일별 입출고 이력 관리 📋
  • 월말 재고평가 및 회계 조정 근거 확보 ✨
  • 재고 이상탐지(누락, 중복, 음수재고 등) ⚠️
  • KPI(입출고 회전율, 재고 Turnover) 계산 기반 데이터로 활용 📊

3. 스탠다드 T-code 자재문서 / 재고 관련

구분 트랜잭션   코드 설명
문서리스트 MB51 자재문서 리스트 조회
재고변동 MB5B 전기일 기준 재고 조회
이전문서 MB5T 다른 플랜트/창고로 이동 중 재고 확인
입출고문서 MIGO 자재입출고 생성·조회(Posting)
재고현황 MMBE 현재 재고현황(플랜트, 저장위치별)

💡 S/4HANA에서는 MATDOC 테이블이 중심이며, ECC에서는 MSEG/MKPF 조합을 사용합니다.


4. 주요 테이블 구조

테이블  설명  주요 키
MKPF 자재문서 헤더 MBLNR, MJAHR
MSEG 자재문서 아이템  MBLNR, ZEILE
MATDOC 물자문서 통합테이블 (S/4 HANA) MBLNR, MJAHR
MAKT 자재명(언어별) MATNR, SPRAS
MARD 자재재고 (Plant/Storage 기준) MATNR, WERKS, LGORT
T001W 플랜트 정보 WERKS
MBEW 자재 평가 BWKEY, MATNR

5. 조회 조건 (Selection Screen) 🔍

  • 자재번호 (MATNR, 다중 가능)
  • 플랜트 / 저장위치 (WERKS / LGORT)
  • 이동유형 (BWART)
  • 전기일 (BUDAT)
  • 자재 문서번호 / 배치번호

6. ABAP 소스코드 예제 샘플  📊

REPORT zmm_material_ledger_alv_matdoc.

TABLES: matdoc, mara, makt, marc.

TYPES: BEGIN OF ty_matdoc,
         werks    TYPE matdoc-werks,
         matnr    TYPE matdoc-matnr,
         mtart    TYPE mara-mtart,
         maktx    TYPE makt-maktx,
         prdha    TYPE mara-prdha,
         budat    TYPE matdoc-budat,
         bwtar    TYPE matdoc-bwtar,
         bwart    TYPE matdoc-bwart,
         lgort    TYPE matdoc-lgort,
         sobkz    TYPE matdoc-sobkz,
         shkzg    TYPE matdoc-shkzg,
         kzbew    TYPE matdoc-kzbew,
         kzzug    TYPE matdoc-kzzug,
         meins    TYPE matdoc-meins,
         meins_ra TYPE mara-meins,
         menge    TYPE matdoc-menge,
         ummat    TYPE matdoc-ummat,
         umlgo    TYPE matdoc-umlgo,
         kunnr    TYPE matdoc-kunnr,
         lifnr    TYPE matdoc-lifnr,
       END OF ty_matdoc.

DATA: it_matdoc TYPE TABLE OF ty_matdoc,
      wa_matdoc TYPE ty_matdoc.

DATA: gr_container TYPE REF TO cl_gui_custom_container,
      gr_alv       TYPE REF TO cl_gui_alv_grid.

"Selection screen
SELECT-OPTIONS: s_matnr FOR matdoc-matnr,
                s_werks FOR matdoc-werks,
                s_lgort FOR matdoc-lgort,
                p_budat FOR matdoc-budat.

FORM 자재수불예제.
  DATA: l_budat LIKE matdoc-budat.
  FIELD-SYMBOLS: <fs> LIKE it_matdoc.

  "YYYYMM01 기준 시작일자 계산
  CONCATENATE p_budat(6) '01' INTO l_budat.

  SELECT a~matnr,
         b~mtart,
         kt~maktx,
         b~prdha,
         a~budat,
         a~bwtar,
         a~bwart,
         a~lgort,
         a~sobkz,
         a~shkzg,
         a~kzbew,
         a~kzzug,
         a~meins,
         b~meins AS meins_ra,
         a~menge,
         a~ummat,
         a~werks,
         a~umlgo,
         a~kunnr,
         a~lifnr
    INTO CORRESPONDING FIELDS OF TABLE @it_matdoc
    FROM matdoc AS a
   INNER JOIN mara AS b ON a~matnr = b~matnr
   INNER JOIN makt AS kt ON kt~spras = @sy-langu AND kt~matnr = a~matnr
   LEFT OUTER JOIN marc AS d ON a~werks = d~werks AND a~matnr = d~matnr
   WHERE a~record_type = 'MDOC'
     AND a~budat BETWEEN @l_budat AND @p_budat
     AND a~werks IN @s_werks
     AND a~lgort IN @s_lgort
     AND a~matnr IN @s_matnr
     AND b~mtart IN @s_mtart
     AND b~prdha IN @s_prdha
     AND b~matkl IN @s_matkl
     AND a~menge NE '0'
     AND a~lgort NE ' '.
ENDFORM.

 

 

  1. 데이터 구조 정의(TYPES): MATDOC 기반 필드를 중심으로 자재 정보, 이동 유형, 수량, 단위 등을 포함.
  2. SELECT-OPTIONS: 사용자가 조회할 자재, 플랜트, 저장위치, 문서일자 범위를 선택 가능.
  3. 확장 및 개선 : 위의 abap 예시는 단순히 MATDOC 을 기반으로 자재 문서 및 이동 / 수량 을 가져오는 코드입니다. 보다 더 처리하기 위해선 이동유형 별 분리 및 +/- 처리와 일자별 MBEW 기반으로 수집하는 로직 등 상세하게 구상하여야 합니다.

7. 검증 포인트 및 테스트 시나리오 ✅

  1. 자재별 입고/출고 수량의 Balance 정확도 검증
  2. 이동유형(101/102/201 등)에 따른 +/- 부호 처리 확인
  3. 회계통합 검증(EKBE, BKPF 연동 시)