개요 및 이 글에서 다룰 것
고객 반품(Customer Return)은 매출 환입, 재고 복원, 환불 정산이 동시에 얽힌 복잡한 프로세스입니다. 전통적인 ABAP 개발에서는 VBAK/VBAP를 직접 조회하면서 오더 타입을 'RE'로 필터링하는 패턴이 흔했지만, S/4HANA에서는 I_CustomerReturn VDM(Virtual Data Model) 뷰로 한 줄에 해결할 수 있습니다. 반품 헤더와 라인 아이템을 CDS View로 추적하고, 어소시에이션을 활용해 청구/배송 문서까지 연결하는 패턴을 다룹니다.
핵심 한 줄
SELECT * FROM I_CustomerReturn WHERE OverallSDProcessStatus <> 'C' — 진행 중인 반품 오더 전체를 헤더 상태 코드와 함께 한 줄로 조회합니다. VBAK 직접 조회에서 AUART='RE' 필터링, 상태 코드 변환, 고객 정보 조인을 일일이 작성하던 번거로움이 사라집니다.
이 글을 보기 전에
ABAP CDS View 기본 문법과 S/4HANA Sales 모듈의 반품 오더 흐름(RE → LR → RE 청구 → 환불)을 이해하고 있다고 가정합니다.
환경 / 버전 / 준비물
- SAP S/4HANA 2022 이상 또는 S/4HANA Cloud Public Edition 2308 이상
- 권한: SD_VBAK, V_VBAK_AAT (오더 타입 RE 허용)
- 개발 도구: ADT (Eclipse 2023-12 이상)
핵심 개념
I_CustomerReturn 주요 필드: CustomerReturn(문서 번호), ReturnReason, ReturnReasonCode, OverallSDProcessStatus('A'=미처리/'B'=부분/'C'=완료), TotalNetAmount, TransactionCurrency. 어소시에이션: _Item, _BillingDocument, _DeliveryDocument, _SoldToParty.
실전 코드 3단계
1단계: 진행 중인 반품 기본 조회
SELECT customerreturn, soldtoparty, returnreason,
returnreasoncode, overallsdprocessstatus,
totalnetamount, transactioncurrency
FROM i_customerreturn
WHERE overallsdprocessstatus <> 'C'
ORDER BY customerreturn DESCENDING
INTO TABLE @DATA(lt_returns)
UP TO 100 ROWS.
2단계: 라인 아이템 + 청구/배송 어소시에이션
SELECT i~customerreturn, i~customerreturnitem,
i~material, i~returnquantity,
h~returnreason, bill~billingdocument
FROM i_customerreturnitem AS i
INNER JOIN i_customerreturn AS h
ON h~customerreturn = i~customerreturn
LEFT OUTER JOIN i_billingdocument AS bill
ON bill~salesdocument = i~customerreturn
WHERE h~overallsdprocessstatus <> 'C'
INTO TABLE @DATA(lt_result).
3단계: 사유별 집계 리포트
SELECT returnreasoncode,
COUNT(*) AS return_count,
SUM( totalnetamount ) AS total_amount,
transactioncurrency
FROM i_customerreturn
WHERE salesorganization = @lv_vkorg
AND creationdate BETWEEN @lv_from AND @lv_to
AND overallsdprocessstatus IN ('B', 'C')
GROUP BY returnreasoncode, transactioncurrency
ORDER BY total_amount DESCENDING
INTO TABLE @DATA(lt_agg).
흔한 실수 / 트러블슈팅
커스텀 반품 오더 타입(ZRE)이 I_CustomerReturn에 안 보이면 SPRO에서 문서 카테고리 매핑을 점검하거나 ZI_CustomerReturn으로 UNION 처리하세요. LEFT OUTER JOIN 청구 조인 시 성능이 느리면 OverallBillingStatus='C' 조건을 먼저 걸어 카디널리티를 줄이세요.
다음 단계 / 관련 주제
C_CustomerReturn 컨슈머 뷰를 RAP으로 OData 서비스로 노출하면 Fiori Elements List Report 앱을 빠르게 만들 수 있습니다. 반품 분석을 SAP Analytics Cloud로 시각화하려면 @Analytics.dataCategory: #FACT 어노테이션이 붙은 큐브 뷰를 추가로 살펴보세요.
참고 자료
- SAP S/4HANA 공식 문서 (help.sap.com)
- SAP Business Accelerator Hub - Customer Return API
댓글 0
아직 댓글이 없습니다.