반품 및 환불 처리 데이터 템플릿
반품 및 환불 처리 데이터 템플릿
- 수집 권장 속성
- 추적할 주요 활동
- 데이터 추출 안내
반품 및 환불 처리 속성
| 이름 | 설명 | ||
|---|---|---|---|
| 반품 건 ID ReturnCaseId | 고객의 반품 요청을 식별하는 고유 ID로, 관련된 모든 활동과 문서를 연결합니다. | ||
| 설명 반품 건 ID는 반품 프로세스의 시작부터 종료까지 전체 흐름을 추적하는 기본 키입니다. 각 ID는 특정 고객의 반품 건에 해당하며, 주문 생성, 납품, 검사, 대변 메모 처리 등 관련 이벤트를 모두 포함합니다. 프로세스 분석에서는 이 속성을 기준으로 프로세스 맵을 구성합니다. 개별 이벤트를 처음부터 끝까지 이어지는 건별 흐름으로 묶어, 반품 건마다 프로세스 변형, 처리 시간, 병목을 분석할 수 있습니다. 중요한 이유 반품 흐름의 모든 단계를 연결하는 필수 건 식별자입니다. 이를 통해 전체 프로세스 흐름과 성과를 분석할 수 있습니다. 확보 방법 일반적으로 영업 및 유통(SD) 모듈의 반품 주문 번호입니다. VBAK(Sales Document Header Data) 테이블의 VBELN 필드에서 확인할 수 있으며, 문서 범주(VBAK-VBTYP)는 반품의 경우 'H'입니다. 예시 600001236000045660000789 | |||
| 이벤트 시간 EventTime | 활동이 발생한 정확한 날짜와 시간입니다. | ||
| 설명 이 타임스탬프는 업무 이벤트가 발생한 정확한 시점을 나타냅니다. 프로세스의 모든 활동에 기록되어 건별 이벤트의 시간 순서를 보여줍니다. 이벤트 시간은 활동 간 처리 시간을 계산하고, 대기 시간이 발생하는 병목을 찾으며, 건별 전체 소요 시간을 측정하는 등 시간 기반 분석에 필수적입니다. 서비스 수준 계약(SLA)에 따른 성과 분석과 규정 준수 점검에도 활용됩니다. 중요한 이유 모든 소요 시간 계산, 프로세스 성과 분석, 병목 파악, 반품 건별 처리 일정 확인에 필요한 타임스탬프입니다. 확보 방법 SAP 테이블의 여러 날짜 및 시간 필드에서 가져옵니다. 생성 이벤트에는 VBAK의 ERDAT 및 ERZET 필드를 사용하는 경우가 많습니다. 변경 이벤트에는 CDHDR 테이블의 UDATE 및 UTIME 필드를 사용합니다. 예시 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| 활동 이름 ActivityName | 반품 프로세스에서 발생한 특정 업무 이벤트 또는 단계의 이름입니다. | ||
| 설명 이 속성은 반품 처리 중 발생한 개별 작업이나 상태 변경을 나타냅니다. 예를 들어 '반품 주문 생성', '상품 입고 전기', '대변 메모 생성' 등이 있습니다. 이러한 활동이 모여 프로세스 맵을 구성합니다. 활동의 순서와 빈도를 분석하면 가장 흔한 프로세스 경로, 편차, 재작업 반복을 파악할 수 있습니다. 건별로 어떤 일이 어떤 순서로 발생하는지 이해하는 데 필요한 정보이며, 모든 process mining 분석의 기반이 됩니다. 중요한 이유 활동은 프로세스의 단계를 나타냅니다. 활동의 순서, 소요 시간, 빈도를 분석하면 process mining의 기반이 되는 실제 업무 흐름을 파악할 수 있습니다. 확보 방법 VBUK/VBUP 등의 테이블에 기록된 상태 변경, 문서 생성 이벤트(예: VBAK, LIKP, VBRK) 또는 CDHDR/CDPOS 테이블의 변경 로그에서 가져옵니다. 예시 반품 오더 생성입고 전기대변 메모 생성반품 주문 품목 처리 완료 | |||
| 마지막 데이터 업데이트 LastDataUpdate | 이 프로세스의 데이터가 마지막으로 갱신된 시점을 나타내는 타임스탬프입니다. | ||
| 설명 이 속성은 가장 최근의 데이터 추출 또는 업데이트 날짜와 시간을 기록합니다. 분석에 사용되는 데이터가 얼마나 최신인지 확인할 수 있습니다. 분석 결과의 시의성을 판단하는 데 중요합니다. 사용자는 데이터의 최신 상태를 확인할 수 있으며, 이는 특히 진행 중인 운영을 모니터링할 때 분석 결과의 유효성에 영향을 줍니다. 중요한 이유 데이터의 최신 상태를 보여주므로 사용자는 프로세스 분석이 현재 상황을 얼마나 반영하는지, 다음 업데이트가 언제 예정되어 있는지 확인할 수 있습니다. 확보 방법 데이터 추출 작업의 실행 타임스탬프를 저장하는 메타데이터 속성입니다. 예시 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| 소스 시스템 SourceSystem | 데이터를 추출한 시스템입니다. | ||
| 설명 이 속성은 데이터의 출처를 식별하며, 여러 시스템을 사용하는 환경에서 중요합니다. 데이터 계보와 무결성을 확인하는 데 필요한 맥락을 제공합니다. 분석에서는 서로 다른 소스 시스템의 프로세스를 결합할 때 데이터를 구분하거나 필터링하는 데 사용합니다. 이 사례에서는 이벤트가 예상한 애플리케이션인 SAP ECC에서 발생했는지 확인할 수 있습니다. 중요한 이유 데이터 거버넌스와 여러 기업 시스템에 걸친 분석에 필요한 데이터 출처를 식별합니다. 확보 방법 데이터 추출 시 특정 SAP ECC 인스턴스(예: 'ECC_PROD_100')를 식별하도록 설정하는 고정값입니다. 예시 SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| 반품 사유 ReturnReason | 고객이 품목을 반품할 때 입력한 사유 코드입니다. | ||
| 설명 이 속성은 SAP에 미리 정의된 사유 코드로 제품 반품 이유를 나타냅니다. 예를 들면 '운송 중 파손', '잘못된 상품 배송', '사이즈가 맞지 않음' 등이 있습니다. 근본 원인 분석에 중요한 기준입니다. 반품 사유별로 프로세스 맵이나 KPI를 필터링하면 특정 사유가 처리 시간 증가, 검사 불합격률 상승 또는 특정 프로세스 편차와 관련이 있는지 파악할 수 있습니다. 이 결과를 바탕으로 제품 품질, 물류 또는 영업 프로세스를 개선할 수 있습니다. 중요한 이유 반품이 발생하는 이유를 파악해 제품 품질, 배송 또는 상품 설명 문제를 개선하고 반품률을 낮출 수 있습니다. 확보 방법 Sales Document Item 테이블 VBAP의 ABGRU 필드(판매 문서 거부 사유)에 저장됩니다. 예시 001 - 제품 파손002 - 잘못된 제품005 - 배송 지연 | |||
| 반품 채널 ReturnChannel | 온라인, 매장 또는 콜센터 등 반품을 요청한 채널입니다. | ||
| 설명 이 속성은 반품 요청이 접수된 경로나 방식을 나타냅니다. 웹 포털, 오프라인 매장 또는 고객 서비스 담당자를 통해 접수된 반품을 구분할 수 있습니다. 반품 채널별로 프로세스를 나누어 보면 운영 방식과 리소스 배분의 차이를 파악할 수 있습니다. 예를 들어 매장 반품은 검사 시간이 짧을 수 있지만 온라인 반품과 문서 처리 단계가 다를 수 있습니다. '반품 프로세스 처리량 추이' 대시보드의 주요 분석 기준입니다. 중요한 이유 반품 요청이 접수된 경로를 구분합니다. 채널에 따라 프로세스 흐름, 필요한 리소스, 처리 시간이 달라질 수 있습니다. 확보 방법 SAP ECC의 표준 필드가 아닌 경우가 많아 VBAK의 사용자 정의 필드에서 가져오거나 영업 조직(VKORG), 유통 경로(VTWEG) 등의 데이터로 추론해야 할 수 있습니다. 구체적인 구현 방식은 SAP ECC 문서를 확인하십시오. 예시 온라인 포털매장콜센터 | |||
| 실제 환급액 ActualRefundAmount | 재무 문서에 전기된 최종 고객 환급액입니다. | ||
| 설명 이 속성은 회계 시스템에서 처리하고 전기한 최종 확정 환급액입니다. 재입고 수수료, 품목 상태에 따른 조정 또는 기타 정책 적용으로 요청 금액과 다를 수 있습니다. '환급액 차이 추적' 대시보드의 주요 속성입니다. 요청 금액과 비교하면 환급액 계산 및 승인 과정의 반복적인 문제를 파악하고 재무 정확성을 확인할 수 있습니다. 중요한 이유 반품의 최종 재무 결과를 나타냅니다. 요청 금액과 비교해 정확성을 확인하고 재무 누수를 파악할 수 있습니다. 확보 방법 대변 메모와 연결된 재무 문서에서 가져옵니다. 일반적으로 관련 총계정원장 계정 전표의 BSEG(Accounting Document Segment) 테이블에서 WRBTR(문서 통화 금액) 필드로 확인할 수 있습니다. 예시 150.0045.001200.75 | |||
| 요청 환급액 RequestedRefundAmount | 예상 환급액으로, 일반적으로 반품 품목의 순액을 기준으로 합니다. | ||
| 설명 이 속성은 반품 주문에 기록된 최초 반품 금액을 나타냅니다. 재무 분석과 대사에 사용할 기준값입니다. 이 금액을 '실제 환급액'과 비교해 차이를 추적합니다. 이는 '환급액 차이 추적' 대시보드의 주요 지표입니다. 이 값을 분석하면 반품의 재무 영향을 모니터링하고 가격 책정이나 대변 금액 계산의 문제를 파악할 수 있습니다. 중요한 이유 반품의 최초 재무 가치를 설정합니다. 재무상 차이를 추적하고 반품 상품의 총액을 파악하는 데 중요합니다. 확보 방법 일반적으로 반품 주문 품목 수준의 순액입니다. VBAP 테이블의 NETWR 필드에서 확인할 수 있습니다. 예시 150.0049.991250.75 | |||
| 자재 번호 MaterialNumber | 반품 대상 제품을 식별하는 고유 번호입니다. | ||
| 설명 자재 번호 또는 SKU는 반품 대상 품목을 정확히 식별합니다. 이를 통해 제품별로 상세하게 분석할 수 있습니다. 자재 번호별 반품을 분석하면 반품률이 높은 제품을 찾아낼 수 있습니다. 이는 품질 문제, 부정확한 상품 설명 또는 제조 결함을 나타낼 수 있습니다. '반품이 재고에 미치는 영향' 대시보드에 필요하며, 제품별 반품 처리 흐름을 파악하는 데도 활용됩니다. 중요한 이유 반품되는 제품을 식별해 품질 관리 문제나 부정확한 상품 설명을 파악할 수 있습니다. 확보 방법 Sales Document Item 테이블 VBAP의 MATNR 필드에서 확인할 수 있습니다. 예시 RM-1025FG-2050-BACC-5591 | |||
| 처리 담당자 ProcessingAgent | 활동을 수행한 직원의 사용자 ID입니다. | ||
| 설명 이 속성은 반품 주문 생성이나 상품 입고 전기 등 특정 프로세스 단계를 수행한 담당자의 사용자 이름을 기록합니다. 일반적으로 '변경자' 또는 '생성자' 사용자로 표시됩니다. 처리 담당자별 분석은 성과 관리와 리소스 분석에 중요합니다. 우수한 성과를 내는 담당자, 추가 교육이 필요한 담당자, 팀 내 업무량 분포를 파악할 수 있습니다. '담당자별 반품 처리 성과' 대시보드에서 처리 시간과 처리량을 비교하는 데도 사용됩니다. 중요한 이유 사용자 참여 내역을 추적해 팀 성과와 업무량 분포를 분석하고, 교육 필요성이나 모범 사례를 파악할 수 있습니다. 확보 방법 일반적으로 VBAK, LIKP, VBRK 등의 헤더 테이블에서 ERNAM(생성자) 또는 AENAM(변경자) 필드로 확인할 수 있습니다. 변경 이벤트의 경우 CDHDR의 USERNAME 필드를 사용합니다. 예시 CBURNSDSCRANTONJHALPERT | |||
| SLA 준수 여부 IsSLACompliant | 환급이 합의된 서비스 수준 계약(SLA) 내에 처리되었는지 나타내는 플래그입니다. | ||
| 설명 '환급 처리' 활동의 실제 날짜와 '환급 SLA 목표일'을 비교해 산출하는 불리언 속성입니다. 환급이 기한 내 완료되면 true, 그렇지 않으면 false입니다. 이 속성은 건별 SLA 성과를 명확한 이진 결과로 제공해 분석과 보고를 간소화합니다. 전체 '환급 처리 SLA 준수' 비율을 계산하고, 미준수 건을 필터링해 분석하는 데 사용됩니다. 중요한 이유 건별 SLA 성과를 명확한 이진 값으로 표시해 규정 준수 모니터링과 보고를 간소화합니다. 확보 방법 계산된 속성입니다. 계산식은 '환급 처리' EventTime <= RefundSLATargetDate입니다. 예시 truefalse | |||
| 고객 ID CustomerId | 반품을 요청한 고객을 식별하는 고유 ID입니다. | ||
| 설명 이 속성은 제품을 반품하는 고객, 즉 SAP 용어로 '판매처(Sold-to Party)'를 식별합니다. 반품 거래를 고객 마스터 데이터와 연결합니다. 고객 ID별 분석으로 반품이 잦은 고객을 파악할 수 있습니다. 이는 고객 불만이나 반품 정책의 악용 가능성을 나타낼 수 있습니다. 고객 세분화 데이터와 함께 사용하면 고객 그룹별 반품 행동이나 프로세스 경험의 차이도 확인할 수 있습니다. 중요한 이유 반품을 고객별로 연결해 고객 행동을 분석하고, 반복 반품 고객과 고객 관계에 미치는 영향을 파악할 수 있습니다. 확보 방법 Sales Document Header 테이블 VBAK의 KUNNR 필드(판매처)에 저장됩니다. 예시 CUST-100432CUST-203991CUST-831102 | |||
| 대변 메모 번호 CreditMemoNumber | 환급을 위해 발행한 대변 메모 문서의 고유 식별자입니다. | ||
| 설명 대변 메모는 고객에게 지급할 환급액을 확정하는 SAP의 공식 대금 청구 문서입니다. 이 번호로 해당 재무 문서를 고유하게 식별합니다. 이 속성은 재무 대사와 운영상 반품부터 재무 정산까지의 흐름을 추적하는 데 필요합니다. 프로세스의 주요 단계이며, '실제 환급액'과 같은 속성에 필요한 관련 회계 문서를 찾는 데 사용됩니다. 중요한 이유 고객 환급을 승인하는 재무 문서로 바로 연결되므로 재무 감사와 대사에 필요합니다. 확보 방법 대변 메모는 대금 청구 문서입니다. 번호는 VBRK 테이블(Billing Document: Header Data)의 VBELN 필드에서 확인할 수 있습니다. 반품 주문의 문서 흐름을 통해 연결 정보를 찾습니다. 예시 900011229000334490005566 | |||
| 반품 정책 준수 ReturnPolicyAdherence | 반품이 정의된 모든 업무 규칙과 정책을 준수하는지 나타내는 플래그입니다. | ||
| 설명 이 계산된 불리언 속성은 반품 건이 회사의 표준 정책을 따랐는지 나타냅니다. 허용 기간 내에 반품을 요청했는지, 사유 코드가 해당 제품에 유효한지, 예외에 대해 관리자 승인을 받았는지 등 여러 조건을 확인할 수 있습니다. 이 속성은 '반품 승인 정책 준수' 대시보드에 사용됩니다. 준수율을 직접 측정하고 자주 우회되는 정책을 파악해 대상별 프로세스 개선이나 교육을 진행할 수 있습니다. 중요한 이유 업무 규칙 준수 여부를 측정해 정책을 일관되게 적용하고 별도 검토나 승인이 필요한 건을 파악할 수 있습니다. 확보 방법 업무 규칙을 바탕으로 산출하는 속성입니다. 예: (반품 시작일 - 최초 구매일) <= 30일 AND ReturnReason IS NOT NULL. 예시 truefalse | |||
| 반품 주문 상태 ReturnOrderStatus | 반품 주문 건의 전체 처리 상태입니다. | ||
| 설명 이 속성은 반품 건의 현재 상태를 '미결', '처리 중', '완료' 등으로 보여줍니다. 판매 문서의 헤더 또는 품목 수준 상태를 조합해 산출합니다. 분석에서는 진행 중이거나 완료된 반품 건을 필터링하는 데 유용합니다. 미결 건의 전체 업무량과 진행 상황을 모니터링하고 반품 흐름별 상위 수준의 결과를 확인할 수 있습니다. 중요한 이유 건별 처리 단계의 전반적인 상태를 보여주므로 미결, 진행 중 또는 종료된 반품을 필터링하고 분석할 수 있습니다. 확보 방법 VBUK(헤더 상태) 및 VBUP(품목 상태) 테이블의 상태 필드에서 산출합니다. 예를 들어 VBUK-GBSTK는 문서의 전체 처리 상태입니다. 예시 미결처리 중완료 | |||
| 원본 판매 문서 OriginalSalesDocument | 반품의 기준이 되는 원본 판매 주문 번호입니다. | ||
| 설명 이 속성은 최초 고객 구매와 직접 연결되는 참조 문서입니다. 반품과 원래 거래의 세부 정보를 연결합니다. 이 연결 정보는 심층 분석에 유용합니다. 특정 주문의 상품이 반품된 이유를 조사하고, 원래 가격과 조건을 확인하며, 고객 주문부터 반품까지 전체 흐름을 파악할 수 있습니다. 특정 캠페인이나 채널을 통해 판매된 제품의 반품률이 높은지도 확인할 수 있습니다. 중요한 이유 반품을 원래 판매와 연결해 고객 거래의 전체 흐름을 확인하고 근본 원인을 심층 분석할 수 있습니다. 확보 방법 이 참조 정보는 반품 주문의 품목 수준에 저장됩니다. VBAP 테이블의 VGBEL 필드(참조 문서 번호)에서 확인할 수 있습니다. 예시 100034561000987110012345 | |||
| 플랜트 Plant | 반품 품목을 입고하고 처리하는 물리적 장소 또는 시설입니다. | ||
| 설명 SAP에서 플랜트는 상품을 취급하는 창고나 물류 센터 등의 물리적 장소를 의미합니다. 반품의 경우 일반적으로 품목을 입고하고 검사하는 장소입니다. 플랜트별로 프로세스를 분석하면 시설 간 성과 차이를 파악할 수 있습니다. 품목 검사 효율이나 처리량이 높은 창고를 찾아 '품목 검사 처리량 및 효율' 대시보드에 활용할 수 있습니다. 중요한 이유 반품을 처리하는 물리적 장소를 식별해 창고나 물류 센터별 성과를 비교할 수 있습니다. 확보 방법 반품 주문의 품목 수준에서 확인할 수 있으며, VBAP 테이블의 WERKS 필드에 저장됩니다. 예시 PL01WH02DC05 | |||
| 환급 SLA 목표일 RefundSLATargetDate | 서비스 수준 계약에 따라 환급 처리가 완료될 것으로 예상되는 날짜입니다. | ||
| 설명 이 속성은 반품 건의 환급 프로세스를 완료해야 하는 기한을 정의합니다. 일반적으로 '상품 입고 후 영업일 기준 5일'과 같은 업무 규칙에 따라 계산합니다. 이 목표일을 기준으로 실제 성과를 측정합니다. '환급 처리 SLA 준수' 대시보드의 주요 구성 요소로, 고객과의 약속 이행 여부를 모니터링하고 SLA 위반 위험이 있는 건을 파악할 수 있습니다. 중요한 이유 환급 처리 목표를 설정해 SLA 준수 여부를 측정하고 보고하며, 기한이 지난 건의 우선순위를 정할 수 있습니다. 확보 방법 일반적으로 SAP 표준 필드가 아니므로 업무 규칙에 따라 산출해야 합니다. 주요 날짜 필드(예: MKPF의 상품 입고일)에 설정된 기간을 더해 계산할 수 있습니다. SAP ECC 문서 또는 업무 요구사항을 확인하십시오. 예시 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| 환급액 차이 RefundAmountDiscrepancy | 실제 환급액과 요청 환급액의 차이를 계산한 값입니다. | ||
| 설명 이 계산 지표는 반품 주문에서 최초 요청한 금액과 대변 메모에 최종 발행된 금액의 차이를 수치로 나타냅니다. 양수는 일부 환급을 의미할 수 있으며, 음수는 일반적이지 않지만 초과 지급을 나타낼 수 있습니다. '환급액 차이 추적' 대시보드의 주요 지표입니다. 품목 상태 평가, 재입고 수수료 또는 오류로 인해 발생한 재무상 차이가 있는 건을 빠르게 찾아 분석할 수 있습니다. 이를 모니터링하면 재무 통제와 정책 준수에 도움이 됩니다. 중요한 이유 환급 프로세스의 재무상 차이를 직접 측정해 정책 미준수, 처리 오류 또는 재무 누수를 파악할 수 있습니다. 확보 방법 계산 필드: ActualRefundAmount - RequestedRefundAmount. 예시 0.00-4.99-50.00 | |||
| 회사 코드 CompanyCode | 거래를 담당하는 법인 또는 회사입니다. | ||
| 설명 회사 코드는 SAP에서 독립적으로 회계 처리를 수행하는 단위입니다. 반품과 환급을 포함한 모든 재무 거래는 특정 회사 코드에 전기됩니다. 이 속성은 재무 보고와 다국적 또는 다법인 조직의 프로세스 구분에 필요합니다. 회사 코드별로 분석하면 기업 내 법인 간 반품 프로세스 성과를 비교할 수 있습니다. 중요한 이유 조직 내 여러 법인의 반품 프로세스를 필터링하고 비교할 수 있어 재무 분석에 중요합니다. 확보 방법 Sales Document Header 테이블 VBAK의 BUKRS_VF 필드(대금 청구 회사 코드)에서 확인할 수 있습니다. 예시 10002000US01 | |||
반품 및 환불 처리 활동
| 활동 | 설명 | ||
|---|---|---|---|
| 대변 메모 생성 | 고객에게 환급할 금액을 승인하기 위해 대금 청구 문서(대변 메모)를 생성합니다. 환급 금액을 공식적으로 확정하는 재무 문서입니다. | ||
| 중요한 이유 프로세스에서 중요한 재무 단계입니다. 대변 메모 생성까지 걸린 시간을 분석하면 상품 입고 및 검사 후 재무 문서 처리 지연을 파악할 수 있습니다. 확보 방법 VBRK 테이블(Billing Document Header)에 명시적으로 기록되는 이벤트입니다. 생성일은 VBRK-ERDAT에 저장됩니다. 문서 흐름에서 대변 메모는 반품 주문 또는 대변 메모 요청과 연결됩니다. 기록 해당 대금 청구 문서의 VBRK 테이블에서 생성 타임스탬프(ERDAT)를 사용합니다. 이벤트 유형 explicit | |||
| 대변 메모의 FI 전기 | 대변 메모를 재무회계로 전송해 공식 매출채권 전표로 처리합니다. 이 단계에서 고객에게 실제 환급금을 지급하는 절차가 시작됩니다. | ||
| 중요한 이유 이 활동은 회사가 환급을 재무적으로 인식하는 시점을 나타냅니다. 대변 메모 생성부터 전기까지 지연되면 고객 환급도 늦어질 수 있습니다. 확보 방법 추론된 이벤트입니다. 대금 청구 문서 헤더의 전기 상태(VBRK-RFBSK)가 'C'(전기 문서 생성됨)로 변경될 때 식별합니다. 실제 회계 문서 생성일은 BKPF 테이블에 저장됩니다. 기록 VBRK-RFBSK가 'C'로 설정된 타임스탬프를 식별하거나, 연결된 BKPF 회계 문서의 생성일(CPUDT)을 사용합니다. 이벤트 유형 inferred | |||
| 반품 오더 생성 | 고객이 상품 반품을 요청하면 이 활동과 함께 반품 프로세스가 시작됩니다. SAP ECC에서 '반품' 유형(예: RE)의 새 판매 문서가 생성될 때 기록됩니다. | ||
| 중요한 이유 반품 프로세스의 주요 시작 이벤트입니다. 이 활동부터 다른 활동까지 걸리는 시간을 분석하면 전체 처리 시간을 측정하고 초기 처리 지연을 파악할 수 있습니다. 확보 방법 VBAK 테이블(판매 문서 헤더)에 명시적으로 기록되는 이벤트입니다. 해당 판매 문서 번호(VBAK-VBELN)와 오더 유형 VBAK-AUART = 'RE'에 대한 생성 타임스탬프는 VBAK-ERDAT 및 VBAK-ERZET에 저장됩니다. 기록 판매 문서 유형 'RE'에 해당하는 VBAK 테이블의 생성 타임스탬프(ERDAT, ERZET)를 사용합니다. 이벤트 유형 explicit | |||
| 반품 주문 완료 | 이 활동은 영업 및 유통 관점에서 반품 프로세스가 끝나는 시점을 나타냅니다. 반품 주문의 모든 품목이 완전히 처리되고 종료되면 발생합니다. | ||
| 중요한 이유 프로세스의 주요 종료 이벤트입니다. '반품 주문 생성'부터 이 활동까지 걸린 시간을 측정하면 반품 건의 전체 처리 시간을 알 수 있습니다. 확보 방법 상태 테이블에서 추론한 이벤트입니다. 판매 문서 헤더의 전체 상태(VBUK-GBSTK)가 'C'(완전히 처리됨)로 변경될 때 기록합니다. 기록 헤더 상태 필드 VBUK-GBSTK가 'C'로 변경된 시점을 변경 문서(CDHDR/CDPOS)에서 식별합니다. 이벤트 유형 inferred | |||
| 사용 결정 완료 | 검사 후 품질 엔지니어나 검사 담당자가 반품 상품의 상태를 공식적으로 판정합니다. 이 결정에 따라 재고로 복귀, 폐기, 수리 등의 후속 프로세스가 정해집니다. | ||
| 중요한 이유 검사 효율과 결과를 파악하는 데 중요한 활동입니다. 판정 결과는 환불 금액과 재고 관리에 직접 영향을 줍니다. 확보 방법 SAP QM을 사용하는 경우 QAVE 테이블(검사 처리 사용 결정)에 명시적으로 기록되는 이벤트입니다. 결정 시각은 QAVE-VDATUM에 저장됩니다. 납품과의 연결 정보는 QALS 테이블에서 확인할 수 있습니다. 기록 검사 로트(QALS-PRUEFLOS)를 통해 연결된 QAVE 테이블의 사용 결정일(VDATUM)을 사용합니다. 이벤트 유형 explicit | |||
| 입고 전기 | 반품된 상품이 창고나 처리 센터에 도착하면 이 활동이 발생합니다. 반품 납품에 대한 자재 이동 문서가 전기될 때 기록됩니다. | ||
| 중요한 이유 회사가 반품 상품을 인수했음을 나타내는 주요 단계입니다. 실제 검사의 시작점이며 재고 정확도에도 영향을 줍니다. 확보 방법 VBUP 테이블에서 반품 납품 품목의 자재 이동 상태(예: WBSTA = 'C')를 확인해 이 이벤트를 추론할 수 있습니다. 정확한 타임스탬프는 해당 입고의 자재 문서 헤더(MKPF-BUDAT)에 저장됩니다. 기록 반품 납품과 연결된 자재 문서의 전기일(BUDAT)을 MKPF 테이블에서 확인합니다. 이벤트 유형 inferred | |||
| 대변 메모 반제 | 매출채권의 미결 대변 항목을 반제합니다. 일반적으로 고객에게 지급이 이루어질 때 처리됩니다. 이 이벤트는 환급의 재무 처리가 최종 완료되는 시점을 나타냅니다. | ||
| 중요한 이유 이 활동은 고객에게 현금이 지급되었음을 확인하고 프로세스의 재무 처리를 완료합니다. 고객 관점에서 환급 절차가 실제로 끝나는 시점입니다. 확보 방법 FI 모듈에 명시적으로 기록되는 이벤트입니다. 해당 고객 개별 항목의 회계 문서 반제일은 BSEG 테이블(BSEG-AUGDT)에 저장됩니다. 기록 대변 메모와 연결된 회계 문서의 반제일(AUGDT)을 BSEG 또는 BSAD 테이블에서 사용합니다. 이벤트 유형 explicit | |||
| 대변 메모 요청 생성 | 환불 필요성을 공식적으로 기록하기 위해 대변 메모 요청을 생성합니다. 여러 설정에서는 반품 오더 자체가 대변 메모 요청 역할을 합니다. | ||
| 중요한 이유 반품 프로세스의 재무 정산 단계가 공식적으로 시작되는 시점입니다. 이후 재무 승인과 문서 생성을 위한 기준이 됩니다. 확보 방법 판매 문서 유형이 '대변 메모 요청'(예: CR)인 경우 VBAK에 명시적으로 기록되는 이벤트입니다. 오더 관련 청구로 설정된 경우에는 '반품 오더 생성'과 같은 이벤트일 수 있습니다. 기록 문서 유형 'CR'의 경우 VBAK에서 생성 타임스탬프(ERDAT)를 사용하거나 반품 오더 생성 이벤트를 재사용합니다. 이벤트 유형 explicit | |||
| 반품 납품 생성 | 반품 상품의 실제 입고를 관리하기 위한 납품 문서가 생성됩니다. 이 이벤트는 반품 물류 프로세스가 시작되었음을 나타냅니다. | ||
| 중요한 이유 관리 처리에서 실제 물류로 넘어가는 시점을 추적합니다. 이 단계의 지연은 창고 계획과 전체 반품 처리 시간에 영향을 줄 수 있습니다. 확보 방법 LIKP 테이블(납품 헤더)에 명시적으로 기록되는 이벤트입니다. 생성 타임스탬프는 LIKP-ERDAT에 저장됩니다. 원본 반품 오더와 연결되는 정보는 LIPS 테이블(LIPS-VGBEL)에서 확인할 수 있습니다. 기록 반품 오더와 연결된 납품의 생성 타임스탬프(ERDAT)를 LIKP 테이블에서 사용합니다. 이벤트 유형 explicit | |||
| 반품 오더 차단 해제 | 반품 요청이 승인되어 다음 단계로 진행할 수 있음을 나타냅니다. 일반적으로 문서 상태가 변경되거나 납품 또는 청구 차단이 해제될 때 기록됩니다. | ||
| 중요한 이유 중요한 승인 단계입니다. 이 단계에 도달하는 데 걸리는 시간을 측정하면 반품 승인 및 허가 프로세스의 병목을 파악할 수 있습니다. 확보 방법 판매 문서 변경 로그에서 추론하는 이벤트입니다. VBAK 또는 VBAP의 차단 필드 변경이나 VBUK/VBUP의 상태 필드 변경을 CDHDR 및 CDPOS 테이블에서 확인합니다. 기록 관련 차단 상태가 해제된 시점의 타임스탬프를 변경 문서 테이블(CDHDR/CDPOS)에서 확인합니다. 이벤트 유형 inferred | |||
| 반품 주문 품목 거부 | 반품 주문의 특정 품목이 최초 검토 중 또는 검사 후 거부됩니다. 해당 품목은 환급을 포함한 후속 처리가 진행되지 않습니다. | ||
| 중요한 이유 거부 사례를 분석하면 유효하지 않은 반품 요청을 파악하고 고객 정책 안내를 개선할 수 있습니다. 환급으로 이어지지 않는 주요 프로세스 경로입니다. 확보 방법 추론된 이벤트입니다. 일반적으로 VBAP 테이블의 품목에 고유한 '거부 사유' 코드(VBAP-ABGRU)가 설정될 때 기록합니다. 타임스탬프는 변경 로그에서 가져와야 합니다. 기록 반품 품목의 VBAP-ABGRU 필드에 값이 입력된 시점을 변경 문서(CDHDR/CDPOS)에서 식별합니다. 이벤트 유형 inferred | |||
| 반품 주문 품목 처리 완료 | 반품 주문의 개별 품목이 완전히 처리된 상태로 표시됩니다. 일반적으로 해당 품목의 물류 및 후속 재무 문서 처리가 모두 끝난 뒤에 발생합니다. | ||
| 중요한 이유 품목별로 추적하면 처리 지연이 긴 제품이나 반품 사유를 파악할 수 있습니다. 프로세스 완료 상태를 더 세부적으로 확인할 수 있습니다. 확보 방법 상태 테이블에서 추론한 이벤트입니다. 판매 문서 품목의 전체 상태(VBUP-GBSTK)가 'C'(완전히 처리됨)로 변경될 때 기록합니다. 기록 품목 상태 필드 VBUP-GBSTK가 'C'로 변경된 시점을 변경 문서(CDHDR/CDPOS)에서 식별합니다. 이벤트 유형 inferred | |||
데이터 추출 가이드
단계
- ABAP 프로그램 만들기: 트랜잭션 코드
SE38을 사용해 새 실행형 ABAP 프로그램을 만듭니다. 예를 들어Z_PM_RETURN_EXTRACTION을 사용할 수 있습니다. 설명이 포함된 제목을 입력하고 로컬 객체 또는 개발 패키지에 저장합니다. - 선택 화면 정의하기: 프로그램에서 사용자가 데이터를 필터링할 수 있도록 선택 화면을 정의합니다. 주요 필터에는 반품 주문 생성일 범위(
S_ERDAT), 반품에 사용하는 판매 문서 유형(S_AUART, 예: 'RE'), 회사 코드(P_BUKRS)가 포함됩니다. - 데이터 구조 정의하기: 필요한 이벤트 로그 형식에 맞는 로컬 구조 유형을 만듭니다. 이 구조에는
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReason및 기타 필수 속성이 포함되어야 합니다. - 데이터 선택 로직 구현하기: 필수 활동 12개 각각의 데이터를 선택하는 핵심 ABAP 로직을 작성합니다. VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR, CDPOS 등의 SAP 테이블을 조회합니다. 문서 흐름 테이블(VBFA)을 사용해 납품 및 대변 메모와 같은 관련 문서를 원래 반품 주문에 연결합니다.
- '반품 주문 생성' 추출하기: 선택 화면의 조건에 따라
VBAK및VBAP테이블에서 레코드를 선택합니다. 판매 문서 번호(VBAK-VBELN)를ReturnCaseId로 사용합니다. - 상태 변경 및 주요 이벤트 추출하기: '반품 주문 차단 해제' 또는 '반품 주문 품목 거부'와 같은 활동은 변경 문서 테이블(
CDHDR,CDPOS)이나VBAP의ABGRU와 같은 테이블에 있는 상태 필드를 조회합니다. 물류 및 재무 후속 활동은LIKP,MKPF,VBRK,BKPF등의 테이블에서 선택하고,VBFA를 사용해 최초 반품 주문과 연결되었는지 확인합니다. - 이벤트 로그 테이블 채우기: 조회한 각 활동에 대해 이벤트 로그 구조로 정의한 내부 테이블에 새 레코드를 만듭니다. 원천 SAP 테이블의 데이터를 해당 필드에 매핑합니다. 예를 들어
VBAK-ERNAM은ProcessingAgent에,VBAK-ERDAT와VBAK-ERZET은EventTime에 매핑합니다. - 활동 데이터 통합하기: 각 활동의 SELECT 문 결과를 하나의 기본 내부 테이블에 추가합니다. 이렇게 하면 각 행이 하나의 이벤트를 나타내는 최종 플랫 파일 구조가 만들어집니다.
- 타임스탬프 및 시스템 정보 처리하기: 시스템 필드
SY-DATUM과SY-UZEIT을 사용해 각 행의LastDataUpdate타임스탬프를 채웁니다.SY-SYSID는SourceSystem에 사용합니다. - 출력 기능 구현하기:
REUSE_ALV_GRID_DISPLAY와 같은 함수 모듈을 사용해 온라인 분석용 ALV 그리드(SAP List Viewer)에 결과를 표시하는 기능을 추가합니다. 최종 내부 테이블을 CSV 또는 일반 텍스트 파일로 사용자 컴퓨터에 내려받는 옵션도 제공합니다. - 실행 및 내보내기:
SE38에서 프로그램을 실행합니다. 원하는 선택 조건을 입력하고 실행합니다. 데이터가 표시되거나 처리되면 프로그램의 내보내기 기능으로 이벤트 로그 파일을 저장합니다. ProcessMind와 호환되는 형식, 일반적으로 헤더 행이 포함된 CSV로 저장합니다.
구성
- 날짜 범위: 선택 화면에서 반품 주문 생성일의 범위를 지정합니다. 초기 분석에서는 데이터 양과 프로세스 파악의 균형을 위해 3~6개월 범위를 권장합니다.
- 반품 문서 유형: 시스템에서 반품에 사용하는 판매 문서 유형을 필터링합니다. 예를 들어 반품은 'RE', 대변 메모 요청은 'CR'을 사용할 수 있습니다. 올바른 프로세스만 추출하려면 이 필터가 중요합니다. 해당 값을
S_AUART선택 옵션에 입력합니다. - 회사 코드: 관련 회사 코드(
P_BUKRS)를 지정해 특정 법인의 데이터만 추출합니다. 여러 회사를 운영하는 환경에서는 필수입니다. - 사전 요건: 프로그램 실행 사용자에게
SE38실행 권한과 SD, MM, FI 테이블(예: VBAK, LIKP, VBRK, BKPF, CDHDR) 접근 권한이 필요합니다. 개발에는 ABAP 개발자 역할이 필요합니다. - 성능: 여러 해에 걸친 대규모 데이터에서는 프로그램 실행 시간이 길어질 수 있습니다. 백그라운드 작업(
SM36)으로 실행하고 결과를 온라인에 표시하는 대신 애플리케이션 서버 파일 시스템에 저장하는 방안을 고려하세요.
샘플 쿼리 abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). 단계
- 사전 요건: 필요한 SAP ECC 테이블을 읽을 수 있는 데이터베이스 사용자가 있는지 확인합니다. 여기에는 영업 및 유통(SD), 자재 관리(MM), 재무 회계(FI) 모듈의 테이블이 포함됩니다. 데이터베이스에 연결하려면 DBeaver, SAP HANA Studio 또는 Oracle SQL Developer와 같은 SQL 클라이언트가 필요합니다.
- 시스템별 설정 확인: 쿼리를 실행하기 전에 조직에서 반품에 사용하는 문서 유형을 확인합니다. 쿼리의
[YOUR_RETURN_ORDER_TYPES]자리표시자를 실제 값으로 바꿉니다. 예를 들어 표준 반품에는 'RE'를 사용할 수 있습니다. - 쿼리 준비: 'query' 섹션에 제공된 전체 SQL 쿼리를 SQL 클라이언트에 복사합니다.
- 매개변수 설정: 쿼리 앞부분의
BaseReturnOrders라는 공통 테이블 식(CTE)을 찾습니다.WHERE절에서[START_DATE]와[END_DATE]를 원하는 날짜 범위로 바꿉니다. 반품 주문 유형 목록을 수정하고, 필요한 경우 특정 회사 코드(BUKRS_VF)로 필터링합니다. - 쿼리 실행: 수정한 쿼리를 SAP ECC 데이터베이스에서 실행합니다. 실행 시간은 선택한 날짜 범위와 데이터베이스 크기에 따라 달라질 수 있습니다.
- 원시 데이터 검토: 쿼리가 완료되면 결과를 간단히 확인합니다.
ReturnCaseId,ActivityName,EventTime열에 값이 있고 여러 활동의 데이터가 포함되어 있는지 확인합니다. - CSV로 내보내기: SQL 클라이언트에서 전체 결과를 CSV 파일로 내보냅니다. 문자가 올바르게 보존되도록 UTF-8 인코딩을 사용합니다.
- 업로드 준비: CSV 파일을 열어 열 머리글이 필수 속성 이름과 정확히 일치하는지 확인합니다. 예:
ReturnCaseId,ActivityName,EventTime,SourceSystem. SQL 클라이언트가 내보내는 과정에서 머리글을 변경했다면 수정합니다. - 업로드: 정리된 CSV 파일을 ProcessMind 플랫폼에 업로드해 분석합니다.
구성
- 반품 문서 유형: 쿼리에 SAP 시스템에서 반품 주문을 나타내는 판매 문서 유형을 설정해야 합니다.
[YOUR_RETURN_ORDER_TYPES]자리표시자를 해당 값으로 바꿉니다. 일반적인 예로 'RE' 또는 사용자 지정 'Z' 유형이 있습니다. - 날짜 범위: 추출할 날짜 범위를 적절히 지정해야 합니다. 초기 분석에는 일반적으로 3~6개월 데이터를 권장합니다.
[START_DATE]와[END_DATE]자리표시자에 'YYYYMMDD' 형식으로 입력합니다. - 회사 코드: 회사 코드가 여러 개인 조직에서는 분석 범위를 명확히 하도록 데이터를 필터링해야 합니다. 초기 CTE에
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'와 같은 필터를 추가할 수 있습니다. - 데이터베이스 SQL 방언: 제공된 쿼리는 일반적인 SQL 함수를 사용합니다. 다만
TO_TIMESTAMP와 문자열 연결(CONCAT) 같은 날짜 및 시간 변환은 Oracle, HANA, DB2 등 데이터베이스 시스템에 따라 문법을 일부 조정해야 할 수 있습니다. - 필수 권한: 데이터베이스 사용자에게 다음 주요 테이블의 읽기 권한이 필요합니다: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR, CDPOS.
샘플 쿼리 sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR; 시작할 준비가 되셨나요?
지금 이 템플릿을 활용해 데이터를 효율적으로 수집하고 반품 및 환불 프로세스에 대한 인사이트를 확인하세요.
지금 반품 및 환불 처리를 개선하세요
SAP ECC의 반품 처리를 간소화하고 처리 시간을 30% 단축하세요. 지금 시작하세요.
신용카드 없이 몇 분 만에 설정할 수 있습니다.