ABAP

반품 상태 어떻게 추적해? — I_CustomerReturn #shorts #SAP #ABAP

▶ YouTube에서 보기

개요 및 이 글에서 다룰 것

고객 반품(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

아직 댓글이 없습니다.