이 글이 답하는 질문
자재를 구매하면 창고에 물건이 도착하고 입고(GR, Goods Receipt)를 전기합니다. 그런데 설비 점검, 청소 용역, IT 유지보수 같은 서비스를 구매하면 트럭에서 내릴 실물이 없습니다. 그럼 입고는 어떻게 될까요? 이 글은 아래 질문에 답합니다.
- Q. 서비스 발주는 입고 전기를 아예 안 하나? — 실물 입고는 없지만, 서비스 내역(Service Entry Sheet, SES)의 승인이 입고를 대체하며 GR 문서가 백그라운드에서 자동 생성됩니다.
- Q. 재고가 없는데 회계 분개는 어디로 흘러가나? — 승인 시점에 재고 대신 원가센터 등 비용 계정으로 즉시 소비 전기되고, 대변은 자재와 동일하게 GR/IR 정산계정(WRX)입니다.
- Q. 송장 검증의 3-way match는 서비스에서 무엇과 대사되나? — 입고 수량 대신 승인된 SES 금액과 대사됩니다. 미승인 SES는 회계상 미수령과 같아 송장이 보류됩니다.
- Q. ECC와 S/4HANA는 서비스 조달 방식이 같은가? — 클래식 MM-SRV와 S/4HANA Lean Services는 데이터 모델이 달라, 초기 설계에서 어느 모델을 쓸지 정해야 합니다.
사전 가정
SAP MM 구매 기본 흐름(구매요청 → 발주 → 입고 → 송장검증)을 한 번이라도 다뤄봤다고 가정합니다. 계정지정범주(Account Assignment Category)와 GR/IR 정산계정 개념을 알고 있으면 핵심 개념 섹션이 훨씬 빠르게 읽힙니다. ABAP 코드 예제가 나오지만 SELECT 문과 클래스 호출 수준이므로, 개발자가 아니어도 흐름 파악에는 지장이 없습니다.
사용한 버전
기준 환경은 SAP S/4HANA 2023 (온프레미스)이며, ECC 6.0(MM-SRV)과 동작이 다른 지점은 본문에서 별도로 표시합니다. S/4HANA에서는 기존 MM-SRV의 서비스 마스터 기반 방식과 함께 Lean Services라는 간소화 모델이 도입되어, 서비스도 자재처럼 품목 레벨에서 직접 다룰 수 있게 되었습니다. 일반적으로 신규 구축에서는 Lean Services가 권장됩니다.
- 트랜잭션: ME21N(발주), MIGO(입고), ML81N(서비스 내역, ECC/클래식), MIRO(송장검증)
- Fiori 앱: Manage Purchase Orders, Manage Service Entry Sheets — Lean Services
- 테스트용 마스터: 서비스 벤더 1개, 원가센터 1개, 자재 1개
- 개발 예제 실행 시: ADT(Eclipse) 및 개발 권한
핵심 개념 — 입고를 대체하는 서비스 내역
비유로 시작해 보겠습니다. 온라인으로 책상을 사면 택배 상자를 받고 "물건 잘 왔음"을 확인합니다. 반면 출장 청소를 예약하면 받을 상자가 없습니다. 대신 작업이 끝난 뒤 "오늘 3시간, 거실과 주방 청소 완료"라는 작업 내역서에 서명하죠. SAP의 서비스 내역(SES)이 정확히 이 서명입니다. 벤더(또는 현업 담당자)가 수행 내역을 기록하고, 발주 부서 책임자가 승인(Acceptance)하는 순간 시스템은 내부적으로 입고 문서(이동유형 101)를 백그라운드에서 자동 생성합니다. 즉 SES 승인 = 논리적 입고입니다.
두 프로세스를 표로 대비하면 다음과 같습니다.
| 구분 | 자재 조달 | 서비스 조달 |
|---|---|---|
| 발주 품목 | 자재 마스터, 수량/단가 | 서비스 품목(Lean Service 또는 서비스 마스터), 계정지정 필수(원가센터 K 등) |
| 수행 확인 | MIGO 입고 전기(101) | SES 작성 후 승인 → GR 자동 전기 |
| 재고 반영 | 재고 수량/금액 증가 | 재고 없음, 즉시 비용화(원가센터 등으로 소비 전기) |
| 회계 분개(수령 시점) | 차변 재고 / 대변 GR/IR(WRX) | 차변 비용(원가센터) / 대변 GR/IR(WRX) |
| 송장 검증 | 3-way match: PO–GR–IR | 3-way match: PO–SES(승인분)–IR |
핵심은 두 가지입니다. 첫째, 서비스 품목은 재고화되지 않으므로 계정지정범주가 필수이고, 승인 시점에 곧바로 비용 계정으로 흘러갑니다. 둘째, GR/IR 정산계정(계정키 WRX)은 양쪽 모두 동일하게 사용됩니다. 그래서 송장검증(MIRO) 단계에서 자재는 입고 수량과, 서비스는 승인된 SES 금액과 대사됩니다. 승인되지 않은 SES는 회계상 존재하지 않는 것과 같아서, 송장이 먼저 들어오면 보류(Block)됩니다. 또 하나, ECC의 클래식 방식에서는 발주 품목범주 D(서비스)와 서비스 마스터(AC03)·서비스 사양(Service Specification)을 사용하지만, S/4HANA Lean Services에서는 제품유형그룹이 '서비스'인 품목으로 단순화되어 SES도 품목 단위로 가볍게 생성됩니다.
실전 예제 3단계
가상의 제조사 한빛정밀이 두 건을 발주하는 시나리오로 진행합니다. 하나는 대성메탈에서 알루미늄 프레임 100EA(자재), 다른 하나는 테크케어솔루션의 설비 정기점검 서비스(월 단위)입니다.
1단계 — 두 발주의 생성과 수령 확인 흐름 비교
자재 발주는 ME21N에서 자재번호·수량·플랜트를 입력하면 끝이지만, 서비스 발주는 품목에 계정지정범주 K(원가센터)와 제품유형 '서비스'를 지정하고 원가센터(예: HB-MAINT01)를 입력합니다. 수령 단계에서 자재는 MIGO, 서비스는 Manage Service Entry Sheets 앱(ECC라면 ML81N)에서 내역을 기록합니다. 두 흐름이 실제로 어디까지 진행됐는지 발주이력 테이블(EKBE)로 확인하는 간단한 리포트입니다.
REPORT zr_hb_po_progress.
" 한빛정밀: 발주별 수령 진행 현황 (자재 GR vs 서비스 SES)
SELECT p~ebeln, p~ebelp, p~knttp, " 계정지정범주
h~vgabe, " 1 = 입고(GR)
h~belnr, h~menge, h~dmbtr
FROM ekpo AS p
LEFT OUTER JOIN ekbe AS h
ON h~ebeln = p~ebeln AND h~ebelp = p~ebelp
AND h~vgabe = '1'
WHERE p~ebeln IN ('4500018802', '4500018803')
INTO TABLE @DATA(lt_progress).
LOOP AT lt_progress INTO DATA(ls_row).
" 서비스 품목(계정지정 K)도 SES 승인 시 VGABE '1' 이력이 생긴다
" => 승인 = 입고와 동일한 이력 유형으로 기록됨을 확인 가능
WRITE: / ls_row-ebeln, ls_row-ebelp,
ls_row-knttp, ls_row-belnr, ls_row-dmbtr.
ENDLOOP.
실행해 보면 서비스 품목도 SES 승인 후에는 자재와 똑같이 입고 이력(VGABE '1')이 쌓입니다. "승인이 입고를 대체한다"가 데이터 레벨에서 검증되는 지점입니다.
2단계 — 실무 시나리오: SES 자동 생성과 에러 로깅
테크케어솔루션이 매월 점검 결과를 파일로 보내오고, 한빛정밀은 이를 근거로 SES를 자동 생성한다고 가정합니다. S/4HANA에서는 서비스 내역 OData API를 쓰는 방식이 일반적으로 권장되며, 온프레미스 ABAP 내부 처리라면 BAPI를 래핑해 에러를 애플리케이션 로그(BAL)에 남기는 방식이 실용적입니다.
CLASS zcl_hb_ses_creator DEFINITION.
PUBLIC SECTION.
METHODS create_monthly_ses
IMPORTING iv_po TYPE ebeln
iv_work_date TYPE datum
iv_amount TYPE bapicurr_d
RAISING zcx_hb_ses_error.
ENDCLASS.
CLASS zcl_hb_ses_creator IMPLEMENTATION.
METHOD create_monthly_ses.
DATA lt_return TYPE STANDARD TABLE OF bapiret2.
" ... BAPI_ENTRYSHEET_CREATE 파라미터 구성 (발주/품목/수행일/금액) ...
CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
" ...전달 파라미터 생략...
TABLES return = lt_return.
IF line_exists( lt_return[ type = 'E' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
" 실패 사유를 BAL 로그(객체 ZHB_PROC)에 적재 후 예외 전파
log_messages( it_return = lt_return
iv_object = 'ZHB_PROC' iv_subobj = 'SES' ).
RAISE EXCEPTION TYPE zcx_hb_ses_error
EXPORTING po_number = iv_po.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING wait = abap_true.
ENDMETHOD.
ENDCLASS.
실무 포인트는 세 가지입니다. (1) 생성과 승인은 반드시 분리합니다 — 자동 생성하더라도 승인은 책임자가 수행해야 내부통제가 성립합니다. (2) 에러는 반환 테이블의 E 메시지를 BAL에 남겨 월말 정산 시 추적 가능하게 합니다. (3) 발주 잔여 금액 초과 시 BAPI가 에러를 반환하므로, 사전에 EKPO의 발주 금액 대비 누적 SES 금액을 검증하는 가드를 두면 재작업이 줄어듭니다.
3단계 — 프로덕션: 승인 워크플로·허용오차·테스트
운영 반영 전 점검 목록입니다.
- 승인 흐름: S/4HANA의 Flexible Workflow에서 서비스 내역 승인 시나리오를 활성화하고, 금액 구간별 승인자(예: 500만 원 초과 시 팀장 승인)를 조건으로 겁니다. ECC에서는 SES 릴리스 전략(구매문서 릴리스와 유사한 구성)을 사용합니다.
- 권한 분리(SoD): SES 생성 권한과 승인 권한을 동일 사용자에게 주지 않습니다. 승인은 곧 회계 전기이므로, 자재의 입고 담당–검수 담당 분리와 같은 원칙이 적용됩니다.
- 송장 허용오차: 송장검증 허용오차 키(예: 가격 편차 PP)를 설정해, 승인된 SES 금액과 송장 금액의 미세 차이를 자동 허용하거나 보류시킬 기준을 정합니다.
- 테스트: 승인 전 송장 입고 → 보류 확인, 승인 후 송장 → 정상 대사, 부분 승인 → 부분 송장 케이스를 최소 세트로 검증합니다. 자동 생성 클래스는 BAPI 호출부를 인터페이스로 추출해 단위 테스트에서 목(mock)으로 대체하는 구성이 일반적입니다.
- 성능: 월말 일괄 생성 시 건별 커밋 대신 묶음 처리 + 실패 건만 재처리 큐로 분리하면 마감 시간대 부하가 줄어듭니다.
삽질 노트
Q1. 서비스 발주인데 MIGO에서 입고하려니 품목이 안 보입니다.
정상입니다. 서비스 품목은 MIGO 대상이 아니며, SES 승인 시 GR 문서가 자동 생성됩니다. 억지로 입고할 방법을 찾기보다 SES 흐름을 태우는 것이 맞습니다.
Q2. 송장이 먼저 도착했는데 MIRO에서 대사 금액이 0으로 나옵니다.
SES가 미승인 상태일 가능성이 큽니다. 미승인 SES는 회계적으로 미수령과 동일하므로, GR 기반 송장검증(GR-Based IV) 설정이라면 송장 자체가 보류됩니다. 승인 처리 후 재검증하거나, 프로세스상 벤더에게 "SES 승인 후 송장 발행"을 계약 조건으로 안내하는 편이 근본 해결입니다.
Q3. 월말인데 수행은 끝났고 SES 승인이 안 났습니다. 비용 인식은요?
승인 전에는 비용 전기가 없으므로 발생주의 관점의 누락이 생길 수 있습니다. 일반적으로 미승인 SES 목록을 뽑아 미착비용(accrual)을 수기 또는 자동 전표로 잡고, 익월 승인 시 상계합니다. 상습 지연 부서는 승인 리마인더 워크플로를 거는 것이 효과적입니다.
Q4. ECC의 ML81N 화면과 S/4HANA Fiori 앱의 SES가 서로 안 보입니다.
클래식 MM-SRV의 SES와 Lean Services의 SES는 데이터 모델이 다릅니다. 하나의 발주 유형 체계 안에서 어느 모델을 쓸지 초기 설계 때 정하고 혼용을 피하는 것이 좋습니다.
더 파볼 주제
이 글의 흐름을 이해했다면, 다음 주제로 확장해 보세요. (1) 한도 품목(Limit Item) — 수행 범위를 미리 확정하기 어려운 유지보수성 서비스를 금액 한도로 발주하는 방식, (2) 서비스 조달의 외주 인력 관리(SAP Fieldglass 연계), (3) 송장검증 자동화 — 승인된 SES 기준 ERS(자동 송장 정산)로 벤더 송장 입력 자체를 없애는 구성, (4) SES 승인 데이터를 활용한 구매 KPI 리포팅(승인 리드타임, 미승인 잔액)입니다.
핵심 한 줄
자재 조달은 창고의 실물 입고가, 서비스 조달은 서비스 내역(SES)의 승인이 GR을 만든다 — 승인이 곧 입고이자 비용 전기이므로, 승인 흐름과 권한 분리를 설계하는 것이 서비스 조달 운영의 전부라 해도 과언이 아닙니다.
댓글 0
아직 댓글이 없습니다.