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.
- 데이터 구조 정의(TYPES): MATDOC 기반 필드를 중심으로 자재 정보, 이동 유형, 수량, 단위 등을 포함.
- SELECT-OPTIONS: 사용자가 조회할 자재, 플랜트, 저장위치, 문서일자 범위를 선택 가능.
- 확장 및 개선 : 위의 abap 예시는 단순히 MATDOC 을 기반으로 자재 문서 및 이동 / 수량 을 가져오는 코드입니다. 보다 더 처리하기 위해선 이동유형 별 분리 및 +/- 처리와 일자별 MBEW 기반으로 수집하는 로직 등 상세하게 구상하여야 합니다.
7. 검증 포인트 및 테스트 시나리오 ✅
- 자재별 입고/출고 수량의 Balance 정확도 검증
- 이동유형(101/102/201 등)에 따른 +/- 부호 처리 확인
- 회계통합 검증(EKBE, BKPF 연동 시)