SAP 반품률 분석 점검 — 출고 대비 반품이 유독 많은 제품·고객부터 가른다
제품군·고객별 출고 대비 반품 수량·금액을 대사해 반품률을 계산하고, 임계치를 넘는 곳을 자동으로 가려냅니다
반품 몇 건이 들어오는지는 다들 보고 있지만, 어느 제품·어느 고객에서 유독 반품이 몰리는지는 전표를 하나씩 열어 보지 않는 이상 잘 드러나지 않습니다. 반품 건수만 보면 판매량이 많은 제품이 항상 상위에 오르기 때문에, 정작 비율로 보면 심각한 곳을 놓치기 쉽습니다.
제품군·고객별로 출고수량·출고금액 대비 반품수량·반품금액을 대사해 수량 기준과 금액 기준 반품률을 함께 계산하고, 임계치를 넘는 제품군·고객을 자동으로 가려내는 화면을 OpenUI5로 구현했습니다. 두 집계 축(제품군별/고객별)의 전체 합계가 서로 일치하는지 대사하는 로직까지 포함해, 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 판매문서 리스트 실행 — 반품 오더유형으로 필터링한 판매문서 리스트의 표준 화면(
VA05)이 만든 데이터를 그대로 이어받아 반품률 계산과 임계치 판정을 더합니다 - 표준 화면 — 청구문서(크레딧메모) 조회(
VF03)의 금액 집계 구조를 참고했습니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 영업(SD) · 판매 분석 |
| 대상 영역 | 제품군·고객별 반품률 분석 — 출고 대비 반품 수량·금액 대사, 임계치 초과 판정 |
| Namespace | zui5.returnrate |
| 셸 구조 | 조회조건 영역(우측 조회) + 반품률 요약 KPI 배너 + 명세/집계 탭, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | VA05 · VF03 |
| 데이터 연동 방식 | OData V2 — 탭마다 엔티티셋에 조건을 실어 개별 조회 |
| 성격 | 조회·대사·점검형 — 사유 분석·후속 조치는 화면 밖에서 회사가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
조회조건을 넣고 조회하면 출고-반품 명세와 반품률 요약 KPI 가 한 화면에 뜹니다 → 반품률 집계 탭에서 제품군별·고객별 판정을 확인하고 → 명세 행을 클릭해 출고-반품 상세를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 영업조직·제품군·고객코드·반품사유·출고일 범위는 모두 선택 항목이며, 비워 두면 전체 대상으로 조회합니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 어느 입력 필드에서든 Enter 키를 누르면 즉시 조회됩니다.
- 화면을 열면 전체 조건으로 자동 조회되며, 반품률 요약 KPI 6종이 함께 표시됩니다. 반품률이 임계치 이상이면 값이 붉게 표시됩니다.
- 출고-반품 명세 탭에서 라인별 내역을 확인합니다. "반품 있음만" 조건으로 반품이 있는 건만 걸러 볼 수 있습니다.
- 반품률 집계 탭에서 제품군별·고객별 버튼으로 집계 기준을 바꿔가며 그룹별 반품률과 판정을 확인합니다.
- 명세 탭에서 행을 클릭하면 해당 건의 상세 다이얼로그가 열립니다.
- 명세 탭 우측 상단 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장할 수 있습니다.
반품률 판정 로직
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 수량·금액 반품률 모두 8% 미만 | 정상 | 추가 조치가 필요하지 않습니다. |
| 수량 반품률 또는 금액 반품률 8% 이상 | 점검 필요 | 해당 제품군·고객의 반품 사유 분포와 개별 건을 확인합니다. |
이 화면이 대신 정하지 않는 것
판정 결과는 확인 대상을 알리는 표시일 뿐입니다. 거래처 대응, 품질 조치 등 실제 의사결정은 회사가 반품 사유와 거래 이력을 종합해 판단합니다.
반품률 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 조회 기간의 출고 라인을 추출한다(반품 유무와 무관하게 전체 출고 라인을 대상으로 한다) |
| 2단계 | 반품이 있는 라인은 반품수량·반품금액을 함께 채우고, 없는 라인은 0으로 둔다 |
| 3단계 | 제품군별·고객별로 각각 출고수량·반품수량·출고금액·반품금액을 합산한다(전체 합계 포함) |
| 4단계 | 그룹별로 수량 반품률(반품수량 ÷ 출고수량)과 금액 반품률(반품금액 ÷ 출고금액)을 계산한다 |
| 5단계 | 두 반품률 중 하나라도 임계치 이상이면 해당 그룹을 점검 필요로 판정한다 |
| 6단계 | 제품군별 전체 합계와 고객별 전체 합계가 일치하는지 대사한다(같은 모집단을 다른 축으로 나눈 값이므로 항등) |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 영업조직 / 제품군 / 반품사유 | 선택 | 비워 두면(전체) 조건 없이 조회됩니다. |
| 고객 | 선택 | 고객코드 직접 입력 |
| 출고일(시작/종료) | 선택 | 출고일 기준 기간 범위 |
| 반품 있음만 | 선택 | 체크 시 반품수량이 0보다 큰 라인만 조회 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 출고전표 / 품목 / 고객 / 제품 / 제품군 | 식별 정보 |
| 출고일 / 반품전표 / 반품일 / 반품사유 | 반품이 없는 라인은 "-"/"해당없음"으로 표시 |
| 출고수량 / 반품수량 / 출고금액 / 반품금액 | 수량 × 단가로 산출된 값 |
| 처리상태 | 반품없음 / 처리중 / 처리완료 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 결과에 반품률 계산과 임계치 자동 판정 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
VA05 | 판매문서(반품오더 포함) 리스트 조회 | 출고 전체 대비 반품 비율을 제품군·고객 축으로 집계하고 임계치를 자동 판정합니다 |
VF03 | 청구문서(크레딧메모) 조회 | 반품 금액 집계 구조를 참고해 금액 기준 반품률을 함께 계산합니다 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
LIKP / LIPS | VBELN · POSNR · WADAT_IST · LFIMG | 출고(배송) 문서 헤더/항목 — 출고수량·출고일의 원천 |
VBAK / VBAP | VBELN · AUGRU_AV | 판매문서(반품오더 포함) — 반품사유의 원천 |
VBRK / VBRP | VBELN · NETWR | 청구문서(크레딧메모) — 반품금액 산정 참고 |
define view entity ZI_ReturnRateAnalysis
as select from likp
inner join lips on lips.vbeln = likp.vbeln
left outer join vbap on vbap.vbeln = lips.vgbel and vbap.posnr = lips.vgpos
{
key likp.vbeln as ShipDocNo,
key lips.posnr as Item,
likp.kunnr as CustCode,
lips.matnr as MatCode,
likp.wadat_ist as ShipDate,
lips.lfimg as ShipQty
// 반품 라인 매칭·반품사유 반영 로직은 반품 오더유형 설정에 따라 달라 확인이 필요합니다
}
표준 CDS 뷰 이름과 필드는 시스템 릴리스에 따라 다를 수 있으므로, 도입 시 실제 시스템에서 확인해 확정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 반품률 요약 KPI 배너 · IconTabBar(명세/집계) |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로) — 탭마다 엔티티셋에 조건을 실어 개별 조회합니다. 모델 설정은 useBatch:false |
| 조회조건 | sap.m.Select · sap.m.Input · sap.m.DatePicker — 우측 끝에 조회·초기화 버튼, Enter 키로 즉시 재조회, sap/ui/model/Filter로 조회조건을 조립합니다. "전체"를 고른 조건은 필터를 만들지 않습니다 |
| 명세 목록 | 컬럼 13개로 sap.ui.table.Table 사용, cellClick에서 행 컨텍스트로 상세 다이얼로그를 엽니다 |
| 점검결과 표시 | sap.m.ObjectStatus로 판정 상태를 표준 ValueState 로만 표시 |
| 공통 처리 | CSV 다운로드 공통 컨트롤러(UTF-8 BOM), 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패를 구분해 안내 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 화면 상태 모델 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.returnrate · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 반품률 요약 KPI · 명세/집계 탭 |
view/DetailDialog.fragment.xml | 출고-반품 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV 다운로드 |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 금액 · 반품률 · 상태 표시 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
운영 데이터는 OData 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 검증용 샘플 데이터는 출고 라인 73건(제품군 4종 × 고객 8곳)을 기준으로, 제품군별 합계와 고객별 합계가 출고수량·반품수량·출고금액·반품금액 모두 일치하도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| 제품군별 전체 합계 = 고객별 전체 합계(출고·반품 수량·금액, 87건 대사) | 통과(차이 0) |
| 라인별 수량 × 단가 = 금액 전수 검증(73건) | 통과(차이 0) |
| 임계치 초과 판정 분포(의도적 구성) | 점검 필요 2건(제품군 1 · 고객 1) · 정상 나머지 |
| 조회 조건 전달 — 고객코드 필터 시 7건, 제품군 필터·정렬 결과 확인 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 집계 전환 → 행 클릭 상세까지 실동작 후 캡처 | 3/3 |
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
반품률은 어떻게 계산합니까
제품군·고객별로 일정 기간의 출고수량·출고금액 대비 반품수량·반품금액의 비율을 각각 계산합니다. 수량 기준과 금액 기준 반품률을 모두 보여주며, 둘 중 하나라도 기준치를 넘으면 점검 대상으로 표시합니다.
반품이 없는 출고 건도 화면에 나오는 이유는 무엇입니까
반품률은 출고 전체를 분모로 하는 비율이므로, 반품이 없는 출고 라인도 분모 계산에 필요해 함께 표시됩니다. 반품이 있는 건만 따로 걸러 볼 수 있는 조건도 함께 제공합니다.
조회 결과를 그대로 거래처 제재나 품질 조치에 사용할 수 있습니까
아닙니다. 화면은 반품률을 계산해 점검이 필요한 대상을 가려내는 조회 도구이며, 사유 분석과 후속 조치에 대한 최종 판단은 회사와 담당 부서가 수행합니다.
반품률 임계치는 고정된 값입니까
화면에 설정된 내부 참고값이며, 제품 특성이나 회사 정책에 따라 조정할 수 있습니다. 임계치를 넘는지 여부만 조회 화면이 계산해 보여줍니다.
반품 건수 뒤에 숨은 반품률을 먼저 확인해 보세요
반품 건수만으로는 어느 제품·고객이 실제로 문제인지 보이지 않습니다. 화면에서 출고 대비 반품률을 미리 대사해 두면 품질·거래처 점검의 우선순위를 정하기가 한결 가벼워집니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.
| 관련 글 | 차이점 |
|---|---|
| SAP 영업 견적 전환율 점검 | 견적 대비 수주 전환율을 집계 — 이 화면은 출고 대비 반품 비율을 제품군·고객 축으로 대사 |